mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-06-21 03:41:55 +03:00
Some checks failed
CI / AMD64 Build (push) Has been cancelled
CI / ARM Build (push) Has been cancelled
CI / Jetson Jetpack 6 (push) Has been cancelled
CI / AMD64 Extra Build (push) Has been cancelled
CI / ARM Extra Build (push) Has been cancelled
CI / Synaptics Build (push) Has been cancelled
CI / Assemble and push default build (push) Has been cancelled
* Implement tool call history keeping * Refactor to match single message implementation * Simplify data representation * Cleanup chat page rendering * Include system message to not break cache * Formatting * Update tests and update .gitignore
62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
"""Chat API request models."""
|
|
|
|
from typing import Any, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class ChatMessage(BaseModel):
|
|
"""A single message in a chat conversation."""
|
|
|
|
role: str = Field(
|
|
description="Message role: 'user', 'assistant', 'system', or 'tool'"
|
|
)
|
|
content: Optional[Any] = Field(
|
|
default=None,
|
|
description=(
|
|
"Message content. Usually a string, but may be a multimodal content "
|
|
"list (e.g. text + image_url) or null for assistant turns that only "
|
|
"request tool calls."
|
|
),
|
|
)
|
|
tool_call_id: Optional[str] = Field(
|
|
default=None, description="For tool messages, the ID of the tool call"
|
|
)
|
|
name: Optional[str] = Field(
|
|
default=None, description="For tool messages, the tool name"
|
|
)
|
|
tool_calls: Optional[list[dict[str, Any]]] = Field(
|
|
default=None,
|
|
description=(
|
|
"For assistant messages replayed from prior turns, the OpenAI-format "
|
|
"tool calls the model previously requested. Replaying these verbatim "
|
|
"keeps the conversation prefix byte-for-byte identical so the model "
|
|
"server's prompt cache hits on follow-up turns."
|
|
),
|
|
)
|
|
|
|
|
|
class ChatCompletionRequest(BaseModel):
|
|
"""Request for chat completion with tool calling."""
|
|
|
|
messages: list[ChatMessage] = Field(
|
|
description="List of messages in the conversation"
|
|
)
|
|
max_tool_iterations: int = Field(
|
|
default=5,
|
|
ge=1,
|
|
le=10,
|
|
description="Maximum number of tool call iterations (default: 5)",
|
|
)
|
|
stream: bool = Field(
|
|
default=False,
|
|
description="If true, stream the final assistant response in the body as newline-delimited JSON.",
|
|
)
|
|
enable_thinking: Optional[bool] = Field(
|
|
default=None,
|
|
description=(
|
|
"Per-request thinking toggle. None means use the provider default. "
|
|
"Ignored by providers that do not expose a per-request thinking switch."
|
|
),
|
|
)
|