Benchmark configuration workflows and reuse captured content origins
This commit is contained in:
@@ -108,6 +108,14 @@ func resolvePrompts(prompts map[string]map[string]promptConfig, resolution *conf
|
||||
func (state *loaded) materializePrompts() error {
|
||||
state.prompts = make(map[string]map[string]*promptEntry, len(state.result.Config.Prompts))
|
||||
state.ambiguous = make(map[string]bool)
|
||||
var metadata *configkit.Metadata
|
||||
lookupOrigin := func(path configkit.Path) (configkit.FieldInfo, bool) {
|
||||
if metadata == nil {
|
||||
captured := state.result.Metadata()
|
||||
metadata = &captured
|
||||
}
|
||||
return metadata.Lookup(path)
|
||||
}
|
||||
for _, id := range sortedKeys(state.result.Config.Prompts) {
|
||||
if strings.TrimSpace(id) == "" {
|
||||
return fmt.Errorf("%s: prompt ID must not be blank", configkit.Keys("prompts", id))
|
||||
@@ -122,7 +130,7 @@ func (state *loaded) materializePrompts() error {
|
||||
if strings.TrimSpace(version) == "" {
|
||||
return fmt.Errorf("%s: prompt version must not be blank", configkit.Keys("prompts", id, version))
|
||||
}
|
||||
entry, err := state.materializePrompt(id, version, versions[version])
|
||||
entry, err := state.materializePrompt(id, version, versions[version], lookupOrigin)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -132,7 +140,7 @@ func (state *loaded) materializePrompts() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (state *loaded) materializePrompt(id, version string, raw promptConfig) (*promptEntry, error) {
|
||||
func (state *loaded) materializePrompt(id, version string, raw promptConfig, lookupOrigin func(configkit.Path) (configkit.FieldInfo, bool)) (*promptEntry, error) {
|
||||
base := configkit.Keys("prompts", id, version)
|
||||
if len(raw.Messages) == 0 {
|
||||
return nil, fmt.Errorf("%s: at least one message is required", base.Key("messages"))
|
||||
@@ -180,7 +188,7 @@ func (state *loaded) materializePrompt(id, version string, raw promptConfig) (*p
|
||||
content = *message.Content
|
||||
} else {
|
||||
var err error
|
||||
content, err = state.readContent(path.Key("content_file"), *message.ContentFile)
|
||||
content, err = state.readContent(path.Key("content_file"), *message.ContentFile, lookupOrigin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -249,11 +257,11 @@ func (state *loaded) materializePrompt(id, version string, raw promptConfig) (*p
|
||||
return entry, nil
|
||||
}
|
||||
|
||||
func (state *loaded) readContent(fieldPath configkit.Path, name string) (string, error) {
|
||||
func (state *loaded) readContent(fieldPath configkit.Path, name string, lookupOrigin func(configkit.Path) (configkit.FieldInfo, bool)) (string, error) {
|
||||
if strings.TrimSpace(name) == "" {
|
||||
return "", fmt.Errorf("%s: content_file path must not be blank", fieldPath)
|
||||
}
|
||||
field, found := state.result.Metadata().Lookup(fieldPath)
|
||||
field, found := lookupOrigin(fieldPath)
|
||||
if !found || len(field.Origin.Locations) != 1 {
|
||||
return "", fmt.Errorf("%s: content_file needs one contributing source with a filesystem context", fieldPath)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user