@tangle-network/agent-eval 0.118.2 → 0.119.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.
- package/CHANGELOG.md +21 -0
- package/README.md +26 -0
- package/dist/analyst/index.d.ts +143 -21
- package/dist/analyst/index.js +46 -12
- package/dist/analyst/index.js.map +1 -1
- package/dist/benchmarks/index.d.ts +50 -40
- package/dist/benchmarks/index.js +9 -9
- package/dist/campaign/index.d.ts +231 -156
- package/dist/campaign/index.js +8 -8
- package/dist/{chunk-JTMFT5QZ.js → chunk-4I2E3LLO.js} +2 -2
- package/dist/{chunk-BUBU3YHT.js → chunk-6QIM2EAP.js} +6 -116
- package/dist/chunk-6QIM2EAP.js.map +1 -0
- package/dist/{chunk-DZBCDDIE.js → chunk-7A4LIMMY.js} +846 -253
- package/dist/chunk-7A4LIMMY.js.map +1 -0
- package/dist/{chunk-KK2O4VWA.js → chunk-D7AEXSM5.js} +2 -2
- package/dist/{chunk-GCT3DQWU.js → chunk-F6YUH3L4.js} +41 -30
- package/dist/{chunk-GCT3DQWU.js.map → chunk-F6YUH3L4.js.map} +1 -1
- package/dist/{chunk-63KG3ASG.js → chunk-FIUFRXP3.js} +2 -2
- package/dist/{chunk-J23QK2U5.js → chunk-GERDAIAL.js} +8 -8
- package/dist/{chunk-J23QK2U5.js.map → chunk-GERDAIAL.js.map} +1 -1
- package/dist/{chunk-TVXPJJ7H.js → chunk-H5UD2323.js} +2 -2
- package/dist/{chunk-MLHRFWQK.js → chunk-JHOJHHU7.js} +85 -16
- package/dist/chunk-JHOJHHU7.js.map +1 -0
- package/dist/chunk-K4DBDHLK.js +158 -0
- package/dist/chunk-K4DBDHLK.js.map +1 -0
- package/dist/{chunk-DRSFTBKU.js → chunk-LMJ2TGWJ.js} +3 -15
- package/dist/chunk-LMJ2TGWJ.js.map +1 -0
- package/dist/{chunk-EGNRE7VA.js → chunk-PAHNGS65.js} +2 -2
- package/dist/{chunk-I42AAGHL.js → chunk-RLCJQ6VZ.js} +5 -5
- package/dist/{chunk-7V3QDWNL.js → chunk-XJ7JVCHB.js} +2 -2
- package/dist/{chunk-6JQE3YVE.js → chunk-ZYHJNKI3.js} +6 -6
- package/dist/cli.js +2 -2
- package/dist/contract/index.d.ts +257 -160
- package/dist/contract/index.js +11 -11
- package/dist/fuzz.d.ts +19 -1
- package/dist/fuzz.js +1 -1
- package/dist/index.d.ts +170 -64
- package/dist/index.js +30 -28
- package/dist/index.js.map +1 -1
- package/dist/openapi.json +1 -1
- package/dist/primeintellect/index.d.ts +311 -0
- package/dist/primeintellect/index.js +348 -0
- package/dist/primeintellect/index.js.map +1 -0
- package/dist/rl.d.ts +4 -0
- package/dist/{run-campaign-DWC67KJP.js → run-campaign-OBXSN5WK.js} +3 -3
- package/dist/trace-attributes.d.ts +17 -1
- package/dist/trace-attributes.js +27 -3
- package/dist/traces.d.ts +16 -16
- package/dist/traces.js +18 -18
- package/dist/wire/index.d.ts +19 -1
- package/dist/wire/index.js +2 -2
- package/package.json +6 -1
- package/dist/chunk-BUBU3YHT.js.map +0 -1
- package/dist/chunk-DRSFTBKU.js.map +0 -1
- package/dist/chunk-DZBCDDIE.js.map +0 -1
- package/dist/chunk-MLHRFWQK.js.map +0 -1
- package/dist/chunk-NW4AQBXD.js +0 -53
- package/dist/chunk-NW4AQBXD.js.map +0 -1
- /package/dist/{chunk-JTMFT5QZ.js.map → chunk-4I2E3LLO.js.map} +0 -0
- /package/dist/{chunk-KK2O4VWA.js.map → chunk-D7AEXSM5.js.map} +0 -0
- /package/dist/{chunk-63KG3ASG.js.map → chunk-FIUFRXP3.js.map} +0 -0
- /package/dist/{chunk-TVXPJJ7H.js.map → chunk-H5UD2323.js.map} +0 -0
- /package/dist/{chunk-EGNRE7VA.js.map → chunk-PAHNGS65.js.map} +0 -0
- /package/dist/{chunk-I42AAGHL.js.map → chunk-RLCJQ6VZ.js.map} +0 -0
- /package/dist/{chunk-7V3QDWNL.js.map → chunk-XJ7JVCHB.js.map} +0 -0
- /package/dist/{chunk-6JQE3YVE.js.map → chunk-ZYHJNKI3.js.map} +0 -0
- /package/dist/{run-campaign-DWC67KJP.js.map → run-campaign-OBXSN5WK.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/primeintellect/index.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, join } from 'node:path'\nimport { type RunRecord, validateRunRecord } from '../run-record'\n\nexport type PrimeIntellectJson =\n | null\n | boolean\n | number\n | string\n | PrimeIntellectJson[]\n | { [key: string]: PrimeIntellectJson }\n\nexport interface PrimeIntellectMessage {\n role: 'system' | 'user' | 'assistant' | 'tool'\n content: string\n}\n\nexport interface PrimeIntellectScenario {\n id: string\n prompt: string | readonly PrimeIntellectMessage[]\n answer?: string\n requiredSubstrings?: readonly string[]\n split?: string\n info?: Record<string, PrimeIntellectJson>\n}\n\nexport interface PrimeIntellectDatasetRow {\n id: string\n prompt: PrimeIntellectMessage[]\n answer?: string\n required_substrings?: string[]\n split?: string\n info: Record<string, PrimeIntellectJson>\n}\n\nexport type PrimeIntellectScenarioMap =\n | ReadonlyMap<string, PrimeIntellectScenario>\n | Record<string, PrimeIntellectScenario>\n | readonly PrimeIntellectScenario[]\n\nexport interface PrimeIntellectRowsFromRunRecordsOptions {\n records: readonly RunRecord[]\n scenarios: PrimeIntellectScenarioMap\n requireScorable?: boolean\n includeFailed?: boolean\n}\n\nexport interface PrimeIntellectEnvironmentPackageInput {\n name: string\n version?: string\n description?: string\n tags?: readonly string[]\n moduleName?: string\n rows: readonly PrimeIntellectDatasetRow[]\n runRecords?: readonly RunRecord[]\n systemPrompt?: string\n verifiersVersion?: string\n dependencies?: readonly string[]\n readme?: string\n}\n\nexport interface PrimeIntellectPackageFile {\n path: string\n content: string\n}\n\nexport interface PrimeIntellectPackageManifest {\n schemaVersion: 1\n name: string\n moduleName: string\n version: string\n rowCount: number\n runRecordCount: number\n artifactKinds: readonly ['environment', 'dataset', 'run_records']\n}\n\nexport interface PrimeIntellectEnvironmentPackage {\n files: PrimeIntellectPackageFile[]\n manifest: PrimeIntellectPackageManifest\n}\n\nexport class PrimeIntellectBridgeError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'PrimeIntellectBridgeError'\n }\n}\n\nexport function primeIntellectRowsFromRunRecords(\n options: PrimeIntellectRowsFromRunRecordsOptions,\n): PrimeIntellectDatasetRow[] {\n const scenarioById = normalizeScenarios(options.scenarios)\n const requireScorable = options.requireScorable ?? true\n const includeFailed = options.includeFailed ?? true\n const rows: PrimeIntellectDatasetRow[] = []\n\n for (const record of options.records) {\n const validRecord = validateRunRecord(record)\n if (!includeFailed && validRecord.failureMode) continue\n\n const scenarioId = validRecord.scenarioId\n if (!scenarioId) {\n throw new PrimeIntellectBridgeError(\n `RunRecord ${validRecord.runId} is missing scenarioId; PrimeIntellect rows need stable task ids`,\n )\n }\n\n const scenario = scenarioById.get(scenarioId)\n if (!scenario) {\n throw new PrimeIntellectBridgeError(\n `RunRecord ${validRecord.runId} references unknown scenarioId ${JSON.stringify(scenarioId)}`,\n )\n }\n\n const hasAnswer = typeof scenario.answer === 'string' && scenario.answer.trim().length > 0\n const hasRequiredSubstrings = (scenario.requiredSubstrings?.length ?? 0) > 0\n if (requireScorable && !hasAnswer && !hasRequiredSubstrings) {\n throw new PrimeIntellectBridgeError(\n `Scenario ${scenario.id} has no answer or requiredSubstrings; generated environments would always score 0`,\n )\n }\n\n const score = validRecord.outcome.holdoutScore ?? validRecord.outcome.searchScore ?? null\n const split = scenario.split ?? validRecord.splitTag\n const tangleInfo = {\n run_id: validRecord.runId,\n experiment_id: validRecord.experimentId,\n candidate_id: validRecord.candidateId,\n scenario_id: scenarioId,\n split,\n score,\n cost_usd: validRecord.costUsd,\n wall_ms: validRecord.wallMs,\n failure_mode: validRecord.failureMode ?? null,\n model: validRecord.model,\n commit_sha: validRecord.commitSha,\n } satisfies Record<string, PrimeIntellectJson>\n\n rows.push({\n id: `${scenarioId}:${validRecord.runId}`,\n prompt: normalizePrompt(scenario.prompt),\n ...(hasAnswer ? { answer: scenario.answer } : {}),\n ...(hasRequiredSubstrings\n ? { required_substrings: [...(scenario.requiredSubstrings ?? [])] }\n : {}),\n split,\n info: {\n ...(scenario.info ?? {}),\n tangle: tangleInfo,\n },\n })\n }\n\n return rows\n}\n\nexport function buildPrimeIntellectEnvironmentPackage(\n input: PrimeIntellectEnvironmentPackageInput,\n): PrimeIntellectEnvironmentPackage {\n if (input.rows.length === 0) {\n throw new PrimeIntellectBridgeError('cannot build a PrimeIntellect environment with zero rows')\n }\n\n for (const record of input.runRecords ?? []) {\n validateRunRecord(record)\n }\n\n const moduleName = input.moduleName ?? toPythonModuleName(input.name)\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(moduleName)) {\n throw new PrimeIntellectBridgeError(\n `moduleName ${JSON.stringify(moduleName)} is not a valid Python module name`,\n )\n }\n\n const version = input.version ?? '0.1.0'\n const description =\n input.description ?? 'PrimeIntellect Verifiers environment exported from Tangle runs.'\n const verifiersVersion = input.verifiersVersion ?? '>=0.2.0,<0.3.0'\n const dependencies = unique([\n 'datasets',\n `verifiers${verifiersVersion}`,\n ...(input.dependencies ?? []),\n ])\n const tags = unique(['tangle', 'agent-eval', ...(input.tags ?? [])])\n const manifest: PrimeIntellectPackageManifest = {\n schemaVersion: 1,\n name: input.name,\n moduleName,\n version,\n rowCount: input.rows.length,\n runRecordCount: input.runRecords?.length ?? 0,\n artifactKinds: ['environment', 'dataset', 'run_records'],\n }\n\n const files: PrimeIntellectPackageFile[] = [\n {\n path: 'pyproject.toml',\n content: renderPyproject({\n name: input.name,\n version,\n description,\n dependencies,\n tags,\n }),\n },\n {\n path: 'README.md',\n content: input.readme ?? renderReadme({ name: input.name, description }),\n },\n {\n path: `${moduleName}.py`,\n content: renderEnvironmentModule({\n systemPrompt: input.systemPrompt,\n }),\n },\n {\n path: 'data/dataset.jsonl',\n content: toJsonl(input.rows),\n },\n {\n path: 'data/run_records.jsonl',\n content: toJsonl(input.runRecords ?? []),\n },\n {\n path: 'tangle-primeintellect-manifest.json',\n content: `${stableJson(manifest)}\\n`,\n },\n ]\n\n return { files, manifest }\n}\n\nexport async function writePrimeIntellectEnvironmentPackage(\n root: string,\n input: PrimeIntellectEnvironmentPackageInput,\n): Promise<PrimeIntellectEnvironmentPackage> {\n const pkg = buildPrimeIntellectEnvironmentPackage(input)\n await Promise.all(\n pkg.files.map(async (file) => {\n const target = join(root, file.path)\n await mkdir(dirname(target), { recursive: true })\n await writeFile(target, file.content, 'utf8')\n }),\n )\n return pkg\n}\n\nfunction normalizeScenarios(\n scenarios: PrimeIntellectScenarioMap,\n): Map<string, PrimeIntellectScenario> {\n const map = new Map<string, PrimeIntellectScenario>()\n if (scenarios instanceof Map) {\n for (const [id, scenario] of scenarios.entries()) {\n map.set(id, { ...scenario, id: scenario.id ?? id })\n }\n return map\n }\n\n const values = Array.isArray(scenarios) ? scenarios : Object.values(scenarios)\n for (const scenario of values) {\n if (!scenario.id) {\n throw new PrimeIntellectBridgeError('every PrimeIntellect scenario needs an id')\n }\n if (map.has(scenario.id)) {\n throw new PrimeIntellectBridgeError(`duplicate PrimeIntellect scenario id ${scenario.id}`)\n }\n map.set(scenario.id, scenario)\n }\n return map\n}\n\nfunction normalizePrompt(\n prompt: string | readonly PrimeIntellectMessage[],\n): PrimeIntellectMessage[] {\n if (typeof prompt === 'string') {\n return [{ role: 'user', content: prompt }]\n }\n return prompt.map((message) => ({ role: message.role, content: message.content }))\n}\n\nfunction toPythonModuleName(name: string): string {\n return name\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9_]+/g, '_')\n .replace(/^_+|_+$/g, '')\n .replace(/^[0-9]/, '_$&')\n}\n\nfunction unique(values: readonly string[]): string[] {\n return [...new Set(values)]\n}\n\nfunction toJsonl(values: readonly unknown[]): string {\n if (values.length === 0) return ''\n return `${values.map((value) => stableJson(value)).join('\\n')}\\n`\n}\n\nfunction stableJson(value: unknown): string {\n return JSON.stringify(sortJson(value))\n}\n\nfunction sortJson(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortJson)\n if (value === null || typeof value !== 'object') return value\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, nested]) => [key, sortJson(nested)]),\n )\n}\n\nfunction renderPyproject(input: {\n name: string\n version: string\n description: string\n dependencies: readonly string[]\n tags: readonly string[]\n}): string {\n return `[project]\nname = ${tomlString(input.name)}\nversion = ${tomlString(input.version)}\ndescription = ${tomlString(input.description)}\nreadme = \"README.md\"\nrequires-python = \">=3.11\"\nlicense = \"MIT\"\nkeywords = ${tomlArray(input.tags)}\ndependencies = ${tomlArray(input.dependencies)}\n\n[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[tool.hatch.build]\ninclude = [\"*.py\", \"README.md\", \"data/*.jsonl\", \"tangle-primeintellect-manifest.json\"]\n\n[tool.uv]\nprerelease = \"allow\"\n\n[tool.verifiers.eval]\nnum_examples = 5\nrollouts_per_example = 3\n`\n}\n\nfunction renderReadme(input: { name: string; description: string }): string {\n return `# ${input.name}\n\n${input.description}\n\nGenerated by \\`@tangle-network/agent-eval/primeintellect\\` from validated Tangle \\`RunRecord\\` rows.\n\n## Files\n\n- \\`data/dataset.jsonl\\`: prompts and scoring references for PrimeIntellect Verifiers.\n- \\`data/run_records.jsonl\\`: original Tangle run rows for provenance and analysis.\n- \\`tangle-primeintellect-manifest.json\\`: export metadata.\n\n## Local check\n\n\\`\\`\\`sh\nuv pip install --prerelease=allow -e .\nuv run vf-eval ${input.name}\n\\`\\`\\`\n\n## Upload\n\n\\`\\`\\`sh\nprime login\nprime env push\n\\`\\`\\`\n`\n}\n\nfunction renderEnvironmentModule(input: { systemPrompt?: string }): string {\n const systemPrompt = input.systemPrompt === undefined ? 'None' : pyString(input.systemPrompt)\n return `import json\nimport re\nfrom pathlib import Path\n\nfrom datasets import Dataset\nimport verifiers as vf\n\n\nDATA_PATH = Path(__file__).parent / \"data\" / \"dataset.jsonl\"\nDEFAULT_SYSTEM_PROMPT = ${systemPrompt}\n\n\ndef _load_rows(dataset_path=None, dataset_split=None):\n path = Path(dataset_path) if dataset_path is not None else DATA_PATH\n rows = []\n with path.open(\"r\", encoding=\"utf-8\") as handle:\n for line in handle:\n row = json.loads(line)\n if dataset_split is None or row.get(\"split\") == dataset_split:\n rows.append(row)\n if not rows:\n raise ValueError(f\"No dataset rows found in {path} for split={dataset_split!r}\")\n return rows\n\n\ndef _message_text(message):\n if isinstance(message, dict):\n content = message.get(\"content\", \"\")\n else:\n content = getattr(message, \"content\", \"\")\n if isinstance(content, list):\n return \" \".join(\n str(part.get(\"text\", part)) if isinstance(part, dict) else str(part)\n for part in content\n )\n return str(content)\n\n\ndef _completion_text(completion):\n if isinstance(completion, str):\n return completion\n if isinstance(completion, list):\n return \"\\\\n\".join(_message_text(message) for message in completion)\n return _message_text(completion)\n\n\ndef _normalize(text):\n return re.sub(r\"\\\\s+\", \" \", str(text).strip().lower())\n\n\nasync def tangle_reward(completion, answer=None, required_substrings=None, **kwargs):\n response = _normalize(_completion_text(completion))\n scores = []\n if answer:\n expected = _normalize(answer)\n scores.append(1.0 if expected == response or expected in response else 0.0)\n if required_substrings:\n required = [_normalize(item) for item in required_substrings]\n hits = sum(1 for item in required if item and item in response)\n scores.append(hits / len(required))\n return max(scores) if scores else 0.0\n\n\ndef build_dataset(dataset_path=None, dataset_split=None):\n return Dataset.from_list(_load_rows(dataset_path=dataset_path, dataset_split=dataset_split))\n\n\ndef load_environment(dataset_path=None, dataset_split=None, system_prompt=DEFAULT_SYSTEM_PROMPT):\n rubric = vf.Rubric(funcs=[tangle_reward])\n return vf.SingleTurnEnv(\n dataset=lambda: build_dataset(dataset_path=dataset_path, dataset_split=dataset_split),\n system_prompt=system_prompt,\n rubric=rubric,\n )\n`\n}\n\nfunction tomlString(value: string): string {\n return JSON.stringify(value)\n}\n\nfunction tomlArray(values: readonly string[]): string {\n return `[${values.map(tomlString).join(', ')}]`\n}\n\nfunction pyString(value: string): string {\n return JSON.stringify(value)\n}\n"],"mappings":"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","names":[]}
|
package/dist/rl.d.ts
CHANGED
|
@@ -2384,7 +2384,9 @@ interface ChannelRollup {
|
|
|
2384
2384
|
calls: number;
|
|
2385
2385
|
inputTokens: number;
|
|
2386
2386
|
outputTokens: number;
|
|
2387
|
+
reasoningTokens?: number;
|
|
2387
2388
|
cachedTokens: number;
|
|
2389
|
+
cacheWriteTokens?: number;
|
|
2388
2390
|
costUsd: number;
|
|
2389
2391
|
unpricedCalls: number;
|
|
2390
2392
|
unknownUsageCalls: number;
|
|
@@ -2396,7 +2398,9 @@ interface CostLedgerSummary {
|
|
|
2396
2398
|
reservedCostUsd: number;
|
|
2397
2399
|
inputTokens: number;
|
|
2398
2400
|
outputTokens: number;
|
|
2401
|
+
reasoningTokens?: number;
|
|
2399
2402
|
cachedTokens: number;
|
|
2403
|
+
cacheWriteTokens?: number;
|
|
2400
2404
|
totalCostUsd: number;
|
|
2401
2405
|
byChannel: ChannelRollup[];
|
|
2402
2406
|
unpricedModels: string[];
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
planCampaignRun,
|
|
3
3
|
runCampaign
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PAHNGS65.js";
|
|
5
5
|
import "./chunk-PJQFMIOX.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-JHOJHHU7.js";
|
|
7
7
|
import "./chunk-VI2UW6B6.js";
|
|
8
8
|
import "./chunk-ONWEPEDO.js";
|
|
9
9
|
import "./chunk-PZ5AY32C.js";
|
|
@@ -11,4 +11,4 @@ export {
|
|
|
11
11
|
planCampaignRun,
|
|
12
12
|
runCampaign
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=run-campaign-
|
|
14
|
+
//# sourceMappingURL=run-campaign-OBXSN5WK.js.map
|
|
@@ -14,6 +14,22 @@ declare const TOOL_ARGS_CAPTURED = "tool.args_captured";
|
|
|
14
14
|
declare const TOOL_LATENCY_MS = "tool.latency_ms";
|
|
15
15
|
declare const INPUT_VALUE = "input.value";
|
|
16
16
|
declare const OUTPUT_VALUE = "output.value";
|
|
17
|
+
declare const SPAN_KIND_ATTR_KEYS: readonly ["openinference.span.kind", "inference.observation_kind"];
|
|
18
|
+
declare const LLM_MODEL_ATTR_KEYS: readonly ["llm.model_name", "inference.llm.model_name", "llm.model", ...string[], "tangle.model"];
|
|
19
|
+
declare const LLM_INPUT_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt", "inference.llm.input_tokens", "llm.input_tokens", ...string[], "tangle.tokens.in", "tokens.in"];
|
|
20
|
+
declare const LLM_OUTPUT_TOKEN_ATTR_KEYS: readonly ["llm.token_count.completion", "inference.llm.output_tokens", "llm.output_tokens", ...string[], "tangle.tokens.out", "tokens.out"];
|
|
21
|
+
/** Reasoning-token subset of output, when a producer exposes it separately. */
|
|
22
|
+
declare const LLM_REASONING_TOKEN_ATTR_KEYS: readonly ["llm.token_count.reasoning", "inference.llm.reasoning_tokens", "llm.reasoning_tokens", "gen_ai.usage.reasoning_tokens", "gen_ai.usage.reasoning_output_tokens", "reasoning_tokens", "reasoning_output_tokens", "tangle.tokens.reasoning", "gen_ai.usage.output_tokens_details.reasoning_tokens", "gen_ai.usage.completion_tokens_details.reasoning_tokens"];
|
|
23
|
+
declare const LLM_CACHED_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt_cache_hit", "inference.llm.cached_tokens", "llm.cached_tokens", "gen_ai.usage.cached_tokens", "gen_ai.usage.prompt_tokens_details.cached_tokens", "gen_ai.usage.input_tokens_details.cached_tokens", "gen_ai.usage.cache_read_tokens", "gen_ai.usage.cache_read_input_tokens", "cache_read_tokens", "cache_read_input_tokens", "input_cache_read", "tangle.tokens.cached"];
|
|
24
|
+
declare const LLM_CACHE_WRITE_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt_cache_write", "inference.llm.cache_write_tokens", "llm.cache_write_tokens", "gen_ai.usage.cache_creation_tokens", "gen_ai.usage.cache_creation_input_tokens", "cache_creation_tokens", "cache_creation_input_tokens", "input_cache_creation", "tangle.tokens.cache_write"];
|
|
25
|
+
declare const LLM_COST_ATTR_KEYS: readonly ["llm.cost_usd", "inference.llm.cost.total", "llm.cost.total", "gen_ai.usage.cost", "gen_ai.usage.cost_usd", "tangle.cost.usd", "cost.usd", "cost"];
|
|
26
|
+
/** Explicit run-total cost keys safe to preserve on an untyped span. */
|
|
27
|
+
declare const RUN_COST_ATTR_KEYS: readonly ["tangle.cost.usd", "cost.usd"];
|
|
28
|
+
declare const TOOL_NAME_ATTR_KEYS: readonly ["tool.name", "inference.tool.name"];
|
|
29
|
+
/** Read a numeric attribute, tolerating numeric strings; `null` if absent or invalid. */
|
|
30
|
+
declare function asNumber(value: unknown): number | null;
|
|
31
|
+
/** First finite numeric value across a list of candidate attribute keys. */
|
|
32
|
+
declare function firstNumberAttr(attributes: Record<string, unknown>, keys: readonly string[]): number | null;
|
|
17
33
|
/** Sum producer-supplied, mutually exclusive prompt-token categories. */
|
|
18
34
|
declare function contextInputTokens(usage: {
|
|
19
35
|
inputTokens?: number | null;
|
|
@@ -33,4 +49,4 @@ interface LlmSpanOtlpInput {
|
|
|
33
49
|
/** Write the canonical LLM attributes shared by trace producers. */
|
|
34
50
|
declare function applyLlmSpanOtlpAttributes(attributes: Record<string, unknown>, span: LlmSpanOtlpInput): void;
|
|
35
51
|
|
|
36
|
-
export { INPUT_VALUE, LLM_CACHED_TOKENS, LLM_CACHE_WRITE_TOKENS, LLM_CONTEXT_TOKENS, LLM_COST_USD, LLM_INPUT_TOKENS, LLM_MODEL_NAME, LLM_OUTPUT_TOKENS, LLM_REASONING_TOKENS, type LlmSpanOtlpInput, OPENINFERENCE_SPAN_KIND, OUTPUT_VALUE, TOOL_ARGS_CAPTURED, TOOL_LATENCY_MS, TOOL_NAME, applyLlmSpanOtlpAttributes, contextInputTokens };
|
|
52
|
+
export { INPUT_VALUE, LLM_CACHED_TOKENS, LLM_CACHED_TOKEN_ATTR_KEYS, LLM_CACHE_WRITE_TOKENS, LLM_CACHE_WRITE_TOKEN_ATTR_KEYS, LLM_CONTEXT_TOKENS, LLM_COST_ATTR_KEYS, LLM_COST_USD, LLM_INPUT_TOKENS, LLM_INPUT_TOKEN_ATTR_KEYS, LLM_MODEL_ATTR_KEYS, LLM_MODEL_NAME, LLM_OUTPUT_TOKENS, LLM_OUTPUT_TOKEN_ATTR_KEYS, LLM_REASONING_TOKENS, LLM_REASONING_TOKEN_ATTR_KEYS, type LlmSpanOtlpInput, OPENINFERENCE_SPAN_KIND, OUTPUT_VALUE, RUN_COST_ATTR_KEYS, SPAN_KIND_ATTR_KEYS, TOOL_ARGS_CAPTURED, TOOL_LATENCY_MS, TOOL_NAME, TOOL_NAME_ATTR_KEYS, applyLlmSpanOtlpAttributes, asNumber, contextInputTokens, firstNumberAttr };
|
package/dist/trace-attributes.js
CHANGED
|
@@ -1,38 +1,62 @@
|
|
|
1
1
|
import {
|
|
2
2
|
INPUT_VALUE,
|
|
3
3
|
LLM_CACHED_TOKENS,
|
|
4
|
+
LLM_CACHED_TOKEN_ATTR_KEYS,
|
|
4
5
|
LLM_CACHE_WRITE_TOKENS,
|
|
6
|
+
LLM_CACHE_WRITE_TOKEN_ATTR_KEYS,
|
|
5
7
|
LLM_CONTEXT_TOKENS,
|
|
8
|
+
LLM_COST_ATTR_KEYS,
|
|
6
9
|
LLM_COST_USD,
|
|
7
10
|
LLM_INPUT_TOKENS,
|
|
11
|
+
LLM_INPUT_TOKEN_ATTR_KEYS,
|
|
12
|
+
LLM_MODEL_ATTR_KEYS,
|
|
8
13
|
LLM_MODEL_NAME,
|
|
9
14
|
LLM_OUTPUT_TOKENS,
|
|
15
|
+
LLM_OUTPUT_TOKEN_ATTR_KEYS,
|
|
10
16
|
LLM_REASONING_TOKENS,
|
|
17
|
+
LLM_REASONING_TOKEN_ATTR_KEYS,
|
|
11
18
|
OPENINFERENCE_SPAN_KIND,
|
|
12
19
|
OUTPUT_VALUE,
|
|
20
|
+
RUN_COST_ATTR_KEYS,
|
|
21
|
+
SPAN_KIND_ATTR_KEYS,
|
|
13
22
|
TOOL_ARGS_CAPTURED,
|
|
14
23
|
TOOL_LATENCY_MS,
|
|
15
24
|
TOOL_NAME,
|
|
25
|
+
TOOL_NAME_ATTR_KEYS,
|
|
16
26
|
applyLlmSpanOtlpAttributes,
|
|
17
|
-
|
|
18
|
-
|
|
27
|
+
asNumber,
|
|
28
|
+
contextInputTokens,
|
|
29
|
+
firstNumberAttr
|
|
30
|
+
} from "./chunk-K4DBDHLK.js";
|
|
19
31
|
import "./chunk-PZ5AY32C.js";
|
|
20
32
|
export {
|
|
21
33
|
INPUT_VALUE,
|
|
22
34
|
LLM_CACHED_TOKENS,
|
|
35
|
+
LLM_CACHED_TOKEN_ATTR_KEYS,
|
|
23
36
|
LLM_CACHE_WRITE_TOKENS,
|
|
37
|
+
LLM_CACHE_WRITE_TOKEN_ATTR_KEYS,
|
|
24
38
|
LLM_CONTEXT_TOKENS,
|
|
39
|
+
LLM_COST_ATTR_KEYS,
|
|
25
40
|
LLM_COST_USD,
|
|
26
41
|
LLM_INPUT_TOKENS,
|
|
42
|
+
LLM_INPUT_TOKEN_ATTR_KEYS,
|
|
43
|
+
LLM_MODEL_ATTR_KEYS,
|
|
27
44
|
LLM_MODEL_NAME,
|
|
28
45
|
LLM_OUTPUT_TOKENS,
|
|
46
|
+
LLM_OUTPUT_TOKEN_ATTR_KEYS,
|
|
29
47
|
LLM_REASONING_TOKENS,
|
|
48
|
+
LLM_REASONING_TOKEN_ATTR_KEYS,
|
|
30
49
|
OPENINFERENCE_SPAN_KIND,
|
|
31
50
|
OUTPUT_VALUE,
|
|
51
|
+
RUN_COST_ATTR_KEYS,
|
|
52
|
+
SPAN_KIND_ATTR_KEYS,
|
|
32
53
|
TOOL_ARGS_CAPTURED,
|
|
33
54
|
TOOL_LATENCY_MS,
|
|
34
55
|
TOOL_NAME,
|
|
56
|
+
TOOL_NAME_ATTR_KEYS,
|
|
35
57
|
applyLlmSpanOtlpAttributes,
|
|
36
|
-
|
|
58
|
+
asNumber,
|
|
59
|
+
contextInputTokens,
|
|
60
|
+
firstNumberAttr
|
|
37
61
|
};
|
|
38
62
|
//# sourceMappingURL=trace-attributes.js.map
|
package/dist/traces.d.ts
CHANGED
|
@@ -1200,6 +1200,22 @@ declare const TOOL_ARGS_CAPTURED = "tool.args_captured";
|
|
|
1200
1200
|
declare const TOOL_LATENCY_MS = "tool.latency_ms";
|
|
1201
1201
|
declare const INPUT_VALUE = "input.value";
|
|
1202
1202
|
declare const OUTPUT_VALUE = "output.value";
|
|
1203
|
+
declare const SPAN_KIND_ATTR_KEYS: readonly ["openinference.span.kind", "inference.observation_kind"];
|
|
1204
|
+
declare const LLM_MODEL_ATTR_KEYS: readonly ["llm.model_name", "inference.llm.model_name", "llm.model", ...string[], "tangle.model"];
|
|
1205
|
+
declare const LLM_INPUT_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt", "inference.llm.input_tokens", "llm.input_tokens", ...string[], "tangle.tokens.in", "tokens.in"];
|
|
1206
|
+
declare const LLM_OUTPUT_TOKEN_ATTR_KEYS: readonly ["llm.token_count.completion", "inference.llm.output_tokens", "llm.output_tokens", ...string[], "tangle.tokens.out", "tokens.out"];
|
|
1207
|
+
/** Reasoning-token subset of output, when a producer exposes it separately. */
|
|
1208
|
+
declare const LLM_REASONING_TOKEN_ATTR_KEYS: readonly ["llm.token_count.reasoning", "inference.llm.reasoning_tokens", "llm.reasoning_tokens", "gen_ai.usage.reasoning_tokens", "gen_ai.usage.reasoning_output_tokens", "reasoning_tokens", "reasoning_output_tokens", "tangle.tokens.reasoning", "gen_ai.usage.output_tokens_details.reasoning_tokens", "gen_ai.usage.completion_tokens_details.reasoning_tokens"];
|
|
1209
|
+
declare const LLM_CACHED_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt_cache_hit", "inference.llm.cached_tokens", "llm.cached_tokens", "gen_ai.usage.cached_tokens", "gen_ai.usage.prompt_tokens_details.cached_tokens", "gen_ai.usage.input_tokens_details.cached_tokens", "gen_ai.usage.cache_read_tokens", "gen_ai.usage.cache_read_input_tokens", "cache_read_tokens", "cache_read_input_tokens", "input_cache_read", "tangle.tokens.cached"];
|
|
1210
|
+
declare const LLM_CACHE_WRITE_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt_cache_write", "inference.llm.cache_write_tokens", "llm.cache_write_tokens", "gen_ai.usage.cache_creation_tokens", "gen_ai.usage.cache_creation_input_tokens", "cache_creation_tokens", "cache_creation_input_tokens", "input_cache_creation", "tangle.tokens.cache_write"];
|
|
1211
|
+
declare const LLM_COST_ATTR_KEYS: readonly ["llm.cost_usd", "inference.llm.cost.total", "llm.cost.total", "gen_ai.usage.cost", "gen_ai.usage.cost_usd", "tangle.cost.usd", "cost.usd", "cost"];
|
|
1212
|
+
/** Explicit run-total cost keys safe to preserve on an untyped span. */
|
|
1213
|
+
declare const RUN_COST_ATTR_KEYS: readonly ["tangle.cost.usd", "cost.usd"];
|
|
1214
|
+
declare const TOOL_NAME_ATTR_KEYS: readonly ["tool.name", "inference.tool.name"];
|
|
1215
|
+
/** Read a numeric attribute, tolerating numeric strings; `null` if absent or invalid. */
|
|
1216
|
+
declare function asNumber(value: unknown): number | null;
|
|
1217
|
+
/** First finite numeric value across a list of candidate attribute keys. */
|
|
1218
|
+
declare function firstNumberAttr(attributes: Record<string, unknown>, keys: readonly string[]): number | null;
|
|
1203
1219
|
/** Sum producer-supplied, mutually exclusive prompt-token categories. */
|
|
1204
1220
|
declare function contextInputTokens(usage: {
|
|
1205
1221
|
inputTokens?: number | null;
|
|
@@ -1221,18 +1237,6 @@ declare function applyLlmSpanOtlpAttributes(attributes: Record<string, unknown>,
|
|
|
1221
1237
|
|
|
1222
1238
|
/** Canonical OpenInference-over-OTLP attribute vocabulary used at the trace boundary. */
|
|
1223
1239
|
|
|
1224
|
-
declare const SPAN_KIND_ATTR_KEYS: readonly ["openinference.span.kind", "inference.observation_kind"];
|
|
1225
|
-
declare const LLM_MODEL_ATTR_KEYS: readonly ["llm.model_name", "inference.llm.model_name", "llm.model", ...string[], "tangle.model"];
|
|
1226
|
-
declare const LLM_INPUT_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt", "inference.llm.input_tokens", "llm.input_tokens", ...string[], "tangle.tokens.in", "tokens.in"];
|
|
1227
|
-
declare const LLM_OUTPUT_TOKEN_ATTR_KEYS: readonly ["llm.token_count.completion", "inference.llm.output_tokens", "llm.output_tokens", ...string[], "tangle.tokens.out", "tokens.out"];
|
|
1228
|
-
/** Reasoning-token subset of output, when a producer exposes it separately. */
|
|
1229
|
-
declare const LLM_REASONING_TOKEN_ATTR_KEYS: readonly ["llm.token_count.reasoning", "inference.llm.reasoning_tokens", "llm.reasoning_tokens", "gen_ai.usage.reasoning_tokens", "gen_ai.usage.reasoning_output_tokens", "reasoning_tokens", "reasoning_output_tokens", "tangle.tokens.reasoning", "gen_ai.usage.output_tokens_details.reasoning_tokens", "gen_ai.usage.completion_tokens_details.reasoning_tokens"];
|
|
1230
|
-
declare const LLM_CACHED_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt_cache_hit", "inference.llm.cached_tokens", "llm.cached_tokens", "gen_ai.usage.cached_tokens", "gen_ai.usage.prompt_tokens_details.cached_tokens", "gen_ai.usage.input_tokens_details.cached_tokens", "gen_ai.usage.cache_read_tokens", "gen_ai.usage.cache_read_input_tokens", "cache_read_tokens", "cache_read_input_tokens", "input_cache_read", "tangle.tokens.cached"];
|
|
1231
|
-
declare const LLM_CACHE_WRITE_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt_cache_write", "inference.llm.cache_write_tokens", "llm.cache_write_tokens", "gen_ai.usage.cache_creation_tokens", "gen_ai.usage.cache_creation_input_tokens", "cache_creation_tokens", "cache_creation_input_tokens", "input_cache_creation", "tangle.tokens.cache_write"];
|
|
1232
|
-
declare const LLM_COST_ATTR_KEYS: readonly ["llm.cost_usd", "inference.llm.cost.total", "llm.cost.total", "gen_ai.usage.cost", "gen_ai.usage.cost_usd", "tangle.cost.usd", "cost.usd", "cost"];
|
|
1233
|
-
/** Explicit run-total cost keys safe to preserve on an untyped span. */
|
|
1234
|
-
declare const RUN_COST_ATTR_KEYS: readonly ["tangle.cost.usd", "cost.usd"];
|
|
1235
|
-
declare const TOOL_NAME_ATTR_KEYS: readonly ["tool.name", "inference.tool.name"];
|
|
1236
1240
|
type ToolSpanOtlpInput = Pick<ToolSpan, 'toolName' | 'args' | 'argsCaptured' | 'result' | 'latencyMs'>;
|
|
1237
1241
|
declare function applyToolSpanOtlpAttributes(attributes: Record<string, unknown>, span: ToolSpanOtlpInput): void;
|
|
1238
1242
|
declare function traceSpanKindToOpenInferenceKind(kind: string): string;
|
|
@@ -2032,10 +2036,6 @@ declare function inferOtlpKind(attrs: Record<string, unknown>): TraceAnalystSpan
|
|
|
2032
2036
|
declare function extractOtlpAttributes(raw: Record<string, unknown>): Record<string, unknown>;
|
|
2033
2037
|
declare function stringField(raw: Record<string, unknown>, key: string): string | undefined;
|
|
2034
2038
|
declare function asString(v: unknown): string | null;
|
|
2035
|
-
/** Read a numeric attribute, tolerating numeric strings; `null` if absent/NaN. */
|
|
2036
|
-
declare function asNumber(v: unknown): number | null;
|
|
2037
|
-
/** First finite numeric value across a list of candidate attribute keys. */
|
|
2038
|
-
declare function firstNumberAttr(attrs: Record<string, unknown>, keys: readonly string[]): number | null;
|
|
2039
2039
|
/** First non-empty string value across a list of candidate attribute keys. */
|
|
2040
2040
|
declare function firstStringAttr(attrs: Record<string, unknown>, keys: readonly string[]): string | null;
|
|
2041
2041
|
|
package/dist/traces.js
CHANGED
|
@@ -27,8 +27,8 @@ import {
|
|
|
27
27
|
scoreTraceInsightReadiness,
|
|
28
28
|
tokenizeDomainWords,
|
|
29
29
|
traceAnalystOnRunComplete
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import "./chunk-
|
|
30
|
+
} from "./chunk-ZYHJNKI3.js";
|
|
31
|
+
import "./chunk-H5UD2323.js";
|
|
32
32
|
import {
|
|
33
33
|
extractUsage,
|
|
34
34
|
extractUsageFromResponse,
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
TRACE_ANALYST_ACTOR_DESCRIPTION_VERSION,
|
|
51
51
|
TRACE_ANALYST_SUBAGENT_DESCRIPTION,
|
|
52
52
|
analyzeTraces
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-FIUFRXP3.js";
|
|
54
54
|
import {
|
|
55
55
|
DEFAULT_REDACTION_RULES,
|
|
56
56
|
REDACTION_VERSION,
|
|
@@ -59,27 +59,15 @@ import {
|
|
|
59
59
|
} from "./chunk-GGE4NNQT.js";
|
|
60
60
|
import {
|
|
61
61
|
DEFAULT_TRACE_ANALYST_BUDGETS,
|
|
62
|
-
LLM_CACHED_TOKEN_ATTR_KEYS,
|
|
63
|
-
LLM_CACHE_WRITE_TOKEN_ATTR_KEYS,
|
|
64
|
-
LLM_COST_ATTR_KEYS,
|
|
65
|
-
LLM_INPUT_TOKEN_ATTR_KEYS,
|
|
66
|
-
LLM_MODEL_ATTR_KEYS,
|
|
67
|
-
LLM_OUTPUT_TOKEN_ATTR_KEYS,
|
|
68
|
-
LLM_REASONING_TOKEN_ATTR_KEYS,
|
|
69
62
|
OtlpFileTraceStore,
|
|
70
|
-
RUN_COST_ATTR_KEYS,
|
|
71
|
-
SPAN_KIND_ATTR_KEYS,
|
|
72
63
|
SpanNotFoundError,
|
|
73
|
-
TOOL_NAME_ATTR_KEYS,
|
|
74
64
|
TRACE_ANALYST_TRUNCATION_MARKER_PREFIX,
|
|
75
65
|
TraceFileMissingError,
|
|
76
66
|
TraceNotFoundError,
|
|
77
67
|
applyToolSpanOtlpAttributes,
|
|
78
|
-
asNumber,
|
|
79
68
|
asString,
|
|
80
69
|
buildTraceAnalystTools,
|
|
81
70
|
extractOtlpAttributes,
|
|
82
|
-
firstNumberAttr,
|
|
83
71
|
firstStringAttr,
|
|
84
72
|
inferOtlpKind,
|
|
85
73
|
projectOtlpFlatLine,
|
|
@@ -87,7 +75,7 @@ import {
|
|
|
87
75
|
stringField,
|
|
88
76
|
traceAnalystFunctionGroup,
|
|
89
77
|
traceSpanKindToOpenInferenceKind
|
|
90
|
-
} from "./chunk-
|
|
78
|
+
} from "./chunk-6QIM2EAP.js";
|
|
91
79
|
import {
|
|
92
80
|
RunIntegrityError,
|
|
93
81
|
assertRunCaptured,
|
|
@@ -120,21 +108,33 @@ import "./chunk-ONWEPEDO.js";
|
|
|
120
108
|
import {
|
|
121
109
|
INPUT_VALUE,
|
|
122
110
|
LLM_CACHED_TOKENS,
|
|
111
|
+
LLM_CACHED_TOKEN_ATTR_KEYS,
|
|
123
112
|
LLM_CACHE_WRITE_TOKENS,
|
|
113
|
+
LLM_CACHE_WRITE_TOKEN_ATTR_KEYS,
|
|
124
114
|
LLM_CONTEXT_TOKENS,
|
|
115
|
+
LLM_COST_ATTR_KEYS,
|
|
125
116
|
LLM_COST_USD,
|
|
126
117
|
LLM_INPUT_TOKENS,
|
|
118
|
+
LLM_INPUT_TOKEN_ATTR_KEYS,
|
|
119
|
+
LLM_MODEL_ATTR_KEYS,
|
|
127
120
|
LLM_MODEL_NAME,
|
|
128
121
|
LLM_OUTPUT_TOKENS,
|
|
122
|
+
LLM_OUTPUT_TOKEN_ATTR_KEYS,
|
|
129
123
|
LLM_REASONING_TOKENS,
|
|
124
|
+
LLM_REASONING_TOKEN_ATTR_KEYS,
|
|
130
125
|
OPENINFERENCE_SPAN_KIND,
|
|
131
126
|
OUTPUT_VALUE,
|
|
127
|
+
RUN_COST_ATTR_KEYS,
|
|
128
|
+
SPAN_KIND_ATTR_KEYS,
|
|
132
129
|
TOOL_ARGS_CAPTURED,
|
|
133
130
|
TOOL_LATENCY_MS,
|
|
134
131
|
TOOL_NAME,
|
|
132
|
+
TOOL_NAME_ATTR_KEYS,
|
|
135
133
|
applyLlmSpanOtlpAttributes,
|
|
136
|
-
|
|
137
|
-
|
|
134
|
+
asNumber,
|
|
135
|
+
contextInputTokens,
|
|
136
|
+
firstNumberAttr
|
|
137
|
+
} from "./chunk-K4DBDHLK.js";
|
|
138
138
|
import "./chunk-PZ5AY32C.js";
|
|
139
139
|
export {
|
|
140
140
|
DEFAULT_REDACTION_RULES,
|
package/dist/wire/index.d.ts
CHANGED
|
@@ -7,8 +7,14 @@ import { Hono } from 'hono';
|
|
|
7
7
|
type CostChannel = 'agent' | 'judge' | 'verifier' | 'analyst' | 'driver' | (string & {});
|
|
8
8
|
interface CostUsage {
|
|
9
9
|
inputTokens: number;
|
|
10
|
+
/** Includes reasoning tokens when the provider bills them as output. */
|
|
10
11
|
outputTokens: number;
|
|
12
|
+
/** Reasoning-token subset of outputTokens, when reported. */
|
|
13
|
+
reasoningTokens?: number;
|
|
14
|
+
/** Prompt tokens served from a provider cache. */
|
|
11
15
|
cachedTokens?: number;
|
|
16
|
+
/** Prompt tokens written into a provider cache. */
|
|
17
|
+
cacheWriteTokens?: number;
|
|
12
18
|
}
|
|
13
19
|
interface CostCallBase {
|
|
14
20
|
callId: string;
|
|
@@ -75,7 +81,9 @@ interface ChannelRollup {
|
|
|
75
81
|
calls: number;
|
|
76
82
|
inputTokens: number;
|
|
77
83
|
outputTokens: number;
|
|
84
|
+
reasoningTokens?: number;
|
|
78
85
|
cachedTokens: number;
|
|
86
|
+
cacheWriteTokens?: number;
|
|
79
87
|
costUsd: number;
|
|
80
88
|
unpricedCalls: number;
|
|
81
89
|
unknownUsageCalls: number;
|
|
@@ -87,7 +95,9 @@ interface CostLedgerSummary {
|
|
|
87
95
|
reservedCostUsd: number;
|
|
88
96
|
inputTokens: number;
|
|
89
97
|
outputTokens: number;
|
|
98
|
+
reasoningTokens?: number;
|
|
90
99
|
cachedTokens: number;
|
|
100
|
+
cacheWriteTokens?: number;
|
|
91
101
|
totalCostUsd: number;
|
|
92
102
|
byChannel: ChannelRollup[];
|
|
93
103
|
unpricedModels: string[];
|
|
@@ -101,6 +111,10 @@ interface CostLedgerFilter {
|
|
|
101
111
|
phase?: string;
|
|
102
112
|
tags?: Record<string, string>;
|
|
103
113
|
}
|
|
114
|
+
interface CostLedgerWaitOptions {
|
|
115
|
+
/** Maximum time to wait for active provider calls. Default 5 seconds. */
|
|
116
|
+
timeoutMs?: number;
|
|
117
|
+
}
|
|
104
118
|
/** Append-only storage. `append` must atomically reject stale revisions. */
|
|
105
119
|
interface CostLedgerPersistence {
|
|
106
120
|
read(): {
|
|
@@ -120,6 +134,7 @@ declare class CostLedger {
|
|
|
120
134
|
private readonly records;
|
|
121
135
|
private readonly activeCallIds;
|
|
122
136
|
private readonly lateCallIds;
|
|
137
|
+
private readonly idleWaiters;
|
|
123
138
|
private completedTasks;
|
|
124
139
|
private revision;
|
|
125
140
|
private costLimitPersisted;
|
|
@@ -127,6 +142,8 @@ declare class CostLedger {
|
|
|
127
142
|
private readonly persistence?;
|
|
128
143
|
constructor(input?: number | CostLedgerOptions);
|
|
129
144
|
runPaidCall<T>(input: RunPaidCallInput<T>): Promise<PaidCallResult<T>>;
|
|
145
|
+
/** Wait until every call started by this ledger has produced a durable outcome. */
|
|
146
|
+
waitForIdle(options?: CostLedgerWaitOptions): Promise<boolean>;
|
|
130
147
|
/** Settle a call left pending by a crashed process after reconciling with the provider. */
|
|
131
148
|
reconcile(callId: string, observed: CostReceiptInput, options?: {
|
|
132
149
|
error?: string;
|
|
@@ -137,6 +154,7 @@ declare class CostLedger {
|
|
|
137
154
|
costPerCompletedTask(): number | null;
|
|
138
155
|
private execute;
|
|
139
156
|
private captureLateOutcome;
|
|
157
|
+
private releaseActiveCall;
|
|
140
158
|
private commitOutcome;
|
|
141
159
|
private captureFailure;
|
|
142
160
|
private commitReceipt;
|
|
@@ -152,7 +170,7 @@ declare class CostLedger {
|
|
|
152
170
|
* Keeping callback contracts structural lets those subpaths compose while the
|
|
153
171
|
* concrete {@link CostLedger} retains its private durable state.
|
|
154
172
|
*/
|
|
155
|
-
type CostLedgerHandle = Pick<CostLedger, keyof CostLedger
|
|
173
|
+
type CostLedgerHandle = Pick<CostLedger, Exclude<keyof CostLedger, 'waitForIdle'>> & Partial<Pick<CostLedger, 'waitForIdle'>>;
|
|
156
174
|
|
|
157
175
|
type RunStatus = 'running' | 'completed' | 'failed' | 'aborted';
|
|
158
176
|
interface BudgetSpec {
|
package/dist/wire/index.js
CHANGED
|
@@ -34,9 +34,9 @@ import {
|
|
|
34
34
|
runRpcOnce,
|
|
35
35
|
startServer,
|
|
36
36
|
startServerAsync
|
|
37
|
-
} from "../chunk-
|
|
37
|
+
} from "../chunk-4I2E3LLO.js";
|
|
38
38
|
import "../chunk-NJC7U437.js";
|
|
39
|
-
import "../chunk-
|
|
39
|
+
import "../chunk-JHOJHHU7.js";
|
|
40
40
|
import "../chunk-VI2UW6B6.js";
|
|
41
41
|
import "../chunk-PC4UYEBM.js";
|
|
42
42
|
import "../chunk-ONWEPEDO.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tangle-network/agent-eval",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.119.0",
|
|
4
4
|
"description": "Evaluate and improve AI agents from runs, traces, judges, and feedback. Compare candidates, cluster failures, measure lift, and gate releases.",
|
|
5
5
|
"homepage": "https://github.com/tangle-network/agent-eval#readme",
|
|
6
6
|
"repository": {
|
|
@@ -119,6 +119,11 @@
|
|
|
119
119
|
"import": "./dist/hosted/index.js",
|
|
120
120
|
"default": "./dist/hosted/index.js"
|
|
121
121
|
},
|
|
122
|
+
"./primeintellect": {
|
|
123
|
+
"types": "./dist/primeintellect/index.d.ts",
|
|
124
|
+
"import": "./dist/primeintellect/index.js",
|
|
125
|
+
"default": "./dist/primeintellect/index.js"
|
|
126
|
+
},
|
|
122
127
|
"./openapi.json": {
|
|
123
128
|
"default": "./dist/openapi.json"
|
|
124
129
|
}
|