返回提交历史
Modified
g4f/Provider/needs_auth/GeminiPro.py
+4
-2
Modified
g4f/Provider/needs_auth/OpenaiAPI.py
+4
-3
Modified
g4f/gui/client/static/js/chat.v1.js
+1
-1
Modified
g4f/gui/server/api.py
+1
-2
Modified
g4f/providers/base_provider.py
+3
-0
XFEstudio/gpt4free
Update provider parameters, check for valid provider Fix reading model list in GeminiPro Fix check content-type in OpenaiAPI
fd5fa8a4
代码差异
5 个文件
+13
-8
@@ -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
@@ -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:
@@ -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,
@@ -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()
@@ -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):