package main import ( "context" "encoding/json" "fmt" "os" "gitea.maximumdirect.net/eric/ConfigKit" "gitea.maximumdirect.net/eric/promptkit" ) type deterministicClient struct{} func (deterministicClient) Generate( ctx context.Context, _ promptkit.GenerateRequest, ) (*promptkit.GenerateResponse, error) { if err := ctx.Err(); err != nil { return nil, err } return &promptkit.GenerateResponse{ Content: "Ada finished the migration review.", Usage: promptkit.TokenUsage{ PromptTokens: 12, CompletionTokens: 6, TotalTokens: 18, }, }, nil } type summary struct { Output string `json:"output"` ValidationStatus promptkit.ValidationStatus `json:"validation_status"` IsValid bool `json:"is_valid"` Model string `json:"model"` TotalTokens int `json:"total_tokens"` } func main() { endpoint, model := "https://example.invalid/v1", "offline-model" engine, err := promptkit.NewEngine(promptkit.Config{Sources: promptkit.ConfigurationSources{ Underlays: []configkit.Underlay{{Inputs: []configkit.Input{{Source: promptkit.ProfileSource("example profile", map[string]promptkit.ProfileConfig{ "offline-example": {Endpoint: &endpoint, Model: &model}, })}}}}, Main: &configkit.Input{Source: configkit.File("examples/go-library/run/prompt.yaml")}, }}, promptkit.WithLLMClient(deterministicClient{})) if err != nil { exit(err) } result, err := engine.Run(context.Background(), promptkit.RunRequest{ PromptID: "example.run", Inputs: map[string]promptkit.ArtifactRef{ "note": promptkit.Inline("Ada finished the migration review."), }, }) if err != nil { exit(err) } encoder := json.NewEncoder(os.Stdout) encoder.SetIndent("", " ") if err := encoder.Encode(summary{ Output: result.RawOutput, ValidationStatus: result.Validation.Status, IsValid: result.Validation.IsValid, Model: result.ModelName, TotalTokens: result.Usage.TotalTokens, }); err != nil { exit(err) } } func exit(err error) { fmt.Fprintln(os.Stderr, err) os.Exit(1) }