mlflow/mlflow · error · ValueError
Invalid route type {route_type}
Error message
Invalid route type {route_type} What it means
TogetherAIProvider.get_endpoint_url maps only the three known route types ('llm/v1/chat/completions', 'llm/v1/completions', 'llm/v1/embeddings') to TogetherAI URLs; anything else raises ValueError('Invalid route type ...'). This is an internal guard — reaching it means get_endpoint_url was called directly with an unsupported route_type string.
Source
Thrown at mlflow/gateway/providers/togetherai.py:330
return "https://api.together.xyz/v1"
@property
def headers(self):
return {"Authorization": f"Bearer {self.togetherai_config.togetherai_api_key}"}
@property
def adapter_class(self) -> type[ProviderAdapter]:
return TogetherAIAdapter
def get_endpoint_url(self, route_type: str) -> str:
if route_type == "llm/v1/chat":
return f"{self.base_url}/chat/completions"
elif route_type == "llm/v1/completions":
return f"{self.base_url}/completions"
elif route_type == "llm/v1/embeddings":
return f"{self.base_url}/embeddings"
else:
raise ValueError(f"Invalid route type {route_type}")
async def _request(self, path: str, payload: dict[str, Any]) -> dict[str, Any]:
return await send_request(
headers=self.headers,
base_url=self.base_url,
path=path,
payload=payload,
)
def _stream_request(self, path: str, payload: dict[str, Any]) -> AsyncGenerator[bytes, None]:
return send_stream_request(
headers=self.headers,
base_url=self.base_url,
path=path,
payload=payload,
)
async def _embeddings(View on GitHub (pinned to 6a27f2decc)
Solutions
- Use one of the exact route types: 'llm/v1/chat/completions', 'llm/v1/completions', or 'llm/v1/embeddings'.
- Fix typos in the route_type string (e.g. 'llm/v1/chat' -> 'llm/v1/chat/completions').
- If you need a new route type, extend the provider instead of passing an ad-hoc string.
Example fix
// before
provider.get_endpoint_url("llm/v1/chat")
// after
provider.get_endpoint_url("llm/v1/chat/completions") Defensive patterns
Strategy: validation
Validate before calling
VALID_ROUTES = {"llm/v1/chat/completions", "llm/v1/completions", "llm/v1/embeddings"}
if route_type not in VALID_ROUTES:
raise ValueError(f"Unsupported route type: {route_type}") Type guard
def is_supported_route(route_type: str) -> bool:
return route_type in {"llm/v1/chat/completions", "llm/v1/completions", "llm/v1/embeddings"} Try / catch
try:
url = provider.get_endpoint_url(route_type)
except ValueError as e:
if "Invalid route type" in str(e):
route_type = ROUTE_ALIASES.get(route_type, "llm/v1/chat/completions")
url = provider.get_endpoint_url(route_type)
else:
raise Prevention
- Centralize route-type constants instead of inline strings
- Spell route types exactly as documented
- Add a lookup table mapping shorthand names to canonical route types
When it happens
Trigger: Calling provider.get_endpoint_url("llm/v1/embed") or with a typo like "llm/v1/chat" directly; custom code invoking the provider outside the gateway's route dispatch.
Common situations: Hand-written tooling around providers; typos in route-type constants; new route types used with a provider that hasn't implemented them.
Related errors
- The provider '{value}' is not supported.
- A provider must be provided for each gateway route.
- A config must be supplied when setting a provider. The provi
- At least one location must be specified for searching traces
- The `requestPreview` parameter must be a string.
AI-assisted analysis of mlflow/mlflow@6a27f2decc (2026-08-29).
Data as JSON: /api/errors/0e4585c22b302c57.
Report an issue: GitHub.