The BaseAdapter class in tck/adapters/base_adapter.py defines the contract all TCK-testable implementations must satisfy. This document provides the complete reference for all methods, data models, and enums.
Data Models
All models are Pydantic BaseModel subclasses. Implementations must return instances of these exact types.
TCKMessage
| Field | Type | Required | Description |
|---|---|---|---|
|
|
Yes |
Unique message identifier |
|
|
Yes |
One of: |
|
|
Yes |
Message text content |
|
|
Yes |
Creation timestamp |
|
|
No |
Vector embedding |
|
|
Yes |
Arbitrary metadata (default: |
TCKConversation
| Field | Type | Required | Description |
|---|---|---|---|
|
|
Yes |
Unique conversation identifier |
|
|
Yes |
Session identifier |
|
|
Yes |
Messages in insertion order |
|
|
No |
Human-readable title |
|
|
Yes |
Creation timestamp |
|
|
No |
Last update timestamp |
TCKSessionInfo
| Field | Type | Required | Description |
|---|---|---|---|
|
|
Yes |
Session identifier |
|
|
Yes |
Number of messages in session |
|
|
Yes |
Session creation time |
|
|
No |
Last update time |
TCKEntity
| Field | Type | Required | Description |
|---|---|---|---|
|
|
Yes |
Unique entity identifier |
|
|
Yes |
Entity name |
|
|
Yes |
One of: |
|
|
No |
Entity subtype |
|
|
No |
Entity description |
|
|
No |
Vector embedding |
|
|
No |
Canonical form of the name |
|
|
Yes |
Creation timestamp |
TCKPreference
| Field | Type | Required | Description |
|---|---|---|---|
|
|
Yes |
Unique preference identifier |
|
|
Yes |
Preference category |
|
|
Yes |
Preference statement |
|
|
No |
Contextual information |
|
|
No |
Vector embedding |
TCKFact
| Field | Type | Required | Description |
|---|---|---|---|
|
|
Yes |
Unique fact identifier |
|
|
Yes |
Subject of the fact |
|
|
Yes |
Relationship or action |
|
|
Yes |
Object of the fact |
|
|
No |
Vector embedding |
TCKRelationship
| Field | Type | Required | Description |
|---|---|---|---|
|
|
Yes |
Unique relationship identifier |
|
|
Yes |
Source entity ID |
|
|
Yes |
Target entity ID |
|
|
Yes |
Relationship type label |
|
|
Yes |
Relationship properties (default: |
TCKReasoningTrace
| Field | Type | Required | Description |
|---|---|---|---|
|
|
Yes |
Unique trace identifier |
|
|
Yes |
Associated session |
|
|
Yes |
Task description |
|
|
Yes |
Steps in the trace |
|
|
No |
Final outcome description |
|
|
No |
Whether the task succeeded |
|
|
Yes |
Trace start time |
|
|
No |
Trace completion time |
TCKReasoningStep
| Field | Type | Required | Description |
|---|---|---|---|
|
|
Yes |
Unique step identifier |
|
|
Yes |
Parent trace ID |
|
|
Yes |
Sequential step number (monotonically increasing) |
|
|
No |
Agent’s reasoning |
|
|
No |
Action taken |
|
|
No |
Observation from action |
|
|
Yes |
Tool calls within this step |
TCKToolCall
| Field | Type | Required | Description |
|---|---|---|---|
|
|
Yes |
Unique call identifier |
|
|
Yes |
Name of the tool |
|
|
Yes |
Tool arguments |
|
|
No |
Tool result |
|
|
Yes |
Status (default: |
|
|
No |
Duration in milliseconds |
|
|
No |
Error message |
TCKToolStats
| Field | Type | Required | Description |
|---|---|---|---|
|
|
Yes |
Tool name |
|
|
Yes |
Total invocations |
|
|
Yes |
Successful invocations |
|
|
Yes |
Failed invocations |
|
|
Yes |
Success ratio (0.0 to 1.0) |
|
|
No |
Average duration |
Enums
MessageRole
class MessageRole(str, Enum):
USER = "user"
ASSISTANT = "assistant"
SYSTEM = "system"
ToolCallStatus
class ToolCallStatus(str, Enum):
PENDING = "pending"
SUCCESS = "success"
FAILURE = "failure"
ERROR = "error"
TIMEOUT = "timeout"
CANCELLED = "cancelled"
Methods by Tier
Bronze: Lifecycle
async def setup(self) -> None
async def teardown(self) -> None
async def clear_all_data(self) -> None
Bronze: Short-Term Memory
async def add_message(self, session_id: str, role: str, content: str, *, metadata: dict[str, Any] | None = None) -> TCKMessage
async def get_conversation(self, session_id: str, *, limit: int | None = None) -> TCKConversation
async def search_messages(self, query: str, *, session_id: str | None = None, limit: int = 10, threshold: float = 0.7) -> list[TCKMessage]
async def list_sessions(self, *, limit: int = 100) -> list[TCKSessionInfo]
async def delete_message(self, message_id: UUID) -> bool
async def clear_session(self, session_id: str) -> None
Silver: Long-Term Memory
async def add_entity(self, name: str, entity_type: str, *, description: str | None = None) -> TCKEntity
async def add_preference(self, category: str, preference: str, *, context: str | None = None) -> TCKPreference
async def add_fact(self, subject: str, predicate: str, obj: str) -> TCKFact
async def search_entities(self, query: str, *, limit: int = 10) -> list[TCKEntity]
async def search_preferences(self, query: str, *, category: str | None = None, limit: int = 10) -> list[TCKPreference]
async def get_entity_by_name(self, name: str) -> TCKEntity | None
async def get_related_entities(self, entity_id: UUID, *, relationship_type: str | None = None, depth: int = 1) -> list[TCKEntity]
Silver: Reasoning Memory
async def start_trace(self, session_id: str, task: str) -> TCKReasoningTrace
async def add_step(self, trace_id: UUID, *, thought: str | None = None, action: str | None = None, observation: str | None = None) -> TCKReasoningStep
async def record_tool_call(self, step_id: UUID, tool_name: str, arguments: dict[str, Any], *, result: Any = None, status: ToolCallStatus = ToolCallStatus.SUCCESS, duration_ms: int | None = None, error: str | None = None) -> TCKToolCall
async def complete_trace(self, trace_id: UUID, *, outcome: str | None = None, success: bool | None = None) -> TCKReasoningTrace
async def get_trace_with_steps(self, trace_id: UUID) -> TCKReasoningTrace | None
async def list_traces(self, *, session_id: str | None = None, limit: int = 100) -> list[TCKReasoningTrace]
async def get_tool_stats(self, tool_name: str | None = None) -> list[TCKToolStats]
Gold: Cross-Memory (optional defaults)
async def add_relationship(self, source_id: UUID, target_id: UUID, relationship_type: str, *, properties: dict[str, Any] | None = None) -> TCKRelationship
async def merge_duplicate_entities(self, source_id: UUID, target_id: UUID, *, canonical_name: str | None = None) -> TCKEntity
async def get_similar_traces(self, task: str, *, limit: int = 5, success_only: bool = True) -> list[TCKReasoningTrace]
Gold methods have default implementations that raise NotImplementedError. Implementations targeting Gold must override them.