modelrig 0.0.1 → 0.2.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 (420) hide show
  1. package/CHANGELOG.md +94 -0
  2. package/LICENSE +201 -0
  3. package/README.md +145 -8
  4. package/data/PROVENANCE.md +19 -0
  5. package/data/pricing-manual.json +22 -0
  6. package/data/pricing-map.json +46362 -0
  7. package/data/pricing-overlay.json +419 -0
  8. package/dist/adapters/anthropic.d.ts +90 -0
  9. package/dist/adapters/anthropic.d.ts.map +1 -0
  10. package/dist/adapters/anthropic.js +296 -0
  11. package/dist/adapters/build-adapters.d.ts +11 -0
  12. package/dist/adapters/build-adapters.d.ts.map +1 -0
  13. package/dist/adapters/build-adapters.js +45 -0
  14. package/dist/adapters/deepseek.d.ts +47 -0
  15. package/dist/adapters/deepseek.d.ts.map +1 -0
  16. package/dist/adapters/deepseek.js +216 -0
  17. package/dist/adapters/gemini.d.ts +44 -0
  18. package/dist/adapters/gemini.d.ts.map +1 -0
  19. package/dist/adapters/gemini.js +262 -0
  20. package/dist/adapters/grok.d.ts +53 -0
  21. package/dist/adapters/grok.d.ts.map +1 -0
  22. package/dist/adapters/grok.js +232 -0
  23. package/dist/adapters/openai-compat.d.ts +80 -0
  24. package/dist/adapters/openai-compat.d.ts.map +1 -0
  25. package/dist/adapters/openai-compat.js +244 -0
  26. package/dist/adapters/openai-stream.d.ts +58 -0
  27. package/dist/adapters/openai-stream.d.ts.map +1 -0
  28. package/dist/adapters/openai-stream.js +120 -0
  29. package/dist/adapters/openai.d.ts +55 -0
  30. package/dist/adapters/openai.d.ts.map +1 -0
  31. package/dist/adapters/openai.js +281 -0
  32. package/dist/adapters/sampling.d.ts +28 -0
  33. package/dist/adapters/sampling.d.ts.map +1 -0
  34. package/dist/adapters/sampling.js +34 -0
  35. package/dist/adapters/tool-mapping.d.ts +92 -0
  36. package/dist/adapters/tool-mapping.d.ts.map +1 -0
  37. package/dist/adapters/tool-mapping.js +143 -0
  38. package/dist/artifacts/artifact.d.ts +137 -0
  39. package/dist/artifacts/artifact.d.ts.map +1 -0
  40. package/dist/artifacts/artifact.js +377 -0
  41. package/dist/artifacts/content-uploader.d.ts +87 -0
  42. package/dist/artifacts/content-uploader.d.ts.map +1 -0
  43. package/dist/artifacts/content-uploader.js +124 -0
  44. package/dist/artifacts/index.d.ts +63 -0
  45. package/dist/artifacts/index.d.ts.map +1 -0
  46. package/dist/artifacts/index.js +80 -0
  47. package/dist/artifacts/run-context.d.ts +129 -0
  48. package/dist/artifacts/run-context.d.ts.map +1 -0
  49. package/dist/artifacts/run-context.js +208 -0
  50. package/dist/artifacts/scrub.d.ts +60 -0
  51. package/dist/artifacts/scrub.d.ts.map +1 -0
  52. package/dist/artifacts/scrub.js +139 -0
  53. package/dist/artifacts/step.d.ts +26 -0
  54. package/dist/artifacts/step.d.ts.map +1 -0
  55. package/dist/artifacts/step.js +37 -0
  56. package/dist/artifacts/taint.d.ts +63 -0
  57. package/dist/artifacts/taint.d.ts.map +1 -0
  58. package/dist/artifacts/taint.js +76 -0
  59. package/dist/bakeoff/cache-sim.d.ts +99 -0
  60. package/dist/bakeoff/cache-sim.d.ts.map +1 -0
  61. package/dist/bakeoff/cache-sim.js +126 -0
  62. package/dist/bakeoff/engine.d.ts +52 -0
  63. package/dist/bakeoff/engine.d.ts.map +1 -0
  64. package/dist/bakeoff/engine.js +163 -0
  65. package/dist/bakeoff/eval-cases.d.ts +96 -0
  66. package/dist/bakeoff/eval-cases.d.ts.map +1 -0
  67. package/dist/bakeoff/eval-cases.js +105 -0
  68. package/dist/bakeoff/replay.d.ts +52 -0
  69. package/dist/bakeoff/replay.d.ts.map +1 -0
  70. package/dist/bakeoff/replay.js +94 -0
  71. package/dist/bakeoff/report.d.ts +41 -0
  72. package/dist/bakeoff/report.d.ts.map +1 -0
  73. package/dist/bakeoff/report.js +142 -0
  74. package/dist/bakeoff/samples.d.ts +77 -0
  75. package/dist/bakeoff/samples.d.ts.map +1 -0
  76. package/dist/bakeoff/samples.js +148 -0
  77. package/dist/bakeoff/stats.d.ts +13 -0
  78. package/dist/bakeoff/stats.d.ts.map +1 -0
  79. package/dist/bakeoff/stats.js +48 -0
  80. package/dist/bakeoff/types.d.ts +37 -0
  81. package/dist/bakeoff/types.d.ts.map +1 -0
  82. package/dist/bakeoff/types.js +10 -0
  83. package/dist/cli.d.ts +25 -0
  84. package/dist/cli.d.ts.map +1 -0
  85. package/dist/cli.js +590 -0
  86. package/dist/config.d.ts +204 -0
  87. package/dist/config.d.ts.map +1 -0
  88. package/dist/config.js +252 -0
  89. package/dist/deprecations.d.ts +32 -0
  90. package/dist/deprecations.d.ts.map +1 -0
  91. package/dist/deprecations.js +59 -0
  92. package/dist/feedback/coverage.d.ts +32 -0
  93. package/dist/feedback/coverage.d.ts.map +1 -0
  94. package/dist/feedback/coverage.js +95 -0
  95. package/dist/feedback/feedback.d.ts +35 -0
  96. package/dist/feedback/feedback.d.ts.map +1 -0
  97. package/dist/feedback/feedback.js +39 -0
  98. package/dist/gateway/http-protocol.d.ts +175 -0
  99. package/dist/gateway/http-protocol.d.ts.map +1 -0
  100. package/dist/gateway/http-protocol.js +105 -0
  101. package/dist/index.d.ts +242 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +576 -0
  104. package/dist/init/finder.d.ts +94 -0
  105. package/dist/init/finder.d.ts.map +1 -0
  106. package/dist/init/finder.js +343 -0
  107. package/dist/init/init-cli.d.ts +10 -0
  108. package/dist/init/init-cli.d.ts.map +1 -0
  109. package/dist/init/init-cli.js +86 -0
  110. package/dist/init/observe-cli.d.ts +19 -0
  111. package/dist/init/observe-cli.d.ts.map +1 -0
  112. package/dist/init/observe-cli.js +73 -0
  113. package/dist/init/observe.d.ts +81 -0
  114. package/dist/init/observe.d.ts.map +1 -0
  115. package/dist/init/observe.js +245 -0
  116. package/dist/init/run.d.ts +99 -0
  117. package/dist/init/run.d.ts.map +1 -0
  118. package/dist/init/run.js +281 -0
  119. package/dist/init/signatures.d.ts +39 -0
  120. package/dist/init/signatures.d.ts.map +1 -0
  121. package/dist/init/signatures.js +116 -0
  122. package/dist/matrix/aggregate.d.ts +89 -0
  123. package/dist/matrix/aggregate.d.ts.map +1 -0
  124. package/dist/matrix/aggregate.js +186 -0
  125. package/dist/query/grammar.d.ts +35 -0
  126. package/dist/query/grammar.d.ts.map +1 -0
  127. package/dist/query/grammar.js +279 -0
  128. package/dist/query/run.d.ts +8 -0
  129. package/dist/query/run.d.ts.map +1 -0
  130. package/dist/query/run.js +21 -0
  131. package/dist/registry/build.d.ts +219 -0
  132. package/dist/registry/build.d.ts.map +1 -0
  133. package/dist/registry/build.js +313 -0
  134. package/dist/registry/cache-policy.d.ts +94 -0
  135. package/dist/registry/cache-policy.d.ts.map +1 -0
  136. package/dist/registry/cache-policy.js +238 -0
  137. package/dist/registry/call-notes.d.ts +11 -0
  138. package/dist/registry/call-notes.d.ts.map +1 -0
  139. package/dist/registry/call-notes.js +110 -0
  140. package/dist/registry/claims.d.ts +63 -0
  141. package/dist/registry/claims.d.ts.map +1 -0
  142. package/dist/registry/claims.js +107 -0
  143. package/dist/registry/effective-rate.d.ts +151 -0
  144. package/dist/registry/effective-rate.d.ts.map +1 -0
  145. package/dist/registry/effective-rate.js +156 -0
  146. package/dist/registry/facts.d.ts +32 -0
  147. package/dist/registry/facts.d.ts.map +1 -0
  148. package/dist/registry/facts.js +136 -0
  149. package/dist/registry/fingerprint.d.ts +20 -0
  150. package/dist/registry/fingerprint.d.ts.map +1 -0
  151. package/dist/registry/fingerprint.js +150 -0
  152. package/dist/registry/parity.d.ts +52 -0
  153. package/dist/registry/parity.d.ts.map +1 -0
  154. package/dist/registry/parity.js +82 -0
  155. package/dist/registry/pricing-shape.d.ts +113 -0
  156. package/dist/registry/pricing-shape.d.ts.map +1 -0
  157. package/dist/registry/pricing-shape.js +123 -0
  158. package/dist/registry/pricing.d.ts +43 -0
  159. package/dist/registry/pricing.d.ts.map +1 -0
  160. package/dist/registry/pricing.js +127 -0
  161. package/dist/registry/rows.d.ts +16 -0
  162. package/dist/registry/rows.d.ts.map +1 -0
  163. package/dist/registry/rows.js +57 -0
  164. package/dist/registry/seed.d.ts +43 -0
  165. package/dist/registry/seed.d.ts.map +1 -0
  166. package/dist/registry/seed.js +97 -0
  167. package/dist/registry/select.d.ts +68 -0
  168. package/dist/registry/select.d.ts.map +1 -0
  169. package/dist/registry/select.js +141 -0
  170. package/dist/registry/staleness.d.ts +18 -0
  171. package/dist/registry/staleness.d.ts.map +1 -0
  172. package/dist/registry/staleness.js +39 -0
  173. package/dist/rigindex/bootstrap.d.ts +36 -0
  174. package/dist/rigindex/bootstrap.d.ts.map +1 -0
  175. package/dist/rigindex/bootstrap.js +97 -0
  176. package/dist/rigindex/fit.d.ts +24 -0
  177. package/dist/rigindex/fit.d.ts.map +1 -0
  178. package/dist/rigindex/fit.js +76 -0
  179. package/dist/rigindex/gates.d.ts +52 -0
  180. package/dist/rigindex/gates.d.ts.map +1 -0
  181. package/dist/rigindex/gates.js +109 -0
  182. package/dist/rigindex/graph.d.ts +31 -0
  183. package/dist/rigindex/graph.d.ts.map +1 -0
  184. package/dist/rigindex/graph.js +120 -0
  185. package/dist/rigindex/index.d.ts +23 -0
  186. package/dist/rigindex/index.d.ts.map +1 -0
  187. package/dist/rigindex/index.js +112 -0
  188. package/dist/rigindex/types.d.ts +76 -0
  189. package/dist/rigindex/types.d.ts.map +1 -0
  190. package/dist/rigindex/types.js +8 -0
  191. package/dist/routes/cache-lint.d.ts +41 -0
  192. package/dist/routes/cache-lint.d.ts.map +1 -0
  193. package/dist/routes/cache-lint.js +81 -0
  194. package/dist/routes/draft.d.ts +83 -0
  195. package/dist/routes/draft.d.ts.map +1 -0
  196. package/dist/routes/draft.js +135 -0
  197. package/dist/routes/loader.d.ts +63 -0
  198. package/dist/routes/loader.d.ts.map +1 -0
  199. package/dist/routes/loader.js +574 -0
  200. package/dist/routes/manifest.d.ts +24 -0
  201. package/dist/routes/manifest.d.ts.map +1 -0
  202. package/dist/routes/manifest.js +118 -0
  203. package/dist/routes/resolved-bundle.d.ts +79 -0
  204. package/dist/routes/resolved-bundle.d.ts.map +1 -0
  205. package/dist/routes/resolved-bundle.js +148 -0
  206. package/dist/routes/sampling-config.d.ts +32 -0
  207. package/dist/routes/sampling-config.d.ts.map +1 -0
  208. package/dist/routes/sampling-config.js +91 -0
  209. package/dist/routes/serveability.d.ts +52 -0
  210. package/dist/routes/serveability.d.ts.map +1 -0
  211. package/dist/routes/serveability.js +73 -0
  212. package/dist/routes/template.d.ts +18 -0
  213. package/dist/routes/template.d.ts.map +1 -0
  214. package/dist/routes/template.js +94 -0
  215. package/dist/run/ajv.d.ts +22 -0
  216. package/dist/run/ajv.d.ts.map +1 -0
  217. package/dist/run/ajv.js +32 -0
  218. package/dist/run/cache-handle.d.ts +58 -0
  219. package/dist/run/cache-handle.d.ts.map +1 -0
  220. package/dist/run/cache-handle.js +54 -0
  221. package/dist/run/cache-stamp.d.ts +65 -0
  222. package/dist/run/cache-stamp.d.ts.map +1 -0
  223. package/dist/run/cache-stamp.js +0 -0
  224. package/dist/run/capture-write.d.ts +33 -0
  225. package/dist/run/capture-write.d.ts.map +1 -0
  226. package/dist/run/capture-write.js +55 -0
  227. package/dist/run/cost.d.ts +26 -0
  228. package/dist/run/cost.d.ts.map +1 -0
  229. package/dist/run/cost.js +41 -0
  230. package/dist/run/dispatch.d.ts +99 -0
  231. package/dist/run/dispatch.d.ts.map +1 -0
  232. package/dist/run/dispatch.js +191 -0
  233. package/dist/run/envelope.d.ts +21 -0
  234. package/dist/run/envelope.d.ts.map +1 -0
  235. package/dist/run/envelope.js +45 -0
  236. package/dist/run/grounding.d.ts +56 -0
  237. package/dist/run/grounding.d.ts.map +1 -0
  238. package/dist/run/grounding.js +89 -0
  239. package/dist/run/raw.d.ts +88 -0
  240. package/dist/run/raw.d.ts.map +1 -0
  241. package/dist/run/raw.js +286 -0
  242. package/dist/run/record-attempt.d.ts +40 -0
  243. package/dist/run/record-attempt.d.ts.map +1 -0
  244. package/dist/run/record-attempt.js +99 -0
  245. package/dist/run/repair.d.ts +36 -0
  246. package/dist/run/repair.d.ts.map +1 -0
  247. package/dist/run/repair.js +61 -0
  248. package/dist/run/resolve.d.ts +99 -0
  249. package/dist/run/resolve.d.ts.map +1 -0
  250. package/dist/run/resolve.js +203 -0
  251. package/dist/run/retry.d.ts +19 -0
  252. package/dist/run/retry.d.ts.map +1 -0
  253. package/dist/run/retry.js +50 -0
  254. package/dist/run/run.d.ts +55 -0
  255. package/dist/run/run.d.ts.map +1 -0
  256. package/dist/run/run.js +540 -0
  257. package/dist/run/stream.d.ts +49 -0
  258. package/dist/run/stream.d.ts.map +1 -0
  259. package/dist/run/stream.js +87 -0
  260. package/dist/run/validate.d.ts +15 -0
  261. package/dist/run/validate.d.ts.map +1 -0
  262. package/dist/run/validate.js +55 -0
  263. package/dist/savings/cache-ledger.d.ts +108 -0
  264. package/dist/savings/cache-ledger.d.ts.map +1 -0
  265. package/dist/savings/cache-ledger.js +174 -0
  266. package/dist/savings/cache-reconcile.d.ts +64 -0
  267. package/dist/savings/cache-reconcile.d.ts.map +1 -0
  268. package/dist/savings/cache-reconcile.js +59 -0
  269. package/dist/savings/cache-stats.d.ts +63 -0
  270. package/dist/savings/cache-stats.d.ts.map +1 -0
  271. package/dist/savings/cache-stats.js +108 -0
  272. package/dist/savings/emit.d.ts +38 -0
  273. package/dist/savings/emit.d.ts.map +1 -0
  274. package/dist/savings/emit.js +100 -0
  275. package/dist/savings/odometer.d.ts +32 -0
  276. package/dist/savings/odometer.d.ts.map +1 -0
  277. package/dist/savings/odometer.js +70 -0
  278. package/dist/savings/swap-execute.d.ts +58 -0
  279. package/dist/savings/swap-execute.d.ts.map +1 -0
  280. package/dist/savings/swap-execute.js +130 -0
  281. package/dist/savings/swaps-client.d.ts +55 -0
  282. package/dist/savings/swaps-client.d.ts.map +1 -0
  283. package/dist/savings/swaps-client.js +95 -0
  284. package/dist/settings/api-fetcher.d.ts +39 -0
  285. package/dist/settings/api-fetcher.d.ts.map +1 -0
  286. package/dist/settings/api-fetcher.js +92 -0
  287. package/dist/settings/index.d.ts +10 -0
  288. package/dist/settings/index.d.ts.map +1 -0
  289. package/dist/settings/index.js +15 -0
  290. package/dist/settings/task-settings.d.ts +91 -0
  291. package/dist/settings/task-settings.d.ts.map +1 -0
  292. package/dist/settings/task-settings.js +116 -0
  293. package/dist/status.d.ts +77 -0
  294. package/dist/status.d.ts.map +1 -0
  295. package/dist/status.js +113 -0
  296. package/dist/telemetry/artifact-store.d.ts +48 -0
  297. package/dist/telemetry/artifact-store.d.ts.map +1 -0
  298. package/dist/telemetry/artifact-store.js +189 -0
  299. package/dist/telemetry/cache-miss-streak.d.ts +79 -0
  300. package/dist/telemetry/cache-miss-streak.d.ts.map +1 -0
  301. package/dist/telemetry/cache-miss-streak.js +99 -0
  302. package/dist/telemetry/capture.d.ts +31 -0
  303. package/dist/telemetry/capture.d.ts.map +1 -0
  304. package/dist/telemetry/capture.js +81 -0
  305. package/dist/telemetry/exporter-setup.d.ts +28 -0
  306. package/dist/telemetry/exporter-setup.d.ts.map +1 -0
  307. package/dist/telemetry/exporter-setup.js +34 -0
  308. package/dist/telemetry/exporter.d.ts +137 -0
  309. package/dist/telemetry/exporter.d.ts.map +1 -0
  310. package/dist/telemetry/exporter.js +510 -0
  311. package/dist/telemetry/health.d.ts +76 -0
  312. package/dist/telemetry/health.d.ts.map +1 -0
  313. package/dist/telemetry/health.js +92 -0
  314. package/dist/telemetry/ingest-protocol.d.ts +310 -0
  315. package/dist/telemetry/ingest-protocol.d.ts.map +1 -0
  316. package/dist/telemetry/ingest-protocol.js +363 -0
  317. package/dist/telemetry/load-error-report.d.ts +24 -0
  318. package/dist/telemetry/load-error-report.d.ts.map +1 -0
  319. package/dist/telemetry/load-error-report.js +50 -0
  320. package/dist/telemetry/otel-map.d.ts +121 -0
  321. package/dist/telemetry/otel-map.d.ts.map +1 -0
  322. package/dist/telemetry/otel-map.js +224 -0
  323. package/dist/telemetry/otel-normalize.d.ts +104 -0
  324. package/dist/telemetry/otel-normalize.d.ts.map +1 -0
  325. package/dist/telemetry/otel-normalize.js +530 -0
  326. package/dist/telemetry/otlp-emitter.d.ts +52 -0
  327. package/dist/telemetry/otlp-emitter.d.ts.map +1 -0
  328. package/dist/telemetry/otlp-emitter.js +144 -0
  329. package/dist/telemetry/otlp-proto.d.ts +29 -0
  330. package/dist/telemetry/otlp-proto.d.ts.map +1 -0
  331. package/dist/telemetry/otlp-proto.js +266 -0
  332. package/dist/telemetry/sinks.d.ts +90 -0
  333. package/dist/telemetry/sinks.d.ts.map +1 -0
  334. package/dist/telemetry/sinks.js +180 -0
  335. package/dist/telemetry/store.d.ts +65 -0
  336. package/dist/telemetry/store.d.ts.map +1 -0
  337. package/dist/telemetry/store.js +547 -0
  338. package/dist/tenancy/api-key-format.d.ts +77 -0
  339. package/dist/tenancy/api-key-format.d.ts.map +1 -0
  340. package/dist/tenancy/api-key-format.js +110 -0
  341. package/dist/tenancy/constants.d.ts +23 -0
  342. package/dist/tenancy/constants.d.ts.map +1 -0
  343. package/dist/tenancy/constants.js +25 -0
  344. package/dist/tenancy/scrub.d.ts +47 -0
  345. package/dist/tenancy/scrub.d.ts.map +1 -0
  346. package/dist/tenancy/scrub.js +85 -0
  347. package/dist/types/config-teaching.d.ts +62 -0
  348. package/dist/types/config-teaching.d.ts.map +1 -0
  349. package/dist/types/config-teaching.js +183 -0
  350. package/dist/types/failures-teaching.d.ts +56 -0
  351. package/dist/types/failures-teaching.d.ts.map +1 -0
  352. package/dist/types/failures-teaching.js +177 -0
  353. package/dist/types/failures.d.ts +27 -0
  354. package/dist/types/failures.d.ts.map +1 -0
  355. package/dist/types/failures.js +41 -0
  356. package/dist/types/provider.d.ts +200 -0
  357. package/dist/types/provider.d.ts.map +1 -0
  358. package/dist/types/provider.js +40 -0
  359. package/dist/types/route.d.ts +205 -0
  360. package/dist/types/route.d.ts.map +1 -0
  361. package/dist/types/route.js +6 -0
  362. package/dist/types/telemetry.d.ts +206 -0
  363. package/dist/types/telemetry.d.ts.map +1 -0
  364. package/dist/types/telemetry.js +6 -0
  365. package/dist/validate-cli.d.ts +12 -0
  366. package/dist/validate-cli.d.ts.map +1 -0
  367. package/dist/validate-cli.js +57 -0
  368. package/dist/verify/capture.d.ts +66 -0
  369. package/dist/verify/capture.d.ts.map +1 -0
  370. package/dist/verify/capture.js +180 -0
  371. package/dist/verify/cli-run.d.ts +23 -0
  372. package/dist/verify/cli-run.d.ts.map +1 -0
  373. package/dist/verify/cli-run.js +57 -0
  374. package/dist/verify/diff.d.ts +48 -0
  375. package/dist/verify/diff.d.ts.map +1 -0
  376. package/dist/verify/diff.js +157 -0
  377. package/dist/verify/index.d.ts +17 -0
  378. package/dist/verify/index.d.ts.map +1 -0
  379. package/dist/verify/index.js +24 -0
  380. package/dist/verify/report.d.ts +14 -0
  381. package/dist/verify/report.d.ts.map +1 -0
  382. package/dist/verify/report.js +88 -0
  383. package/dist/verify/types.d.ts +101 -0
  384. package/dist/verify/types.d.ts.map +1 -0
  385. package/dist/verify/types.js +17 -0
  386. package/dist/verify/verify.d.ts +29 -0
  387. package/dist/verify/verify.d.ts.map +1 -0
  388. package/dist/verify/verify.js +148 -0
  389. package/dist/watch/budget.d.ts +19 -0
  390. package/dist/watch/budget.d.ts.map +1 -0
  391. package/dist/watch/budget.js +35 -0
  392. package/dist/watch/evaluate.d.ts +225 -0
  393. package/dist/watch/evaluate.d.ts.map +1 -0
  394. package/dist/watch/evaluate.js +155 -0
  395. package/dist/watch/monitor.d.ts +116 -0
  396. package/dist/watch/monitor.d.ts.map +1 -0
  397. package/dist/watch/monitor.js +199 -0
  398. package/dist/watch/proposals.d.ts +89 -0
  399. package/dist/watch/proposals.d.ts.map +1 -0
  400. package/dist/watch/proposals.js +197 -0
  401. package/dist/watch/run-record.d.ts +64 -0
  402. package/dist/watch/run-record.d.ts.map +1 -0
  403. package/dist/watch/run-record.js +86 -0
  404. package/dist/watch/run-reported.d.ts +20 -0
  405. package/dist/watch/run-reported.d.ts.map +1 -0
  406. package/dist/watch/run-reported.js +53 -0
  407. package/dist/watch/run.d.ts +73 -0
  408. package/dist/watch/run.d.ts.map +1 -0
  409. package/dist/watch/run.js +83 -0
  410. package/dist/watch/state-store.d.ts +48 -0
  411. package/dist/watch/state-store.d.ts.map +1 -0
  412. package/dist/watch/state-store.js +86 -0
  413. package/dist/watch/state.d.ts +21 -0
  414. package/dist/watch/state.d.ts.map +1 -0
  415. package/dist/watch/state.js +93 -0
  416. package/package.json +56 -14
  417. package/registry/LICENSE +20 -0
  418. package/registry/leaderboard.json +3639 -0
  419. package/registry/registry.json +7263 -0
  420. package/index.js +0 -3
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ /**
3
+ * OTLP mapping — E1 (spec §3, §4). PURE: no I/O, no env, no imports from the
4
+ * exporter/sinks/store. One `inferences` row → one OTLP/HTTP JSON span.
5
+ *
6
+ * ── THE ONE PLACE gen_ai.* NAMES LIVE ────────────────────────────────────
7
+ * Every OpenTelemetry semantic-convention attribute name this product emits is
8
+ * declared in THIS module and nowhere else (architect-review-2026-08 §2(f)).
9
+ * The pin is `SEMCONV_VERSION` below — bump it here and the wire changes in one
10
+ * edit, not scattered across the codebase. If you find a `"gen_ai.*"` string
11
+ * literal outside this file, it is a bug.
12
+ *
13
+ * ── WHY HAND-BUILT JSON, NOT @opentelemetry/* ────────────────────────────
14
+ * We are mapping completed rows, not instrumenting live code, so the SDK's
15
+ * tracer runtime would be dead weight (spec §2.2). The shape below is the
16
+ * OTLP/HTTP `ExportTraceServiceRequest` JSON encoding. Two encoding rules bite
17
+ * here and are easy to get wrong (plan §"risks"):
18
+ * • trace_id / span_id are LOWERCASE HEX strings — the documented OTLP/JSON
19
+ * exception to Protobuf's base64-for-bytes. NOT base64.
20
+ * • int64 attribute + timestamp values are DECIMAL STRINGS; doubles are
21
+ * numbers. `intValue`/`startTimeUnixNano` are strings on the wire.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.TRACEPARENT_TAG = exports.SEMCONV_VERSION = void 0;
25
+ exports.parseTraceparent = parseTraceparent;
26
+ exports.inferenceToSpan = inferenceToSpan;
27
+ exports.cacheDecisionSpanAttributes = cacheDecisionSpanAttributes;
28
+ exports.buildExportTraceRequest = buildExportTraceRequest;
29
+ const node_crypto_1 = require("node:crypto");
30
+ /** Semantic-conventions pin (architect ruling §2(f)). The scope version on the
31
+ * wire and the single source of truth for which gen_ai vintage we speak. */
32
+ exports.SEMCONV_VERSION = "1.41.0";
33
+ /** SPAN_KIND_CLIENT — an LLM call leaving this process to a provider. */
34
+ const SPAN_KIND_CLIENT = 3;
35
+ /** SPAN_KIND_INTERNAL — the synthetic search/tool-execution span. */
36
+ const SPAN_KIND_INTERNAL = 1;
37
+ /** STATUS_CODE_UNSET / STATUS_CODE_ERROR (OK is never set — gen_ai convention
38
+ * leaves a successful span UNSET). */
39
+ const STATUS_UNSET = 0;
40
+ const STATUS_ERROR = 2;
41
+ // ── attribute constructors (typed value wrappers) ────────────────────────
42
+ const strAttr = (key, value) => ({ key, value: { stringValue: value } });
43
+ const intAttr = (key, value) => ({
44
+ key,
45
+ value: { intValue: String(Math.trunc(value)) },
46
+ });
47
+ const dblAttr = (key, value) => ({ key, value: { doubleValue: value } });
48
+ const boolAttr = (key, value) => ({ key, value: { boolValue: value } });
49
+ // ── W3C traceparent ──────────────────────────────────────────────────────
50
+ /** The tag key the gateway stashes an inbound traceparent under (spec §2.5). */
51
+ exports.TRACEPARENT_TAG = "otel.traceparent";
52
+ /** version(00) - trace-id(32hex) - parent-id(16hex) - flags(2hex). */
53
+ const TRACEPARENT_RE = /^00-([0-9a-f]{32})-([0-9a-f]{16})-[0-9a-f]{2}$/i;
54
+ /**
55
+ * Parse a W3C `traceparent` value, or null when absent/malformed. The gateway
56
+ * (packages/modelrig-server) reuses this so the SDK and the server cannot
57
+ * disagree about what "well-formed" means. All-zero trace/parent ids are
58
+ * rejected per the W3C spec (they mean "no parent").
59
+ */
60
+ function parseTraceparent(value) {
61
+ if (value === undefined || value === null)
62
+ return null;
63
+ const match = TRACEPARENT_RE.exec(value.trim());
64
+ if (match === null)
65
+ return null;
66
+ const traceId = match[1].toLowerCase();
67
+ const parentSpanId = match[2].toLowerCase();
68
+ if (/^0+$/.test(traceId) || /^0+$/.test(parentSpanId))
69
+ return null;
70
+ return { traceId, parentSpanId };
71
+ }
72
+ // ── deterministic span identity (spec §2.6) ──────────────────────────────
73
+ // Same row twice ⇒ byte-identical span, so a re-emit after a crash is
74
+ // idempotent at the sink. Both are truncations of sha256(inference id).
75
+ function sha256Hex(input) {
76
+ return (0, node_crypto_1.createHash)("sha256").update(input).digest("hex");
77
+ }
78
+ function traceIdFor(inferenceId) {
79
+ return sha256Hex(inferenceId).slice(0, 32); // 16 bytes
80
+ }
81
+ function spanIdFor(inferenceId) {
82
+ return sha256Hex(inferenceId).slice(0, 16); // 8 bytes
83
+ }
84
+ /** ISO timestamp (+ optional ms offset) → OTLP `*UnixNano` decimal string.
85
+ * BigInt keeps nanosecond precision that Number would lose past 2^53. */
86
+ function toUnixNano(iso, plusMs = 0) {
87
+ const ms = Date.parse(iso);
88
+ const baseMs = Number.isFinite(ms) ? ms : 0;
89
+ return (BigInt(baseMs + Math.trunc(plusMs)) * 1000000n).toString();
90
+ }
91
+ /** The synthetic search-cost row is emitted as a tool-execution span (§2.7). */
92
+ function isSearchRow(row) {
93
+ return row.provider === "search";
94
+ }
95
+ function readTraceparentTag(row) {
96
+ let tags;
97
+ try {
98
+ tags = JSON.parse(row.tagsJson);
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ if (tags === null || typeof tags !== "object")
104
+ return null;
105
+ const raw = tags[exports.TRACEPARENT_TAG];
106
+ return typeof raw === "string" ? parseTraceparent(raw) : null;
107
+ }
108
+ /**
109
+ * Map one telemetry row to one OTLP span (spec §3, normative). Pure and total:
110
+ * every field comes from the row; nulls are omitted (never emitted as empty).
111
+ */
112
+ function inferenceToSpan(row) {
113
+ const search = isSearchRow(row);
114
+ const operationName = search ? "execute_tool" : "chat";
115
+ const spanName = search ? "execute_tool search" : `chat ${row.model}`;
116
+ const attrs = [
117
+ strAttr("gen_ai.operation.name", operationName),
118
+ strAttr("gen_ai.provider.name", row.provider),
119
+ strAttr("gen_ai.request.model", row.model),
120
+ strAttr("gen_ai.response.model", row.model),
121
+ intAttr("gen_ai.usage.input_tokens", row.tokensIn),
122
+ intAttr("gen_ai.usage.output_tokens", row.tokensOut),
123
+ intAttr("gen_ai.usage.cached_input_tokens", row.tokensCached),
124
+ strAttr("modelrig.route", row.route),
125
+ intAttr("modelrig.route_version", row.routeVersion),
126
+ // Honest zero: cost stays 0 for an unpriced model; the flag says so rather
127
+ // than the code inventing a dollar figure (spec §3, addendum A1).
128
+ dblAttr("modelrig.cost_estimate_usd", row.costEstimateUsd),
129
+ strAttr("modelrig.served_tier", row.servedTier),
130
+ ];
131
+ // Cache accounting (WS-A / E1 parity). Emitted only when non-zero to keep the
132
+ // vast majority of spans lean. `cache_read_tokens` carries the same quantity
133
+ // as the pre-existing `cached_input_tokens` under the spelling the cache-aware
134
+ // spec (§2) names; both are kept — S3 retires nothing, and a consumer reads a
135
+ // specific key rather than summing, so this is detail, not double-count.
136
+ if (row.tokensCached > 0)
137
+ attrs.push(intAttr("gen_ai.usage.cache_read_tokens", row.tokensCached));
138
+ const cacheWrite = row.tokensCacheWrite ?? 0;
139
+ if (cacheWrite > 0)
140
+ attrs.push(intAttr("gen_ai.usage.cache_creation_tokens", cacheWrite));
141
+ if (row.pricingMissing)
142
+ attrs.push(boolAttr("modelrig.pricing_missing", true));
143
+ if (row.ttfbMs !== null)
144
+ attrs.push(intAttr("modelrig.ttfb_ms", row.ttfbMs));
145
+ if (row.servedVariant !== null)
146
+ attrs.push(strAttr("modelrig.served_variant", row.servedVariant));
147
+ if (row.repairedBy !== null)
148
+ attrs.push(strAttr("modelrig.repaired_by", row.repairedBy));
149
+ if (row.fingerprintCell !== null) {
150
+ // Irreversible by construction (a schema hash) — safe to emit (spec §3).
151
+ attrs.push(strAttr("modelrig.fingerprint_cell", row.fingerprintCell));
152
+ }
153
+ if (row.failureClass !== null)
154
+ attrs.push(strAttr("modelrig.failure_class", row.failureClass));
155
+ const parent = readTraceparentTag(row);
156
+ const traceId = parent !== null ? parent.traceId : traceIdFor(row.id);
157
+ const span = {
158
+ traceId,
159
+ spanId: spanIdFor(row.id),
160
+ ...(parent !== null ? { parentSpanId: parent.parentSpanId } : {}),
161
+ name: spanName,
162
+ kind: search ? SPAN_KIND_INTERNAL : SPAN_KIND_CLIENT,
163
+ startTimeUnixNano: toUnixNano(row.ts),
164
+ endTimeUnixNano: toUnixNano(row.ts, row.latencyMs),
165
+ attributes: attrs,
166
+ // Failures are facts: a non-null class flips the span to ERROR (spec §2.7).
167
+ status: row.failureClass !== null
168
+ ? { code: STATUS_ERROR, message: row.failureClass }
169
+ : { code: STATUS_UNSET },
170
+ };
171
+ return span;
172
+ }
173
+ /**
174
+ * Decision-span attributes for a cache-aware routing decision (cache-aware-routing
175
+ * spec §5.5 — "routing must never be opaque"). Returns the `modelrig.cache.*`
176
+ * attribute set a caller attaches to the swap/proposal decision span so the
177
+ * verdict + its economics travel to any OTLP backend alongside the inference
178
+ * spans. Declared HERE because this module is the one place OTLP attribute names
179
+ * live (the pin at the top of this file).
180
+ *
181
+ * `breakeven_conformant_calls` can be `Infinity` ("never breaks even"), which is
182
+ * not a valid JSON number — so it is emitted as a double ONLY when finite, and a
183
+ * boolean `modelrig.cache.breakeven_reachable` records the never-case explicitly
184
+ * rather than dropping the fact.
185
+ */
186
+ function cacheDecisionSpanAttributes(ctx) {
187
+ const attrs = [
188
+ strAttr("modelrig.cache.verdict", ctx.verdict),
189
+ dblAttr("modelrig.cache.observed_hit_rate", ctx.observed_hit_rate),
190
+ dblAttr("modelrig.cache.observed_write_rate", ctx.observed_write_rate),
191
+ intAttr("modelrig.cache.window_days", ctx.window_days),
192
+ dblAttr("modelrig.cache.incumbent_effective_in_per_mtok", ctx.incumbent_effective_in_per_mtok),
193
+ dblAttr("modelrig.cache.challenger_cold_in_per_mtok", ctx.challenger_cold_in_per_mtok),
194
+ dblAttr("modelrig.cache.switch_cost_usd", ctx.switch_cost_usd),
195
+ dblAttr("modelrig.cache.cache_option_value_usd", ctx.cache_option_value_usd),
196
+ ];
197
+ const reachable = Number.isFinite(ctx.breakeven_conformant_calls);
198
+ attrs.push(boolAttr("modelrig.cache.breakeven_reachable", reachable));
199
+ if (reachable) {
200
+ attrs.push(dblAttr("modelrig.cache.breakeven_conformant_calls", ctx.breakeven_conformant_calls));
201
+ }
202
+ return attrs;
203
+ }
204
+ /**
205
+ * Wrap spans in the OTLP `ExportTraceServiceRequest` envelope (spec §4, pure).
206
+ * One resource, one scope (`modelrig` @ SEMCONV_VERSION), N spans.
207
+ */
208
+ function buildExportTraceRequest(spans, resource) {
209
+ return {
210
+ resourceSpans: [
211
+ {
212
+ resource: {
213
+ attributes: [strAttr("service.name", resource.serviceName), ...(resource.attributes ?? [])],
214
+ },
215
+ scopeSpans: [
216
+ {
217
+ scope: { name: "modelrig", version: exports.SEMCONV_VERSION },
218
+ spans,
219
+ },
220
+ ],
221
+ },
222
+ ],
223
+ };
224
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * OTLP-in v0 normalizer — Expansion E3-Harvest (spec §3). PURE: no I/O, no env,
3
+ * no imports from the exporter/sinks/server. The INBOUND sibling of `otel-map.ts`
4
+ * (which is the OUTBOUND our-rows → OTLP mapper). Foreign OTLP spans in →
5
+ * `runs` + attested `steps` out.
6
+ *
7
+ * ── SCOPE (spec §3.1): identity, structure, timing, status, model/provider,
8
+ * usage ONLY. ZERO content extraction — prompts/completions/messages in foreign
9
+ * spans are never read, never stored, never passed to the envelope. Retention-
10
+ * free default; content custody arrives with E2-C. This deletes ~60% of
11
+ * Langfuse's problem surface deliberately.
12
+ *
13
+ * ── VINTAGE HANDLING is pure NAME-UNION, not versioned dispatch (learnings
14
+ * §1.1, their proven approach), with our two divergences (spec §3.3):
15
+ * (1) namespaced attributes outrank bare ones — `gen_ai.*`/`llm.*` are checked
16
+ * BEFORE a bare `model`;
17
+ * (2) provider IS normalized (Langfuse never reads provider on ingest), because
18
+ * `model_key = provider/model` feeds our registry/priors/leaderboard —
19
+ * recorded honestly, ending at "unknown", never guessed.
20
+ *
21
+ * The usage de-double-counting and the agent-span aggregate skip are adopted
22
+ * from OtelIngestionProcessor's generic extractor (learnings §1.2, read for
23
+ * pattern per §5.3 — implemented fresh here, no bodies copied).
24
+ */
25
+ import type { WireRun, WireStep } from "./ingest-protocol";
26
+ export interface AttestedUsage {
27
+ /** Non-cached input tokens (cache buckets subtracted, floored 0). */
28
+ readonly input?: number;
29
+ /** Non-reasoning/-audio output tokens (subtracted, floored 0). */
30
+ readonly output?: number;
31
+ readonly total?: number;
32
+ readonly input_cached_tokens?: number;
33
+ readonly input_cache_creation?: number;
34
+ readonly output_reasoning_tokens?: number;
35
+ readonly output_audio_tokens?: number;
36
+ /** Any other gen_ai.usage.* / llm.token_count.* bucket, name preserved. */
37
+ readonly [bucket: string]: number | undefined;
38
+ }
39
+ export interface AttestedEnvelope {
40
+ /** Resolved model, or null when no model attribute was present. */
41
+ readonly model: string | null;
42
+ /** Resolved provider — honest, ending at "unknown", NEVER guessed. */
43
+ readonly provider: string;
44
+ /** Classified operation (generation/tool/agent/retriever/embedding/span). */
45
+ readonly operation: string;
46
+ /** De-double-counted usage; omitted entirely on agent-aggregate spans. */
47
+ readonly usage?: AttestedUsage;
48
+ /** The emitting instrumentation scope (name + optional version). */
49
+ readonly scope: {
50
+ readonly name: string;
51
+ readonly version: string | null;
52
+ };
53
+ }
54
+ type OtlpAnyValueIn = Record<string, unknown>;
55
+ interface OtlpKeyValueIn {
56
+ key?: string;
57
+ value?: OtlpAnyValueIn;
58
+ }
59
+ /** What a decoded span looks like to us (both transports converge here). */
60
+ export interface OtlpSpanIn {
61
+ traceId?: unknown;
62
+ trace_id?: unknown;
63
+ spanId?: unknown;
64
+ span_id?: unknown;
65
+ parentSpanId?: unknown;
66
+ parent_span_id?: unknown;
67
+ name?: unknown;
68
+ kind?: unknown;
69
+ startTimeUnixNano?: unknown;
70
+ start_time_unix_nano?: unknown;
71
+ endTimeUnixNano?: unknown;
72
+ end_time_unix_nano?: unknown;
73
+ attributes?: OtlpKeyValueIn[];
74
+ status?: {
75
+ code?: unknown;
76
+ message?: unknown;
77
+ };
78
+ }
79
+ export interface NormalizeResult {
80
+ readonly runs: WireRun[];
81
+ /** Attested steps (each carries the `attested` envelope). */
82
+ readonly steps: WireStep[];
83
+ /** reason → count (bad_otlp_span, unmapped_attribute, ts_copied_edge, …). */
84
+ readonly drops: Record<string, number>;
85
+ /** Total spans seen (before drops) — for the conversion-failure log. */
86
+ readonly spanCount: number;
87
+ /** Distinct instrumentation-scope names seen — named in the logs-mistake 400. */
88
+ readonly scopeNames: string[];
89
+ }
90
+ /**
91
+ * Normalize a decoded OTLP `TracesData` structure into runs + attested steps.
92
+ * Total and defensive: a malformed span is dropped-and-counted, never thrown.
93
+ * `nowMs` is injected so callers/tests are deterministic (default Date.now()).
94
+ */
95
+ export declare function normalizeOtlpTraces(data: unknown, nowMs?: number): NormalizeResult;
96
+ /**
97
+ * Logs-exporter detection (learnings §1.2). ResourceLogs and ResourceSpans share
98
+ * protobuf field numbers, so a logs exporter pointed at the traces endpoint
99
+ * decodes as id-less "spans". A JSON logs body carries `resourceLogs` outright.
100
+ * Returns true when the body is a logs payload that must be rejected 400.
101
+ */
102
+ export declare function looksLikeLogsPayload(data: unknown): boolean;
103
+ export {};
104
+ //# sourceMappingURL=otel-normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-normalize.d.ts","sourceRoot":"","sources":["../../src/telemetry/otel-normalize.ts"],"names":[],"mappings":"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"}