Coverage for src / lexigram / contracts / ai / models.py: 0%
20 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-15 18:57 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-15 18:57 +0800
1"""AI model request and response types."""
3from __future__ import annotations
5from dataclasses import dataclass, field
6from typing import TYPE_CHECKING, Any
8if TYPE_CHECKING:
9 from lexigram.contracts.ai.types import ModelCapability
12@dataclass(frozen=True)
13class ModelRequest:
14 """Request to execute an LLM model.
16 Attributes:
17 prompt: The input prompt or messages
18 model_id: Optional specific model to use (overrides capability-based selection)
19 temperature: Sampling temperature (0.0 to 2.0, lower = deterministic)
20 max_tokens: Maximum tokens in the response
21 top_p: Nucleus sampling parameter
22 top_k: Top-k sampling parameter
23 required_capabilities: Set of capabilities the model must support
24 extra_params: Additional provider-specific parameters
25 """
27 prompt: str
28 model_id: str | None = None
29 temperature: float | None = None
30 max_tokens: int | None = None
31 top_p: float | None = None
32 top_k: int | None = None
33 required_capabilities: set[ModelCapability] | None = None
34 extra_params: dict[str, Any] = field(default_factory=dict)
37@dataclass(frozen=True)
38class ModelResponse:
39 """Response from an LLM model.
41 Attributes:
42 content: The generated content (text)
43 tokens_used: Total tokens consumed (input + output)
44 stop_reason: Why generation stopped (completion, length, stop_sequence, etc.)
45 extra_metadata: Additional response metadata
46 """
48 content: str
49 tokens_used: int = 0
50 stop_reason: str | None = None
51 extra_metadata: dict[str, Any] = field(default_factory=dict)
54__all__ = ["ModelRequest", "ModelResponse"]