8000 Store OpenRouter provider metadata in ModelResponse vendor details · Issue #1849 · pydantic/pydantic-ai · GitHub
[go: up one dir, main page]

Skip to content
Store OpenRouter provider metadata in ModelResponse vendor details #1849
@DanKing1903

Description

@DanKing1903

Description

Hi!
I absolutely love the work you are doing at pydantic-ai. It has very quickly become a critical part of our production codebase. We also rely heavily on Openrouter for provider and model routing, and to provide extra capacity under heavy load. One feature I would love to see is if the provider selected by Openrouter was captured in the ModelResponse. This would be extremely valuable to us for debugging and analytics purposes. The vendor_details attribute seems like a natural fit. I think implementing this would require creating an OpenRouterModel class with a modified _process_response method

Current Behavior

from os import getenv
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIModel
from pydantic_ai.providers.openrouter import OpenRouterProvider

model = OpenAIModel(
    model_name="anthropic/claude-3.7-sonnet",
    provider=OpenRouterProvider(api_key=getenv("OPENROUTER_API_KEY"))

)
agent = Agent(model)
result = await agent.run("What is the meaning of life?")
result.new_messages()[-1].vendor_details is None
>>> True

Desired Behavior

from os import getenv
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenRouterModel
from pydantic_ai.providers.openrouter import OpenRouterProvider

model = OpenRouterModel(
    model_name="anthropic/claude-3.7-sonnet",
    provider=OpenRouterProvider(api_key=getenv("OPENROUTER_API_KEY"))

)
agent = Agent(model)
result = await agent.run("What is the meaning of life?")
print(result.new_messages()[-1].vendor_details)
>>> {"provider": "Google"}

Super Basic Implementation

Would be great to see this officially supported, and I would be happy to contribute with some guidance!

# pydantic_ai.models.openrouter
from openai.types import chat
from pydantic_ai.messages import ModelResponse
from pydantic_ai.models.openai import OpenAIModel

class OpenRouterModel(OpenAIModel):
    def _process_response(self, response: chat.ChatCompletion) -> ModelResponse:
        model_response = super()._process_response(response=response)
        openrouter_provider = response.provider if hasattr(response, "provider") else None
        if openrouter_provider:
            vendor_details = getattr(model_response, "vendor_details", {})
            vendor_details["provider"] = openrouter_provider
        return model_response

References

No response

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0