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

XFEstudio/gpt4free

Update providers

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

代码差异

6 个文件 +29 -15
Modified g4f/Provider/Cloudflare.py +4 -2
@@ -86,10 +86,12 @@ class Cloudflare(AsyncGeneratorProvider, ProviderModelMixin, AuthFileMixin):
86 86 cls.models = cls.fallback_models
87 87 get_running_loop(check_nested=True)
88 88 try:
89 asyncio.run(nodriver_read_models())
89 task = asyncio.create_task(nodriver_read_models())
90 asyncio.run(task)
90 91 except RuntimeError:
91 92 debug.log("Nodriver is not available: RuntimeError")
92 93 cls.models = cls.fallback_models
94 task.cancel()
93 95 else:
94 96 cls.models = cls.fallback_models
95 97 debug.log(f"Nodriver is not installed: {type(f).__name__}: {f}")
@@ -113,7 +115,7 @@ class Cloudflare(AsyncGeneratorProvider, ProviderModelMixin, AuthFileMixin):
113 115 try:
114 116 cls._args = await get_args_from_nodriver(cls.url, proxy=proxy)
115 117 except (RuntimeError, FileNotFoundError) as e:
116 debug.log(f"Nodriver is not available: {type(e).__name__}: {e}")
118 debug.log(f"Cloudflare: Nodriver is not available:", e)
117 119 cls._args = {"headers": DEFAULT_HEADERS, "cookies": {}, "impersonate": "chrome"}
118 120 else:
119 121 cls._args = {"headers": DEFAULT_HEADERS, "cookies": {}, "impersonate": "chrome"}
Modified g4f/Provider/LambdaChat.py +2 -0
@@ -192,6 +192,8 @@ class LambdaChat(AsyncGeneratorProvider, ProviderModelMixin):
192 192 data=form_data,
193 193 proxy=proxy
194 194 ) as response:
195 if not response.ok:
196 debug.log(f"LambdaChat: Request Body: {form_data}")
195 197 await raise_for_status(response)
196 198
197 199 async for chunk in response.content:
Modified g4f/Provider/LegacyLMArena.py +2 -0
@@ -519,6 +519,8 @@ class LegacyLMArena(AsyncGeneratorProvider, ProviderModelMixin):
519 519 # Skip non-JSON lines
520 520 continue
521 521 except Exception as e:
522 if max_retries == 1:
523 raise e
522 524 debug.log(f"Error parsing response: {str(e)}")
523 525 continue
524 526
Modified g4f/Provider/needs_auth/PuterJS.py +5 -8
@@ -16,7 +16,6 @@ from .. import debug
16 16
17 17 class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
18 18 label = "Puter.js"
19 parent = "Puter"
20 19 url = "https://docs.puter.com/playground"
21 20 login_url = "https://github.com/HeyPuter/puter-cli"
22 21 api_endpoint = "https://api.puter.com/drivers/call"
@@ -28,7 +27,6 @@ class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
28 27 openai_models = [default_vision_model,"gpt-4o-mini", "o1", "o1-mini", "o1-pro", "o3", "o3-mini", "o4-mini", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "gpt-4.5-preview"]
29 28 claude_models = ["claude-3-7-sonnet-20250219", "claude-3-7-sonnet-latest", "claude-3-5-sonnet-20241022", "claude-3-5-sonnet-latest", "claude-3-5-sonnet-20240620", "claude-3-haiku-20240307"]
30 29 mistral_models = ["ministral-3b-2410","ministral-3b-latest","ministral-8b-2410","ministral-8b-latest","open-mistral-7b","mistral-tiny","mistral-tiny-2312","open-mixtral-8x7b","mistral-small","mistral-small-2312","open-mixtral-8x22b","open-mixtral-8x22b-2404","mistral-large-2411","mistral-large-latest","pixtral-large-2411","pixtral-large-latest","mistral-large-pixtral-2411","codestral-2501","codestral-latest","codestral-2412","codestral-2411-rc5","pixtral-12b-2409","pixtral-12b","pixtral-12b-latest","mistral-small-2503","mistral-small-latest"]
31 xai_models = ["grok-beta", "grok-vision-beta"]
32 30 model_aliases = {
33 31 ### mistral_models ###
34 32 "mixtral-8x22b": ["open-mixtral-8x22b", "open-mixtral-8x22b-2404"],
@@ -281,14 +279,14 @@ class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
281 279 @staticmethod
282 280 def get_driver_for_model(model: str) -> str:
283 281 """Determine the appropriate driver based on the model name."""
284 if model in PuterJS.openai_models:
282 if "openrouter:" in model:
283 return "openrouter"
284 elif model in PuterJS.openai_models or model.startswith("gpt-"):
285 285 return "openai-completion"
286 286 elif model in PuterJS.mistral_models:
287 287 return "mistral"
288 elif model in PuterJS.xai_models:
288 elif "grok" in model:
289 289 return "xai"
290 elif "openrouter:" in model:
291 return "openrouter"
292 290 elif "claude" in model:
293 291 return "claude"
294 292 elif "deepseek" in model:
@@ -296,8 +294,7 @@ class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
296 294 elif "gemini" in model:
297 295 return "gemini"
298 296 else:
299 # Default to OpenAI for unknown models
300 return "openai-completion"
297 raise ModelNotFoundError(f"Model {model} not found in known drivers")
301 298
302 299 @classmethod
303 300 def get_model(cls, model: str) -> str:
Modified g4f/providers/any_provider.py +14 -4
@@ -23,7 +23,7 @@ PROVIERS_LIST_1 = [
23 23 OpenaiChat, PollinationsAI, Cloudflare, PerplexityLabs, Gemini, Grok, DeepSeekAPI, Blackbox, OpenAIFM,
24 24 OIVSCodeSer2, OIVSCodeSer0501, TeachAnything, Together, WeWordle, Yqcloud, Chatai, Free2GPT, ARTA, ImageLabs,
25 25 HarProvider, LegacyLMArena, LMArenaBeta, LambdaChat, CopilotAccount, DeepInfraChat,
26 HuggingSpace, HuggingFace, HuggingFaceMedia, PuterJS, Together
26 HuggingSpace, HuggingFace, HuggingFaceMedia, Together
27 27 ]
28 28
29 29 PROVIERS_LIST_2 = [
@@ -31,7 +31,7 @@ PROVIERS_LIST_2 = [
31 31 ]
32 32
33 33 PROVIERS_LIST_3 = [
34 HarProvider, LambdaChat, DeepInfraChat, HuggingFace, HuggingFaceMedia, LegacyLMArena, LMArenaBeta,
34 HarProvider, LambdaChat, DeepInfraChat, HuggingFace, HuggingFaceMedia, HarProvider, LegacyLMArena, LMArenaBeta,
35 35 PuterJS, Together, Cloudflare, HuggingSpace
36 36 ]
37 37
@@ -331,6 +331,7 @@ class AnyProvider(AsyncGeneratorProvider, ProviderModelMixin):
331 331 if api_key.get(provider):
332 332 if provider in __map__ and __map__[provider] not in PROVIERS_LIST_1:
333 333 extra_providers.append(__map__[provider])
334 print(f"Using extra providers: {[p.__name__ for p in extra_providers]}")
334 335 for provider in PROVIERS_LIST_1 + extra_providers:
335 336 if provider.working:
336 337 provider_api_key = api_key
@@ -341,8 +342,15 @@ class AnyProvider(AsyncGeneratorProvider, ProviderModelMixin):
341 342 except Exception as e:
342 343 debug.error(f"Error getting models for provider {provider.__name__}:", e)
343 344 continue
344 if not model or model in provider_models or provider.model_aliases and model in provider.model_aliases:
345 if model and provider == PuterJS:
345 346 providers.append(provider)
347 elif not model or model in provider_models or provider.model_aliases and model in provider.model_aliases or model in provider.model_aliases.values():
348 providers.append(provider)
349 elif provider.__name__ == "GeminiPro":
350 if model and "gemini" in model or "gemma" in model:
351 providers.append(provider)
352 elif len(provider_models) > 3:
353 debug.error(f"Model '{model}' not found in provider {provider.__name__}")
346 354 if model in models.__models__:
347 355 for provider in models.__models__[model][1]:
348 356 providers.append(provider)
@@ -351,7 +359,9 @@ class AnyProvider(AsyncGeneratorProvider, ProviderModelMixin):
351 359
352 360 if len(providers) == 0:
353 361 raise ModelNotFoundError(f"AnyProvider: Model {model} not found in any provider.")
354
362
363 debug.log(f"AnyProvider: Using providers: {[provider.__name__ for provider in providers]} for model '{model}'")
364
355 365 async for chunk in IterListProvider(providers).create_async_generator(
356 366 model,
357 367 messages,
Modified g4f/providers/retry_provider.py +2 -1
@@ -50,7 +50,6 @@ class IterListProvider(BaseRetryProvider):
50 50 """
51 51 exceptions = {}
52 52 started: bool = False
53
54 53 for provider in self.get_providers(stream and not ignore_stream, ignored):
55 54 self.last_provider = provider
56 55 alias = model
@@ -67,6 +66,7 @@ class IterListProvider(BaseRetryProvider):
67 66 api_key = api_key.get(provider.get_parent())
68 67 if api_key:
69 68 extra_body["api_key"] = api_key
69 debug.log(f"Using API key for provider: {provider.__name__}")
70 70 try:
71 71 response = provider.create_function(alias, messages, stream=stream, **extra_body)
72 72 for chunk in response:
@@ -114,6 +114,7 @@ class IterListProvider(BaseRetryProvider):
114 114 if isinstance(api_key, dict):
115 115 api_key = api_key.get(provider.get_parent())
116 116 if api_key:
117 debug.log(f"Using API key for provider: {provider.__name__}")
117 118 extra_body["api_key"] = api_key
118 119 if conversation is not None and hasattr(conversation, provider.__name__):
119 120 extra_body["conversation"] = JsonConversation(**getattr(conversation, provider.__name__))