Core Types
EvalContract
The main contract type that defines quality requirements.Copy
Ask AI
type EvalContract = {
version: number;
name: string;
description?: string;
environment?: "production" | "staging" | "development";
sources?: SourceConfig;
required_evals: RequiredEval[];
on_violation: ViolationAction;
metadata?: Record<string, string>;
};
Decision
The result of evaluating a contract against eval results.Copy
Ask AI
type Decision = {
status: "PASS" | "BLOCK" | "REQUIRES_APPROVAL";
contract: EvalContract;
evals: EvalDecision[];
violations: Violation[];
summary?: string;
};
NormalizedEvalResult
Standardized format for eval results.Copy
Ask AI
type NormalizedEvalResult = {
evalName: string;
runId: string;
timestamp?: string;
metrics: Record<string, number>;
metadata?: Record<string, any>;
};
Violation
Represents a rule violation.Copy
Ask AI
type Violation = {
evalName: string;
metric: string;
rule: Rule;
actual: number;
expected: string;
baseline?: BaselineComparison;
};
BaselineData
Data structure for baseline comparisons.Copy
Ask AI
type BaselineData = {
type: "fixed" | "previous" | "main";
metrics: Record<string, number>;
source?: {
runId?: string;
timestamp?: string;
};
maxDelta?: number;
};
Type Exports
All types are exported from@geval-labs/core:
Copy
Ask AI
import type {
EvalContract,
Decision,
Violation,
NormalizedEvalResult,
BaselineData,
Rule,
RequiredEval,
SourceConfig,
ViolationAction,
} from "@geval-labs/core";
Usage Examples
Type-Safe Contract Creation
Copy
Ask AI
import type { EvalContract } from "@geval-labs/core";
const contract: EvalContract = {
version: 1,
name: "my-contract",
required_evals: [
{
name: "quality-metrics",
rules: [
{
metric: "accuracy",
operator: ">=",
baseline: "fixed",
threshold: 0.85,
},
],
},
],
on_violation: {
action: "block",
},
};
Type-Safe Decision Handling
Copy
Ask AI
import type { Decision } from "@geval-labs/core";
import { evaluate } from "@geval-labs/core";
const decision: Decision = evaluate({
contract,
evalResults: [evalResult],
baselines: {},
});
if (decision.status === "PASS") {
// TypeScript knows this is safe
console.log("All checks passed!");
} else {
// TypeScript knows violations exist
decision.violations.forEach((violation) => {
console.log(`Violation: ${violation.metric}`);
});
}
Custom Type Guards
Copy
Ask AI
import type { Decision } from "@geval-labs/core";
function isBlocked(decision: Decision): boolean {
return decision.status === "BLOCK";
}
function hasViolations(decision: Decision): boolean {
return decision.violations.length > 0;
}
Complete Type Reference
Contract Types
Copy
Ask AI
type EvalContract = {
version: number;
name: string;
description?: string;
environment?: string;
sources?: SourceConfig;
required_evals: RequiredEval[];
on_violation: ViolationAction;
metadata?: Record<string, string>;
};
type RequiredEval = {
name: string;
description?: string;
rules: Rule[];
};
type Rule = {
metric: string;
operator: "==" | "!=" | "<" | "<=" | ">" | ">=";
baseline: "fixed" | "previous" | "main";
threshold?: number;
max_delta?: number;
description?: string;
};
type ViolationAction = {
action: "block" | "require_approval" | "warn";
message?: string;
};
Result Types
Copy
Ask AI
type NormalizedEvalResult = {
evalName: string;
runId: string;
timestamp?: string;
metrics: Record<string, number>;
metadata?: Record<string, any>;
};
type Decision = {
status: "PASS" | "BLOCK" | "REQUIRES_APPROVAL";
contract: EvalContract;
evals: EvalDecision[];
violations: Violation[];
summary?: string;
};
type EvalDecision = {
name: string;
status: "PASS" | "BLOCK" | "REQUIRES_APPROVAL";
rules: RuleDecision[];
};
type RuleDecision = {
rule: Rule;
status: "PASS" | "FAIL";
actual: number;
expected: string;
};
Type Utilities
Type Guards
Copy
Ask AI
function isPass(decision: Decision): decision is Decision & { status: "PASS" } {
return decision.status === "PASS";
}
function hasViolations(decision: Decision): decision is Decision & { violations: Violation[] } {
return decision.violations.length > 0;
}