mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-10-07 17:21:16 +08:00
Update providers
This commit is contained in:
@@ -86,10 +86,12 @@ class Cloudflare(AsyncGeneratorProvider, ProviderModelMixin, AuthFileMixin):
|
|||||||
cls.models = cls.fallback_models
|
cls.models = cls.fallback_models
|
||||||
get_running_loop(check_nested=True)
|
get_running_loop(check_nested=True)
|
||||||
try:
|
try:
|
||||||
asyncio.run(nodriver_read_models())
|
task = asyncio.create_task(nodriver_read_models())
|
||||||
|
asyncio.run(task)
|
||||||
except RuntimeError:
|
except RuntimeError:
|
||||||
debug.log("Nodriver is not available: RuntimeError")
|
debug.log("Nodriver is not available: RuntimeError")
|
||||||
cls.models = cls.fallback_models
|
cls.models = cls.fallback_models
|
||||||
|
task.cancel()
|
||||||
else:
|
else:
|
||||||
cls.models = cls.fallback_models
|
cls.models = cls.fallback_models
|
||||||
debug.log(f"Nodriver is not installed: {type(f).__name__}: {f}")
|
debug.log(f"Nodriver is not installed: {type(f).__name__}: {f}")
|
||||||
@@ -113,7 +115,7 @@ class Cloudflare(AsyncGeneratorProvider, ProviderModelMixin, AuthFileMixin):
|
|||||||
try:
|
try:
|
||||||
cls._args = await get_args_from_nodriver(cls.url, proxy=proxy)
|
cls._args = await get_args_from_nodriver(cls.url, proxy=proxy)
|
||||||
except (RuntimeError, FileNotFoundError) as e:
|
except (RuntimeError, FileNotFoundError) as e:
|
||||||
debug.log(f"Nodriver is not available: {type(e).__name__}: {e}")
|
debug.log(f"Cloudflare: Nodriver is not available:", e)
|
||||||
cls._args = {"headers": DEFAULT_HEADERS, "cookies": {}, "impersonate": "chrome"}
|
cls._args = {"headers": DEFAULT_HEADERS, "cookies": {}, "impersonate": "chrome"}
|
||||||
else:
|
else:
|
||||||
cls._args = {"headers": DEFAULT_HEADERS, "cookies": {}, "impersonate": "chrome"}
|
cls._args = {"headers": DEFAULT_HEADERS, "cookies": {}, "impersonate": "chrome"}
|
||||||
|
@@ -192,6 +192,8 @@ class LambdaChat(AsyncGeneratorProvider, ProviderModelMixin):
|
|||||||
data=form_data,
|
data=form_data,
|
||||||
proxy=proxy
|
proxy=proxy
|
||||||
) as response:
|
) as response:
|
||||||
|
if not response.ok:
|
||||||
|
debug.log(f"LambdaChat: Request Body: {form_data}")
|
||||||
await raise_for_status(response)
|
await raise_for_status(response)
|
||||||
|
|
||||||
async for chunk in response.content:
|
async for chunk in response.content:
|
||||||
|
@@ -519,6 +519,8 @@ class LegacyLMArena(AsyncGeneratorProvider, ProviderModelMixin):
|
|||||||
# Skip non-JSON lines
|
# Skip non-JSON lines
|
||||||
continue
|
continue
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
if max_retries == 1:
|
||||||
|
raise e
|
||||||
debug.log(f"Error parsing response: {str(e)}")
|
debug.log(f"Error parsing response: {str(e)}")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@@ -16,7 +16,6 @@ from .. import debug
|
|||||||
|
|
||||||
class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
|
class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
|
||||||
label = "Puter.js"
|
label = "Puter.js"
|
||||||
parent = "Puter"
|
|
||||||
url = "https://docs.puter.com/playground"
|
url = "https://docs.puter.com/playground"
|
||||||
login_url = "https://github.com/HeyPuter/puter-cli"
|
login_url = "https://github.com/HeyPuter/puter-cli"
|
||||||
api_endpoint = "https://api.puter.com/drivers/call"
|
api_endpoint = "https://api.puter.com/drivers/call"
|
||||||
@@ -28,7 +27,6 @@ class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
|
|||||||
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"]
|
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"]
|
||||||
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"]
|
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"]
|
||||||
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"]
|
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"]
|
||||||
xai_models = ["grok-beta", "grok-vision-beta"]
|
|
||||||
model_aliases = {
|
model_aliases = {
|
||||||
### mistral_models ###
|
### mistral_models ###
|
||||||
"mixtral-8x22b": ["open-mixtral-8x22b", "open-mixtral-8x22b-2404"],
|
"mixtral-8x22b": ["open-mixtral-8x22b", "open-mixtral-8x22b-2404"],
|
||||||
@@ -281,14 +279,14 @@ class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def get_driver_for_model(model: str) -> str:
|
def get_driver_for_model(model: str) -> str:
|
||||||
"""Determine the appropriate driver based on the model name."""
|
"""Determine the appropriate driver based on the model name."""
|
||||||
if model in PuterJS.openai_models:
|
if "openrouter:" in model:
|
||||||
|
return "openrouter"
|
||||||
|
elif model in PuterJS.openai_models or model.startswith("gpt-"):
|
||||||
return "openai-completion"
|
return "openai-completion"
|
||||||
elif model in PuterJS.mistral_models:
|
elif model in PuterJS.mistral_models:
|
||||||
return "mistral"
|
return "mistral"
|
||||||
elif model in PuterJS.xai_models:
|
elif "grok" in model:
|
||||||
return "xai"
|
return "xai"
|
||||||
elif "openrouter:" in model:
|
|
||||||
return "openrouter"
|
|
||||||
elif "claude" in model:
|
elif "claude" in model:
|
||||||
return "claude"
|
return "claude"
|
||||||
elif "deepseek" in model:
|
elif "deepseek" in model:
|
||||||
@@ -296,8 +294,7 @@ class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
|
|||||||
elif "gemini" in model:
|
elif "gemini" in model:
|
||||||
return "gemini"
|
return "gemini"
|
||||||
else:
|
else:
|
||||||
# Default to OpenAI for unknown models
|
raise ModelNotFoundError(f"Model {model} not found in known drivers")
|
||||||
return "openai-completion"
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_model(cls, model: str) -> str:
|
def get_model(cls, model: str) -> str:
|
||||||
|
@@ -23,7 +23,7 @@ PROVIERS_LIST_1 = [
|
|||||||
OpenaiChat, PollinationsAI, Cloudflare, PerplexityLabs, Gemini, Grok, DeepSeekAPI, Blackbox, OpenAIFM,
|
OpenaiChat, PollinationsAI, Cloudflare, PerplexityLabs, Gemini, Grok, DeepSeekAPI, Blackbox, OpenAIFM,
|
||||||
OIVSCodeSer2, OIVSCodeSer0501, TeachAnything, Together, WeWordle, Yqcloud, Chatai, Free2GPT, ARTA, ImageLabs,
|
OIVSCodeSer2, OIVSCodeSer0501, TeachAnything, Together, WeWordle, Yqcloud, Chatai, Free2GPT, ARTA, ImageLabs,
|
||||||
HarProvider, LegacyLMArena, LMArenaBeta, LambdaChat, CopilotAccount, DeepInfraChat,
|
HarProvider, LegacyLMArena, LMArenaBeta, LambdaChat, CopilotAccount, DeepInfraChat,
|
||||||
HuggingSpace, HuggingFace, HuggingFaceMedia, PuterJS, Together
|
HuggingSpace, HuggingFace, HuggingFaceMedia, Together
|
||||||
]
|
]
|
||||||
|
|
||||||
PROVIERS_LIST_2 = [
|
PROVIERS_LIST_2 = [
|
||||||
@@ -31,7 +31,7 @@ PROVIERS_LIST_2 = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
PROVIERS_LIST_3 = [
|
PROVIERS_LIST_3 = [
|
||||||
HarProvider, LambdaChat, DeepInfraChat, HuggingFace, HuggingFaceMedia, LegacyLMArena, LMArenaBeta,
|
HarProvider, LambdaChat, DeepInfraChat, HuggingFace, HuggingFaceMedia, HarProvider, LegacyLMArena, LMArenaBeta,
|
||||||
PuterJS, Together, Cloudflare, HuggingSpace
|
PuterJS, Together, Cloudflare, HuggingSpace
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -331,6 +331,7 @@ class AnyProvider(AsyncGeneratorProvider, ProviderModelMixin):
|
|||||||
if api_key.get(provider):
|
if api_key.get(provider):
|
||||||
if provider in __map__ and __map__[provider] not in PROVIERS_LIST_1:
|
if provider in __map__ and __map__[provider] not in PROVIERS_LIST_1:
|
||||||
extra_providers.append(__map__[provider])
|
extra_providers.append(__map__[provider])
|
||||||
|
print(f"Using extra providers: {[p.__name__ for p in extra_providers]}")
|
||||||
for provider in PROVIERS_LIST_1 + extra_providers:
|
for provider in PROVIERS_LIST_1 + extra_providers:
|
||||||
if provider.working:
|
if provider.working:
|
||||||
provider_api_key = api_key
|
provider_api_key = api_key
|
||||||
@@ -341,8 +342,15 @@ class AnyProvider(AsyncGeneratorProvider, ProviderModelMixin):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
debug.error(f"Error getting models for provider {provider.__name__}:", e)
|
debug.error(f"Error getting models for provider {provider.__name__}:", e)
|
||||||
continue
|
continue
|
||||||
if not model or model in provider_models or provider.model_aliases and model in provider.model_aliases:
|
if model and provider == PuterJS:
|
||||||
providers.append(provider)
|
providers.append(provider)
|
||||||
|
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():
|
||||||
|
providers.append(provider)
|
||||||
|
elif provider.__name__ == "GeminiPro":
|
||||||
|
if model and "gemini" in model or "gemma" in model:
|
||||||
|
providers.append(provider)
|
||||||
|
elif len(provider_models) > 3:
|
||||||
|
debug.error(f"Model '{model}' not found in provider {provider.__name__}")
|
||||||
if model in models.__models__:
|
if model in models.__models__:
|
||||||
for provider in models.__models__[model][1]:
|
for provider in models.__models__[model][1]:
|
||||||
providers.append(provider)
|
providers.append(provider)
|
||||||
@@ -351,7 +359,9 @@ class AnyProvider(AsyncGeneratorProvider, ProviderModelMixin):
|
|||||||
|
|
||||||
if len(providers) == 0:
|
if len(providers) == 0:
|
||||||
raise ModelNotFoundError(f"AnyProvider: Model {model} not found in any provider.")
|
raise ModelNotFoundError(f"AnyProvider: Model {model} not found in any provider.")
|
||||||
|
|
||||||
|
debug.log(f"AnyProvider: Using providers: {[provider.__name__ for provider in providers]} for model '{model}'")
|
||||||
|
|
||||||
async for chunk in IterListProvider(providers).create_async_generator(
|
async for chunk in IterListProvider(providers).create_async_generator(
|
||||||
model,
|
model,
|
||||||
messages,
|
messages,
|
||||||
|
@@ -50,7 +50,6 @@ class IterListProvider(BaseRetryProvider):
|
|||||||
"""
|
"""
|
||||||
exceptions = {}
|
exceptions = {}
|
||||||
started: bool = False
|
started: bool = False
|
||||||
|
|
||||||
for provider in self.get_providers(stream and not ignore_stream, ignored):
|
for provider in self.get_providers(stream and not ignore_stream, ignored):
|
||||||
self.last_provider = provider
|
self.last_provider = provider
|
||||||
alias = model
|
alias = model
|
||||||
@@ -67,6 +66,7 @@ class IterListProvider(BaseRetryProvider):
|
|||||||
api_key = api_key.get(provider.get_parent())
|
api_key = api_key.get(provider.get_parent())
|
||||||
if api_key:
|
if api_key:
|
||||||
extra_body["api_key"] = api_key
|
extra_body["api_key"] = api_key
|
||||||
|
debug.log(f"Using API key for provider: {provider.__name__}")
|
||||||
try:
|
try:
|
||||||
response = provider.create_function(alias, messages, stream=stream, **extra_body)
|
response = provider.create_function(alias, messages, stream=stream, **extra_body)
|
||||||
for chunk in response:
|
for chunk in response:
|
||||||
@@ -114,6 +114,7 @@ class IterListProvider(BaseRetryProvider):
|
|||||||
if isinstance(api_key, dict):
|
if isinstance(api_key, dict):
|
||||||
api_key = api_key.get(provider.get_parent())
|
api_key = api_key.get(provider.get_parent())
|
||||||
if api_key:
|
if api_key:
|
||||||
|
debug.log(f"Using API key for provider: {provider.__name__}")
|
||||||
extra_body["api_key"] = api_key
|
extra_body["api_key"] = api_key
|
||||||
if conversation is not None and hasattr(conversation, provider.__name__):
|
if conversation is not None and hasattr(conversation, provider.__name__):
|
||||||
extra_body["conversation"] = JsonConversation(**getattr(conversation, provider.__name__))
|
extra_body["conversation"] = JsonConversation(**getattr(conversation, provider.__name__))
|
||||||
|
Reference in New Issue
Block a user