Documentation
¶
Overview ¶
Package comparison enables side-by-side evaluation of multiple models or configurations against the same suite.
Index ¶
- func FormatTable(w io.Writer, report *CompareReport)
- type CompareConfig
- type CompareReport
- type ConfidenceInterval
- type CriterionFailure
- type DiffReport
- type ModelResult
- type RecordedComparison
- func CompareRecorded(ctx context.Context, req RecordedComparisonRequest) (*RecordedComparison, error)
- func CompareRecordedGroups(ctx context.Context, req RecordedGroupComparisonRequest) (*RecordedComparison, error)
- func CompareRecordedSets(ctx context.Context, req RecordedSetComparisonRequest) (*RecordedComparison, error)
- type RecordedComparisonGroup
- type RecordedComparisonRequest
- type RecordedGroupComparisonRequest
- type RecordedJobRef
- type RecordedPair
- type RecordedPlanRef
- type RecordedSetComparisonRequest
- type RecordedStore
- type ScoreDelta
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FormatTable ¶
func FormatTable(w io.Writer, report *CompareReport)
FormatTable writes a terminal comparison table.
Types ¶
type CompareConfig ¶
type CompareConfig struct {
SuiteID id.SuiteID
Targets []target.Target
Scorers []scorer.Scorer
Tags []string
}
CompareConfig configures a multi-model comparison run.
type CompareReport ¶
type CompareReport struct {
SuiteID id.SuiteID `json:"suite_id"`
Models []ModelResult `json:"models"`
Duration time.Duration `json:"duration"`
CreatedAt time.Time `json:"created_at"`
}
CompareReport holds the comparison results across all models.
func Compare ¶
func Compare(ctx context.Context, eng *engine.Engine, cfg *CompareConfig) (*CompareReport, error)
Compare runs the same suite against multiple targets and produces a comparison report. It runs inside a "compare targets" span, so each target's "evaluate run" span lands in one trace.
type ConfidenceInterval ¶
ConfidenceInterval is a 95 percent paired bootstrap interval over distinct cases.
type CriterionFailure ¶
type CriterionFailure struct {
CaseID id.CaseID `json:"case_id"`
Repetition int `json:"repetition"`
CriterionID string `json:"criterion_id"`
Reason string `json:"reason"`
}
CriterionFailure retains a candidate's failed required criterion.
type DiffReport ¶
type DiffReport struct {
Deltas []ScoreDelta `json:"deltas"`
DimensionDeltas map[string]float64 `json:"dimension_deltas,omitempty"`
}
DiffReport holds the deltas between a current run and a baseline.
func Diff ¶
func Diff(current, baseline *evalrun.ResultStats) *DiffReport
Diff computes score deltas between current run stats and baseline stats.
type ModelResult ¶
type ModelResult struct {
ModelName string `json:"model_name"`
RunResult *engine.RunResult `json:"run_result"`
}
ModelResult holds the eval result for a single model in a comparison.
type RecordedComparison ¶
type RecordedComparison struct {
Plans []RecordedPlanRef `json:"plans,omitempty"`
BaselineJobs []RecordedJobRef `json:"baseline_jobs"`
CandidateJobs []RecordedJobRef `json:"candidate_jobs"`
BaselineID id.ID `json:"baseline_id"`
CandidateID id.ID `json:"candidate_id"`
BaselineDigest string `json:"baseline_digest"`
CandidateDigest string `json:"candidate_digest"`
PlanDigest string `json:"plan_digest"`
Seed uint64 `json:"seed"`
Method string `json:"method"`
BootstrapSamples int `json:"bootstrap_samples"`
CaseCount int `json:"case_count"`
PairCount int `json:"pair_count"`
Pairs []RecordedPair `json:"pairs"`
MeanDelta *float64 `json:"mean_delta,omitempty"`
Interval *ConfidenceInterval `json:"interval,omitempty"`
DimensionDeltas map[string]float64 `json:"dimension_deltas"`
RequiredCriteriaPassed bool `json:"required_criteria_passed"`
RequiredFailures []CriterionFailure `json:"required_failures,omitempty"`
CostComparable bool `json:"cost_comparable"`
Currency string `json:"currency,omitempty"`
MeanCostDelta *float64 `json:"mean_cost_delta,omitempty"`
MeanLatencyDeltaMs *float64 `json:"mean_latency_delta_ms,omitempty"`
Conclusive bool `json:"conclusive"`
IncompletenessReasons []string `json:"incompleteness_reasons,omitempty"`
}
RecordedComparison reports evidence without deciding production activation. Plans preserves every frozen identity. PlanDigest is empty for multiple plans.
func CompareRecorded ¶
func CompareRecorded(ctx context.Context, req RecordedComparisonRequest) (*RecordedComparison, error)
CompareRecorded checks exact plan/case/repetition identities before comparing. It averages repetitions within each case, then resamples 2,000 sets of cases. The nearest-rank 2.5 and 97.5 percentiles form the interval. No target is called.
func CompareRecordedGroups ¶
func CompareRecordedGroups(ctx context.Context, req RecordedGroupComparisonRequest) (*RecordedComparison, error)
CompareRecordedGroups preserves each plan and job identity while applying the same paired case bootstrap as CompareRecordedSets. A case cannot appear in two groups, even with different repetitions. The caller owns the complete roster.
func CompareRecordedSets ¶
func CompareRecordedSets(ctx context.Context, req RecordedSetComparisonRequest) (*RecordedComparison, error)
CompareRecordedSets compares disjoint persisted job sets from one frozen plan. Cases and repetitions must match across arms. Job order and batch size do not change the estimate. The caller remains responsible for selecting its full roster.
type RecordedComparisonGroup ¶
type RecordedComparisonGroup struct {
Plan RecordedPlanRef `json:"plan"`
BaselineIDs []id.ID `json:"baseline_ids"`
CandidateIDs []id.ID `json:"candidate_ids"`
}
RecordedComparisonGroup selects paired job sets under one exact frozen plan.
type RecordedComparisonRequest ¶
type RecordedComparisonRequest struct {
Store RecordedStore
BaselineID id.ID
CandidateID id.ID
Seed uint64
MinCases int // Zero uses 20 distinct cases. Repetitions never count as cases.
}
RecordedComparisonRequest selects persisted evaluations and a reproducible seed.
type RecordedGroupComparisonRequest ¶
type RecordedGroupComparisonRequest struct {
Store RecordedStore
Groups []RecordedComparisonGroup
Seed uint64
MinCases int // Zero requires 20 distinct cases.
}
RecordedGroupComparisonRequest compares disjoint case sets across frozen plans. Every plan appears once. MinCases counts distinct cases across all groups.
type RecordedJobRef ¶
RecordedJobRef identifies an authoritative job and its immutable input digest.
type RecordedPair ¶
type RecordedPair struct {
CaseID id.CaseID `json:"case_id"`
Repetition int `json:"repetition"`
Baseline float64 `json:"baseline"`
Candidate float64 `json:"candidate"`
Delta float64 `json:"delta"`
}
RecordedPair preserves the identities and scores behind one paired difference.
type RecordedPlanRef ¶
RecordedPlanRef preserves a frozen plan's storage identity and content digest.
type RecordedSetComparisonRequest ¶
type RecordedSetComparisonRequest struct {
Store RecordedStore
BaselineIDs []id.ID
CandidateIDs []id.ID
Seed uint64
MinCases int // Zero uses 20 distinct cases, regardless of job or repetition count.
}
RecordedSetComparisonRequest selects explicit job sets for each comparison arm. Every job must belong to the authenticated scope and the same frozen plan.