API Models
Data models and schemas used across the API. All models use Pydantic unless noted as @dataclass.
Provider Models
Defined in providers/base.py.
Message
| Field | Type | Required | Description |
|---|
role | MessageRole | yes | "system", "user", "assistant", "tool" |
content | string | yes | Message text |
name | string | no | Tool name (for tool messages) |
tool_call_id | string | no | ID linking to a tool call |
tool_calls | list[dict] | no | Tool calls requested by assistant |
| Field | Type | Description |
|---|
id | string | Unique tool call ID |
name | string | Tool function name |
arguments | dict | Parsed arguments |
StreamChunk
| Field | Type | Description |
|---|
content | string | Token text (may be empty) |
finish_reason | string | null, "stop", "tool_calls" |
tool_calls | list[ToolCall] | Tool calls collected during stream |
CompletionResult
| Field | Type | Description |
|---|
content | string | Generated text |
finish_reason | string | "stop", "length", "tool_calls" |
tool_calls | list[ToolCall] | Tool calls (if function calling) |
usage | dict | {"prompt_tokens": int, "completion_tokens": int, "total_tokens": int} |
model | string | Model ID used |
raw_response | dict | Full provider response (debug) |
ModelCapabilities (@dataclass)
| Field | Type | Default | Description |
|---|
supports_tools | bool | false | Function calling support |
supports_vision | bool | false | Image input support |
supports_streaming | bool | true | Streaming support |
supports_json_mode | bool | false | JSON mode support |
context_window | int | 4096 | Max input tokens |
max_output_tokens | int | null | Max output tokens |
cost_per_1k_input | float | null | Input cost in USD |
cost_per_1k_output | float | null | Output cost in USD |
Agent Models
Defined in agent/core.py.
AgentResult
| Field | Type | Description |
|---|
task_id | string | Short UUID for the task |
status | AgentStatus | "idle", "planning", "reasoning", "executing", "complete", "failed", "cancelled" |
answer | string | Final response text |
thinking | string | Extracted <think> tag content |
has_thinking | bool | Whether thinking was extracted |
plan_steps | int | Number of plan steps executed |
reasoning_steps | int | Number of reasoning steps |
tools_used | list[string] | Names of tools invoked |
models_used | list[string] | Model IDs used |
total_tokens | int | Total token count |
total_time_ms | float | Elapsed time in milliseconds |
trace | list[dict] | Debug trace (optional) |
AgentConfig (@dataclass)
| Field | Type | Default | Description |
|---|
name | string | "agentx" | Agent name |
user_id | string | null | User identifier |
default_model | string | "llama3.2" | Default model |
reasoning_model | string | null | Override for reasoning |
drafting_model | string | null | Override for drafting |
max_iterations | int | 20 | Max task iterations |
timeout_seconds | float | 300.0 | Task timeout |
enable_planning | bool | true | Enable task planning |
enable_reasoning | bool | true | Enable reasoning strategies |
enable_drafting | bool | false | Enable drafting |
enable_memory | bool | true | Enable memory system |
enable_tools | bool | true | Enable MCP tools |
default_reasoning_strategy | string | "auto" | Strategy: "auto", "cot", "tot", "react", "reflection" |
allowed_tools | list[string] | null | Whitelist tools (null = all) |
blocked_tools | list[string] | null | Blacklist tools |
max_tool_rounds | int | 10 | Max tool round-trips |
Memory Models
Defined in kit/agent_memory/models.py.
Turn
| Field | Type | Default | Description |
|---|
id | string | auto UUID | Turn identifier |
conversation_id | string | required | Parent conversation |
index | int | required | Position in conversation |
timestamp | datetime | now (UTC) | When the turn occurred |
role | string | required | "user", "assistant", "system", "tool" |
content | string | required | Message content |
embedding | list[float] | null | Vector embedding |
token_count | int | null | Token count |
metadata | dict | {} | Extra data (model, latency, etc.) |
channel | string | "_global" | Memory channel |
Entity
| Field | Type | Default | Description |
|---|
id | string | auto UUID | Entity identifier |
name | string | required | Entity name |
type | string | required | "Person", "Organization", "Concept", etc. |
aliases | list[string] | [] | Alternative names |
description | string | null | Entity description |
embedding | list[float] | null | Vector embedding |
salience | float | 0.5 | Importance score (0–1) |
properties | dict | {} | Arbitrary key-value properties |
first_seen | datetime | now | When first encountered |
last_accessed | datetime | now | Last retrieval time |
access_count | int | 0 | Retrieval count |
channel | string | "_global" | Memory channel |
Fact
| Field | Type | Default | Description |
|---|
id | string | auto UUID | Fact identifier |
claim | string | required | The factual claim |
claim_hash | string | auto | SHA256 hash for duplicate detection |
confidence | float | 0.8 | Confidence score (0–1) |
source | string | required | "extraction", "user_stated", "inferred" |
source_turn_id | string | null | Turn this fact was extracted from |
entity_ids | list[string] | [] | Linked entities |
embedding | list[float] | null | Vector embedding |
created_at | datetime | now | Creation time |
channel | string | "_global" | Memory channel |
last_accessed | datetime | now | Last retrieval time |
access_count | int | 0 | Retrieval count |
salience | float | 0.5 | Importance score |
temporal_context | string | null | "current", "past", "future" |
superseded_at | datetime | null | When superseded by correction |
superseded_by_id | string | null | ID of superseding fact |
supersedes_id | string | null | ID of fact this supersedes |
flagged_for_review | bool | false | Flagged for contradiction review |
Goal
| Field | Type | Default | Description |
|---|
id | string | auto UUID | Goal identifier |
description | string | required | Goal description |
status | string | "active" | "active", "completed", "abandoned", "blocked" |
priority | int | 3 | Priority 1–5 |
parent_goal_id | string | null | Parent goal for hierarchy |
embedding | list[float] | null | Vector embedding |
created_at | datetime | now | Creation time |
deadline | datetime | null | Optional deadline |
channel | string | "_global" | Memory channel |
Strategy
| Field | Type | Default | Description |
|---|
id | string | auto UUID | Strategy identifier |
description | string | required | Strategy description |
context_pattern | string | required | Matching pattern (regex/keywords) |
tool_sequence | list[string] | [] | Ordered tool names |
embedding | list[float] | null | Vector embedding |
success_count | int | 0 | Successful uses |
failure_count | int | 0 | Failed uses |
last_used | datetime | null | Last invocation |
channel | string | "_global" | Memory channel |
MemoryBundle
Aggregated retrieval result returned by AgentMemory.remember().
| Field | Type | Description |
|---|
relevant_turns | list[dict] | Recent relevant conversation turns |
entities | list[dict] | Matching entities |
facts | list[dict] | Relevant facts |
strategies | list[dict] | Applicable strategies |
active_goals | list[dict] | Current active goals |
user_context | dict | User-level context |
Has a to_context_string() method that formats the bundle for LLM prompt injection.
Prompt Models
Defined in prompts/models.py.
PromptSection
| Field | Type | Description |
|---|
id | string | Unique section identifier |
name | string | Display name |
type | SectionType | "persona", "task", "format", "constraints", "examples", "context", "custom" |
content | string | Prompt text |
enabled | bool | Whether active in composition |
order | int | Sort order within profile |
PromptProfile
| Field | Type | Description |
|---|
id | string | Unique profile identifier |
name | string | Display name |
description | string | Usage description |
sections | list[PromptSection] | Ordered sections |
is_default | bool | Whether this is the default profile |
GlobalPrompt
| Field | Type | Description |
|---|
content | string | Global prompt text |
enabled | bool | Whether active |
PromptConfig
Combines all prompt components for a request.
| Field | Type | Description |
|---|
global_prompt | GlobalPrompt | Core persona prompt |
profile | PromptProfile | Selected profile |
mcp_tools_prompt | string | Auto-generated tools prompt |
structured_output | StructuredOutputConfig | Output constraints |
additional_context | string | Request-specific context |
system_override | string | Replaces entire system prompt |
Composition order: Global prompt → MCP tools → Profile sections → Additional context.
MCP Models
ServerConfig (@dataclass, defined in mcp/server_registry.py)
| Field | Type | Description |
|---|
name | string | Server identifier |
transport | TransportType | "stdio", "sse", "streamable_http" |
command | string | Command for stdio transport |
args | list[string] | Command arguments |
env | dict | Environment variables (resolved from $VAR syntax) |
url | string | URL for SSE/HTTP transport |
headers | dict | HTTP headers (env vars resolved) |
| Field | Type | Description |
|---|
name | string | Tool name |
description | string | Tool description |
input_schema | dict | JSON Schema for parameters |
server_name | string | Source server |
ResourceInfo (@dataclass, defined in mcp/client.py)
| Field | Type | Description |
|---|
uri | string | Resource URI |
name | string | Resource name |
description | string | Resource description |
mime_type | string | Content type |
server_name | string | Source server |
SSE Event Schemas
Events emitted by POST /api/agent/chat/stream:
| Event | Schema |
|---|
start | {"task_id": string, "model": string} |
chunk | {"content": string} |
tool_call | {"tool": string, "arguments": dict} |
tool_result | {"tool": string, "content": string} |
done | {"task_id": string, "thinking": string?, "has_thinking": bool, "total_time_ms": float, "session_id": string} |
error | {"error": string} |