Skip to content

prompt_registry

Prompt profile registry for GenAI processes.

PromptTemplate

Bases: BaseModel

Immutable prompt template with versioned metadata.

profile instance-attribute

profile: str

process_id instance-attribute

process_id: str

version instance-attribute

version: str

text instance-attribute

text: str | dict[str, str]

digest instance-attribute

digest: str

metadata class-attribute instance-attribute

metadata: dict[str, Any] = Field(default_factory=dict)

model_config class-attribute instance-attribute

model_config = {'frozen': True}

PromptProfileRegistry

Registry of prompt bundles by profile and version.

register_bundle classmethod

register_bundle(
    profile: str,
    version: str,
    templates: dict[str, str | dict[str, str]],
    *,
    metadata: dict[str, Any] | None = None,
    set_default: bool = False
) -> None

Register a prompt bundle for a profile/version pair.

Source code in cltk/genai/prompt_registry.py
@classmethod
def register_bundle(
    cls,
    profile: str,
    version: str,
    templates: dict[str, str | dict[str, str]],
    *,
    metadata: dict[str, Any] | None = None,
    set_default: bool = False,
) -> None:
    """Register a prompt bundle for a profile/version pair."""
    for process_id, text in templates.items():
        canonical = _canonicalize_text(text)
        digest = _sha256_hex(canonical)
        tpl = PromptTemplate(
            profile=profile,
            process_id=process_id,
            version=version,
            text=text,
            digest=digest,
            metadata=metadata or {},
        )
        cls._templates.setdefault(profile, {}).setdefault(version, {})[
            process_id
        ] = tpl
    if set_default or profile not in cls._defaults:
        cls._defaults[profile] = version

get_prompt classmethod

get_prompt(
    profile: str,
    process_id: str,
    version: str | None = None,
) -> PromptTemplate

Return the prompt template for a profile/process/version.

Source code in cltk/genai/prompt_registry.py
@classmethod
def get_prompt(
    cls, profile: str, process_id: str, version: str | None = None
) -> PromptTemplate:
    """Return the prompt template for a profile/process/version."""
    if profile not in cls._templates:
        available = ", ".join(sorted(cls._templates))
        raise KeyError(
            f"Unknown prompt profile '{profile}'. Available: {available}"
        )
    ver = version or cls._defaults.get(profile)
    if not ver:
        raise KeyError(f"No default version for profile '{profile}'.")
    if ver not in cls._templates[profile]:
        available = ", ".join(sorted(cls._templates[profile]))
        raise KeyError(
            f"Unknown version '{ver}' for profile '{profile}'. Available: {available}"
        )
    template = cls._templates[profile][ver].get(process_id)
    if not template:
        available = ", ".join(sorted(cls._templates[profile][ver]))
        raise KeyError(
            f"No template for process_id '{process_id}' in profile '{profile}' version '{ver}'. Available: {available}"
        )
    return template

list_profiles classmethod

list_profiles() -> list[str]

Return available prompt profile names.

Source code in cltk/genai/prompt_registry.py
@classmethod
def list_profiles(cls) -> list[str]:
    """Return available prompt profile names."""
    return sorted(cls._templates)

list_versions classmethod

list_versions(profile: str) -> list[str]

Return available versions for a profile.

Source code in cltk/genai/prompt_registry.py
@classmethod
def list_versions(cls, profile: str) -> list[str]:
    """Return available versions for a profile."""
    return sorted(cls._templates.get(profile, {}))

build_prompt_info

build_prompt_info(
    template: PromptTemplate,
    *,
    variant: str | None = None,
    **kwargs: Any
) -> PromptInfo

Render a PromptTemplate into a PromptInfo payload.

Source code in cltk/genai/prompt_registry.py
def build_prompt_info(
    template: PromptTemplate, *, variant: str | None = None, **kwargs: Any
) -> PromptInfo:
    """Render a PromptTemplate into a PromptInfo payload."""
    text = template.text
    if isinstance(text, dict):
        if not variant:
            raise ValueError(
                f"Template for {template.process_id} requires variant selection."
            )
        if variant not in text:
            available = ", ".join(sorted(text))
            raise KeyError(
                f"Unknown variant '{variant}' for {template.process_id}. Available: {available}"
            )
        text = text[variant]
    rendered = str(text).format(**kwargs)
    kind = f"{template.process_id}:{variant}" if variant else template.process_id
    return PromptInfo(
        kind=kind,
        version=template.version,
        text=rendered,
        digest=template.digest,
    )