frozen pydantic models
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
from collections.abc import Mapping
|
||||
|
||||
from pydantic import Field
|
||||
from pydantic import field_validator
|
||||
|
||||
from .common import StrictFrozenModel
|
||||
from .common import frozen_mapping
|
||||
from .prompt import PromptArgumentEntry
|
||||
|
||||
|
||||
class ReferenceRecord(StrictFrozenModel):
|
||||
ref_id: str
|
||||
uri: str
|
||||
relpath: str
|
||||
mime_type: str
|
||||
title: str | None
|
||||
content: str
|
||||
|
||||
|
||||
class SkillRecord(StrictFrozenModel):
|
||||
skill_id: str
|
||||
name: str
|
||||
description: str
|
||||
version: str
|
||||
tags: tuple[str, ...]
|
||||
capabilities: tuple[str, ...]
|
||||
depends_on: tuple[str, ...]
|
||||
document_uri: str
|
||||
document_relpath: str
|
||||
document_content: str
|
||||
references: Mapping[str, ReferenceRecord] = Field(default_factory=frozen_mapping)
|
||||
|
||||
@field_validator("references", mode="before")
|
||||
@classmethod
|
||||
def freeze_references(cls, value: Mapping[str, ReferenceRecord] | None) -> Mapping[str, ReferenceRecord]:
|
||||
return frozen_mapping(value)
|
||||
|
||||
|
||||
class SkillSummaryRecord(StrictFrozenModel):
|
||||
skill_id: str
|
||||
name: str
|
||||
description: str
|
||||
tags: tuple[str, ...]
|
||||
capabilities: tuple[str, ...]
|
||||
document_uri: str
|
||||
version: str
|
||||
|
||||
|
||||
class PromptRecord(StrictFrozenModel):
|
||||
prompt_id: str
|
||||
name: str
|
||||
description: str
|
||||
version: str
|
||||
tags: tuple[str, ...]
|
||||
capabilities: tuple[str, ...]
|
||||
arguments: Mapping[str, PromptArgumentEntry] = Field(default_factory=frozen_mapping)
|
||||
document_uri: str
|
||||
document_relpath: str
|
||||
document_content: str
|
||||
|
||||
@field_validator("arguments", mode="before")
|
||||
@classmethod
|
||||
def freeze_arguments(cls, value: Mapping[str, PromptArgumentEntry] | None) -> Mapping[str, PromptArgumentEntry]:
|
||||
return frozen_mapping(value)
|
||||
|
||||
|
||||
class PromptSummaryRecord(StrictFrozenModel):
|
||||
prompt_id: str
|
||||
name: str
|
||||
description: str
|
||||
tags: tuple[str, ...]
|
||||
capabilities: tuple[str, ...]
|
||||
document_uri: str
|
||||
version: str
|
||||
|
||||
|
||||
class DocsRegistry(StrictFrozenModel):
|
||||
skills_by_id: Mapping[str, SkillRecord] = Field(default_factory=frozen_mapping)
|
||||
skills_in_load_order: tuple[str, ...]
|
||||
skills_summary_in_load_order: tuple[SkillSummaryRecord, ...]
|
||||
docs_markdown_by_path: Mapping[str, str] = Field(default_factory=frozen_mapping)
|
||||
docs_markdown_path_index: tuple[str, ...]
|
||||
tag_to_skill_ids: Mapping[str, tuple[str, ...]] = Field(default_factory=frozen_mapping)
|
||||
capability_to_skill_ids: Mapping[str, tuple[str, ...]] = Field(default_factory=frozen_mapping)
|
||||
prompts_by_id: Mapping[str, PromptRecord] = Field(default_factory=frozen_mapping)
|
||||
prompts_in_load_order: tuple[str, ...] = ()
|
||||
prompts_summary_in_load_order: tuple[PromptSummaryRecord, ...] = ()
|
||||
tag_to_prompt_ids: Mapping[str, tuple[str, ...]] = Field(default_factory=frozen_mapping)
|
||||
|
||||
@field_validator(
|
||||
"skills_by_id",
|
||||
"docs_markdown_by_path",
|
||||
"tag_to_skill_ids",
|
||||
"capability_to_skill_ids",
|
||||
"prompts_by_id",
|
||||
"tag_to_prompt_ids",
|
||||
mode="before",
|
||||
)
|
||||
@classmethod
|
||||
def freeze_mappings(cls, value: Mapping[str, object] | None) -> Mapping[str, object]:
|
||||
return frozen_mapping(value)
|
||||
Reference in New Issue
Block a user