feat: add types package
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "@duck/types",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./src/index.ts",
|
||||
"default": "./src/index.ts"
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.9.3"
|
||||
},
|
||||
"scripts": {
|
||||
"typecheck": "tsc --noEmit"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
// ── Tasks ───────────────────────────────────────────────
|
||||
|
||||
export interface Task {
|
||||
id: string;
|
||||
question: string;
|
||||
answer: string;
|
||||
}
|
||||
|
||||
// ── Scenarios ───────────────────────────────────────────
|
||||
|
||||
export type ScenarioName = "control" | "thinking" | "blind" | "mentor";
|
||||
|
||||
export const SCENARIO_NAMES: readonly ScenarioName[] = [
|
||||
"control",
|
||||
"thinking",
|
||||
"blind",
|
||||
"mentor",
|
||||
];
|
||||
|
||||
// ── Per-task evaluation row ─────────────────────────────
|
||||
|
||||
export interface PerTaskRow {
|
||||
id: string;
|
||||
scenario: ScenarioName;
|
||||
correct: boolean | null;
|
||||
duckUsed: boolean;
|
||||
toolCalls: number;
|
||||
promptTokens: number;
|
||||
genTokens: number;
|
||||
duckTokens: number;
|
||||
response: string;
|
||||
expected: string;
|
||||
question: string;
|
||||
}
|
||||
|
||||
// ── Per-scenario summary (inside a model report) ────────
|
||||
|
||||
export interface ScenarioSummary {
|
||||
tasks: number;
|
||||
reviewed: number;
|
||||
correct: number;
|
||||
accuracy: number;
|
||||
pending: number;
|
||||
duckUsed: number;
|
||||
toolCalls: number;
|
||||
avgCalls: number;
|
||||
avgPromptTokens: number;
|
||||
avgGenTokens: number;
|
||||
avgDuckTokens: number;
|
||||
}
|
||||
|
||||
// ── Per-model report ────────────────────────────────────
|
||||
|
||||
export interface ModelReport {
|
||||
generatedAt: string;
|
||||
model: string;
|
||||
mcpUrl: string;
|
||||
scenarios: Record<ScenarioName, ScenarioSummary>;
|
||||
prompts: Record<ScenarioName, string>;
|
||||
perTask: PerTaskRow[];
|
||||
meta: Record<string, unknown>;
|
||||
}
|
||||
|
||||
// ── Aggregate ───────────────────────────────────────────
|
||||
|
||||
export interface AggregateByModel {
|
||||
tasks: number;
|
||||
reviewed: number;
|
||||
correct: number;
|
||||
accuracy: number;
|
||||
duckUsed: number;
|
||||
}
|
||||
|
||||
export interface AggregateScenario {
|
||||
tasks: number;
|
||||
reviewed: number;
|
||||
correct: number;
|
||||
accuracy: number;
|
||||
pending: number;
|
||||
duckUsed: number;
|
||||
toolCalls: number;
|
||||
avgCalls: number;
|
||||
byModel: Record<string, AggregateByModel>;
|
||||
}
|
||||
|
||||
export interface AggregateModel {
|
||||
tasks: number;
|
||||
totalRows: number;
|
||||
reviewed: number;
|
||||
correct: number;
|
||||
accuracy: number;
|
||||
duckUsed: number;
|
||||
toolCalls: number;
|
||||
avgGenTokens: number;
|
||||
}
|
||||
|
||||
export interface Aggregate {
|
||||
perScenario: Record<ScenarioName, AggregateScenario>;
|
||||
perModel: Record<string, AggregateModel>;
|
||||
}
|
||||
|
||||
// ── Root report (report.json) ───────────────────────────
|
||||
|
||||
export interface ReportRoot {
|
||||
generatedAt: string;
|
||||
mcpUrl: string;
|
||||
prompts: Record<ScenarioName, string>;
|
||||
models: Record<string, ModelReport>;
|
||||
aggregate: Aggregate;
|
||||
reviewedAt?: string;
|
||||
}
|
||||
|
||||
// ── Reviews (review.json) ───────────────────────────────
|
||||
// Keys: "${model}|${taskId}|${scenario}"
|
||||
|
||||
export type ReviewKey = `${string}|${string}|${string}`;
|
||||
export type Reviews = Record<ReviewKey, boolean>;
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "ES2022",
|
||||
"moduleResolution": "bundler",
|
||||
"strict": true,
|
||||
"noEmit": true,
|
||||
"isolatedModules": true,
|
||||
"skipLibCheck": true
|
||||
},
|
||||
"include": ["src"]
|
||||
}
|
||||
Reference in New Issue
Block a user