Coverage for node / src / stigmem_node / models / instruction.py: 95%
36 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-25 01:49 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-25 01:49 +0000
1"""Lazy instruction discovery route wire-format models."""
3from __future__ import annotations
5import re
7from pydantic import BaseModel, Field, field_validator
10class LoadTriggers(BaseModel):
11 intents: list[str] = Field(default_factory=list)
12 keywords: list[str] = Field(default_factory=list)
13 task_types: list[str] = Field(default_factory=list)
16class ManifestEntry(BaseModel):
17 name: str = Field(..., min_length=1)
18 description: str = Field(..., max_length=120)
19 required_by_task_types: list[str] = Field(default_factory=list)
20 guarantee_load: bool = False
21 force_position: str | None = None
22 load_triggers: LoadTriggers = Field(default_factory=LoadTriggers)
23 fact_uri: str | None = None
24 path: str | None = None
25 token_estimate: int | None = None
27 @field_validator("name")
28 @classmethod
29 def no_spaces_in_name(cls, v: str) -> str:
30 if re.search(r"\s", v): 30 ↛ 31line 30 didn't jump to line 31 because the condition on line 30 was never true
31 raise ValueError("name must not contain whitespace")
32 return v
35class PublishManifestRequest(BaseModel):
36 version: str = Field(..., min_length=1)
37 entries: list[ManifestEntry]
38 skip_coverage_gate: bool = False
41class RecallInstructionRequest(BaseModel):
42 intent: str = Field(..., min_length=1)
43 max_chunks: int = Field(3, ge=1, le=20)
44 token_budget: int = Field(2000, ge=1, le=100_000)
45 manifest_hint: list[str] = Field(default_factory=list)
48class AuditSubmitRequest(BaseModel):
49 audit_token: str = Field(..., min_length=1)
50 used_chunks: list[str] = Field(default_factory=list)
51 missed_chunks: list[str] = Field(default_factory=list)