@mupt-ai/dari-gateway 0.1.0 → 0.2.1

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 (369) hide show
  1. package/README.md +8 -1
  2. package/dist/bun.d.ts +2 -0
  3. package/dist/bun.js +4 -0
  4. package/dist/context/eval_catalog.d.ts +3 -0
  5. package/dist/context/eval_catalog.js +7 -0
  6. package/dist/context/interaction_fingerprint.d.ts +27 -0
  7. package/dist/context/interaction_fingerprint.js +519 -0
  8. package/dist/context/interaction_fingerprint_format.d.ts +42 -0
  9. package/dist/context/interaction_fingerprint_format.js +113 -0
  10. package/dist/context/interaction_lease_depth.d.ts +2 -0
  11. package/dist/context/interaction_lease_depth.js +110 -0
  12. package/dist/context/lease_history.d.ts +7 -0
  13. package/dist/context/lease_history.js +158 -0
  14. package/dist/context/pricing.d.ts +4 -0
  15. package/dist/context/pricing.js +23 -0
  16. package/dist/context/provider_prompt_accounting.d.ts +14 -0
  17. package/dist/context/provider_prompt_accounting.js +187 -0
  18. package/dist/context/routing_context.d.ts +40 -0
  19. package/dist/context/routing_context.js +211 -0
  20. package/dist/http/auth.d.ts +2 -0
  21. package/dist/http/auth.js +35 -0
  22. package/dist/http/errors.d.ts +19 -0
  23. package/dist/http/errors.js +89 -0
  24. package/dist/http/handler.d.ts +12 -0
  25. package/dist/http/handler.js +81 -0
  26. package/dist/http/http2_server.d.ts +6 -0
  27. package/dist/http/http2_server.js +103 -0
  28. package/dist/http/serve.d.ts +20 -0
  29. package/dist/http/serve.js +78 -0
  30. package/dist/index.d.ts +6 -0
  31. package/dist/index.js +8 -0
  32. package/dist/ingress/anthropic_messages.d.ts +3 -0
  33. package/dist/ingress/anthropic_messages.js +122 -0
  34. package/dist/ingress/anthropic_models.d.ts +1 -0
  35. package/dist/ingress/anthropic_models.js +23 -0
  36. package/dist/ingress/chat_completions.d.ts +2 -0
  37. package/dist/ingress/chat_completions.js +37 -0
  38. package/dist/ingress/claude_code/request_context.d.ts +2 -0
  39. package/dist/ingress/claude_code/request_context.js +31 -0
  40. package/dist/ingress/codex.d.ts +3 -0
  41. package/dist/ingress/codex.js +65 -0
  42. package/dist/ingress/codex_models.d.ts +2 -0
  43. package/dist/ingress/codex_models.js +89 -0
  44. package/dist/ingress/json.d.ts +1 -0
  45. package/dist/ingress/json.js +95 -0
  46. package/dist/ingress/models.d.ts +1 -0
  47. package/dist/ingress/models.js +53 -0
  48. package/dist/interaction/capabilities.d.ts +3 -0
  49. package/dist/interaction/capabilities.js +24 -0
  50. package/dist/interaction/image.d.ts +4 -0
  51. package/dist/interaction/image.js +13 -0
  52. package/dist/interaction/portable_reasoning_state.d.ts +4 -0
  53. package/dist/interaction/portable_reasoning_state.js +18 -0
  54. package/dist/interaction/provider_continuation_state.d.ts +6 -0
  55. package/dist/interaction/provider_continuation_state.js +27 -0
  56. package/dist/interaction/tool_identity.d.ts +10 -0
  57. package/dist/interaction/tool_identity.js +41 -0
  58. package/dist/interaction/types.d.ts +203 -0
  59. package/dist/interaction/types.js +5 -0
  60. package/dist/models/context_limits.d.ts +2 -0
  61. package/dist/models/context_limits.js +7 -0
  62. package/dist/models/execution_provider.d.ts +8 -0
  63. package/dist/models/execution_provider.js +13 -0
  64. package/dist/models/gateways.d.ts +11 -0
  65. package/dist/models/gateways.js +45 -0
  66. package/dist/models/ids.d.ts +1 -0
  67. package/dist/models/ids.js +15 -0
  68. package/dist/models/provider_defaults.d.ts +4 -0
  69. package/dist/models/provider_defaults.js +41 -0
  70. package/dist/models/runtime_overrides.d.ts +4 -0
  71. package/dist/models/runtime_overrides.js +209 -0
  72. package/dist/observability/errors.d.ts +8 -0
  73. package/dist/observability/errors.js +11 -0
  74. package/dist/platform/platform.d.ts +152 -0
  75. package/dist/platform/platform.js +11 -0
  76. package/dist/platform/routing_contract.d.ts +2 -0
  77. package/dist/platform/routing_contract.js +5 -0
  78. package/dist/protocol/input/anthropic_messages.d.ts +2 -0
  79. package/dist/protocol/input/anthropic_messages.js +494 -0
  80. package/dist/protocol/input/chat_completions.d.ts +4 -0
  81. package/dist/protocol/input/chat_completions.js +212 -0
  82. package/dist/protocol/input/chat_completions_validation.d.ts +2 -0
  83. package/dist/protocol/input/chat_completions_validation.js +257 -0
  84. package/dist/protocol/input/openai_responses.d.ts +2 -0
  85. package/dist/protocol/input/openai_responses.js +666 -0
  86. package/dist/protocol/input/router_model.d.ts +7 -0
  87. package/dist/protocol/input/router_model.js +43 -0
  88. package/dist/protocol/output/anthropic_messages.d.ts +10 -0
  89. package/dist/protocol/output/anthropic_messages.js +15 -0
  90. package/dist/protocol/output/anthropic_messages_output.d.ts +10 -0
  91. package/dist/protocol/output/anthropic_messages_output.js +124 -0
  92. package/dist/protocol/output/anthropic_messages_stream.d.ts +16 -0
  93. package/dist/protocol/output/anthropic_messages_stream.js +267 -0
  94. package/dist/protocol/output/chat_completions.d.ts +29 -0
  95. package/dist/protocol/output/chat_completions.js +406 -0
  96. package/dist/protocol/output/chat_reasoning_detail.d.ts +2 -0
  97. package/dist/protocol/output/chat_reasoning_detail.js +13 -0
  98. package/dist/protocol/output/delivered_stream_snapshot.d.ts +10 -0
  99. package/dist/protocol/output/delivered_stream_snapshot.js +31 -0
  100. package/dist/protocol/output/openai_responses.d.ts +10 -0
  101. package/dist/protocol/output/openai_responses.js +14 -0
  102. package/dist/protocol/output/openai_responses_output.d.ts +14 -0
  103. package/dist/protocol/output/openai_responses_output.js +125 -0
  104. package/dist/protocol/output/openai_responses_stream.d.ts +18 -0
  105. package/dist/protocol/output/openai_responses_stream.js +546 -0
  106. package/dist/protocol/output/sse_stream.d.ts +31 -0
  107. package/dist/protocol/output/sse_stream.js +67 -0
  108. package/dist/providers/anthropic_safeguards.d.ts +11 -0
  109. package/dist/providers/anthropic_safeguards.js +81 -0
  110. package/dist/providers/aws_assume_role.d.ts +17 -0
  111. package/dist/providers/aws_assume_role.js +107 -0
  112. package/dist/providers/cancel_estimate.d.ts +43 -0
  113. package/dist/providers/cancel_estimate.js +89 -0
  114. package/dist/providers/execution.d.ts +72 -0
  115. package/dist/providers/execution.js +491 -0
  116. package/dist/providers/model_capabilities.d.ts +11 -0
  117. package/dist/providers/model_capabilities.js +29 -0
  118. package/dist/providers/pi.d.ts +65 -0
  119. package/dist/providers/pi.js +319 -0
  120. package/dist/providers/pi_context.d.ts +7 -0
  121. package/dist/providers/pi_context.js +405 -0
  122. package/dist/providers/pi_options.d.ts +11 -0
  123. package/dist/providers/pi_options.js +398 -0
  124. package/dist/providers/pi_output.d.ts +2 -0
  125. package/dist/providers/pi_output.js +453 -0
  126. package/dist/providers/provider_attempt_runner.d.ts +55 -0
  127. package/dist/providers/provider_attempt_runner.js +90 -0
  128. package/dist/providers/provider_call.d.ts +77 -0
  129. package/dist/providers/provider_call.js +292 -0
  130. package/dist/providers/provider_reported_cost.d.ts +10 -0
  131. package/dist/providers/provider_reported_cost.js +123 -0
  132. package/dist/providers/reasoning.d.ts +12 -0
  133. package/dist/providers/reasoning.js +30 -0
  134. package/dist/providers/response_capture.d.ts +23 -0
  135. package/dist/providers/response_capture.js +47 -0
  136. package/dist/providers/stream_finalization.d.ts +46 -0
  137. package/dist/providers/stream_finalization.js +165 -0
  138. package/dist/providers/subscription_limits.d.ts +31 -0
  139. package/dist/providers/subscription_limits.js +163 -0
  140. package/dist/providers/subscription_usage.d.ts +10 -0
  141. package/dist/providers/subscription_usage.js +79 -0
  142. package/dist/runtime/claude_code/auxiliary_routing.d.ts +3 -0
  143. package/dist/runtime/claude_code/auxiliary_routing.js +60 -0
  144. package/dist/runtime/customer_disconnect.d.ts +20 -0
  145. package/dist/runtime/customer_disconnect.js +49 -0
  146. package/dist/runtime/explicit_model.d.ts +4 -0
  147. package/dist/runtime/explicit_model.js +53 -0
  148. package/dist/runtime/harness_identity/conversation.d.ts +33 -0
  149. package/dist/runtime/harness_identity/conversation.js +39 -0
  150. package/dist/runtime/harness_identity/extract.d.ts +8 -0
  151. package/dist/runtime/harness_identity/extract.js +214 -0
  152. package/dist/runtime/harness_identity/index.d.ts +2 -0
  153. package/dist/runtime/harness_identity/index.js +2 -0
  154. package/dist/runtime/prepare_routed_completion.d.ts +33 -0
  155. package/dist/runtime/prepare_routed_completion.js +167 -0
  156. package/dist/runtime/provider_stream_lifecycle.d.ts +31 -0
  157. package/dist/runtime/provider_stream_lifecycle.js +88 -0
  158. package/dist/runtime/provider_stream_outcome.d.ts +23 -0
  159. package/dist/runtime/provider_stream_outcome.js +55 -0
  160. package/dist/runtime/request_tags.d.ts +7 -0
  161. package/dist/runtime/request_tags.js +33 -0
  162. package/dist/runtime/routed_completion.d.ts +17 -0
  163. package/dist/runtime/routed_completion.js +80 -0
  164. package/dist/runtime/routed_protocol.d.ts +30 -0
  165. package/dist/runtime/routed_protocol.js +1 -0
  166. package/dist/runtime/routed_runtime.d.ts +40 -0
  167. package/dist/runtime/routed_runtime.js +535 -0
  168. package/dist/runtime/routing_lease.d.ts +26 -0
  169. package/dist/runtime/routing_lease.js +210 -0
  170. package/dist/runtime/runtime_reporter.d.ts +71 -0
  171. package/dist/runtime/runtime_reporter.js +35 -0
  172. package/dist/self_host/config.d.ts +46 -0
  173. package/dist/self_host/config.js +105 -0
  174. package/dist/self_host/main.d.ts +16 -0
  175. package/dist/self_host/main.js +95 -0
  176. package/dist/self_host/platform.d.ts +13 -0
  177. package/dist/self_host/platform.js +50 -0
  178. package/dist/self_host/prefix_store.d.ts +46 -0
  179. package/dist/self_host/prefix_store.js +261 -0
  180. package/dist/self_host/resolve.d.ts +28 -0
  181. package/dist/self_host/resolve.js +171 -0
  182. package/dist/self_host/subscriptions/access.d.ts +10 -0
  183. package/dist/self_host/subscriptions/access.js +37 -0
  184. package/dist/self_host/subscriptions/http.d.ts +15 -0
  185. package/dist/self_host/subscriptions/http.js +187 -0
  186. package/dist/self_host/subscriptions/index.d.ts +24 -0
  187. package/dist/self_host/subscriptions/index.js +24 -0
  188. package/dist/self_host/subscriptions/oauth.d.ts +55 -0
  189. package/dist/self_host/subscriptions/oauth.js +281 -0
  190. package/dist/self_host/subscriptions/store.d.ts +78 -0
  191. package/dist/self_host/subscriptions/store.js +235 -0
  192. package/dist/strategies/auto_routing_selector.d.ts +12 -0
  193. package/dist/strategies/auto_routing_selector.js +61 -0
  194. package/dist/strategies/eval_relevance.d.ts +17 -0
  195. package/dist/strategies/eval_relevance.js +32 -0
  196. package/dist/strategies/fallback_decision.d.ts +8 -0
  197. package/dist/strategies/fallback_decision.js +17 -0
  198. package/dist/strategies/priority_selector.d.ts +7 -0
  199. package/dist/strategies/priority_selector.js +37 -0
  200. package/dist/strategies/route_decision.d.ts +22 -0
  201. package/dist/strategies/route_decision.js +65 -0
  202. package/dist/strategies/routing.d.ts +74 -0
  203. package/dist/strategies/routing.js +280 -0
  204. package/dist/strategies/selector_projection.d.ts +15 -0
  205. package/dist/strategies/selector_projection.js +161 -0
  206. package/dist/telemetry/background.d.ts +7 -0
  207. package/dist/telemetry/background.js +33 -0
  208. package/dist/telemetry/benchmark_replay.d.ts +37 -0
  209. package/dist/telemetry/benchmark_replay.js +108 -0
  210. package/dist/telemetry/billing_finalization.d.ts +64 -0
  211. package/dist/telemetry/billing_finalization.js +96 -0
  212. package/dist/telemetry/ingest_values.d.ts +4 -0
  213. package/dist/telemetry/ingest_values.js +12 -0
  214. package/dist/telemetry/model_cost.d.ts +3 -0
  215. package/dist/telemetry/model_cost.js +15 -0
  216. package/dist/telemetry/prefix_state.d.ts +47 -0
  217. package/dist/telemetry/prefix_state.js +116 -0
  218. package/dist/telemetry/report.d.ts +88 -0
  219. package/dist/telemetry/report.js +621 -0
  220. package/dist/telemetry/requests/interaction_observability.d.ts +45 -0
  221. package/dist/telemetry/requests/interaction_observability.js +180 -0
  222. package/dist/telemetry/requests/retained_interaction_request.d.ts +8 -0
  223. package/dist/telemetry/requests/retained_interaction_request.js +10 -0
  224. package/dist/telemetry/scrub.d.ts +2 -0
  225. package/dist/telemetry/scrub.js +31 -0
  226. package/dist/telemetry/skills/claude/catalog.d.ts +6 -0
  227. package/dist/telemetry/skills/claude/catalog.js +99 -0
  228. package/dist/telemetry/skills/claude/file_reads.d.ts +4 -0
  229. package/dist/telemetry/skills/claude/file_reads.js +110 -0
  230. package/dist/telemetry/skills/claude/observations.d.ts +3 -0
  231. package/dist/telemetry/skills/claude/observations.js +366 -0
  232. package/dist/telemetry/skills/codex/catalog.d.ts +11 -0
  233. package/dist/telemetry/skills/codex/catalog.js +138 -0
  234. package/dist/telemetry/skills/codex/exec_file_reads.d.ts +9 -0
  235. package/dist/telemetry/skills/codex/exec_file_reads.js +36 -0
  236. package/dist/telemetry/skills/codex/explicit.d.ts +3 -0
  237. package/dist/telemetry/skills/codex/explicit.js +90 -0
  238. package/dist/telemetry/skills/codex/file_reads.d.ts +4 -0
  239. package/dist/telemetry/skills/codex/file_reads.js +37 -0
  240. package/dist/telemetry/skills/codex/identity.d.ts +2 -0
  241. package/dist/telemetry/skills/codex/identity.js +20 -0
  242. package/dist/telemetry/skills/observations.d.ts +21 -0
  243. package/dist/telemetry/skills/observations.js +41 -0
  244. package/dist/telemetry/skills/paths.d.ts +11 -0
  245. package/dist/telemetry/skills/paths.js +61 -0
  246. package/dist/telemetry/skills/pi.d.ts +6 -0
  247. package/dist/telemetry/skills/pi.js +223 -0
  248. package/dist/telemetry/skills/shell_file_reads.d.ts +7 -0
  249. package/dist/telemetry/skills/shell_file_reads.js +226 -0
  250. package/dist/telemetry/skills/shell_words.d.ts +13 -0
  251. package/dist/telemetry/skills/shell_words.js +189 -0
  252. package/dist/telemetry/tools/input.d.ts +2 -0
  253. package/dist/telemetry/tools/input.js +14 -0
  254. package/dist/telemetry/tools/observations.d.ts +29 -0
  255. package/dist/telemetry/tools/observations.js +247 -0
  256. package/dist/telemetry/usage.d.ts +57 -0
  257. package/dist/telemetry/usage.js +136 -0
  258. package/dist/types.d.ts +94 -0
  259. package/dist/types.js +1 -0
  260. package/package.json +22 -5
  261. package/src/bun.ts +4 -0
  262. package/src/context/eval_catalog.ts +1 -1
  263. package/src/context/interaction_fingerprint.ts +9 -9
  264. package/src/context/interaction_fingerprint_format.ts +1 -1
  265. package/src/context/interaction_lease_depth.ts +1 -1
  266. package/src/context/pricing.ts +1 -1
  267. package/src/context/provider_prompt_accounting.ts +5 -5
  268. package/src/context/routing_context.ts +17 -17
  269. package/src/http/auth.ts +1 -1
  270. package/src/http/handler.ts +8 -8
  271. package/src/http/serve.ts +3 -3
  272. package/src/index.ts +10 -9
  273. package/src/ingress/anthropic_messages.ts +12 -12
  274. package/src/ingress/anthropic_models.ts +1 -1
  275. package/src/ingress/chat_completions.ts +9 -9
  276. package/src/ingress/claude_code/request_context.ts +2 -2
  277. package/src/ingress/codex.ts +10 -10
  278. package/src/ingress/codex_models.ts +4 -4
  279. package/src/ingress/json.ts +1 -1
  280. package/src/ingress/models.ts +10 -10
  281. package/src/interaction/capabilities.ts +1 -1
  282. package/src/interaction/portable_reasoning_state.ts +1 -1
  283. package/src/interaction/provider_continuation_state.ts +1 -1
  284. package/src/interaction/tool_identity.ts +2 -2
  285. package/src/interaction/types.ts +3 -0
  286. package/src/models/context_limits.ts +1 -1
  287. package/src/models/execution_provider.ts +1 -1
  288. package/src/models/ids.ts +1 -1
  289. package/src/models/provider_defaults.ts +1 -1
  290. package/src/models/runtime_overrides.ts +1 -1
  291. package/src/observability/errors.ts +2 -2
  292. package/src/platform/platform.ts +36 -4
  293. package/src/protocol/input/anthropic_messages.ts +7 -7
  294. package/src/protocol/input/chat_completions.ts +5 -5
  295. package/src/protocol/input/chat_completions_validation.ts +4 -4
  296. package/src/protocol/input/openai_responses.ts +6 -6
  297. package/src/protocol/output/anthropic_messages.ts +3 -3
  298. package/src/protocol/output/anthropic_messages_output.ts +6 -4
  299. package/src/protocol/output/anthropic_messages_stream.ts +7 -7
  300. package/src/protocol/output/chat_completions.ts +13 -13
  301. package/src/protocol/output/chat_reasoning_detail.ts +1 -1
  302. package/src/protocol/output/openai_responses.ts +3 -3
  303. package/src/protocol/output/openai_responses_output.ts +4 -2
  304. package/src/protocol/output/openai_responses_stream.ts +6 -6
  305. package/src/protocol/output/sse_stream.ts +3 -3
  306. package/src/providers/anthropic_safeguards.ts +2 -2
  307. package/src/providers/aws_assume_role.ts +2 -2
  308. package/src/providers/cancel_estimate.ts +1 -1
  309. package/src/providers/execution.ts +17 -17
  310. package/src/providers/pi.ts +115 -41
  311. package/src/providers/pi_context.ts +6 -6
  312. package/src/providers/pi_options.ts +283 -453
  313. package/src/providers/pi_output.ts +6 -5
  314. package/src/providers/provider_attempt_runner.ts +1 -1
  315. package/src/providers/provider_call.ts +37 -18
  316. package/src/providers/provider_reported_cost.ts +138 -0
  317. package/src/providers/reasoning.ts +2 -2
  318. package/src/providers/stream_finalization.ts +10 -10
  319. package/src/providers/subscription_limits.ts +3 -3
  320. package/src/runtime/claude_code/auxiliary_routing.ts +5 -5
  321. package/src/runtime/customer_disconnect.ts +1 -1
  322. package/src/runtime/explicit_model.ts +31 -4
  323. package/src/runtime/harness_identity/conversation.ts +1 -1
  324. package/src/runtime/harness_identity/extract.ts +3 -3
  325. package/src/runtime/harness_identity/index.ts +2 -2
  326. package/src/runtime/prepare_routed_completion.ts +46 -10
  327. package/src/runtime/provider_stream_lifecycle.ts +1 -1
  328. package/src/runtime/provider_stream_outcome.ts +2 -2
  329. package/src/runtime/request_tags.ts +34 -0
  330. package/src/runtime/routed_completion.ts +13 -11
  331. package/src/runtime/routed_protocol.ts +2 -2
  332. package/src/runtime/routed_runtime.ts +38 -20
  333. package/src/runtime/routing_lease.ts +7 -7
  334. package/src/runtime/runtime_reporter.ts +3 -3
  335. package/src/self_host/main.ts +19 -14
  336. package/src/self_host/platform.ts +5 -5
  337. package/src/self_host/prefix_store.ts +2 -2
  338. package/src/self_host/resolve.ts +11 -11
  339. package/src/self_host/subscriptions/access.ts +2 -2
  340. package/src/self_host/subscriptions/http.ts +2 -2
  341. package/src/self_host/subscriptions/index.ts +4 -4
  342. package/src/self_host/subscriptions/store.ts +1 -1
  343. package/src/strategies/auto_routing_selector.ts +2 -2
  344. package/src/strategies/eval_relevance.ts +3 -3
  345. package/src/strategies/priority_selector.ts +1 -1
  346. package/src/strategies/route_decision.ts +7 -7
  347. package/src/strategies/routing.ts +11 -11
  348. package/src/strategies/selector_projection.ts +2 -2
  349. package/src/telemetry/billing_finalization.ts +3 -3
  350. package/src/telemetry/model_cost.ts +1 -1
  351. package/src/telemetry/prefix_state.ts +4 -4
  352. package/src/telemetry/report.ts +30 -25
  353. package/src/telemetry/requests/interaction_observability.ts +1 -1
  354. package/src/telemetry/requests/retained_interaction_request.ts +1 -1
  355. package/src/telemetry/skills/claude/catalog.ts +1 -1
  356. package/src/telemetry/skills/claude/file_reads.ts +6 -6
  357. package/src/telemetry/skills/claude/observations.ts +3 -3
  358. package/src/telemetry/skills/codex/catalog.ts +3 -3
  359. package/src/telemetry/skills/codex/exec_file_reads.ts +4 -4
  360. package/src/telemetry/skills/codex/explicit.ts +3 -3
  361. package/src/telemetry/skills/codex/file_reads.ts +5 -5
  362. package/src/telemetry/skills/observations.ts +7 -7
  363. package/src/telemetry/skills/pi.ts +3 -3
  364. package/src/telemetry/skills/shell_file_reads.ts +2 -2
  365. package/src/telemetry/skills/shell_words.ts +1 -1
  366. package/src/telemetry/tools/input.ts +1 -1
  367. package/src/telemetry/tools/observations.ts +9 -9
  368. package/src/telemetry/usage.ts +9 -5
  369. package/src/types.ts +15 -0
@@ -14,34 +14,34 @@ import {
14
14
  type RoutingDecision,
15
15
  type RoutingStrategy,
16
16
  } from "@mupt-ai/dari-router/policy-engine";
17
- import type { ImageCapabilityPrunedModel } from "../context/routing_context";
18
- import { HttpError, errorCode } from "../http/errors";
19
- import { executionProviderForModel } from "../models/execution_provider";
17
+ import type { ImageCapabilityPrunedModel } from "../context/routing_context.js";
18
+ import { HttpError, errorCode } from "../http/errors.js";
19
+ import { executionProviderForModel } from "../models/execution_provider.js";
20
20
  import {
21
21
  isBackgroundRequest,
22
22
  type InteractionOutput,
23
23
  type InteractionRequest,
24
24
  type InteractionUsage,
25
25
  type ProviderIdentity,
26
- } from "../interaction/types";
27
- import { captureOperationalError } from "../observability/errors";
28
- import { gatewayPlatform } from "../platform/platform";
26
+ } from "../interaction/types.js";
27
+ import { captureOperationalError } from "../observability/errors.js";
28
+ import { gatewayPlatform, type RequestTags } from "../platform/platform.js";
29
29
  import type {
30
30
  ProviderAttemptRecord,
31
31
  ProviderAttemptReport,
32
32
  FrozenProviderTerminal,
33
33
  ReportableProviderOutcome,
34
34
  ReportedProviderExecution,
35
- } from "../runtime/runtime_reporter";
35
+ } from "../runtime/runtime_reporter.js";
36
36
  import {
37
37
  selectorTraceFromError,
38
38
  type SelectorRun,
39
39
  type SelectorTrace,
40
- } from "../strategies/routing";
41
- import type { ResolvedRouter } from "../types";
42
- import type { HarnessConversationIdentity } from "../runtime/harness_identity";
43
- import { trackBackgroundTelemetry } from "./background";
44
- import { modelCost } from "./model_cost";
40
+ } from "../strategies/routing.js";
41
+ import type { ResolvedRouter } from "../types.js";
42
+ import type { HarnessConversationIdentity } from "../runtime/harness_identity/index.js";
43
+ import { trackBackgroundTelemetry } from "./background.js";
44
+ import { modelCost } from "./model_cost.js";
45
45
  import {
46
46
  routingBillingProviderAttemptFacts,
47
47
  type FrozenRoutingBillingTerminal,
@@ -49,26 +49,26 @@ import {
49
49
  type RoutingBillingFinalizationPayload,
50
50
  type RoutingBillingProviderAttemptFacts,
51
51
  type RoutingBillingTerminalOutcome,
52
- } from "./billing_finalization";
53
- import { estimateBenchmarkReplay } from "./benchmark_replay";
54
- import { extractInteractionObservability } from "./requests/interaction_observability";
52
+ } from "./billing_finalization.js";
53
+ import { estimateBenchmarkReplay } from "./benchmark_replay.js";
54
+ import { extractInteractionObservability } from "./requests/interaction_observability.js";
55
55
  import {
56
56
  costString,
57
57
  finiteNumber,
58
58
  isRecord,
59
59
  tokenCount,
60
- } from "./ingest_values";
60
+ } from "./ingest_values.js";
61
61
  import {
62
62
  buildCompletedPrefixHit,
63
63
  leaseCountdownForPrefix,
64
64
  prefixEntryForIngest,
65
65
  reportPendingLease,
66
66
  reportPrefixState,
67
- } from "./prefix_state";
68
- import { subscriptionUsageLimitFromFailure } from "../providers/subscription_limits";
69
- import { scrubSecrets } from "./scrub";
70
- import { encodeRetainedInteractionRequest } from "./requests/retained_interaction_request";
71
- import { toolResultObservations, toolSkillEvents } from "./tools/observations";
67
+ } from "./prefix_state.js";
68
+ import { subscriptionUsageLimitFromFailure } from "../providers/subscription_limits.js";
69
+ import { scrubSecrets } from "./scrub.js";
70
+ import { encodeRetainedInteractionRequest } from "./requests/retained_interaction_request.js";
71
+ import { toolResultObservations, toolSkillEvents } from "./tools/observations.js";
72
72
 
73
73
  // The decision's candidate_pruning audit: core cache-aware pruning, extended
74
74
  // with models excluded up front for missing hard capabilities (image input).
@@ -161,6 +161,7 @@ export class RequestReporter {
161
161
  private readonly args: {
162
162
  requestId: string;
163
163
  clientRequestId: string | null;
164
+ tags: RequestTags;
164
165
  credentials: ResolvedRouter;
165
166
  routerId: string;
166
167
  interaction: InteractionRequest;
@@ -428,6 +429,9 @@ export class RequestReporter {
428
429
  : null
429
430
  );
430
431
  const pricingKnown = selectedModel ? this.pricingKnown(selectedModel) : null;
432
+ const costSource = usage?.costSource === "provider"
433
+ ? "provider"
434
+ : pricingKnown === true ? "pricing" : null;
431
435
  const observability = extractInteractionObservability(a.interaction);
432
436
  const inputTokens = tokenCount(usage?.input) ?? 0;
433
437
  const retainedClientRequest = encodeRetainedInteractionRequest(
@@ -676,10 +680,10 @@ export class RequestReporter {
676
680
  cache_write_tokens: tokenCount(usage?.cacheWrite),
677
681
  output_tokens: tokenCount(usage?.output),
678
682
  total_tokens: tokenCount(usage?.totalTokens),
679
- total_cost_usd:
680
- pricingKnown === true && isRecord(usage?.cost)
681
- ? finiteNumber(usage.cost.total)
682
- : null,
683
+ total_cost_usd: costSource === null || !isRecord(usage?.cost)
684
+ ? null
685
+ : finiteNumber(usage.cost.total),
686
+ cost_source: costSource,
683
687
  pricing_known: pricingKnown,
684
688
  },
685
689
  distinctId:
@@ -690,6 +694,7 @@ export class RequestReporter {
690
694
  isNewConversation: a.isNewConversation,
691
695
  zdr: a.zdr,
692
696
  harnessConversationIdentity: a.harnessConversationIdentity,
697
+ tags: a.tags,
693
698
  });
694
699
  } catch (error) {
695
700
  console.error("routing report assembly failed", error);
@@ -5,7 +5,7 @@ import {
5
5
  type InteractionRequest,
6
6
  type InteractionToolChoice,
7
7
  type ProviderContinuationState,
8
- } from "../../interaction/types";
8
+ } from "../../interaction/types.js";
9
9
 
10
10
  const SCHEMA_VERSION = 1 as const;
11
11
 
@@ -1,4 +1,4 @@
1
- import type { InteractionRequest } from "../../interaction/types";
1
+ import type { InteractionRequest } from "../../interaction/types.js";
2
2
 
3
3
  export const RETAINED_INTERACTION_REQUEST_FORMAT = "interaction_request_v1" as const;
4
4
 
@@ -1,7 +1,7 @@
1
1
  import type {
2
2
  InteractionMessage,
3
3
  InteractionRequest,
4
- } from "../../../interaction/types";
4
+ } from "../../../interaction/types.js";
5
5
 
6
6
  const MAX_CAPABILITY_ID_CHARS = 512;
7
7
  const MAX_SKILL_NAME_CHARS = 512;
@@ -1,19 +1,19 @@
1
1
  import type {
2
2
  InteractionOutput,
3
3
  InteractionRequest,
4
- } from "../../../interaction/types";
5
- import { interactionToolInput } from "../../tools/input";
4
+ } from "../../../interaction/types.js";
5
+ import { interactionToolInput } from "../../tools/input.js";
6
6
  import {
7
7
  claudeSkillCapabilityId,
8
8
  claudeSystemSkillNames,
9
- } from "./catalog";
9
+ } from "./catalog.js";
10
10
  import {
11
11
  normalizedAbsoluteSkillPath,
12
12
  skillPathSegments,
13
13
  type NormalizedSkillPath,
14
- } from "../paths";
15
- import type { SkillObservation } from "../observations";
16
- import { readPathsFromShellCommand } from "../shell_file_reads";
14
+ } from "../paths.js";
15
+ import type { SkillObservation } from "../observations.js";
16
+ import { readPathsFromShellCommand } from "../shell_file_reads.js";
17
17
 
18
18
  const MAX_COMMAND_CHARS = 64 * 1024;
19
19
  const SKILL_FILE_NAME = "SKILL.md";
@@ -5,16 +5,16 @@ import type {
5
5
  InteractionRequest,
6
6
  InteractionToolCall,
7
7
  InteractionToolResult,
8
- } from "../../../interaction/types";
8
+ } from "../../../interaction/types.js";
9
9
  import type {
10
10
  SkillEvidenceSource,
11
11
  SkillObservation,
12
- } from "../observations";
12
+ } from "../observations.js";
13
13
  import {
14
14
  claudeAvailableSkillNames,
15
15
  claudeSkillCapabilityId,
16
16
  normalizedClaudeSkillName,
17
- } from "./catalog";
17
+ } from "./catalog.js";
18
18
 
19
19
  const MAX_SKILL_PATH_CHARS = 16 * 1024;
20
20
  const UNSAFE_DISPLAY_CHARACTERS = /[\u0000-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/u;
@@ -1,12 +1,12 @@
1
- import type { InteractionRequest } from "../../../interaction/types";
2
- import { normalizedCodexSkillName } from "./identity";
1
+ import type { InteractionRequest } from "../../../interaction/types.js";
2
+ import { normalizedCodexSkillName } from "./identity.js";
3
3
  import {
4
4
  joinedSkillPath,
5
5
  normalizedAbsoluteSkillPath,
6
6
  skillPathBasename,
7
7
  type NormalizedSkillPath,
8
8
  type PathPlatform,
9
- } from "../paths";
9
+ } from "../paths.js";
10
10
 
11
11
  const MAX_CATALOG_ENTRIES = 2_000;
12
12
  const SKILLS_OPEN = "<skills_instructions>";
@@ -1,7 +1,7 @@
1
- import type { InteractionOutput } from "../../../interaction/types";
2
- import { interactionToolInput } from "../../tools/input";
3
- import { readPathsFromShellCommand } from "../shell_file_reads";
4
- import type { CatalogSkill, CodexSkillCatalog } from "./catalog";
1
+ import type { InteractionOutput } from "../../../interaction/types.js";
2
+ import { interactionToolInput } from "../../tools/input.js";
3
+ import { readPathsFromShellCommand } from "../shell_file_reads.js";
4
+ import type { CatalogSkill, CodexSkillCatalog } from "./catalog.js";
5
5
 
6
6
  const MAX_COMMAND_CHARS = 64 * 1024;
7
7
  const MAX_SKILL_PATH_CHARS = 16 * 1024;
@@ -1,12 +1,12 @@
1
1
  import type {
2
2
  InteractionMessage,
3
3
  InteractionRequest,
4
- } from "../../../interaction/types";
5
- import type { SkillObservation } from "../observations";
4
+ } from "../../../interaction/types.js";
5
+ import type { SkillObservation } from "../observations.js";
6
6
  import {
7
7
  codexSkillCapabilityId,
8
8
  normalizedCodexSkillName,
9
- } from "./identity";
9
+ } from "./identity.js";
10
10
 
11
11
  const MAX_SKILL_PATH_CHARS = 16 * 1024;
12
12
  const UNSAFE_DISPLAY_CHARACTERS = /[\u0000-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/u;
@@ -1,14 +1,14 @@
1
1
  import type {
2
2
  InteractionOutput,
3
3
  InteractionRequest,
4
- } from "../../../interaction/types";
4
+ } from "../../../interaction/types.js";
5
5
  import {
6
6
  codexExecCommand,
7
7
  readSkillsFromCodexCommand,
8
- } from "./exec_file_reads";
9
- import { codexFileSkillCatalog } from "./catalog";
10
- import { codexSkillCapabilityId } from "./identity";
11
- import type { SkillObservation } from "../observations";
8
+ } from "./exec_file_reads.js";
9
+ import { codexFileSkillCatalog } from "./catalog.js";
10
+ import { codexSkillCapabilityId } from "./identity.js";
11
+ import type { SkillObservation } from "../observations.js";
12
12
 
13
13
  /** Match model-emitted Codex file reads to the exact current skill catalog. */
14
14
  export function codexAutomaticSkillObservations(
@@ -1,13 +1,13 @@
1
- import { isBackgroundRequest, type InteractionOutput, type InteractionRequest } from "../../interaction/types";
2
- import type { HarnessConversationIdentity } from "../../runtime/harness_identity";
1
+ import { isBackgroundRequest, type InteractionOutput, type InteractionRequest } from "../../interaction/types.js";
2
+ import type { HarnessConversationIdentity } from "../../runtime/harness_identity/index.js";
3
3
  import {
4
4
  piStyleAutomaticSkillObservations,
5
5
  piStyleExplicitSkillObservations,
6
- } from "./pi";
7
- import { claudeFileReadObservations } from "./claude/file_reads";
8
- import { claudeSkillObservations } from "./claude/observations";
9
- import { codexExplicitSkillObservations } from "./codex/explicit";
10
- import { codexAutomaticSkillObservations } from "./codex/file_reads";
6
+ } from "./pi.js";
7
+ import { claudeFileReadObservations } from "./claude/file_reads.js";
8
+ import { claudeSkillObservations } from "./claude/observations.js";
9
+ import { codexExplicitSkillObservations } from "./codex/explicit.js";
10
+ import { codexAutomaticSkillObservations } from "./codex/file_reads.js";
11
11
 
12
12
  export type SkillEvidenceSource =
13
13
  | "skill_content_injection"
@@ -2,9 +2,9 @@ import type {
2
2
  InteractionMessage,
3
3
  InteractionOutput,
4
4
  InteractionRequest,
5
- } from "../../interaction/types";
6
- import { interactionToolInput } from "../tools/input";
7
- import type { SkillObservation } from "./observations";
5
+ } from "../../interaction/types.js";
6
+ import { interactionToolInput } from "../tools/input.js";
7
+ import type { SkillObservation } from "./observations.js";
8
8
 
9
9
  const CAPABILITY_PREFIX = "unattributed:name:";
10
10
  const MAX_CAPABILITY_ID_CHARS = 512;
@@ -3,13 +3,13 @@ import {
3
3
  resolvedSkillPath,
4
4
  type NormalizedSkillPath,
5
5
  type PathPlatform,
6
- } from "./paths";
6
+ } from "./paths.js";
7
7
  import {
8
8
  executableCommand,
9
9
  restrictedShellSegments,
10
10
  trustedExecutableName,
11
11
  type ShellOperator,
12
- } from "./shell_words";
12
+ } from "./shell_words.js";
13
13
 
14
14
  const MAX_SHELL_NESTING = 16;
15
15
  const NO_VALUE_FLAGS = new Set<string>();
@@ -1,6 +1,6 @@
1
1
  import { posix, win32 } from "node:path";
2
2
 
3
- import type { PathPlatform } from "./paths";
3
+ import type { PathPlatform } from "./paths.js";
4
4
 
5
5
  const MAX_COMMAND_TOKENS = 4_096;
6
6
  const SHELL_ASSIGNMENT = /^[A-Za-z_][A-Za-z0-9_]*=/u;
@@ -1,6 +1,6 @@
1
1
  import { isRecord } from "@mupt-ai/dari-router/policy-engine";
2
2
 
3
- import type { InteractionToolCall } from "../../interaction/types";
3
+ import type { InteractionToolCall } from "../../interaction/types.js";
4
4
 
5
5
  export function interactionToolInput(
6
6
  item: InteractionToolCall,
@@ -1,23 +1,23 @@
1
1
  import { isRecord, stableStringify } from "@mupt-ai/dari-router/policy-engine";
2
2
 
3
- import { interactionPrefixChain } from "../../context/interaction_fingerprint";
3
+ import { interactionPrefixChain } from "../../context/interaction_fingerprint.js";
4
4
  import type {
5
5
  InteractionContent,
6
6
  InteractionItem,
7
7
  InteractionOutput,
8
8
  InteractionRequest,
9
9
  InteractionToolResult,
10
- } from "../../interaction/types";
11
- import { isProtocolToolCallId } from "../../interaction/tool_identity";
12
- import { anthropicMessagesToInteraction } from "../../protocol/input/anthropic_messages";
13
- import { internalChatCompletionsToInteraction } from "../../protocol/input/chat_completions";
14
- import { anthropicContent } from "../../protocol/output/anthropic_messages_output";
15
- import { assistantMessagePayload } from "../../protocol/output/chat_completions";
16
- import type { HarnessConversationIdentity } from "../../runtime/harness_identity";
10
+ } from "../../interaction/types.js";
11
+ import { isProtocolToolCallId } from "../../interaction/tool_identity.js";
12
+ import { anthropicMessagesToInteraction } from "../../protocol/input/anthropic_messages.js";
13
+ import { internalChatCompletionsToInteraction } from "../../protocol/input/chat_completions.js";
14
+ import { anthropicContent } from "../../protocol/output/anthropic_messages_output.js";
15
+ import { assistantMessagePayload } from "../../protocol/output/chat_completions.js";
16
+ import type { HarnessConversationIdentity } from "../../runtime/harness_identity/index.js";
17
17
  import {
18
18
  inputSkillObservations,
19
19
  outputSkillObservations,
20
- } from "../skills/observations";
20
+ } from "../skills/observations.js";
21
21
 
22
22
  const MAX_TOOL_SKILL_EVENTS = 1000;
23
23
 
@@ -1,17 +1,18 @@
1
1
  import type { Provider } from "@mupt-ai/dari-router/policy-engine";
2
2
  import { randomUUID } from "node:crypto";
3
3
 
4
- import { HttpError } from "../http/errors";
5
- import { executionProviderForModel, keySourceForModel } from "../models/execution_provider";
6
- import { captureOperationalError } from "../observability/errors";
7
- import { gatewayPlatform } from "../platform/platform";
8
- import type { ProviderKeySource, ResolvedRouter } from "../types";
4
+ import { HttpError } from "../http/errors.js";
5
+ import { executionProviderForModel, keySourceForModel } from "../models/execution_provider.js";
6
+ import { captureOperationalError } from "../observability/errors.js";
7
+ import { gatewayPlatform, type RequestTags } from "../platform/platform.js";
8
+ import type { ProviderKeySource, ResolvedRouter } from "../types.js";
9
9
 
10
10
  export type RoutingUsageContext = {
11
11
  organizationId: string;
12
12
  routerId: string;
13
13
  provider: Provider;
14
14
  model: string;
15
+ tags: RequestTags;
15
16
  startedAt: Date;
16
17
  };
17
18
 
@@ -75,6 +76,7 @@ export function usageContextFor(args: {
75
76
  routerId: string;
76
77
  selectedModel: string;
77
78
  keySource: ProviderKeySource;
79
+ tags: RequestTags;
78
80
  }): RoutingUsageContext | undefined {
79
81
  if (!args.billable || args.keySource !== "managed") return undefined;
80
82
  if (args.credentials.credit_exhausted) throw creditExhaustedError();
@@ -83,6 +85,7 @@ export function usageContextFor(args: {
83
85
  routerId: args.routerId,
84
86
  provider: executionProviderForModel(args.credentials, args.selectedModel),
85
87
  model: args.selectedModel,
88
+ tags: args.tags,
86
89
  startedAt: new Date(),
87
90
  };
88
91
  }
@@ -143,6 +146,7 @@ function usagePayload(context: RoutingUsageContext, message: Record<string, unkn
143
146
  total_cost_usd: usd(cost.total) ?? "0",
144
147
  started_at: context.startedAt.toISOString(),
145
148
  ended_at: new Date().toISOString(),
149
+ tags: context.tags,
146
150
  };
147
151
  }
148
152
 
package/src/types.ts CHANGED
@@ -42,6 +42,14 @@ export type AwsAssumeRoleProviderAuth = {
42
42
  // Authentication a provider call can use directly.
43
43
  export type ResolvedProviderAuth = BearerProviderAuth | AwsSigV4ProviderAuth;
44
44
 
45
+ // A bearer credential an embedding platform supplies for one request through
46
+ // GatewayPlatform.resolveProviderCredential, optionally with its own endpoint.
47
+ export type ProviderCredential = {
48
+ apiKey: string;
49
+ baseUrl?: string;
50
+ headers?: Record<string, string>;
51
+ };
52
+
45
53
  export type ProviderAuth = ResolvedProviderAuth | AwsAssumeRoleProviderAuth;
46
54
 
47
55
  export type AwsProviderAuth = AwsSigV4ProviderAuth | AwsAssumeRoleProviderAuth;
@@ -93,12 +101,19 @@ export type ResolvedRouter = {
93
101
  provider_keys: Partial<Record<Provider, string>>;
94
102
  provider_auth?: Partial<Record<Provider, AwsProviderAuth>>;
95
103
  provider_key_sources?: Partial<Record<Provider, ProviderKeySource>>;
104
+ // Model -> the platform-supplied credential that replaces the provider key
105
+ // above for this request. Filled from resolveProviderCredential.
106
+ provider_credentials?: Record<string, ProviderCredential>;
96
107
  // Execution provider -> the user's subscription credential serving it.
97
108
  subscription_credential_ids?: Partial<Record<Provider, string>>;
98
109
  zdr?: boolean;
99
110
  allow_long_context?: boolean;
100
111
  speculative_routing?: boolean;
101
112
  primary_retries?: number;
113
+ // Serve only the requested `dari/model/<id>` at the requested thinking
114
+ // level: no selector, lease, fallback, or personal subscription, and an
115
+ // error for anything else, whatever the client sends.
116
+ strict?: boolean;
102
117
  model_fallback_enabled?: boolean;
103
118
  fallback_requires_different_provider?: boolean;
104
119
  evals?: RouterEval[];