From d63cb778876b6f24c9c9cc65b68af6e39baf6725 Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Fri, 4 Sep 2026 16:09:46 +0500 Subject: [PATCH] feat: add types package --- packages/types/package.json | 18 ++++++ packages/types/src/index.ts | 117 +++++++++++++++++++++++++++++++++++ packages/types/tsconfig.json | 12 ++++ pnpm-lock.yaml | 2 + pnpm-workspace.yaml | 1 + 5 files changed, 150 insertions(+) create mode 100644 packages/types/package.json create mode 100644 packages/types/src/index.ts create mode 100644 packages/types/tsconfig.json diff --git a/packages/types/package.json b/packages/types/package.json new file mode 100644 index 0000000..374b5e4 --- /dev/null +++ b/packages/types/package.json @@ -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" + } +} diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts new file mode 100644 index 0000000..1efb5f2 --- /dev/null +++ b/packages/types/src/index.ts @@ -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; + prompts: Record; + perTask: PerTaskRow[]; + meta: Record; +} + +// ── 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; +} + +export interface AggregateModel { + tasks: number; + totalRows: number; + reviewed: number; + correct: number; + accuracy: number; + duckUsed: number; + toolCalls: number; + avgGenTokens: number; +} + +export interface Aggregate { + perScenario: Record; + perModel: Record; +} + +// ── Root report (report.json) ─────────────────────────── + +export interface ReportRoot { + generatedAt: string; + mcpUrl: string; + prompts: Record; + models: Record; + aggregate: Aggregate; + reviewedAt?: string; +} + +// ── Reviews (review.json) ─────────────────────────────── +// Keys: "${model}|${taskId}|${scenario}" + +export type ReviewKey = `${string}|${string}|${string}`; +export type Reviews = Record; diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json new file mode 100644 index 0000000..d85b8fb --- /dev/null +++ b/packages/types/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ES2022", + "moduleResolution": "bundler", + "strict": true, + "noEmit": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2a51dc8..ce7e240 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -253,6 +253,8 @@ importers: specifier: ^5 version: 5.9.3 + packages/types: {} + packages: '@emnapi/runtime@1.11.3': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 852bf6b..286cf7f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,3 @@ packages: - apps/* + - packages/*