169 lines
4.7 KiB
Go
169 lines
4.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
|
|
"gitea.maximumdirect.net/eric/ConfigKit"
|
|
"gitea.maximumdirect.net/eric/promptkit"
|
|
)
|
|
|
|
type summary struct {
|
|
PromptID string `json:"prompt_id"`
|
|
PromptVersion *string `json:"prompt_version,omitempty"`
|
|
SelectedProfile string `json:"selected_profile"`
|
|
Model string `json:"model"`
|
|
MessageCount int `json:"message_count"`
|
|
ProfileTimeout int `json:"profile_timeout_seconds"`
|
|
Namespaces []string `json:"namespaces"`
|
|
Collections []collectionSummary `json:"collections"`
|
|
ScopedPrompts []string `json:"scoped_prompts"`
|
|
ReviewPrompts []string `json:"review_prompts"`
|
|
}
|
|
|
|
type collectionSummary struct {
|
|
Namespace string `json:"namespace"`
|
|
ReleaseVersion *string `json:"release_version"`
|
|
}
|
|
|
|
func main() {
|
|
support, err := promptkit.CollectionInput(
|
|
"support",
|
|
configkit.File("examples/go-library/prepare/collections/support/collection.yaml"),
|
|
)
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
review, err := promptkit.CollectionInput(
|
|
"review",
|
|
configkit.File("examples/go-library/prepare/collections/review/collection.yaml"),
|
|
)
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
override, err := promptkit.CollectionInput(
|
|
"support",
|
|
configkit.File("examples/go-library/prepare/collections/support/operator-overrides.yaml"),
|
|
)
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
engine, err := promptkit.NewEngine(promptkit.Config{Sources: promptkit.ConfigurationSources{
|
|
Underlays: []configkit.Underlay{
|
|
{Inputs: []configkit.Input{support, review}},
|
|
{Inputs: []configkit.Input{override}},
|
|
},
|
|
}})
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
ctx := context.Background()
|
|
scoped, err := engine.WithNamespaces(promptkit.Namespaces{
|
|
Prompt: "support", Profile: "support", Backend: "support",
|
|
})
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
view, err := engine.InspectConfiguration()
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
if _, found := view.Explain(configkit.Keys(
|
|
"collections", "support", "profiles", "fast", "timeout_seconds",
|
|
)); !found {
|
|
exit(fmt.Errorf("collection profile override was not found"))
|
|
}
|
|
requirements, err := scoped.InspectRequirements(ctx, promptkit.RequirementInspectionRequest{
|
|
PromptID: "prepare",
|
|
})
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
if !requirements.Complete || len(requirements.Inputs) != 1 ||
|
|
requirements.Inputs[0].Name != "note" ||
|
|
requirements.Inputs[0].Kind != promptkit.RequirementRequired {
|
|
exit(fmt.Errorf("required note input was not discovered before preparation"))
|
|
}
|
|
|
|
request := promptkit.RunRequest{
|
|
PromptID: "prepare",
|
|
ProfileID: "fast",
|
|
Inputs: map[string]promptkit.ArtifactRef{
|
|
"note": promptkit.Inline("Ada finished the migration review."),
|
|
},
|
|
}
|
|
if err := scoped.ValidateRequest(ctx, request); err != nil {
|
|
exit(err)
|
|
}
|
|
prepared, err := scoped.Prepare(ctx, request)
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
profile, err := scoped.InspectProfile(ctx, "fast")
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
if profile.EffectiveModelParams.TimeoutSeconds != 30 {
|
|
exit(fmt.Errorf(
|
|
"later profile override was not applied: timeout is %d seconds",
|
|
profile.EffectiveModelParams.TimeoutSeconds,
|
|
))
|
|
}
|
|
namespaces, err := scoped.ListNamespaces(ctx)
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
collections, err := scoped.ListCollections(ctx)
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
scopedPrompts, err := scoped.ListPrompts(ctx)
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
reviewPrompts, err := scoped.ListPrompts(ctx, promptkit.NamespaceFilter{
|
|
Mode: promptkit.NamespaceNamed, Name: "review",
|
|
})
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
scopedPromptIDs := make([]string, len(scopedPrompts))
|
|
for index := range scopedPrompts {
|
|
scopedPromptIDs[index] = scopedPrompts[index].ID
|
|
}
|
|
reviewPromptIDs := make([]string, len(reviewPrompts))
|
|
for index := range reviewPrompts {
|
|
reviewPromptIDs[index] = reviewPrompts[index].ID
|
|
}
|
|
collectionSummaries := make([]collectionSummary, len(collections))
|
|
for index := range collections {
|
|
collectionSummaries[index] = collectionSummary{
|
|
Namespace: collections[index].Namespace, ReleaseVersion: collections[index].ReleaseVersion,
|
|
}
|
|
}
|
|
|
|
encoder := json.NewEncoder(os.Stdout)
|
|
encoder.SetIndent("", " ")
|
|
if err := encoder.Encode(summary{
|
|
PromptID: prepared.PromptID,
|
|
PromptVersion: prepared.PromptVersion,
|
|
SelectedProfile: prepared.SelectedProfileID,
|
|
Model: prepared.EffectiveModelParams.Model,
|
|
MessageCount: len(prepared.Messages),
|
|
ProfileTimeout: profile.EffectiveModelParams.TimeoutSeconds,
|
|
Namespaces: namespaces,
|
|
Collections: collectionSummaries,
|
|
ScopedPrompts: scopedPromptIDs,
|
|
ReviewPrompts: reviewPromptIDs,
|
|
}); err != nil {
|
|
exit(err)
|
|
}
|
|
}
|
|
|
|
func exit(err error) {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
os.Exit(1)
|
|
}
|