Assemble PromptKit profiles for offline configuration inspection
This commit is contained in:
111
internal/framework/llm/safe_view.go
Normal file
111
internal/framework/llm/safe_view.go
Normal file
@@ -0,0 +1,111 @@
|
||||
package llm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
ck "gitea.maximumdirect.net/eric/ConfigKit"
|
||||
"gitea.maximumdirect.net/eric/audita/internal/core/config"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
type selectedProfileView struct {
|
||||
ID string `yaml:"id"`
|
||||
Backend string `yaml:"backend"`
|
||||
Model string `yaml:"model"`
|
||||
Temperature float64 `yaml:"temperature"`
|
||||
MaxTokens int `yaml:"max_tokens"`
|
||||
TopP float64 `yaml:"top_p"`
|
||||
TimeoutSeconds int `yaml:"timeout_seconds"`
|
||||
ServiceTier string `yaml:"service_tier,omitempty"`
|
||||
ReasoningEffort string `yaml:"reasoning_effort,omitempty"`
|
||||
}
|
||||
|
||||
// SelectedProfilesYAML exposes selected controls without endpoint, credential,
|
||||
// or arbitrary extra provider parameters.
|
||||
func (r *Runtime) SelectedProfilesYAML() ([]byte, error) {
|
||||
if r == nil {
|
||||
return nil, fmt.Errorf("LLM runtime is unavailable")
|
||||
}
|
||||
view := func(role string) (selectedProfileView, error) {
|
||||
profile, ok := r.Profiles[role]
|
||||
if !ok {
|
||||
return selectedProfileView{}, fmt.Errorf("%s profile is unavailable", role)
|
||||
}
|
||||
target := profile.EffectiveModelParams
|
||||
return selectedProfileView{ID: profile.ProfileID, Backend: target.BackendID, Model: target.Model,
|
||||
Temperature: target.Temperature, MaxTokens: target.MaxTokens, TopP: target.TopP,
|
||||
TimeoutSeconds: target.TimeoutSeconds, ServiceTier: target.ServiceTier, ReasoningEffort: target.ReasoningEffort}, nil
|
||||
}
|
||||
proposal, err := view("proposal")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
validation, err := view("validation")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return yaml.Marshal(struct {
|
||||
Proposal selectedProfileView `yaml:"proposal"`
|
||||
Validation selectedProfileView `yaml:"validation"`
|
||||
}{proposal, validation})
|
||||
}
|
||||
|
||||
type derivationView struct {
|
||||
Operation ck.ChangeKind `yaml:"operation"`
|
||||
Reason string `yaml:"reason"`
|
||||
Dependencies []string `yaml:"dependencies,omitempty"`
|
||||
}
|
||||
type explanationView struct {
|
||||
Path string `yaml:"path"`
|
||||
Source string `yaml:"source"`
|
||||
Layer ck.Layer `yaml:"layer"`
|
||||
Derivations []derivationView `yaml:"derivations,omitempty"`
|
||||
}
|
||||
|
||||
// ExplanationYAML reports only origins and recorded resolution operations.
|
||||
// It intentionally excludes effective and historical values, including secrets.
|
||||
func ExplanationYAML(result *ck.Result[config.Config]) ([]byte, error) {
|
||||
if result == nil {
|
||||
return nil, fmt.Errorf("configuration result is unavailable")
|
||||
}
|
||||
metadata := result.Metadata()
|
||||
sources := make(map[string]string)
|
||||
for _, source := range result.Sources() {
|
||||
sources[source.ID] = source.Label
|
||||
}
|
||||
records := make([]explanationView, 0)
|
||||
paths := metadata.HistoricalPaths()
|
||||
for i, path := range paths {
|
||||
if path.String() == "" {
|
||||
continue
|
||||
}
|
||||
if i+1 < len(paths) && strings.HasPrefix(paths[i+1].String(), path.String()+"/") {
|
||||
continue
|
||||
}
|
||||
info, ok := metadata.Lookup(path)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
record := explanationView{Path: path.String(), Layer: info.Origin.Layer, Source: string(info.Origin.Layer)}
|
||||
if len(info.Origin.Locations) > 0 {
|
||||
if label := sources[info.Origin.Locations[0].SourceID]; label != "" {
|
||||
record.Source = label
|
||||
}
|
||||
}
|
||||
for _, change := range metadata.History(path) {
|
||||
if change.Origin.Layer != ck.LayerResolution {
|
||||
continue
|
||||
}
|
||||
for _, reason := range change.Reasons {
|
||||
derivation := derivationView{Operation: change.Origin.Operation, Reason: reason}
|
||||
for _, dependency := range change.Dependencies {
|
||||
derivation.Dependencies = append(derivation.Dependencies, dependency.String())
|
||||
}
|
||||
record.Derivations = append(record.Derivations, derivation)
|
||||
}
|
||||
}
|
||||
records = append(records, record)
|
||||
}
|
||||
return yaml.Marshal(records)
|
||||
}
|
||||
Reference in New Issue
Block a user