summaryrefslogtreecommitdiffstats
path: root/g4f/Provider/Liaobots.py
diff options
context:
space:
mode:
authorkqlio67 <166700875+kqlio67@users.noreply.github.com>2024-07-08 22:49:38 +0200
committerGitHub <noreply@github.com>2024-07-08 22:49:38 +0200
commita8ab2ad771152e9f53fcb730caac84e5430523ff (patch)
tree41c1c6ea45ad1a66072250ae17238dbf3cc26bdd /g4f/Provider/Liaobots.py
parentDelete g4f/Provider/Aichatos.py (diff)
downloadgpt4free-a8ab2ad771152e9f53fcb730caac84e5430523ff.tar
gpt4free-a8ab2ad771152e9f53fcb730caac84e5430523ff.tar.gz
gpt4free-a8ab2ad771152e9f53fcb730caac84e5430523ff.tar.bz2
gpt4free-a8ab2ad771152e9f53fcb730caac84e5430523ff.tar.lz
gpt4free-a8ab2ad771152e9f53fcb730caac84e5430523ff.tar.xz
gpt4free-a8ab2ad771152e9f53fcb730caac84e5430523ff.tar.zst
gpt4free-a8ab2ad771152e9f53fcb730caac84e5430523ff.zip
Diffstat (limited to 'g4f/Provider/Liaobots.py')
-rw-r--r--g4f/Provider/Liaobots.py168
1 files changed, 133 insertions, 35 deletions
diff --git a/g4f/Provider/Liaobots.py b/g4f/Provider/Liaobots.py
index 75ecf300..277d8ea2 100644
--- a/g4f/Provider/Liaobots.py
+++ b/g4f/Provider/Liaobots.py
@@ -10,7 +10,16 @@ from .helper import get_connector
from ..requests import raise_for_status
models = {
- "gpt-4o": {
+ "gpt-3.5-turbo": {
+ "id": "gpt-3.5-turbo",
+ "name": "GPT-3.5-Turbo",
+ "model": "ChatGPT",
+ "provider": "OpenAI",
+ "maxLength": 48000,
+ "tokenLimit": 14000,
+ "context": "16K",
+ },
+ "gpt-4o-free": {
"context": "8K",
"id": "gpt-4o-free",
"maxLength": 31200,
@@ -19,51 +28,74 @@ models = {
"provider": "OpenAI",
"tokenLimit": 7800,
},
- "gpt-3.5-turbo": {
- "id": "gpt-3.5-turbo",
- "name": "GPT-3.5-Turbo",
- "maxLength": 48000,
- "tokenLimit": 14000,
- "context": "16K",
- },
- "gpt-4-turbo": {
- "id": "gpt-4-turbo-preview",
+ "gpt-4-turbo-2024-04-09": {
+ "id": "gpt-4-turbo-2024-04-09",
"name": "GPT-4-Turbo",
+ "model": "ChatGPT",
+ "provider": "OpenAI",
"maxLength": 260000,
"tokenLimit": 126000,
"context": "128K",
},
- "gpt-4": {
- "id": "gpt-4-plus",
- "name": "GPT-4-Plus",
- "maxLength": 130000,
- "tokenLimit": 31000,
- "context": "32K",
+ "gpt-4o": {
+ "context": "128K",
+ "id": "gpt-4o",
+ "maxLength": 124000,
+ "model": "ChatGPT",
+ "name": "GPT-4o",
+ "provider": "OpenAI",
+ "tokenLimit": 62000,
},
"gpt-4-0613": {
"id": "gpt-4-0613",
"name": "GPT-4-0613",
- "maxLength": 60000,
- "tokenLimit": 15000,
- "context": "16K",
- },
- "gemini-pro": {
- "id": "gemini-pro",
- "name": "Gemini-Pro",
- "maxLength": 120000,
- "tokenLimit": 30000,
- "context": "32K",
+ "model": "ChatGPT",
+ "provider": "OpenAI",
+ "maxLength": 32000,
+ "tokenLimit": 7600,
+ "context": "8K",
},
"claude-3-opus-20240229": {
"id": "claude-3-opus-20240229",
"name": "Claude-3-Opus",
+ "model": "Claude",
+ "provider": "Anthropic",
+ "maxLength": 800000,
+ "tokenLimit": 200000,
+ "context": "200K",
+ },
+ "claude-3-opus-20240229-aws": {
+ "id": "claude-3-opus-20240229-aws",
+ "name": "Claude-3-Opus-Aws",
+ "model": "Claude",
+ "provider": "Anthropic",
"maxLength": 800000,
"tokenLimit": 200000,
"context": "200K",
},
+ "claude-3-opus-100k-poe": {
+ "id": "claude-3-opus-100k-poe",
+ "name": "Claude-3-Opus-100k-Poe",
+ "model": "Claude",
+ "provider": "Anthropic",
+ "maxLength": 400000,
+ "tokenLimit": 99000,
+ "context": "100K",
+ },
"claude-3-sonnet-20240229": {
"id": "claude-3-sonnet-20240229",
"name": "Claude-3-Sonnet",
+ "model": "Claude",
+ "provider": "Anthropic",
+ "maxLength": 800000,
+ "tokenLimit": 200000,
+ "context": "200K",
+ },
+ "claude-3-haiku-20240307": {
+ "id": "claude-3-haiku-20240307",
+ "name": "Claude-3-Haiku",
+ "model": "Claude",
+ "provider": "Anthropic",
"maxLength": 800000,
"tokenLimit": 200000,
"context": "200K",
@@ -71,6 +103,8 @@ models = {
"claude-2.1": {
"id": "claude-2.1",
"name": "Claude-2.1-200k",
+ "model": "Claude",
+ "provider": "Anthropic",
"maxLength": 800000,
"tokenLimit": 200000,
"context": "200K",
@@ -78,16 +112,38 @@ models = {
"claude-2.0": {
"id": "claude-2.0",
"name": "Claude-2.0-100k",
+ "model": "Claude",
+ "provider": "Anthropic",
"maxLength": 400000,
"tokenLimit": 100000,
"context": "100K",
},
- "claude-instant-1": {
- "id": "claude-instant-1",
- "name": "Claude-instant-1",
- "maxLength": 400000,
- "tokenLimit": 100000,
- "context": "100K",
+ "gemini-1.0-pro-latest": {
+ "id": "gemini-1.0-pro-latest",
+ "name": "Gemini-Pro",
+ "model": "Gemini",
+ "provider": "Google",
+ "maxLength": 120000,
+ "tokenLimit": 30000,
+ "context": "32K",
+ },
+ "gemini-1.5-flash-latest": {
+ "id": "gemini-1.5-flash-latest",
+ "name": "Gemini-1.5-Flash-1M",
+ "model": "Gemini",
+ "provider": "Google",
+ "maxLength": 4000000,
+ "tokenLimit": 1000000,
+ "context": "1024K",
+ },
+ "gemini-1.5-pro-latest": {
+ "id": "gemini-1.5-pro-latest",
+ "name": "Gemini-1.5-Pro-1M",
+ "model": "Gemini",
+ "provider": "Google",
+ "maxLength": 4000000,
+ "tokenLimit": 1000000,
+ "context": "1024K",
}
}
@@ -100,9 +156,9 @@ class Liaobots(AsyncGeneratorProvider, ProviderModelMixin):
supports_gpt_35_turbo = True
supports_gpt_4 = True
default_model = "gpt-3.5-turbo"
- models = list(models)
+ models = list(models.keys())
model_aliases = {
- "claude-v2": "claude-2"
+ "claude-v2": "claude-2.0"
}
_auth_code = ""
_cookie_jar = None
@@ -131,7 +187,7 @@ class Liaobots(AsyncGeneratorProvider, ProviderModelMixin):
) as session:
data = {
"conversationId": str(uuid.uuid4()),
- "model": models[cls.get_model(model)],
+ "model": models[model],
"messages": messages,
"key": "",
"prompt": kwargs.get("system_message", "You are a helpful assistant."),
@@ -189,3 +245,45 @@ class Liaobots(AsyncGeneratorProvider, ProviderModelMixin):
raise RuntimeError("Invalid session")
if chunk:
yield chunk.decode(errors="ignore")
+
+ @classmethod
+ def get_model(cls, model: str) -> str:
+ """
+ Retrieve the internal model identifier based on the provided model name or alias.
+ """
+ if model in cls.model_aliases:
+ model = cls.model_aliases[model]
+ if model not in models:
+ raise ValueError(f"Model '{model}' is not supported.")
+ return model
+
+ @classmethod
+ def is_supported(cls, model: str) -> bool:
+ """
+ Check if the given model is supported.
+ """
+ return model in models or model in cls.model_aliases
+
+ @classmethod
+ async def initialize_auth_code(cls, session: ClientSession) -> None:
+ """
+ Initialize the auth code by making the necessary login requests.
+ """
+ async with session.post(
+ "https://liaobots.work/api/user",
+ json={"authcode": "pTIQr4FTnVRfr"},
+ verify_ssl=False
+ ) as response:
+ await raise_for_status(response)
+ cls._auth_code = (await response.json(content_type=None))["authCode"]
+ if not cls._auth_code:
+ raise RuntimeError("Empty auth code")
+ cls._cookie_jar = session.cookie_jar
+
+ @classmethod
+ async def ensure_auth_code(cls, session: ClientSession) -> None:
+ """
+ Ensure the auth code is initialized, and if not, perform the initialization.
+ """
+ if not cls._auth_code:
+ await cls.initialize_auth_code(session)