Update providers

This commit is contained in:
hlohaus
2025-06-15 11:03:49 +02:00
parent 36f5fc70b1
commit dbef5facb6
6 changed files with 29 additions and 15 deletions

View File

@@ -86,10 +86,12 @@ class Cloudflare(AsyncGeneratorProvider, ProviderModelMixin, AuthFileMixin):
cls.models = cls.fallback_models
get_running_loop(check_nested=True)
try:
asyncio.run(nodriver_read_models())
task = asyncio.create_task(nodriver_read_models())
asyncio.run(task)
except RuntimeError:
debug.log("Nodriver is not available: RuntimeError")
cls.models = cls.fallback_models
task.cancel()
else:
cls.models = cls.fallback_models
debug.log(f"Nodriver is not installed: {type(f).__name__}: {f}")
@@ -113,7 +115,7 @@ class Cloudflare(AsyncGeneratorProvider, ProviderModelMixin, AuthFileMixin):
try:
cls._args = await get_args_from_nodriver(cls.url, proxy=proxy)
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"}
else:
cls._args = {"headers": DEFAULT_HEADERS, "cookies": {}, "impersonate": "chrome"}

View File

@@ -192,6 +192,8 @@ class LambdaChat(AsyncGeneratorProvider, ProviderModelMixin):
data=form_data,
proxy=proxy
) as response:
if not response.ok:
debug.log(f"LambdaChat: Request Body: {form_data}")
await raise_for_status(response)
async for chunk in response.content:

View File

@@ -519,6 +519,8 @@ class LegacyLMArena(AsyncGeneratorProvider, ProviderModelMixin):
# Skip non-JSON lines
continue
except Exception as e:
if max_retries == 1:
raise e
debug.log(f"Error parsing response: {str(e)}")
continue

View File

@@ -16,7 +16,6 @@ from .. import debug
class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
label = "Puter.js"
parent = "Puter"
url = "https://docs.puter.com/playground"
login_url = "https://github.com/HeyPuter/puter-cli"
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"]
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"]
xai_models = ["grok-beta", "grok-vision-beta"]
model_aliases = {
### mistral_models ###
"mixtral-8x22b": ["open-mixtral-8x22b", "open-mixtral-8x22b-2404"],
@@ -281,14 +279,14 @@ class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
@staticmethod
def get_driver_for_model(model: str) -> str:
"""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"
elif model in PuterJS.mistral_models:
return "mistral"
elif model in PuterJS.xai_models:
elif "grok" in model:
return "xai"
elif "openrouter:" in model:
return "openrouter"
elif "claude" in model:
return "claude"
elif "deepseek" in model:
@@ -296,8 +294,7 @@ class PuterJS(AsyncGeneratorProvider, ProviderModelMixin):
elif "gemini" in model:
return "gemini"
else:
# Default to OpenAI for unknown models
return "openai-completion"
raise ModelNotFoundError(f"Model {model} not found in known drivers")
@classmethod
def get_model(cls, model: str) -> str:

View File

@@ -23,7 +23,7 @@ PROVIERS_LIST_1 = [
OpenaiChat, PollinationsAI, Cloudflare, PerplexityLabs, Gemini, Grok, DeepSeekAPI, Blackbox, OpenAIFM,
OIVSCodeSer2, OIVSCodeSer0501, TeachAnything, Together, WeWordle, Yqcloud, Chatai, Free2GPT, ARTA, ImageLabs,
HarProvider, LegacyLMArena, LMArenaBeta, LambdaChat, CopilotAccount, DeepInfraChat,
HuggingSpace, HuggingFace, HuggingFaceMedia, PuterJS, Together
HuggingSpace, HuggingFace, HuggingFaceMedia, Together
]
PROVIERS_LIST_2 = [
@@ -31,7 +31,7 @@ PROVIERS_LIST_2 = [
]
PROVIERS_LIST_3 = [
HarProvider, LambdaChat, DeepInfraChat, HuggingFace, HuggingFaceMedia, LegacyLMArena, LMArenaBeta,
HarProvider, LambdaChat, DeepInfraChat, HuggingFace, HuggingFaceMedia, HarProvider, LegacyLMArena, LMArenaBeta,
PuterJS, Together, Cloudflare, HuggingSpace
]
@@ -331,6 +331,7 @@ class AnyProvider(AsyncGeneratorProvider, ProviderModelMixin):
if api_key.get(provider):
if provider in __map__ and __map__[provider] not in PROVIERS_LIST_1:
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:
if provider.working:
provider_api_key = api_key
@@ -341,8 +342,15 @@ class AnyProvider(AsyncGeneratorProvider, ProviderModelMixin):
except Exception as e:
debug.error(f"Error getting models for provider {provider.__name__}:", e)
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)
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__:
for provider in models.__models__[model][1]:
providers.append(provider)
@@ -351,7 +359,9 @@ class AnyProvider(AsyncGeneratorProvider, ProviderModelMixin):
if len(providers) == 0:
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(
model,
messages,

View File

@@ -50,7 +50,6 @@ class IterListProvider(BaseRetryProvider):
"""
exceptions = {}
started: bool = False
for provider in self.get_providers(stream and not ignore_stream, ignored):
self.last_provider = provider
alias = model
@@ -67,6 +66,7 @@ class IterListProvider(BaseRetryProvider):
api_key = api_key.get(provider.get_parent())
if api_key:
extra_body["api_key"] = api_key
debug.log(f"Using API key for provider: {provider.__name__}")
try:
response = provider.create_function(alias, messages, stream=stream, **extra_body)
for chunk in response:
@@ -114,6 +114,7 @@ class IterListProvider(BaseRetryProvider):
if isinstance(api_key, dict):
api_key = api_key.get(provider.get_parent())
if api_key:
debug.log(f"Using API key for provider: {provider.__name__}")
extra_body["api_key"] = api_key
if conversation is not None and hasattr(conversation, provider.__name__):
extra_body["conversation"] = JsonConversation(**getattr(conversation, provider.__name__))