返回提交历史
Modified
README.md
+3
-2
Modified
etc/tool/readme_table.py
+2
-0
Modified
g4f/Provider/GeminiPro.py
+5
-4
Modified
g4f/gui/client/index.html
+5
-5
Modified
g4f/gui/server/api.py
+20
-8
XFEstudio/gpt4free
Add gemini-1.5-pro-latest model
6e064adb
代码差异
5 个文件
+35
-19
@@ -404,11 +404,12 @@ While we wait for gpt-5, here is a list of new models that are at least better t
404
404
405
405
| Label | Provider | Image Model | Vision Model | Website |
406
406
| ----- | -------- | ----------- | ------------ | ------- |
407
| Microsoft Copilot in Bing | `g4f.Provider.Bing` | dall-e| gpt-4-vision | [bing.com](https://bing.com/chat) |
407
| Microsoft Copilot in Bing | `g4f.Provider.Bing` | dall-e-3 | gpt-4-vision | [bing.com](https://bing.com/chat) |
408
408
| DeepInfra | `g4f.Provider.DeepInfra` | stability-ai/sdxl| llava-1.5-7b-hf | [deepinfra.com](https://deepinfra.com) |
409
409
| Gemini | `g4f.Provider.Gemini` | gemini| gemini | [gemini.google.com](https://gemini.google.com) |
410
| Gemini API | `g4f.Provider.GeminiPro` | ❌| gemini-1.5-pro-latest | [ai.google.dev](https://ai.google.dev) |
410
411
| Meta AI | `g4f.Provider.MetaAI` | meta| ❌ | [meta.ai](https://www.meta.ai) |
411
| OpenAI ChatGPT | `g4f.Provider.OpenaiChat` | dall-e| gpt-4-vision | [chat.openai.com](https://chat.openai.com) |
412
| OpenAI ChatGPT | `g4f.Provider.OpenaiChat` | dall-e-3 | gpt-4-vision | [chat.openai.com](https://chat.openai.com) |
412
413
| Replicate | `g4f.Provider.Replicate` | stability-ai/sdxl| ❌ | [replicate.com](https://replicate.com) |
413
414
| You.com | `g4f.Provider.You` | dall-e| agent | [you.com](https://you.com) |
414
415
@@ -136,6 +136,8 @@ def print_image_models():
136
136
netloc = urlparse(provider_url).netloc.replace("www.", "")
137
137
website = f"[{netloc}]({provider_url})"
138
138
label = image_model["provider"] if image_model["label"] is None else image_model["label"]
139
if image_model["image_model"] is None:
140
image_model["image_model"] = "❌"
139
141
if image_model["vision_model"] is None:
140
142
image_model["vision_model"] = "❌"
141
143
lines.append(f'| {label} | `g4f.Provider.{image_model["provider"]}` | {image_model["image_model"]}| {image_model["vision_model"]} | {website} |')
@@ -11,12 +11,14 @@ from ..errors import MissingAuthError
11
11
from .helper import get_connector
12
12
13
13
class GeminiPro(AsyncGeneratorProvider, ProviderModelMixin):
14
label = "Gemini API"
14
15
url = "https://ai.google.dev"
15
16
working = True
16
17
supports_message_history = True
17
18
needs_auth = True
18
default_model = "gemini-pro"
19
models = ["gemini-pro", "gemini-pro-vision"]
19
default_model = "gemini-1.5-pro-latest"
20
default_vision_model = default_model
21
models = [default_model, "gemini-pro", "gemini-pro-vision"]
20
22
21
23
@classmethod
22
24
async def create_async_generator(
@@ -32,11 +34,10 @@ class GeminiPro(AsyncGeneratorProvider, ProviderModelMixin):
32
34
connector: BaseConnector = None,
33
35
**kwargs
34
36
) -> AsyncResult:
35
model = "gemini-pro-vision" if not model and image is not None else model
36
37
model = cls.get_model(model)
37
38
38
39
if not api_key:
39
raise MissingAuthError('Missing "api_key"')
40
raise MissingAuthError('Add a "api_key"')
40
41
41
42
headers = params = None
42
43
if use_auth_header:
@@ -130,11 +130,7 @@
130
130
<textarea id="DeepInfra-api_key" name="DeepInfra[api_key]" class="DeepInfraImage-api_key" placeholder="api_key"></textarea>
131
131
</div>
132
132
<div class="field box">
133
<label for="Gemini-api_key" class="label" title="">Gemini:</label>
134
<textarea id="Gemini-api_key" name="Gemini[api_key]" placeholder=""__Secure-1PSID" cookie"></textarea>
135
</div>
136
<div class="field box">
137
<label for="GeminiPro-api_key" class="label" title="">GeminiPro API:</label>
133
<label for="GeminiPro-api_key" class="label" title="">Gemini API:</label>
138
134
<textarea id="GeminiPro-api_key" name="GeminiPro[api_key]" placeholder="api_key"></textarea>
139
135
</div>
140
136
<div class="field box">
@@ -157,6 +153,10 @@
157
153
<label for="OpenRouter-api_key" class="label" title="">OpenRouter:</label>
158
154
<textarea id="OpenRouter-api_key" name="OpenRouter[api_key]" placeholder="api_key"></textarea>
159
155
</div>
156
<div class="field box">
157
<label for="Replicate-api_key" class="label" title="">Replicate:</label>
158
<textarea id="Replicate-api_key" name="Replicate[api_key]" class="ReplicateImage-api_key" placeholder="api_key"></textarea>
159
</div>
160
160
</div>
161
161
<div class="bottom_buttons">
162
162
<button onclick="delete_conversations()">
@@ -45,6 +45,7 @@ class Api():
45
45
@staticmethod
46
46
def get_image_models() -> list[dict]:
47
47
image_models = []
48
index = []
48
49
for provider in __providers__:
49
50
if hasattr(provider, "image_models"):
50
51
if hasattr(provider, "get_models"):
@@ -52,14 +53,25 @@ class Api():
52
53
parent = provider
53
54
if hasattr(provider, "parent"):
54
55
parent = __map__[provider.parent]
55
for model in provider.image_models:
56
image_models.append({
57
"provider": parent.__name__,
58
"url": parent.url,
59
"label": parent.label if hasattr(parent, "label") else None,
60
"image_model": model,
61
"vision_model": parent.default_vision_model if hasattr(parent, "default_vision_model") else None
62
})
56
if parent.__name__ not in index:
57
for model in provider.image_models:
58
image_models.append({
59
"provider": parent.__name__,
60
"url": parent.url,
61
"label": parent.label if hasattr(parent, "label") else None,
62
"image_model": model,
63
"vision_model": parent.default_vision_model if hasattr(parent, "default_vision_model") else None
64
})
65
index.append(parent.__name__)
66
elif hasattr(provider, "default_vision_model") and provider.__name__ not in index:
67
image_models.append({
68
"provider": provider.__name__,
69
"url": provider.url,
70
"label": provider.label if hasattr(provider, "label") else None,
71
"image_model": None,
72
"vision_model": provider.default_vision_model
73
})
74
index.append(provider.__name__)
63
75
return image_models
64
76
65
77
@staticmethod