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 }