Skip to content

Commit a79caec

Browse files
[Feature] Default Terminus2Adapter model to openai/ route (#351)
- Prefix openai/ when model has no known LiteLLM provider segment - Detect provider via litellm.provider_list, not a naive "/" check - Normalize in setup() so module import stays litellm-free; idempotent
1 parent 6aba39e commit a79caec

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

lagent/adapters/terminus2.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ def setup(self) -> None:
121121
if not self.model:
122122
raise RuntimeError("Terminus2Adapter requires model or RL_LLM_MODEL.")
123123

124+
self.model = _ensure_provider_prefix(self.model)
125+
124126
if self.proxy is None:
125127
raise RuntimeError(
126128
"Terminus2Adapter requires a SessionClient proxy: all LLM calls are "
@@ -345,6 +347,33 @@ def _json_safe(value: Any) -> Any:
345347
return json.loads(json.dumps(value, ensure_ascii=False, default=str))
346348

347349

350+
def _ensure_provider_prefix(model: str) -> str:
351+
"""Prefix ``openai/`` when ``model`` carries no explicit LiteLLM provider route.
352+
353+
LiteLLM dispatches by a ``provider/model`` prefix. A bare name
354+
(``deepseek-v4-flash``) or a HuggingFace-style id (``deepseek-ai/DeepSeek-V3``)
355+
has no provider, so it is routed through the OpenAI-compatible path that
356+
fronts the proxy. A model whose first ``/``-segment is already a known LiteLLM
357+
provider (``openai/...``, ``anthropic/...``) is returned unchanged, making
358+
this idempotent.
359+
360+
Args:
361+
model (str): The configured model name.
362+
363+
Returns:
364+
str: ``model`` unchanged when it already starts with a known LiteLLM
365+
provider, else ``"openai/" + model``.
366+
"""
367+
if not model:
368+
return model
369+
import litellm
370+
371+
providers = {str(getattr(p, "value", p)) for p in litellm.provider_list}
372+
if model.split("/", 1)[0] in providers:
373+
return model
374+
return f"openai/{model}"
375+
376+
348377
@contextmanager
349378
def _temporary_env(updates: dict[str, str | None]):
350379
old_values: dict[str, str | None] = {}

0 commit comments

Comments
 (0)