Skip to content

feat(llm/openai): implement list_models_remote for OpenAI and CompatibleProvider #995

@bug-ops

Description

@bug-ops

Parent Epic

#991

Depends On

#992

Summary

Override list_models_remote in OpenAiProvider (and by delegation in CompatibleProvider)
to query OpenAI-compatible /v1/models endpoints. This covers OpenAI, Gemini (OpenAI-compat
endpoint), Grok (xAI), Groq, vLLM, and any other CompatibleProvider instance.

Endpoint

GET {base_url}/v1/models
Authorization: Bearer {api_key}

Response Shape (OpenAI standard)

{
  "data": [
    {
      "id": "gpt-4o",
      "object": "model",
      "created": 1715367049,
      "owned_by": "openai"
    }
  ],
  "object": "list"
}

Provider-Specific Notes

Provider base_url Notes
OpenAI https://api.openai.com Standard; filter to gpt-*, o*, text-embedding-*
Gemini https://generativelanguage.googleapis.com/v1beta/openai Returns gemini-* models
Grok (xAI) https://api.x.ai Returns grok-* models
Groq https://api.groq.com/openai Returns all Groq-hosted models
vLLM / local configurable Returns loaded models only

Implementation Notes

  • OpenAiProvider::list_models_remote hits {self.base_url}/v1/models.
  • Cache slug = sanitized base_url hostname (e.g. "openai_api_openai_com").
  • CompatibleProvider::list_models_remote delegates to self.inner.list_models_remote().
  • Convert created (unix timestamp) to chrono::DateTime<Utc> for ModelInfo::created_at.
  • Do not filter by model type for CompatibleProvider — downstream config can filter.

Acceptance Criteria

  • OpenAiProvider::list_models_remote returns full model list from /v1/models.
  • CompatibleProvider delegates correctly.
  • Cache slug is derived from base_url to avoid collisions between providers.
  • Network failure returns LlmError::Network, does not overwrite valid cache.
  • Unit tests for slug derivation and response deserialization.

Metadata

Metadata

Assignees

No one assigned

    Labels

    llmLLM provider related

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions