Capture resolved backend and profile resources

This commit is contained in:
2026-11-06 15:17:36 +00:00
parent b0a16ccce8
commit 4cbd4e2da0
5 changed files with 132 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
package configuration
import (
"context"
"fmt"
"go.maximumdirect.net/promptkit/internal/backend"
"go.maximumdirect.net/promptkit/internal/domain"
"go.maximumdirect.net/promptkit/internal/profile"
)
// ProfileResource is the resolved profile before execution completion.
// Its fields borrow immutable configuration captured by the adapter.
type ProfileResource struct {
ID string
Backend, Endpoint, Model *string
Temperature, TopP *float64
MaxTokens, TimeoutSeconds *int
ServiceTier, ReasoningEffort *string
APIKeyEnv *string
APIKeyRequired *bool
ExtraParams map[string]any
}
// BackendResource is the resolved backend and its configured diagnostics.
// Its fields borrow immutable configuration captured by the adapter.
type BackendResource struct {
ID, Endpoint string
APIKeyEnv *string
ConcurrencyLimit, QueueCapacity *int
ExtraParams map[string]any
SmokeTests *domain.BackendSmokeTestConfig
}
func (state *loaded) InspectProfile(ctx context.Context, id string) (*ProfileResource, error) {
if err := ctx.Err(); err != nil {
return nil, err
}
if state == nil {
return nil, fmt.Errorf("%w: %q", profile.ErrProfileNotFound, id)
}
config, ok := state.profileRecords[id]
if !ok {
return nil, fmt.Errorf("%w: %q", profile.ErrProfileNotFound, id)
}
return &ProfileResource{
ID: id, Backend: config.Backend, Endpoint: config.Endpoint, Model: config.Model,
Temperature: config.Temperature, TopP: config.TopP, MaxTokens: config.MaxTokens,
TimeoutSeconds: config.TimeoutSeconds, ServiceTier: config.ServiceTier,
ReasoningEffort: config.ReasoningEffort, APIKeyEnv: config.APIKeyEnv,
APIKeyRequired: config.APIKeyRequired, ExtraParams: config.ExtraParams,
}, nil
}
func (state *loaded) InspectBackend(ctx context.Context, id string) (*BackendResource, error) {
if err := ctx.Err(); err != nil {
return nil, err
}
if state == nil {
return nil, fmt.Errorf("%w: %q", backend.ErrBackendNotFound, id)
}
config, ok := state.backendRecords[id]
if !ok {
return nil, fmt.Errorf("%w: %q", backend.ErrBackendNotFound, id)
}
return &BackendResource{
ID: id, Endpoint: valueOrZero(config.Endpoint), APIKeyEnv: config.APIKeyEnv,
ConcurrencyLimit: config.ConcurrencyLimit, QueueCapacity: config.QueueCapacity,
ExtraParams: config.ExtraParams, SmokeTests: captureBackend(id, config).SmokeTests,
}, nil
}