XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/gpt4free

fix: update provider status, models, error handling, and imports

- Set `working = False` in Free2GPT, Startnest, and Reka providers - Changed `default_model` in LambdaChat from `deepseek-v3-0324` to `deepseek-r1` - Removed `deepseek-v3` alias from LambdaChat's `model_aliases` - In Kimi provider: - Replaced manual status check with `await raise_for_status(response)` - Set `model` field to `"k2"` in chat completion request - Removed unused `pass` statement - In WeWordle provider: - Removed `**kwargs` from `data_payload` construction - In Reka provider: - Set default value for `stream` to `True` - Modified `get_cookies` call to use `cache_result=False` - In `cli/client.py`: - Added conditional import for `MarkItDown` with `has_markitdown` flag - Raised `MissingRequirementsError` if `MarkItDown` is not installed - In `gui/server/backend_api.py`: - Imported `MissingAuthError` - Wrapped `get_provider_models` call in try-except block to return 401 if `MissingAuthError` is raised

f83c9244
hlohaus <983577+hlohaus@users.noreply.github.com>
提交于

代码差异

8 个文件 +27 -24
Modified g4f/Provider/Free2GPT.py +1 -1
@@ -15,7 +15,7 @@ from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
15 15 class Free2GPT(AsyncGeneratorProvider, ProviderModelMixin):
16 16 url = "https://chat10.free2gpt.xyz"
17 17
18 working = True
18 working = False
19 19 supports_message_history = True
20 20
21 21 default_model = 'gemini-1.5-pro'
Modified g4f/Provider/Kimi.py +5 -9
@@ -5,7 +5,7 @@ from typing import AsyncIterator
5 5
6 6 from .base_provider import AsyncAuthedProvider, ProviderModelMixin
7 7 from ..providers.helper import get_last_user_message
8 from ..requests import StreamSession, see_stream
8 from ..requests import StreamSession, see_stream, raise_for_status
9 9 from ..providers.response import AuthResult, TitleGeneration, JsonConversation, FinishReason
10 10 from ..typing import AsyncResult, Messages
11 11
@@ -29,8 +29,7 @@ class Kimi(AsyncAuthedProvider, ProviderModelMixin):
29 29 "x-traffic-id": device_id
30 30 }
31 31 ) as response:
32 if response.status != 200:
33 raise Exception("Failed to register device")
32 await raise_for_status(response)
34 33 data = await response.json()
35 34 if not data.get("access_token"):
36 35 raise Exception("No access token received")
@@ -50,7 +49,6 @@ class Kimi(AsyncAuthedProvider, ProviderModelMixin):
50 49 web_search: bool = False,
51 50 **kwargs
52 51 ) -> AsyncResult:
53 pass
54 52 async with StreamSession(
55 53 proxy=proxy,
56 54 impersonate="chrome",
@@ -67,14 +65,13 @@ class Kimi(AsyncAuthedProvider, ProviderModelMixin):
67 65 "source":"web",
68 66 "tags":[]
69 67 }) as response:
70 if response.status != 200:
71 raise Exception("Failed to create chat")
68 await raise_for_status(response)
72 69 chat_data = await response.json()
73 70 conversation = JsonConversation(chat_id=chat_data.get("id"))
74 71 data = {
75 72 "kimiplus_id": "kimi",
76 73 "extend": {"sidebar": True},
77 "model": model,
74 "model": "k2",
78 75 "use_search": web_search,
79 76 "messages": [
80 77 {
@@ -92,8 +89,7 @@ class Kimi(AsyncAuthedProvider, ProviderModelMixin):
92 89 f"https://www.kimi.com/api/chat/{conversation.chat_id}/completion/stream",
93 90 json=data
94 91 ) as response:
95 if response.status != 200:
96 raise Exception("Failed to start chat completion")
92 await raise_for_status(response)
97 93 async for line in see_stream(response):
98 94 if line.get("event") == "cmpl":
99 95 yield line.get("text")
Modified g4f/Provider/LambdaChat.py +2 -4
@@ -22,7 +22,7 @@ class LambdaChat(AsyncGeneratorProvider, ProviderModelMixin):
22 22
23 23 working = True
24 24
25 default_model = "deepseek-v3-0324"
25 default_model = "deepseek-r1"
26 26 models = [
27 27 "deepseek-llama3.3-70b",
28 28 "deepseek-r1",
@@ -34,15 +34,13 @@ class LambdaChat(AsyncGeneratorProvider, ProviderModelMixin):
34 34 "lfm-40b",
35 35 "llama3.3-70b-instruct-fp8",
36 36 "qwen25-coder-32b-instruct",
37 "deepseek-v3",
38 default_model,
37 "deepseek-v3-0324",
39 38 "llama-4-maverick-17b-128e-instruct-fp8",
40 39 "llama-4-scout-17b-16e-instruct",
41 40 "llama3.3-70b-instruct-fp8",
42 41 "qwen3-32b-fp8",
43 42 ]
44 43 model_aliases = {
45 "deepseek-v3-0324": "deepseek-v3",
46 44 "hermes-3": "hermes3-405b-fp8-128k",
47 45 "hermes-3-405b": ["hermes3-405b-fp8-128k", "hermes-3-llama-3.1-405b-fp8"],
48 46 "nemotron-70b": "llama3.1-nemotron-70b-instruct",
Modified g4f/Provider/Startnest.py +1 -1
@@ -18,7 +18,7 @@ class Startnest(AsyncGeneratorProvider, ProviderModelMixin):
18 18 url = "https://play.google.com/store/apps/details?id=starnest.aitype.aikeyboard.chatbot.chatgpt"
19 19 api_endpoint = "https://api.startnest.uk/api/completions/stream"
20 20
21 working = True
21 working = False
22 22 needs_auth = False
23 23 supports_stream = True
24 24 supports_system_message = True
Modified g4f/Provider/WeWordle.py +2 -3
@@ -92,12 +92,11 @@ class WeWordle(AsyncGeneratorProvider, ProviderModelMixin):
92 92 }
93 93
94 94 if isinstance(messages, list) and all(isinstance(m, dict) and "role" in m and "content" in m for m in messages):
95 data_payload = {"messages": messages, "model": model, **kwargs}
95 data_payload = {"messages": messages, "model": model}
96 96 else:
97 97 data_payload = {
98 98 "messages": messages,
99 "model": model,
100 **kwargs
99 "model": model
101 100 }
102 101
103 102 retries = 0
Modified g4f/Provider/needs_auth/Reka.py +3 -3
@@ -9,7 +9,7 @@ from ...image import to_bytes
9 9 class Reka(AbstractProvider):
10 10 domain = "space.reka.ai"
11 11 url = f"https://{domain}"
12 working = True
12 working = False
13 13 needs_auth = True
14 14 supports_stream = True
15 15 default_vision_model = "reka"
@@ -20,7 +20,7 @@ class Reka(AbstractProvider):
20 20 cls,
21 21 model: str,
22 22 messages: Messages,
23 stream: bool,
23 stream: bool = True,
24 24 proxy: str = None,
25 25 api_key: str = None,
26 26 image: ImageType = None,
@@ -29,7 +29,7 @@ class Reka(AbstractProvider):
29 29 cls.proxy = proxy
30 30
31 31 if not api_key:
32 cls.cookies = get_cookies(cls.domain)
32 cls.cookies = get_cookies(cls.domain,cache_result=False)
33 33 if not cls.cookies:
34 34 raise ValueError(f"No cookies found for {cls.domain}")
35 35 elif "appSession" not in cls.cookies:
Modified g4f/cli/client.py +8 -1
@@ -16,7 +16,12 @@ from g4f.Provider import ProviderUtils
16 16 from g4f.image import extract_data_uri, is_accepted_format
17 17 from g4f.image.copy_images import get_media_dir
18 18 from g4f.client.helper import filter_markdown
19 from g4f.integration.markitdown import MarkItDown
19 from g4f.errors import MissingRequirementsError
20 try:
21 from g4f.integration.markitdown import MarkItDown
22 has_markitdown = True
23 except ImportError:
24 has_markitdown = False
20 25 from g4f.config import CONFIG_DIR, COOKIES_DIR
21 26 from g4f import debug
22 27
@@ -284,6 +289,8 @@ def run_client_args(args):
284 289 media.append(input_value)
285 290 else:
286 291 try:
292 if not has_markitdown:
293 raise MissingRequirementsError("MarkItDown is not installed. Install it with `pip install -U markitdown`.")
287 294 md = MarkItDown()
288 295 text_content = md.convert_url(input_value).text_content
289 296 input_text += f"\n```\n{text_content}\n\nSource: {input_value}\n```\n"
Modified g4f/gui/server/backend_api.py +5 -2
@@ -40,7 +40,7 @@ from ...providers.response import FinishReason, AudioResponse, MediaResponse, Re
40 40 from ...client.helper import filter_markdown
41 41 from ...tools.files import supports_filename, get_streaming, get_bucket_dir, get_tempfile
42 42 from ...tools.run_tools import iter_run_tools
43 from ...errors import ProviderNotFoundError
43 from ...errors import ProviderNotFoundError, MissingAuthError
44 44 from ...image import is_allowed_extension, process_image, MEDIA_TYPE_MAP
45 45 from ...cookies import get_cookies_dir
46 46 from ...image.copy_images import secure_filename, get_source_url, get_media_dir, copy_media
@@ -120,7 +120,10 @@ class Backend_Api(Api):
120 120
121 121 @app.route('/backend-api/v2/models/<provider>', methods=['GET'])
122 122 def jsonify_provider_models(**kwargs):
123 response = self.get_provider_models(**kwargs)
123 try:
124 response = self.get_provider_models(**kwargs)
125 except MissingAuthError as e:
126 return jsonify({"error": {"message": str(e)}}), 401
124 127 return jsonify(response)
125 128
126 129 @app.route('/backend-api/v2/providers', methods=['GET'])