summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--README.md5
-rw-r--r--etc/tool/readme_table.py2
-rw-r--r--g4f/Provider/GeminiPro.py9
-rw-r--r--g4f/gui/client/index.html10
-rw-r--r--g4f/gui/server/api.py28
5 files changed, 35 insertions, 19 deletions
diff --git a/README.md b/README.md
index 66398659..e9497dbc 100644
--- a/README.md
+++ b/README.md
@@ -404,11 +404,12 @@ While we wait for gpt-5, here is a list of new models that are at least better t
| Label | Provider | Image Model | Vision Model | Website |
| ----- | -------- | ----------- | ------------ | ------- |
-| Microsoft Copilot in Bing | `g4f.Provider.Bing` | dall-e| gpt-4-vision | [bing.com](https://bing.com/chat) |
+| Microsoft Copilot in Bing | `g4f.Provider.Bing` | dall-e-3 | gpt-4-vision | [bing.com](https://bing.com/chat) |
| DeepInfra | `g4f.Provider.DeepInfra` | stability-ai/sdxl| llava-1.5-7b-hf | [deepinfra.com](https://deepinfra.com) |
| Gemini | `g4f.Provider.Gemini` | gemini| gemini | [gemini.google.com](https://gemini.google.com) |
+| Gemini API | `g4f.Provider.GeminiPro` | ❌| gemini-1.5-pro-latest | [ai.google.dev](https://ai.google.dev) |
| Meta AI | `g4f.Provider.MetaAI` | meta| ❌ | [meta.ai](https://www.meta.ai) |
-| OpenAI ChatGPT | `g4f.Provider.OpenaiChat` | dall-e| gpt-4-vision | [chat.openai.com](https://chat.openai.com) |
+| OpenAI ChatGPT | `g4f.Provider.OpenaiChat` | dall-e-3 | gpt-4-vision | [chat.openai.com](https://chat.openai.com) |
| Replicate | `g4f.Provider.Replicate` | stability-ai/sdxl| ❌ | [replicate.com](https://replicate.com) |
| You.com | `g4f.Provider.You` | dall-e| agent | [you.com](https://you.com) |
diff --git a/etc/tool/readme_table.py b/etc/tool/readme_table.py
index 439b17fa..e89f861b 100644
--- a/etc/tool/readme_table.py
+++ b/etc/tool/readme_table.py
@@ -136,6 +136,8 @@ def print_image_models():
netloc = urlparse(provider_url).netloc.replace("www.", "")
website = f"[{netloc}]({provider_url})"
label = image_model["provider"] if image_model["label"] is None else image_model["label"]
+ if image_model["image_model"] is None:
+ image_model["image_model"] = "❌"
if image_model["vision_model"] is None:
image_model["vision_model"] = "❌"
lines.append(f'| {label} | `g4f.Provider.{image_model["provider"]}` | {image_model["image_model"]}| {image_model["vision_model"]} | {website} |')
diff --git a/g4f/Provider/GeminiPro.py b/g4f/Provider/GeminiPro.py
index 214b7383..56c211ef 100644
--- a/g4f/Provider/GeminiPro.py
+++ b/g4f/Provider/GeminiPro.py
@@ -11,12 +11,14 @@ from ..errors import MissingAuthError
from .helper import get_connector
class GeminiPro(AsyncGeneratorProvider, ProviderModelMixin):
+ label = "Gemini API"
url = "https://ai.google.dev"
working = True
supports_message_history = True
needs_auth = True
- default_model = "gemini-pro"
- models = ["gemini-pro", "gemini-pro-vision"]
+ default_model = "gemini-1.5-pro-latest"
+ default_vision_model = default_model
+ models = [default_model, "gemini-pro", "gemini-pro-vision"]
@classmethod
async def create_async_generator(
@@ -32,11 +34,10 @@ class GeminiPro(AsyncGeneratorProvider, ProviderModelMixin):
connector: BaseConnector = None,
**kwargs
) -> AsyncResult:
- model = "gemini-pro-vision" if not model and image is not None else model
model = cls.get_model(model)
if not api_key:
- raise MissingAuthError('Missing "api_key"')
+ raise MissingAuthError('Add a "api_key"')
headers = params = None
if use_auth_header:
diff --git a/g4f/gui/client/index.html b/g4f/gui/client/index.html
index d84bbbe9..cfca51a9 100644
--- a/g4f/gui/client/index.html
+++ b/g4f/gui/client/index.html
@@ -130,11 +130,7 @@
<textarea id="DeepInfra-api_key" name="DeepInfra[api_key]" class="DeepInfraImage-api_key" placeholder="api_key"></textarea>
</div>
<div class="field box">
- <label for="Gemini-api_key" class="label" title="">Gemini:</label>
- <textarea id="Gemini-api_key" name="Gemini[api_key]" placeholder="&quot;__Secure-1PSID&quot; cookie"></textarea>
- </div>
- <div class="field box">
- <label for="GeminiPro-api_key" class="label" title="">GeminiPro API:</label>
+ <label for="GeminiPro-api_key" class="label" title="">Gemini API:</label>
<textarea id="GeminiPro-api_key" name="GeminiPro[api_key]" placeholder="api_key"></textarea>
</div>
<div class="field box">
@@ -157,6 +153,10 @@
<label for="OpenRouter-api_key" class="label" title="">OpenRouter:</label>
<textarea id="OpenRouter-api_key" name="OpenRouter[api_key]" placeholder="api_key"></textarea>
</div>
+ <div class="field box">
+ <label for="Replicate-api_key" class="label" title="">Replicate:</label>
+ <textarea id="Replicate-api_key" name="Replicate[api_key]" class="ReplicateImage-api_key" placeholder="api_key"></textarea>
+ </div>
</div>
<div class="bottom_buttons">
<button onclick="delete_conversations()">
diff --git a/g4f/gui/server/api.py b/g4f/gui/server/api.py
index 3d9f6a1c..020b2090 100644
--- a/g4f/gui/server/api.py
+++ b/g4f/gui/server/api.py
@@ -45,6 +45,7 @@ class Api():
@staticmethod
def get_image_models() -> list[dict]:
image_models = []
+ index = []
for provider in __providers__:
if hasattr(provider, "image_models"):
if hasattr(provider, "get_models"):
@@ -52,14 +53,25 @@ class Api():
parent = provider
if hasattr(provider, "parent"):
parent = __map__[provider.parent]
- for model in provider.image_models:
- image_models.append({
- "provider": parent.__name__,
- "url": parent.url,
- "label": parent.label if hasattr(parent, "label") else None,
- "image_model": model,
- "vision_model": parent.default_vision_model if hasattr(parent, "default_vision_model") else None
- })
+ if parent.__name__ not in index:
+ for model in provider.image_models:
+ image_models.append({
+ "provider": parent.__name__,
+ "url": parent.url,
+ "label": parent.label if hasattr(parent, "label") else None,
+ "image_model": model,
+ "vision_model": parent.default_vision_model if hasattr(parent, "default_vision_model") else None
+ })
+ index.append(parent.__name__)
+ elif hasattr(provider, "default_vision_model") and provider.__name__ not in index:
+ image_models.append({
+ "provider": provider.__name__,
+ "url": provider.url,
+ "label": provider.label if hasattr(provider, "label") else None,
+ "image_model": None,
+ "vision_model": provider.default_vision_model
+ })
+ index.append(provider.__name__)
return image_models
@staticmethod