37 lines
818 B
Python
37 lines
818 B
Python
"""Cloud LLM provider protocol and model metadata."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Protocol
|
|
|
|
|
|
@dataclass
|
|
class ModelInfo:
|
|
"""Metadata for a cloud LLM model."""
|
|
id: str
|
|
vision: bool = True
|
|
cost_per_input_token: float = 0.0
|
|
cost_per_output_token: float = 0.0
|
|
max_output_tokens: int = 4096
|
|
notes: str = ""
|
|
|
|
|
|
@dataclass
|
|
class ProviderResponse:
|
|
answer: str
|
|
total_tokens: int = 0
|
|
|
|
|
|
class CloudProvider(Protocol):
|
|
"""
|
|
Interface for cloud LLM providers.
|
|
|
|
Each provider handles its own auth, payload format, and response parsing.
|
|
The pipeline only calls call() and reads the response.
|
|
"""
|
|
name: str
|
|
models: dict[str, ModelInfo]
|
|
|
|
def call(self, image_b64: str, prompt: str) -> ProviderResponse: ...
|