import { type LLMSchemaInterface } from '../utilities/schema'; import { type LLMModelCapabilities } from '../LLMService.typedefs'; import { type LLMPromptKind } from '../client/promptSnapshot.typedefs'; /** * A capability the resolved model must support for a prompt. Mirrors the boolean * flags on `LLMModelCapabilities`, so the gate can check each requirement * against the model map without a separate mapping. */ export type LLMCapabilityRequirement = keyof Pick; /** * The code-owned contract for one prompt. `schema` drives structured output and * the `generate` return type; `toolSchemas` carry tool name+parameter shapes for * typing/capability validation (executable tools are always passed per call); * `requires` lists capabilities the resolved model must satisfy; `kind` * distinguishes config-only audio prompts; `variables` is the code-owned list * of required input names for this prompt. The client derives each call site's * `variables` type from this list, independently of the prompt body stored in * Langfuse. */ export interface LLMPromptBinding { schema?: Schema; toolSchemas?: Record; requires?: LLMCapabilityRequirement[]; kind?: LLMPromptKind | 'transcription' | 'speech'; variables?: readonly string[]; } export type LLMPromptRegistry = Record; /** * Binds each `LLMPrompt` member (the generated enum) to its code contract. The * identity return preserves the literal binding types so `createLLMClient` can * infer per-prompt variables and return types from `typeof registry` — bind the * registry once at the composition root, never via module augmentation. */ export declare function defineLLMPrompts(registry: Registry): Registry;