XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

Update provider parameters, check for valid provider Fix reading model list in GeminiPro Fix check content-type in OpenaiAPI

fd5fa8a4
hlohaus <983577+hlohaus@users.noreply.github.com>
提交于

代码差异

5 个文件 +13 -8
Modified g4f/Provider/needs_auth/GeminiPro.py +4 -2
@@ -23,6 +23,7 @@ class GeminiPro(AsyncGeneratorProvider, ProviderModelMixin):
23 23
24 24 working = True
25 25 supports_message_history = True
26 supports_system_message = True
26 27 needs_auth = True
27 28
28 29 default_model = "gemini-1.5-pro"
@@ -39,7 +40,8 @@ class GeminiPro(AsyncGeneratorProvider, ProviderModelMixin):
39 40 def get_models(cls, api_key: str = None, api_base: str = api_base) -> list[str]:
40 41 if not cls.models:
41 42 try:
42 response = requests.get(f"{api_base}/models?key={api_key}")
43 url = f"{cls.api_base if not api_base else api_base}/models"
44 response = requests.get(url, params={"key": api_key})
43 45 raise_for_status(response)
44 46 data = response.json()
45 47 cls.models = [
@@ -50,7 +52,7 @@ class GeminiPro(AsyncGeneratorProvider, ProviderModelMixin):
50 52 cls.models.sort()
51 53 except Exception as e:
52 54 debug.log(e)
53 cls.models = cls.fallback_models
55 return cls.fallback_models
54 56 return cls.models
55 57
56 58 @classmethod
Modified g4f/Provider/needs_auth/OpenaiAPI.py +4 -3
@@ -108,7 +108,8 @@ class OpenaiAPI(AsyncGeneratorProvider, ProviderModelMixin, RaiseErrorMixin):
108 108 if api_endpoint is None:
109 109 api_endpoint = f"{api_base.rstrip('/')}/chat/completions"
110 110 async with session.post(api_endpoint, json=data) as response:
111 if response.headers.get("content-type", None if stream else "application/json") == "application/json":
111 content_type = response.headers.get("content-type", "text/event-stream" if stream else "application/json")
112 if content_type.startswith("application/json"):
112 113 data = await response.json()
113 114 cls.raise_error(data)
114 115 await raise_for_status(response)
@@ -122,7 +123,7 @@ class OpenaiAPI(AsyncGeneratorProvider, ProviderModelMixin, RaiseErrorMixin):
122 123 if "finish_reason" in choice and choice["finish_reason"] is not None:
123 124 yield FinishReason(choice["finish_reason"])
124 125 return
125 elif response.headers.get("content-type", "text/event-stream" if stream else None) == "text/event-stream":
126 elif content_type.startswith("text/event-stream"):
126 127 await raise_for_status(response)
127 128 first = True
128 129 async for line in response.iter_lines():
@@ -147,7 +148,7 @@ class OpenaiAPI(AsyncGeneratorProvider, ProviderModelMixin, RaiseErrorMixin):
147 148 break
148 149 else:
149 150 await raise_for_status(response)
150 raise ResponseError(f"Not supported content-type: {response.headers.get('content-type')}")
151 raise ResponseError(f"Not supported content-type: {content_type}")
151 152
152 153 @classmethod
153 154 def get_headers(cls, stream: bool, api_key: str = None, headers: dict = None) -> dict:
Modified g4f/gui/client/static/js/chat.v1.js +1 -1
@@ -839,7 +839,7 @@ const ask_gpt = async (message_id, message_index = -1, regenerate = false, provi
839 839 await api("conversation", {
840 840 id: message_id,
841 841 conversation_id: window.conversation_id,
842 conversation: conversation.data && provider in conversation.data ? conversation.data[provider] : null,
842 conversation: provider && conversation.data && provider in conversation.data ? conversation.data[provider] : null,
843 843 model: model,
844 844 web_search: switchInput.checked,
845 845 provider: provider,
Modified g4f/gui/server/api.py +1 -2
@@ -62,7 +62,7 @@ class Api:
62 62 "name": provider.__name__,
63 63 "label": provider.label if hasattr(provider, "label") else provider.__name__,
64 64 "parent": getattr(provider, "parent", None),
65 "image": getattr(provider, "image_models", None) is not None,
65 "image": bool(getattr(provider, "image_models", False)),
66 66 "vision": getattr(provider, "default_vision_model", None) is not None,
67 67 "auth": provider.needs_auth,
68 68 "login_url": getattr(provider, "login_url", None),
@@ -157,7 +157,6 @@ class Api:
157 157 **(provider_handler.get_parameters(as_json=True) if hasattr(provider_handler, "get_parameters") else {}),
158 158 "model": model,
159 159 "messages": kwargs.get("messages"),
160 "web_search": kwargs.get("web_search")
161 160 }
162 161 if isinstance(kwargs.get("conversation"), JsonConversation):
163 162 params["conversation"] = kwargs.get("conversation").get_dict()
Modified g4f/providers/base_provider.py +3 -0
@@ -34,6 +34,7 @@ SAFE_PARAMETERS = [
34 34 "api_key", "api_base", "seed", "width", "height",
35 35 "proof_token", "max_retries", "web_search",
36 36 "guidance_scale", "num_inference_steps", "randomize_seed",
37 "safe", "enhance", "private",
37 38 ]
38 39
39 40 BASIC_PARAMETERS = {
@@ -61,6 +62,8 @@ PARAMETER_EXAMPLES = {
61 62 "max_new_tokens": 1024,
62 63 "max_tokens": 4096,
63 64 "seed": 42,
65 "stop": ["stop1", "stop2"],
66 "tools": [],
64 67 }
65 68
66 69 class AbstractProvider(BaseProvider):