Initial commit
This commit is contained in:
67
src/models/context.py
Normal file
67
src/models/context.py
Normal file
@@ -0,0 +1,67 @@
|
||||
"""Context package and memory document models."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime, timezone
|
||||
from enum import StrEnum
|
||||
from typing import Any
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class ContextSectionType(StrEnum):
|
||||
IMMUTABLE_RULES = "immutable_rules"
|
||||
PROJECT_PROFILE = "project_profile"
|
||||
KNOWLEDGE_BASE = "knowledge_base"
|
||||
TASK_STATE = "task_state"
|
||||
ARTIFACT_MEMORY = "artifact_memory"
|
||||
WORKING_CONTEXT = "working_context"
|
||||
|
||||
|
||||
class ContextSection(BaseModel):
|
||||
"""A discrete section of the assembled context."""
|
||||
|
||||
section_type: ContextSectionType
|
||||
content: str
|
||||
priority: int = 0 # Higher = more important, kept during compaction
|
||||
token_estimate: int = 0
|
||||
|
||||
|
||||
class ContextPackage(BaseModel):
|
||||
"""The fully assembled context sent to the model. Never includes raw tool output."""
|
||||
|
||||
sections: list[ContextSection] = Field(default_factory=list)
|
||||
system_prompt: str = ""
|
||||
messages: list[dict[str, Any]] = Field(default_factory=list)
|
||||
total_token_estimate: int = 0
|
||||
|
||||
def to_messages(self) -> list[dict[str, Any]]:
|
||||
"""Produce the final messages list for the model adapter."""
|
||||
result: list[dict[str, Any]] = []
|
||||
if self.system_prompt:
|
||||
result.append({"role": "system", "content": self.system_prompt})
|
||||
result.extend(self.messages)
|
||||
return result
|
||||
|
||||
|
||||
class MemoryType(StrEnum):
|
||||
RULE = "rule"
|
||||
DOCUMENT = "document"
|
||||
ARTIFACT = "artifact"
|
||||
EMBEDDING = "embedding"
|
||||
|
||||
|
||||
class MemoryDocument(BaseModel):
|
||||
"""A single piece of persistent memory."""
|
||||
|
||||
memory_id: str
|
||||
memory_type: MemoryType
|
||||
namespace: str = "global"
|
||||
title: str
|
||||
content: str
|
||||
summary: str = ""
|
||||
tags: list[str] = Field(default_factory=list)
|
||||
embedding: list[float] | None = None
|
||||
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
|
||||
updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
|
||||
metadata: dict[str, Any] = Field(default_factory=dict)
|
||||
Reference in New Issue
Block a user