@deepthonk/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +293 -0
  3. package/dist/artifacts.d.ts +36 -0
  4. package/dist/artifacts.js +211 -0
  5. package/dist/artifacts.js.map +1 -0
  6. package/dist/bradleyTerry.d.ts +2 -0
  7. package/dist/bradleyTerry.js +204 -0
  8. package/dist/bradleyTerry.js.map +1 -0
  9. package/dist/budget.d.ts +14 -0
  10. package/dist/budget.js +41 -0
  11. package/dist/budget.js.map +1 -0
  12. package/dist/budgetTracker.d.ts +16 -0
  13. package/dist/budgetTracker.js +137 -0
  14. package/dist/budgetTracker.js.map +1 -0
  15. package/dist/critique.d.ts +2 -0
  16. package/dist/critique.js +52 -0
  17. package/dist/critique.js.map +1 -0
  18. package/dist/errors.d.ts +24 -0
  19. package/dist/errors.js +27 -0
  20. package/dist/errors.js.map +1 -0
  21. package/dist/index.d.ts +15 -0
  22. package/dist/index.js +16 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/json.d.ts +1 -0
  25. package/dist/json.js +28 -0
  26. package/dist/json.js.map +1 -0
  27. package/dist/lifecycle.d.ts +63 -0
  28. package/dist/lifecycle.js +45 -0
  29. package/dist/lifecycle.js.map +1 -0
  30. package/dist/pairScheduler.d.ts +6 -0
  31. package/dist/pairScheduler.js +79 -0
  32. package/dist/pairScheduler.js.map +1 -0
  33. package/dist/prompts.d.ts +15 -0
  34. package/dist/prompts.js +200 -0
  35. package/dist/prompts.js.map +1 -0
  36. package/dist/rng.d.ts +8 -0
  37. package/dist/rng.js +31 -0
  38. package/dist/rng.js.map +1 -0
  39. package/dist/runner.d.ts +11 -0
  40. package/dist/runner.js +518 -0
  41. package/dist/runner.js.map +1 -0
  42. package/dist/schemas.d.ts +648 -0
  43. package/dist/schemas.js +119 -0
  44. package/dist/schemas.js.map +1 -0
  45. package/dist/services.d.ts +40 -0
  46. package/dist/services.js +104 -0
  47. package/dist/services.js.map +1 -0
  48. package/dist/traceStore.d.ts +22 -0
  49. package/dist/traceStore.js +105 -0
  50. package/dist/traceStore.js.map +1 -0
  51. package/package.json +42 -0
@@ -0,0 +1,119 @@
1
+ import { z } from "zod";
2
+ export const candidateStatusSchema = z.enum(["generated", "mutated", "elite", "discarded"]);
3
+ export const profileSchema = z.object({
4
+ n: z.number().int().min(2),
5
+ k: z.number().int().min(1),
6
+ t: z.number().int().min(0),
7
+ m: z.number().int().min(1),
8
+ lambda: z.number().min(0).default(0.01),
9
+ sampleTemperature: z.number().min(0).default(0.8),
10
+ mutateTemperature: z.number().min(0).default(0.6),
11
+ judgeTemperature: z.number().min(0).default(0)
12
+ });
13
+ export const builtInProfiles = {
14
+ quick: {
15
+ n: 4,
16
+ k: 2,
17
+ t: 1,
18
+ m: 2,
19
+ lambda: 0.01,
20
+ sampleTemperature: 1,
21
+ mutateTemperature: 1,
22
+ judgeTemperature: 0
23
+ },
24
+ balanced: {
25
+ n: 8,
26
+ k: 3,
27
+ t: 2,
28
+ m: 4,
29
+ lambda: 0.01,
30
+ sampleTemperature: 1,
31
+ mutateTemperature: 1,
32
+ judgeTemperature: 0
33
+ },
34
+ paper: {
35
+ n: 20,
36
+ k: 4,
37
+ t: 3,
38
+ m: 10,
39
+ lambda: 0.01,
40
+ sampleTemperature: 1,
41
+ mutateTemperature: 1,
42
+ judgeTemperature: 0
43
+ }
44
+ };
45
+ const promptOverrideSchema = z.object({
46
+ system: z.string().optional(),
47
+ user: z.string().optional()
48
+ });
49
+ const promptOverridesSchema = z.object({
50
+ generate: promptOverrideSchema.optional(),
51
+ compare: promptOverrideSchema.optional(),
52
+ mutate: promptOverrideSchema.optional(),
53
+ finalize: promptOverrideSchema.optional()
54
+ });
55
+ export const runConfigSchema = z.object({
56
+ task: z.string().min(1),
57
+ rubric: z.string().optional(),
58
+ promptStyle: z.enum(["general", "paper-programming"]).default("general"),
59
+ promptOverrides: promptOverridesSchema.optional(),
60
+ profile: profileSchema,
61
+ runDir: z.string().min(1),
62
+ seed: z.number().int(),
63
+ provider: z.string().min(1),
64
+ generatorModel: z.string().min(1),
65
+ mutatorModel: z.string().min(1),
66
+ judgeModel: z.string().min(1),
67
+ finalizerModel: z.string().optional(),
68
+ concurrency: z.object({
69
+ generate: z.number().int().min(1),
70
+ judge: z.number().int().min(1),
71
+ mutate: z.number().int().min(1)
72
+ }),
73
+ retry: z.object({
74
+ httpRetries: z.number().int().min(0).default(12),
75
+ invalidJsonRetries: z.number().int().min(0).default(1),
76
+ requestTimeoutMs: z.number().int().min(1).optional()
77
+ }),
78
+ budget: z
79
+ .object({
80
+ maxCalls: z.number().int().min(1).optional(),
81
+ maxInputTokens: z.number().int().min(1).optional(),
82
+ maxOutputTokens: z.number().int().min(1).optional(),
83
+ maxUsd: z.number().min(0).optional(),
84
+ prices: z
85
+ .array(z
86
+ .object({
87
+ provider: z.string().min(1),
88
+ model: z.string().min(1),
89
+ inputUsdPerMillion: z.number().min(0).optional(),
90
+ inputCacheHitUsdPerMillion: z.number().min(0).optional(),
91
+ inputCacheMissUsdPerMillion: z.number().min(0).optional(),
92
+ outputUsdPerMillion: z.number().min(0).optional(),
93
+ longContextThresholdTokens: z.number().int().min(1).optional(),
94
+ inputUsdPerMillionLong: z.number().min(0).optional(),
95
+ outputUsdPerMillionLong: z.number().min(0).optional()
96
+ })
97
+ .refine((price) => {
98
+ const hasAnyLong = price.longContextThresholdTokens !== undefined ||
99
+ price.inputUsdPerMillionLong !== undefined ||
100
+ price.outputUsdPerMillionLong !== undefined;
101
+ if (!hasAnyLong)
102
+ return true;
103
+ return (price.longContextThresholdTokens !== undefined &&
104
+ price.inputUsdPerMillion !== undefined &&
105
+ price.outputUsdPerMillion !== undefined &&
106
+ price.inputUsdPerMillionLong !== undefined &&
107
+ price.outputUsdPerMillionLong !== undefined);
108
+ }, { message: "Long-context pricing requires longContextThresholdTokens and the full flat/long input/output rate set together." }))
109
+ .optional()
110
+ })
111
+ .optional(),
112
+ output: z
113
+ .object({
114
+ includeRawModelOutputs: z.boolean().default(false),
115
+ includePrompts: z.boolean().default(false)
116
+ })
117
+ .default({ includeRawModelOutputs: false, includePrompts: false })
118
+ });
119
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { BtScore, Candidate, Comparison, ModelDriver, ModelTextResult } from "./schemas.js";
2
+ export type CandidateInput = string | {
3
+ id?: string;
4
+ content: string;
5
+ };
6
+ export interface RankCandidatesOptions {
7
+ task: string;
8
+ rubric?: string;
9
+ candidates: CandidateInput[];
10
+ driver: ModelDriver;
11
+ judgeModel: string;
12
+ runId?: string;
13
+ generation?: number | "final";
14
+ temperature?: number;
15
+ lambda?: number;
16
+ concurrency?: number;
17
+ }
18
+ export interface RankCandidatesResult {
19
+ candidates: Candidate[];
20
+ comparisons: Comparison[];
21
+ scores: BtScore[];
22
+ }
23
+ export interface MutateCandidateOptions {
24
+ task: string;
25
+ rubric?: string;
26
+ candidate: CandidateInput;
27
+ critique: string;
28
+ driver: ModelDriver;
29
+ mutatorModel: string;
30
+ temperature?: number;
31
+ }
32
+ export interface MutateCandidateResult {
33
+ mutated: string;
34
+ model?: string;
35
+ provider?: string;
36
+ usage?: ModelTextResult["usage"];
37
+ }
38
+ export declare function rankCandidates(options: RankCandidatesOptions): Promise<RankCandidatesResult>;
39
+ export declare function mutateCandidate(options: MutateCandidateOptions): Promise<MutateCandidateResult>;
40
+ export declare function normalizeCandidates(candidates: CandidateInput[]): Candidate[];
@@ -0,0 +1,104 @@
1
+ import pLimit from "p-limit";
2
+ import { z } from "zod";
3
+ import { fitBradleyTerry } from "./bradleyTerry.js";
4
+ import { parseJsonObject } from "./json.js";
5
+ import { comparePrompt, mutatePrompt } from "./prompts.js";
6
+ const compareOutputSchema = z.object({
7
+ winner: z.enum(["A", "B", "tie"]),
8
+ confidence: z.number().min(0).max(1).optional(),
9
+ critique_for_A: z.string().optional(),
10
+ critique_for_B: z.string().optional(),
11
+ feedback_a: z.string().optional(),
12
+ feedback_b: z.string().optional(),
13
+ selection_reason: z.string().default("")
14
+ });
15
+ export async function rankCandidates(options) {
16
+ const candidates = normalizeCandidates(options.candidates);
17
+ const comparisons = [];
18
+ const limit = pLimit(options.concurrency ?? 1);
19
+ const tasks = [];
20
+ for (let i = 0; i < candidates.length; i += 1) {
21
+ for (let j = i + 1; j < candidates.length; j += 1) {
22
+ tasks.push(limit(async () => {
23
+ const candidateA = candidates[i];
24
+ const candidateB = candidates[j];
25
+ const prompt = comparePrompt(options.task, candidateA, candidateB, options.rubric);
26
+ const result = await options.driver.compare({
27
+ task: options.task,
28
+ rubric: options.rubric,
29
+ model: options.judgeModel,
30
+ temperature: options.temperature ?? 0,
31
+ candidateA,
32
+ candidateB,
33
+ prompt
34
+ });
35
+ let parsed;
36
+ try {
37
+ parsed = compareOutputSchema.parse(parseJsonObject(result.text));
38
+ }
39
+ catch {
40
+ parsed = undefined;
41
+ }
42
+ const comparison = {
43
+ id: `rank-${i}-${j}`,
44
+ runId: options.runId ?? "rank",
45
+ generation: options.generation ?? "final",
46
+ candidateAId: candidateA.id,
47
+ candidateBId: candidateB.id,
48
+ presentedAOriginalId: candidateA.id,
49
+ presentedBOriginalId: candidateB.id,
50
+ winner: parsed?.winner ?? "tie",
51
+ confidence: parsed?.confidence,
52
+ critiqueForA: parsed?.feedback_a ?? parsed?.critique_for_A ?? (parsed ? "" : "Invalid comparison JSON; recorded as tie."),
53
+ critiqueForB: parsed?.feedback_b ?? parsed?.critique_for_B ?? (parsed ? "" : "Invalid comparison JSON; recorded as tie."),
54
+ selectionReason: parsed?.selection_reason ?? "invalid_json_tie",
55
+ model: result.model,
56
+ provider: result.provider,
57
+ metadata: compactMetadata({
58
+ invalid_json_tie: parsed ? undefined : true,
59
+ model_call_count: 1,
60
+ provider_retry_count: result.retryCount || undefined
61
+ })
62
+ };
63
+ return comparison;
64
+ }));
65
+ }
66
+ }
67
+ comparisons.push(...(await Promise.all(tasks)));
68
+ return {
69
+ candidates,
70
+ comparisons,
71
+ scores: fitBradleyTerry(candidates, comparisons, options.lambda)
72
+ };
73
+ }
74
+ export async function mutateCandidate(options) {
75
+ const candidate = normalizeCandidate(options.candidate, 0);
76
+ const result = await options.driver.mutate({
77
+ task: options.task,
78
+ rubric: options.rubric,
79
+ model: options.mutatorModel,
80
+ temperature: options.temperature ?? 0.6,
81
+ candidate,
82
+ critique: options.critique,
83
+ prompt: mutatePrompt(options.task, candidate, options.critique, options.rubric)
84
+ });
85
+ return { mutated: result.text, model: result.model, provider: result.provider, usage: result.usage };
86
+ }
87
+ export function normalizeCandidates(candidates) {
88
+ return candidates.map((candidate, index) => normalizeCandidate(candidate, index));
89
+ }
90
+ function normalizeCandidate(candidate, index) {
91
+ const value = typeof candidate === "string" ? { content: candidate } : candidate;
92
+ return {
93
+ id: value.id ?? `candidate-${index + 1}`,
94
+ generation: 0,
95
+ kind: "user-supplied",
96
+ content: value.content,
97
+ metadata: { createdAt: new Date().toISOString() }
98
+ };
99
+ }
100
+ function compactMetadata(metadata) {
101
+ const compacted = Object.fromEntries(Object.entries(metadata).filter(([, value]) => value !== undefined));
102
+ return Object.keys(compacted).length > 0 ? compacted : undefined;
103
+ }
104
+ //# sourceMappingURL=services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { RunStatus, UsageRecord } from "./lifecycle.js";
2
+ import type { BtScore, Candidate, Comparison, RunConfig } from "./schemas.js";
3
+ export declare class TraceStore {
4
+ readonly runDir: string;
5
+ private writeQueue;
6
+ constructor(runDir: string);
7
+ init(config: RunConfig, runId: string): Promise<void>;
8
+ event(event: Record<string, unknown>): Promise<void>;
9
+ writeCandidate(candidate: Candidate): Promise<void>;
10
+ writeComparison(comparison: Comparison): Promise<void>;
11
+ writeScores(generation: number | "final", scores: BtScore[]): Promise<void>;
12
+ writePopulation(generation: number, population: Candidate[]): Promise<void>;
13
+ writeSummary(summary: Record<string, unknown>, finalAnswer: string, winnerAnswer?: string): Promise<void>;
14
+ writeStatus(status: RunStatus): Promise<void>;
15
+ writeUsage(record: UsageRecord): Promise<void>;
16
+ readSummary(): Promise<Record<string, unknown>>;
17
+ readJsonl<T>(fileName: string): Promise<T[]>;
18
+ listFiles(): Promise<string[]>;
19
+ private appendJsonl;
20
+ private writeJson;
21
+ private assertFreshTrace;
22
+ }
@@ -0,0 +1,105 @@
1
+ import { access, mkdir, readFile, readdir, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { runArtifactFiles, traceJsonlFiles } from "./artifacts.js";
4
+ import { TraceError } from "./errors.js";
5
+ export class TraceStore {
6
+ runDir;
7
+ // Single-writer queue: every appendJsonl chains onto this promise so concurrent
8
+ // writes (e.g. from pLimit closures writing candidates/comparisons as each
9
+ // call completes) cannot interleave on disk.
10
+ writeQueue = Promise.resolve();
11
+ constructor(runDir) {
12
+ this.runDir = runDir;
13
+ }
14
+ async init(config, runId) {
15
+ await mkdir(join(this.runDir, "artifacts"), { recursive: true });
16
+ await this.assertFreshTrace();
17
+ await this.writeJson(runArtifactFiles.config, redactConfig({ ...config, runId }));
18
+ await this.event({ type: "run.started", run_id: runId, created_at: new Date().toISOString() });
19
+ }
20
+ async event(event) {
21
+ await this.appendJsonl(runArtifactFiles.trace, event);
22
+ }
23
+ async writeCandidate(candidate) {
24
+ await this.appendJsonl(runArtifactFiles.candidates, candidate);
25
+ }
26
+ async writeComparison(comparison) {
27
+ await this.appendJsonl(runArtifactFiles.comparisons, comparison);
28
+ }
29
+ async writeScores(generation, scores) {
30
+ for (const score of scores)
31
+ await this.appendJsonl(runArtifactFiles.scores, score);
32
+ await this.event({ type: "scores.computed", generation });
33
+ }
34
+ async writePopulation(generation, population) {
35
+ await this.writeJson(`population-${generation}.json`, population);
36
+ }
37
+ async writeSummary(summary, finalAnswer, winnerAnswer) {
38
+ if (winnerAnswer !== undefined)
39
+ await writeFile(join(this.runDir, runArtifactFiles.winner), winnerAnswer, "utf8");
40
+ await writeFile(join(this.runDir, runArtifactFiles.final), finalAnswer, "utf8");
41
+ await this.writeJson(runArtifactFiles.summary, summary);
42
+ }
43
+ async writeStatus(status) {
44
+ await this.writeJson(runArtifactFiles.status, status);
45
+ }
46
+ async writeUsage(record) {
47
+ await this.appendJsonl(runArtifactFiles.usage, record);
48
+ }
49
+ async readSummary() {
50
+ return JSON.parse(await readFile(join(this.runDir, runArtifactFiles.summary), "utf8"));
51
+ }
52
+ async readJsonl(fileName) {
53
+ try {
54
+ const text = await readFile(join(this.runDir, fileName), "utf8");
55
+ return text
56
+ .split("\n")
57
+ .filter(Boolean)
58
+ .map((line) => JSON.parse(line));
59
+ }
60
+ catch (error) {
61
+ throw new TraceError(`Could not read ${fileName}: ${error.message}`);
62
+ }
63
+ }
64
+ async listFiles() {
65
+ return readdir(this.runDir);
66
+ }
67
+ async appendJsonl(fileName, value) {
68
+ await mkdir(this.runDir, { recursive: true });
69
+ const next = this.writeQueue.then(() => writeFile(join(this.runDir, fileName), `${JSON.stringify(value)}\n`, { encoding: "utf8", flag: "a" }));
70
+ // Keep the queue alive even if one write rejects, so subsequent appends are not blocked.
71
+ this.writeQueue = next.then(() => undefined, () => undefined);
72
+ await next;
73
+ }
74
+ async writeJson(fileName, value) {
75
+ await mkdir(this.runDir, { recursive: true });
76
+ await writeFile(join(this.runDir, fileName), `${JSON.stringify(value, null, 2)}\n`, "utf8");
77
+ }
78
+ async assertFreshTrace() {
79
+ const traceFiles = [...traceJsonlFiles, runArtifactFiles.summary];
80
+ for (const file of traceFiles) {
81
+ try {
82
+ await access(join(this.runDir, file));
83
+ throw new TraceError(`Run directory already contains ${file}; choose a new --out directory or remove the old trace first.`);
84
+ }
85
+ catch (error) {
86
+ if (error instanceof TraceError)
87
+ throw error;
88
+ }
89
+ }
90
+ }
91
+ }
92
+ function redactConfig(config) {
93
+ return redactValue(config);
94
+ }
95
+ function redactValue(value, key = "") {
96
+ if (/apiKey|api_key|token|secret|password/i.test(key))
97
+ return "[redacted]";
98
+ if (Array.isArray(value))
99
+ return value.map((item) => redactValue(item));
100
+ if (value && typeof value === "object") {
101
+ return Object.fromEntries(Object.entries(value).map(([entryKey, entryValue]) => [entryKey, redactValue(entryValue, entryKey)]));
102
+ }
103
+ return value;
104
+ }
105
+ //# sourceMappingURL=traceStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceStore.js","sourceRoot":"","sources":["../src/traceStore.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@deepthonk/core",
3
+ "version": "0.1.0",
4
+ "description": "Core OpenDeepThink execution engine for DeepThonk.",
5
+ "license": "MIT",
6
+ "author": "Xule Lin",
7
+ "homepage": "https://github.com/linxule/deepthonk#readme",
8
+ "bugs": {
9
+ "url": "https://github.com/linxule/deepthonk/issues"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "type": "module",
15
+ "main": "dist/index.js",
16
+ "types": "dist/index.d.ts",
17
+ "files": [
18
+ "dist",
19
+ "package.json",
20
+ "README.md",
21
+ "LICENSE"
22
+ ],
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js"
27
+ }
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/linxule/deepthonk.git",
32
+ "directory": "packages/core"
33
+ },
34
+ "dependencies": {
35
+ "p-limit": "^6.2.0",
36
+ "zod": "^3.25.28"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc -p tsconfig.json",
40
+ "typecheck": "tsc -p tsconfig.json --noEmit"
41
+ }
42
+ }