| from enum import Enum |
| from typing import Any |
|
|
| from pydantic import BaseModel |
|
|
|
|
| class LLMProvider(str, Enum): |
| """LLM provider types.""" |
|
|
| ANTHROPIC = "anthropic" |
| OPENAI = "openai" |
|
|
|
|
| class FunctionCall(BaseModel): |
| """Function call details.""" |
|
|
| name: str |
| arguments: dict[str, Any] |
|
|
|
|
| class ToolCall(BaseModel): |
| """Tool call structure.""" |
|
|
| id: str |
| type: str |
| function: FunctionCall |
|
|
|
|
| class Message(BaseModel): |
| """Chat message.""" |
|
|
| role: str |
| content: str | list[dict[str, Any]] |
| thinking: str | None = None |
| tool_calls: list[ToolCall] | None = None |
| tool_call_id: str | None = None |
| name: str | None = None |
|
|
|
|
| class TokenUsage(BaseModel): |
| """Token usage statistics from LLM API response.""" |
|
|
| prompt_tokens: int = 0 |
| completion_tokens: int = 0 |
| total_tokens: int = 0 |
|
|
|
|
| class LLMResponse(BaseModel): |
| """LLM response.""" |
|
|
| content: str |
| thinking: str | None = None |
| tool_calls: list[ToolCall] | None = None |
| finish_reason: str |
| usage: TokenUsage | None = None |
|
|