package domain import ( "time" ) // ArtifactRefType defines how an artifact is referenced. type ArtifactRefType string const ( ArtifactRefInline ArtifactRefType = "inline" ArtifactRefFile ArtifactRefType = "file" ArtifactRefS3 ArtifactRefType = "s3" ) // OutputFormat defines the desired format of the generated artifact. type OutputFormat string const ( FormatText OutputFormat = "text" FormatMarkdown OutputFormat = "markdown" FormatJSON OutputFormat = "json" ) // ValidationMode defines how the output should be validated. type ValidationMode string const ( ValidationNone ValidationMode = "none" ValidationBasic ValidationMode = "basic" ValidationJSON ValidationMode = "json" ValidationJSONSchema ValidationMode = "json_schema" ) // ValidationStatus defines the result of a validation check. type ValidationStatus string const ( ValidationPassed ValidationStatus = "passed" ValidationFailed ValidationStatus = "failed" ValidationSkipped ValidationStatus = "skipped" ) // RunRequest represents a request to generate a single artifact. type RunRequest struct { PromptID string PromptVersion string ProfileID string Inputs map[string]ArtifactRef Vars map[string]string Execution *ExecutionTarget Validation *OutputContract Metadata map[string]string } // RunResult represents the complete result of a prompt execution run. type RunResult struct { RunID string Artifact Artifact RawOutput string Validation ValidationResult PromptID string PromptVersion string PromptHash string RenderedPromptHash string SelectedProfileID string ModelName string Endpoint string EffectiveModelParams ExecutionTarget InputHashes map[string]string Usage TokenUsage StartTime time.Time EndTime time.Time Duration time.Duration Error error } // ArtifactRef represents a reference to an input artifact. type ArtifactRef struct { Type ArtifactRefType URI string Body string // Used for inline } // Artifact represents the actual loaded content of a reference. type Artifact struct { Name string ContentType string Body []byte URI string Size int64 Hash string } // PromptDefinition represents a configured prompt execution definition. type PromptDefinition struct { ID string `yaml:"id"` Version string `yaml:"version"` DefaultProfile string `yaml:"default_profile"` Description string `yaml:"description"` Inputs []PromptInput `yaml:"inputs"` Templates []PromptMessageTemplate `yaml:"templates"` OutputFormat OutputFormat `yaml:"output_format"` Validation OutputContract `yaml:"validation"` } // PromptInput describes one named input expected by a prompt definition. type PromptInput struct { Name string `yaml:"name"` Required bool `yaml:"required"` ContentType string `yaml:"content_type"` Description string `yaml:"description"` } // PromptMessageTemplate defines a template for a chat message. type PromptMessageTemplate struct { Role string `yaml:"role"` Content string `yaml:"content"` ContentFile string `yaml:"content_file"` } // ExecutionProfile describes how and where to execute a model. type ExecutionProfile struct { ID string `yaml:"id"` Endpoint string `yaml:"endpoint"` Model string `yaml:"model"` Temperature float64 `yaml:"temperature"` MaxTokens int `yaml:"max_tokens"` TopP float64 `yaml:"top_p"` TimeoutSeconds int `yaml:"timeout_seconds"` ReasoningEffort string `yaml:"reasoning_effort"` APIKeyEnv string `yaml:"api_key_env"` ExtraParams map[string]string `yaml:"extra_params"` } // ExecutionTarget represents effective model runtime settings for a run. type ExecutionTarget struct { Endpoint string `yaml:"endpoint" json:"endpoint"` Model string `yaml:"model" json:"model"` Temperature float64 `yaml:"temperature" json:"temperature"` MaxTokens int `yaml:"max_tokens" json:"max_tokens"` TopP float64 `yaml:"top_p" json:"top_p"` TimeoutSeconds int `yaml:"timeout_seconds" json:"timeout_seconds"` ReasoningEffort string `yaml:"reasoning_effort" json:"reasoning_effort"` APIKeyEnv string `yaml:"api_key_env" json:"api_key_env"` ExtraParams map[string]string `yaml:"extra_params" json:"extra_params"` } // OutputContract defines the requirements for the output artifact. type OutputContract struct { Format OutputFormat `yaml:"format"` ValidationMode ValidationMode `yaml:"validation_mode"` SchemaPath string `yaml:"schema_path"` RepairAttempts int `yaml:"repair_attempts"` } // RenderedPrompt represents the prompt after template application. type RenderedPrompt struct { Messages []RenderedMessage } // RenderedMessage is a single message in a rendered prompt. type RenderedMessage struct { Role string Content string } // GenerateRequest is the internal request passed to the LLM client. type GenerateRequest struct { Prompt RenderedPrompt Target ExecutionTarget } // GenerateResponse is the response received from the LLM client. type GenerateResponse struct { Content string Usage TokenUsage } // TokenUsage tracks token consumption. type TokenUsage struct { PromptTokens int CompletionTokens int TotalTokens int } // ValidationResult represents the outcome of an output validation. type ValidationResult struct { Status ValidationStatus Mode ValidationMode Errors []string SchemaPath string RepairAttempts int IsValid bool } // RunMetadata contains auditing information for a run. type RunMetadata struct { RunID string PromptID string PromptVersion string PromptHash string RenderedPromptHash string SelectedProfileID string InputHashes map[string]string ModelEndpoint string ModelName string Params ExecutionTarget Timestamp time.Time Duration time.Duration Usage TokenUsage ValidationMode ValidationMode ValidationStatus ValidationStatus RepairAttempts int }