openai compatible providers
frdel committed
Jul 4, 2025 at 13:35 UTC
872ab4ade4c05248af50890e5757205afae122c0
2 files changed
+16
-7
models.py
+10
-4
@@ -471,7 +471,7 @@ def get_litellm_embedding(model_name: str, provider: str, **kwargs: Any):
471
472
def get_model(type: ModelType, provider: ModelProvider, name: str, **kwargs: Any):
473
provider_name = provider.name.lower()
474
- kwargs = _normalize_chat_kwargs(kwargs)
474
+ kwargs = _normalize_chat_kwargs(provider, kwargs)
475
if type == ModelType.CHAT:
476
return _get_litellm_chat(LiteLLMChatWrapper, name, provider_name, **kwargs)
477
elif type == ModelType.EMBEDDING:
@@ -484,7 +484,7 @@ def get_chat_model(
484
provider: ModelProvider, name: str, **kwargs: Any
485
) -> LiteLLMChatWrapper:
486
provider_name = _get_litellm_provider(provider)
487
- kwargs = _normalize_chat_kwargs(kwargs)
487
+ kwargs = _normalize_chat_kwargs(provider, kwargs)
488
model = _get_litellm_chat(LiteLLMChatWrapper, name, provider_name, **kwargs)
489
return model
490
@@ -493,7 +493,7 @@ def get_browser_model(
493
provider: ModelProvider, name: str, **kwargs: Any
494
) -> BrowserCompatibleChatWrapper:
495
provider_name = provider.name.lower()
496
- kwargs = _normalize_chat_kwargs(kwargs)
496
+ kwargs = _normalize_chat_kwargs(provider, kwargs)
497
model = _get_litellm_chat(
498
BrowserCompatibleChatWrapper, name, provider_name, **kwargs
499
)
@@ -509,7 +509,11 @@ def get_embedding_model(
509
return model
510
511
512
-def _normalize_chat_kwargs(kwargs: Any) -> Any:
512
+def _normalize_chat_kwargs(provider: ModelProvider, kwargs: Any) -> Any:
513
+ # this prevents using openai api key for other providers
514
+ if provider == ModelProvider.OTHER:
515
+ if "api_key" not in kwargs:
516
+ kwargs["api_key"] = "None"
517
return kwargs
518
519
@@ -523,5 +527,7 @@ def _get_litellm_provider(provider: ModelProvider) -> str:
527
# exceptions
528
if name == "google":
529
name = "gemini"
530
+ elif name == "other":
531
+ name = "openai"
532
533
return name
python/helpers/settings.py
+6
-3
@@ -208,7 +208,8 @@ def convert_out(settings: Settings) -> SettingsOutput:
208
{
209
"id": "chat_model_kwargs",
210
"title": "Chat model additional parameters",
211
- "description": "Any other parameters supported by the model. Format is KEY=VALUE on individual lines, just like .env file.",
211
+ "description": """Any other parameters supported by the model. Format is KEY=VALUE on individual lines, just like .env file.
212
+ For OpenAI compatible providers not listed here, select 'other' and specify api_base=https://... and api_key=... as additional parameters.""",
213
"type": "textarea",
214
"value": _dict_to_env(settings["chat_model_kwargs"]),
215
}
@@ -278,7 +279,8 @@ def convert_out(settings: Settings) -> SettingsOutput:
279
{
280
"id": "util_model_kwargs",
281
"title": "Utility model additional parameters",
281
- "description": "Any other parameters supported by the model. Format is KEY=VALUE on individual lines, just like .env file.",
282
+ "description": """Any other parameters supported by the model. Format is KEY=VALUE on individual lines, just like .env file.
283
+ For OpenAI compatible providers not listed here, select 'other' and specify api_base=https://... and api_key=... as additional parameters.""",
284
"type": "textarea",
285
"value": _dict_to_env(settings["util_model_kwargs"]),
286
}
@@ -338,7 +340,8 @@ def convert_out(settings: Settings) -> SettingsOutput:
340
{
341
"id": "embed_model_kwargs",
342
"title": "Embedding model additional parameters",
341
- "description": "Any other parameters supported by the model. Format is KEY=VALUE on individual lines, just like .env file.",
343
+ "description": """Any other parameters supported by the model. Format is KEY=VALUE on individual lines, just like .env file.
344
+ For OpenAI compatible providers not listed here, select 'other' and specify api_base=https://... and api_key=... as additional parameters.""",
345
"type": "textarea",
346
"value": _dict_to_env(settings["embed_model_kwargs"]),
347
}