Centralize output contract validation

This commit is contained in:
2026-08-11 21:21:33 +00:00
parent 8cfc71c351
commit 1cb07c7d91
11 changed files with 432 additions and 49 deletions

View File

@@ -272,6 +272,10 @@ func (r *Runner) resolvePreparation(
}
def := promptSelection.definition
promptDefinitionHash := promptSelection.hash
effectiveContract, err := resolveOutputContract(def, req.Validation)
if err != nil {
return nil, fmt.Errorf("%w: output contract: %v", ErrInvalidRequest, err)
}
selectedProfileID := strings.TrimSpace(req.ProfileID)
if selectedProfileID == "" {
@@ -295,7 +299,6 @@ func (r *Runner) resolvePreparation(
return nil, fmt.Errorf("%w: %w", ErrInvalidRequest, err)
}
effectiveContract := resolveOutputContract(def, req.Validation)
return &preparationState{
definition: def,
directSessionID: directSessionID,
@@ -639,18 +642,21 @@ func copyExtraParams(src map[string]any) map[string]any {
return cp
}
func resolveOutputContract(def *domain.PromptDefinition, override *domain.OutputContract) domain.OutputContract {
func resolveOutputContract(def *domain.PromptDefinition, override *domain.OutputContract) (domain.OutputContract, error) {
contract := def.Validation
if contract.Format == "" {
contract.Format = def.OutputFormat
}
if override != nil {
contract = *override
if contract.Format == "" {
contract.Format = domain.FormatText
}
}
if contract.Format == "" {
contract.Format = domain.FormatText
if err := domain.ValidateOutputContract(contract); err != nil {
return domain.OutputContract{}, err
}
return contract
return contract, nil
}
func hashRenderedPrompt(p domain.RenderedPrompt) string {