From 7d184411e238922e3054ffba4350775cad7bb976 Mon Sep 17 00:00:00 2001 From: hlohaus <983577+hlohaus@users.noreply.github.com> Date: Thu, 2 Oct 2025 00:55:01 +0200 Subject: [PATCH] Refactor OIVSCodeSer2 and OIVSCodeSer0501 classes; consolidate Perplexity provider and update OpenaiTemplate for API key handling --- .../{OIVSCodeSer0501.py => OIVSCodeSer.py} | 32 ++++++++------- g4f/Provider/OIVSCodeSer2.py | 39 ------------------- g4f/Provider/__init__.py | 6 +-- .../{ => deprecated}/PerplexityLabs.py | 12 +++--- g4f/Provider/template/OpenaiTemplate.py | 5 +-- 5 files changed, 28 insertions(+), 66 deletions(-) rename g4f/Provider/{OIVSCodeSer0501.py => OIVSCodeSer.py} (75%) delete mode 100644 g4f/Provider/OIVSCodeSer2.py rename g4f/Provider/{ => deprecated}/PerplexityLabs.py (94%) diff --git a/g4f/Provider/OIVSCodeSer0501.py b/g4f/Provider/OIVSCodeSer.py similarity index 75% rename from g4f/Provider/OIVSCodeSer0501.py rename to g4f/Provider/OIVSCodeSer.py index 867e33d0..56a528ed 100644 --- a/g4f/Provider/OIVSCodeSer0501.py +++ b/g4f/Provider/OIVSCodeSer.py @@ -5,23 +5,16 @@ import string from .template import OpenaiTemplate -class OIVSCodeSer0501(OpenaiTemplate): - label = "OI VSCode Server 0501" - url = "https://oi-vscode-server-0501.onrender.com" - api_base = "https://oi-vscode-server-0501.onrender.com/v1" - api_endpoint = "https://oi-vscode-server-0501.onrender.com/v1/chat/completions" - +class OIVSCodeSer2(OpenaiTemplate): + label = "OI VSCode Server 2" + url = "https://oi-vscode-server-2.onrender.com" + api_base = "https://oi-vscode-server-2.onrender.com/v1" + working = True - needs_auth = False - supports_stream = True - supports_system_message = True - supports_message_history = True - - default_model = "gpt-4.1-mini" - default_vision_model = default_model + default_model = "*" + default_vision_model = "gpt-4o-mini" vision_models = [default_vision_model] - models = vision_models - + @classmethod def get_headers(cls, stream: bool, api_key: str = None, headers: dict = None) -> dict: # Generate a random user ID similar to the JavaScript code @@ -37,3 +30,12 @@ class OIVSCodeSer0501(OpenaiTemplate): ), **({} if headers is None else headers) } + +class OIVSCodeSer0501(OIVSCodeSer2): + label = "OI VSCode Server 0501" + url = "https://oi-vscode-server-0501.onrender.com" + api_base = "https://oi-vscode-server-0501.onrender.com/v1" + + default_model = "gpt-4.1-mini" + default_vision_model = default_model + vision_models = [default_vision_model] \ No newline at end of file diff --git a/g4f/Provider/OIVSCodeSer2.py b/g4f/Provider/OIVSCodeSer2.py deleted file mode 100644 index d078cb64..00000000 --- a/g4f/Provider/OIVSCodeSer2.py +++ /dev/null @@ -1,39 +0,0 @@ -from __future__ import annotations - -import secrets -import string - -from .template import OpenaiTemplate - -class OIVSCodeSer2(OpenaiTemplate): - label = "OI VSCode Server 2" - url = "https://oi-vscode-server-2.onrender.com" - api_base = "https://oi-vscode-server-2.onrender.com/v1" - api_endpoint = "https://oi-vscode-server-2.onrender.com/v1/chat/completions" - - working = True - needs_auth = False - supports_stream = True - supports_system_message = True - supports_message_history = True - - default_model = "gpt-4o-mini" - default_vision_model = default_model - vision_models = [default_vision_model] - models = vision_models - - @classmethod - def get_headers(cls, stream: bool, api_key: str = None, headers: dict = None) -> dict: - # Generate a random user ID similar to the JavaScript code - userid = ''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(21)) - - return { - "Accept": "text/event-stream" if stream else "application/json", - "Content-Type": "application/json", - "userid": userid, - **( - {"Authorization": f"Bearer {api_key}"} - if api_key else {} - ), - **({} if headers is None else headers) - } diff --git a/g4f/Provider/__init__.py b/g4f/Provider/__init__.py index ac43106e..9e64e043 100644 --- a/g4f/Provider/__init__.py +++ b/g4f/Provider/__init__.py @@ -38,6 +38,7 @@ except ImportError as e: from .deprecated.ARTA import ARTA from .deprecated.DuckDuckGo import DuckDuckGo +from .deprecated.PerplexityLabs import PerplexityLabs from .ApiAirforce import ApiAirforce from .Blackbox import Blackbox @@ -50,10 +51,9 @@ from .GLM import GLM from .Kimi import Kimi from .LambdaChat import LambdaChat from .Mintlify import Mintlify -from .OIVSCodeSer2 import OIVSCodeSer2 -from .OIVSCodeSer0501 import OIVSCodeSer0501 +from .OIVSCodeSer import OIVSCodeSer2, OIVSCodeSer0501 from .OperaAria import OperaAria -from .PerplexityLabs import PerplexityLabs +from .Perplexity import Perplexity from .PollinationsAI import PollinationsAI from .PollinationsImage import PollinationsImage from .Startnest import Startnest diff --git a/g4f/Provider/PerplexityLabs.py b/g4f/Provider/deprecated/PerplexityLabs.py similarity index 94% rename from g4f/Provider/PerplexityLabs.py rename to g4f/Provider/deprecated/PerplexityLabs.py index c677011b..12a251dd 100644 --- a/g4f/Provider/PerplexityLabs.py +++ b/g4f/Provider/deprecated/PerplexityLabs.py @@ -3,11 +3,11 @@ from __future__ import annotations import random import json -from ..typing import AsyncResult, Messages -from ..requests import StreamSession, raise_for_status -from ..errors import ResponseError -from ..providers.response import FinishReason, Sources -from .base_provider import AsyncGeneratorProvider, ProviderModelMixin +from ...typing import AsyncResult, Messages +from ...requests import StreamSession, raise_for_status +from ...errors import ResponseError +from ...providers.response import FinishReason, Sources +from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin API_URL = "https://www.perplexity.ai/socket.io/" WS_URL = "wss://www.perplexity.ai/socket.io/" @@ -15,7 +15,7 @@ WS_URL = "wss://www.perplexity.ai/socket.io/" class PerplexityLabs(AsyncGeneratorProvider, ProviderModelMixin): label = "Perplexity Labs" url = "https://labs.perplexity.ai" - working = True + working = False active_by_default = True default_model = "r1-1776" diff --git a/g4f/Provider/template/OpenaiTemplate.py b/g4f/Provider/template/OpenaiTemplate.py index 5813690f..24263b28 100644 --- a/g4f/Provider/template/OpenaiTemplate.py +++ b/g4f/Provider/template/OpenaiTemplate.py @@ -41,11 +41,10 @@ class OpenaiTemplate(AsyncGeneratorProvider, ProviderModelMixin, RaiseErrorMixin api_key = cls.api_key if not api_key: api_key = AuthManager.load_api_key(cls) + print(f"API Key: {api_key}") if cls.models_needs_auth and not api_key: raise MissingAuthError('Add a "api_key"') - if api_key is not None: - headers["authorization"] = f"Bearer {api_key}" - response = requests.get(f"{api_base}/models", headers=headers, verify=cls.ssl) + response = requests.get(f"{api_base}/models", headers=cls.get_headers(False, api_key), verify=cls.ssl) raise_for_status(response) data = response.json() data = data.get("data") if isinstance(data, dict) else data