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

  1. Use one of the exact route types: 'llm/v1/chat/completions', 'llm/v1/completions', or 'llm/v1/embeddings'.
  2. Fix typos in the route_type string (e.g. 'llm/v1/chat' -> 'llm/v1/chat/completions').
  3. 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

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


AI-assisted analysis of mlflow/mlflow@6a27f2decc (2026-08-29). Data as JSON: /api/errors/0e4585c22b302c57. Report an issue: GitHub.