hazo_llm_api 1.2.13 → 2.0.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 (247) hide show
  1. package/README.md +321 -8
  2. package/config/hazo_llm_api_config.ini +38 -0
  3. package/dist/components/index.d.ts +2 -0
  4. package/dist/components/index.d.ts.map +1 -1
  5. package/dist/components/index.js +2 -0
  6. package/dist/components/index.js.map +1 -1
  7. package/dist/components/llm_call_inspector/index.d.ts +6 -0
  8. package/dist/components/llm_call_inspector/index.d.ts.map +1 -0
  9. package/dist/components/llm_call_inspector/index.js +5 -0
  10. package/dist/components/llm_call_inspector/index.js.map +1 -0
  11. package/dist/components/llm_call_inspector/llm_call_inspector.d.ts +18 -0
  12. package/dist/components/llm_call_inspector/llm_call_inspector.d.ts.map +1 -0
  13. package/dist/components/llm_call_inspector/llm_call_inspector.js +103 -0
  14. package/dist/components/llm_call_inspector/llm_call_inspector.js.map +1 -0
  15. package/dist/components/llm_cost_dashboard/index.d.ts +6 -0
  16. package/dist/components/llm_cost_dashboard/index.d.ts.map +1 -0
  17. package/dist/components/llm_cost_dashboard/index.js +5 -0
  18. package/dist/components/llm_cost_dashboard/index.js.map +1 -0
  19. package/dist/components/llm_cost_dashboard/llm_cost_dashboard.d.ts +16 -0
  20. package/dist/components/llm_cost_dashboard/llm_cost_dashboard.d.ts.map +1 -0
  21. package/dist/components/llm_cost_dashboard/llm_cost_dashboard.js +154 -0
  22. package/dist/components/llm_cost_dashboard/llm_cost_dashboard.js.map +1 -0
  23. package/dist/components/prompt_editor/prompt_editor.d.ts.map +1 -1
  24. package/dist/components/prompt_editor/prompt_editor.js +3 -2
  25. package/dist/components/prompt_editor/prompt_editor.js.map +1 -1
  26. package/dist/components/prompt_editor/ui/alert_dialog.js +1 -1
  27. package/dist/components/prompt_editor/ui/alert_dialog.js.map +1 -1
  28. package/dist/components/prompt_editor/ui/button.js +1 -1
  29. package/dist/components/prompt_editor/ui/button.js.map +1 -1
  30. package/dist/components/prompt_editor/ui/checkbox.js +1 -1
  31. package/dist/components/prompt_editor/ui/checkbox.js.map +1 -1
  32. package/dist/components/prompt_editor/ui/dialog.js +1 -1
  33. package/dist/components/prompt_editor/ui/dialog.js.map +1 -1
  34. package/dist/components/prompt_editor/ui/index.d.ts +1 -1
  35. package/dist/components/prompt_editor/ui/index.d.ts.map +1 -1
  36. package/dist/components/prompt_editor/ui/index.js +1 -1
  37. package/dist/components/prompt_editor/ui/index.js.map +1 -1
  38. package/dist/components/prompt_editor/ui/input.js +1 -1
  39. package/dist/components/prompt_editor/ui/input.js.map +1 -1
  40. package/dist/components/prompt_editor/ui/textarea.js +1 -1
  41. package/dist/components/prompt_editor/ui/textarea.js.map +1 -1
  42. package/dist/components/prompt_editor/ui/tooltip.js +1 -1
  43. package/dist/components/prompt_editor/ui/tooltip.js.map +1 -1
  44. package/dist/index.d.ts +2 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/lib/cascade/cascade_runner.d.ts +50 -0
  47. package/dist/lib/cascade/cascade_runner.d.ts.map +1 -0
  48. package/dist/lib/cascade/cascade_runner.js +115 -0
  49. package/dist/lib/cascade/cascade_runner.js.map +1 -0
  50. package/dist/lib/cascade/index.d.ts +5 -0
  51. package/dist/lib/cascade/index.d.ts.map +1 -0
  52. package/dist/lib/cascade/index.js +4 -0
  53. package/dist/lib/cascade/index.js.map +1 -0
  54. package/dist/lib/cascade/types.d.ts +35 -0
  55. package/dist/lib/cascade/types.d.ts.map +1 -0
  56. package/dist/lib/cascade/types.js +14 -0
  57. package/dist/lib/cascade/types.js.map +1 -0
  58. package/dist/lib/config/index.d.ts +1 -0
  59. package/dist/lib/config/index.d.ts.map +1 -1
  60. package/dist/lib/config/index.js +3 -0
  61. package/dist/lib/config/index.js.map +1 -1
  62. package/dist/lib/config/llm_api_config.d.ts +42 -0
  63. package/dist/lib/config/llm_api_config.d.ts.map +1 -0
  64. package/dist/lib/config/llm_api_config.js +49 -0
  65. package/dist/lib/config/llm_api_config.js.map +1 -0
  66. package/dist/lib/cost_cap/cost_cap.d.ts +40 -0
  67. package/dist/lib/cost_cap/cost_cap.d.ts.map +1 -0
  68. package/dist/lib/cost_cap/cost_cap.js +150 -0
  69. package/dist/lib/cost_cap/cost_cap.js.map +1 -0
  70. package/dist/lib/cost_cap/index.d.ts +3 -0
  71. package/dist/lib/cost_cap/index.d.ts.map +1 -0
  72. package/dist/lib/cost_cap/index.js +2 -0
  73. package/dist/lib/cost_cap/index.js.map +1 -0
  74. package/dist/lib/database/init_api_log.d.ts +10 -0
  75. package/dist/lib/database/init_api_log.d.ts.map +1 -0
  76. package/dist/lib/database/init_api_log.js +91 -0
  77. package/dist/lib/database/init_api_log.js.map +1 -0
  78. package/dist/lib/database/init_database.d.ts.map +1 -1
  79. package/dist/lib/database/init_database.js +2 -1
  80. package/dist/lib/database/init_database.js.map +1 -1
  81. package/dist/lib/hazo_connect/direct_db_connect.d.ts +11 -7
  82. package/dist/lib/hazo_connect/direct_db_connect.d.ts.map +1 -1
  83. package/dist/lib/hazo_connect/direct_db_connect.js +61 -7
  84. package/dist/lib/hazo_connect/direct_db_connect.js.map +1 -1
  85. package/dist/lib/hazo_connect/types.d.ts +35 -3
  86. package/dist/lib/hazo_connect/types.d.ts.map +1 -1
  87. package/dist/lib/llm_api/embed_cache.d.ts +15 -0
  88. package/dist/lib/llm_api/embed_cache.d.ts.map +1 -0
  89. package/dist/lib/llm_api/embed_cache.js +53 -0
  90. package/dist/lib/llm_api/embed_cache.js.map +1 -0
  91. package/dist/lib/llm_api/hazo_llm_document_text.d.ts.map +1 -1
  92. package/dist/lib/llm_api/hazo_llm_document_text.js +56 -14
  93. package/dist/lib/llm_api/hazo_llm_document_text.js.map +1 -1
  94. package/dist/lib/llm_api/hazo_llm_dynamic_data_extract.d.ts.map +1 -1
  95. package/dist/lib/llm_api/hazo_llm_dynamic_data_extract.js +19 -1
  96. package/dist/lib/llm_api/hazo_llm_dynamic_data_extract.js.map +1 -1
  97. package/dist/lib/llm_api/hazo_llm_embed.d.ts +10 -0
  98. package/dist/lib/llm_api/hazo_llm_embed.d.ts.map +1 -0
  99. package/dist/lib/llm_api/hazo_llm_embed.js +80 -0
  100. package/dist/lib/llm_api/hazo_llm_embed.js.map +1 -0
  101. package/dist/lib/llm_api/hazo_llm_image_image.d.ts.map +1 -1
  102. package/dist/lib/llm_api/hazo_llm_image_image.js +56 -14
  103. package/dist/lib/llm_api/hazo_llm_image_image.js.map +1 -1
  104. package/dist/lib/llm_api/hazo_llm_image_text.d.ts.map +1 -1
  105. package/dist/lib/llm_api/hazo_llm_image_text.js +56 -14
  106. package/dist/lib/llm_api/hazo_llm_image_text.js.map +1 -1
  107. package/dist/lib/llm_api/hazo_llm_prompt_chain.d.ts.map +1 -1
  108. package/dist/lib/llm_api/hazo_llm_prompt_chain.js +19 -2
  109. package/dist/lib/llm_api/hazo_llm_prompt_chain.js.map +1 -1
  110. package/dist/lib/llm_api/hazo_llm_text_image.d.ts.map +1 -1
  111. package/dist/lib/llm_api/hazo_llm_text_image.js +56 -14
  112. package/dist/lib/llm_api/hazo_llm_text_image.js.map +1 -1
  113. package/dist/lib/llm_api/hazo_llm_text_text.d.ts.map +1 -1
  114. package/dist/lib/llm_api/hazo_llm_text_text.js +90 -15
  115. package/dist/lib/llm_api/hazo_llm_text_text.js.map +1 -1
  116. package/dist/lib/llm_api/index.d.ts +31 -3
  117. package/dist/lib/llm_api/index.d.ts.map +1 -1
  118. package/dist/lib/llm_api/index.js +427 -35
  119. package/dist/lib/llm_api/index.js.map +1 -1
  120. package/dist/lib/llm_api/prompt_parts_helper.d.ts +15 -0
  121. package/dist/lib/llm_api/prompt_parts_helper.d.ts.map +1 -0
  122. package/dist/lib/llm_api/prompt_parts_helper.js +9 -0
  123. package/dist/lib/llm_api/prompt_parts_helper.js.map +1 -0
  124. package/dist/lib/llm_api/provider_helper.d.ts.map +1 -1
  125. package/dist/lib/llm_api/provider_helper.js +3 -38
  126. package/dist/lib/llm_api/provider_helper.js.map +1 -1
  127. package/dist/lib/llm_api/types.d.ts +187 -2
  128. package/dist/lib/llm_api/types.d.ts.map +1 -1
  129. package/dist/lib/llm_api/types.js +4 -0
  130. package/dist/lib/llm_api/types.js.map +1 -1
  131. package/dist/lib/maintenance/purge_log_job.d.ts +23 -0
  132. package/dist/lib/maintenance/purge_log_job.d.ts.map +1 -0
  133. package/dist/lib/maintenance/purge_log_job.js +49 -0
  134. package/dist/lib/maintenance/purge_log_job.js.map +1 -0
  135. package/dist/lib/observability/log_context.d.ts +15 -0
  136. package/dist/lib/observability/log_context.d.ts.map +1 -0
  137. package/dist/lib/observability/log_context.js +32 -0
  138. package/dist/lib/observability/log_context.js.map +1 -0
  139. package/dist/lib/observability/log_writer.d.ts +35 -0
  140. package/dist/lib/observability/log_writer.d.ts.map +1 -0
  141. package/dist/lib/observability/log_writer.js +106 -0
  142. package/dist/lib/observability/log_writer.js.map +1 -0
  143. package/dist/lib/observability/queries.d.ts +15 -0
  144. package/dist/lib/observability/queries.d.ts.map +1 -0
  145. package/dist/lib/observability/queries.js +78 -0
  146. package/dist/lib/observability/queries.js.map +1 -0
  147. package/dist/lib/observability/types.d.ts +77 -0
  148. package/dist/lib/observability/types.d.ts.map +1 -0
  149. package/dist/lib/observability/types.js +8 -0
  150. package/dist/lib/observability/types.js.map +1 -0
  151. package/dist/lib/pricing/pricing.d.ts +49 -0
  152. package/dist/lib/pricing/pricing.d.ts.map +1 -0
  153. package/dist/lib/pricing/pricing.js +153 -0
  154. package/dist/lib/pricing/pricing.js.map +1 -0
  155. package/dist/lib/pricing/pricing.json +75 -0
  156. package/dist/lib/pricing/types.d.ts +58 -0
  157. package/dist/lib/pricing/types.d.ts.map +1 -0
  158. package/dist/lib/pricing/types.js +8 -0
  159. package/dist/lib/pricing/types.js.map +1 -0
  160. package/dist/lib/providers/anthropic/anthropic_client.d.ts +71 -0
  161. package/dist/lib/providers/anthropic/anthropic_client.d.ts.map +1 -0
  162. package/dist/lib/providers/anthropic/anthropic_client.js +135 -0
  163. package/dist/lib/providers/anthropic/anthropic_client.js.map +1 -0
  164. package/dist/lib/providers/anthropic/anthropic_provider.d.ts +60 -0
  165. package/dist/lib/providers/anthropic/anthropic_provider.d.ts.map +1 -0
  166. package/dist/lib/providers/anthropic/anthropic_provider.js +273 -0
  167. package/dist/lib/providers/anthropic/anthropic_provider.js.map +1 -0
  168. package/dist/lib/providers/anthropic/anthropic_response_to_usage.d.ts +21 -0
  169. package/dist/lib/providers/anthropic/anthropic_response_to_usage.d.ts.map +1 -0
  170. package/dist/lib/providers/anthropic/anthropic_response_to_usage.js +46 -0
  171. package/dist/lib/providers/anthropic/anthropic_response_to_usage.js.map +1 -0
  172. package/dist/lib/providers/anthropic/index.d.ts +3 -0
  173. package/dist/lib/providers/anthropic/index.d.ts.map +1 -0
  174. package/dist/lib/providers/anthropic/index.js +2 -0
  175. package/dist/lib/providers/anthropic/index.js.map +1 -0
  176. package/dist/lib/providers/deepseek/deepseek_client.d.ts +55 -0
  177. package/dist/lib/providers/deepseek/deepseek_client.d.ts.map +1 -0
  178. package/dist/lib/providers/deepseek/deepseek_client.js +130 -0
  179. package/dist/lib/providers/deepseek/deepseek_client.js.map +1 -0
  180. package/dist/lib/providers/deepseek/deepseek_provider.d.ts +50 -0
  181. package/dist/lib/providers/deepseek/deepseek_provider.d.ts.map +1 -0
  182. package/dist/lib/providers/deepseek/deepseek_provider.js +147 -0
  183. package/dist/lib/providers/deepseek/deepseek_provider.js.map +1 -0
  184. package/dist/lib/providers/deepseek/deepseek_response_to_usage.d.ts +21 -0
  185. package/dist/lib/providers/deepseek/deepseek_response_to_usage.d.ts.map +1 -0
  186. package/dist/lib/providers/deepseek/deepseek_response_to_usage.js +40 -0
  187. package/dist/lib/providers/deepseek/deepseek_response_to_usage.js.map +1 -0
  188. package/dist/lib/providers/deepseek/index.d.ts +3 -0
  189. package/dist/lib/providers/deepseek/index.d.ts.map +1 -0
  190. package/dist/lib/providers/deepseek/index.js +2 -0
  191. package/dist/lib/providers/deepseek/index.js.map +1 -0
  192. package/dist/lib/providers/gemini/gemini_client.d.ts.map +1 -1
  193. package/dist/lib/providers/gemini/gemini_client.js +2 -1
  194. package/dist/lib/providers/gemini/gemini_client.js.map +1 -1
  195. package/dist/lib/providers/gemini/gemini_provider.d.ts.map +1 -1
  196. package/dist/lib/providers/gemini/gemini_provider.js +43 -6
  197. package/dist/lib/providers/gemini/gemini_provider.js.map +1 -1
  198. package/dist/lib/providers/gemini/gemini_response_to_usage.d.ts +37 -0
  199. package/dist/lib/providers/gemini/gemini_response_to_usage.d.ts.map +1 -0
  200. package/dist/lib/providers/gemini/gemini_response_to_usage.js +49 -0
  201. package/dist/lib/providers/gemini/gemini_response_to_usage.js.map +1 -0
  202. package/dist/lib/providers/index.d.ts +3 -0
  203. package/dist/lib/providers/index.d.ts.map +1 -1
  204. package/dist/lib/providers/index.js +3 -0
  205. package/dist/lib/providers/index.js.map +1 -1
  206. package/dist/lib/providers/openai/index.d.ts +3 -0
  207. package/dist/lib/providers/openai/index.d.ts.map +1 -0
  208. package/dist/lib/providers/openai/index.js +2 -0
  209. package/dist/lib/providers/openai/index.js.map +1 -0
  210. package/dist/lib/providers/openai/openai_client.d.ts +99 -0
  211. package/dist/lib/providers/openai/openai_client.d.ts.map +1 -0
  212. package/dist/lib/providers/openai/openai_client.js +188 -0
  213. package/dist/lib/providers/openai/openai_client.js.map +1 -0
  214. package/dist/lib/providers/openai/openai_provider.d.ts +66 -0
  215. package/dist/lib/providers/openai/openai_provider.d.ts.map +1 -0
  216. package/dist/lib/providers/openai/openai_provider.js +297 -0
  217. package/dist/lib/providers/openai/openai_provider.js.map +1 -0
  218. package/dist/lib/providers/openai/openai_response_to_usage.d.ts +21 -0
  219. package/dist/lib/providers/openai/openai_response_to_usage.d.ts.map +1 -0
  220. package/dist/lib/providers/openai/openai_response_to_usage.js +50 -0
  221. package/dist/lib/providers/openai/openai_response_to_usage.js.map +1 -0
  222. package/dist/lib/providers/qwen/qwen_client.d.ts.map +1 -1
  223. package/dist/lib/providers/qwen/qwen_client.js +10 -9
  224. package/dist/lib/providers/qwen/qwen_client.js.map +1 -1
  225. package/dist/lib/providers/qwen/qwen_provider.d.ts.map +1 -1
  226. package/dist/lib/providers/qwen/qwen_provider.js +58 -8
  227. package/dist/lib/providers/qwen/qwen_provider.js.map +1 -1
  228. package/dist/lib/providers/qwen/qwen_response_to_usage.d.ts +36 -0
  229. package/dist/lib/providers/qwen/qwen_response_to_usage.d.ts.map +1 -0
  230. package/dist/lib/providers/qwen/qwen_response_to_usage.js +50 -0
  231. package/dist/lib/providers/qwen/qwen_response_to_usage.js.map +1 -0
  232. package/dist/lib/providers/types.d.ts +16 -6
  233. package/dist/lib/providers/types.d.ts.map +1 -1
  234. package/dist/lib/providers/types.js +1 -0
  235. package/dist/lib/providers/types.js.map +1 -1
  236. package/dist/lib/utils.d.ts +13 -0
  237. package/dist/lib/utils.d.ts.map +1 -0
  238. package/dist/lib/utils.js +16 -0
  239. package/dist/lib/utils.js.map +1 -0
  240. package/dist/server.d.ts +16 -2
  241. package/dist/server.d.ts.map +1 -1
  242. package/dist/server.js +29 -2
  243. package/dist/server.js.map +1 -1
  244. package/migrations/db_setup_postgres.sql +68 -0
  245. package/migrations/db_setup_sqlite.sql +66 -0
  246. package/migrations/hazo_llm_api_log.sql +72 -0
  247. package/package.json +24 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../../src/lib/pricing/pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AASlD,2EAA2E;AAC3E,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED,oFAAoF;AACpF,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAG5D;AAED,qCAAqC;AACrC,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAGrE;AAED,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI,CAKnE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CA6BxD;AAMD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CA4EnF"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Pricing module.
3
+ *
4
+ * - Bundled rates live in pricing.json (loaded once on first use).
5
+ * - Consumers can override via update_pricing() or set_pricing_overrides() at runtime.
6
+ * - compute_cost() takes a UsageInfo and returns it enriched with cost_usd + pricing_applied.
7
+ *
8
+ * Pricing key convention: "<provider>/<model>" (lowercase provider).
9
+ */
10
+ import { readFileSync } from "fs";
11
+ import { fileURLToPath } from "url";
12
+ import { dirname, resolve } from "path";
13
+ let pricing_table = null;
14
+ function bundle_path() {
15
+ const here = dirname(fileURLToPath(import.meta.url));
16
+ return resolve(here, "pricing.json");
17
+ }
18
+ /** Idempotent. Reads the bundled pricing.json into the in-memory table. */
19
+ export function load_pricing() {
20
+ if (pricing_table !== null)
21
+ return;
22
+ const raw = readFileSync(bundle_path(), "utf-8");
23
+ pricing_table = JSON.parse(raw);
24
+ }
25
+ /** Test helper — clears the in-memory cache so the next load_pricing() re-reads. */
26
+ export function reset_pricing_for_test() {
27
+ pricing_table = null;
28
+ }
29
+ /** Look up the pricing entry for "<provider>/<model>". Returns null if absent. */
30
+ export function get_pricing(key) {
31
+ if (pricing_table === null)
32
+ load_pricing();
33
+ return pricing_table[key.toLowerCase()] ?? null;
34
+ }
35
+ /** Override one entry at runtime. */
36
+ export function update_pricing(key, entry) {
37
+ if (pricing_table === null)
38
+ load_pricing();
39
+ pricing_table[key.toLowerCase()] = entry;
40
+ }
41
+ /** Merge multiple overrides (used by initialize_llm_api({ pricing_overrides })). */
42
+ export function set_pricing_overrides(overrides) {
43
+ if (pricing_table === null)
44
+ load_pricing();
45
+ for (const [k, v] of Object.entries(overrides)) {
46
+ pricing_table[k.toLowerCase()] = v;
47
+ }
48
+ }
49
+ /**
50
+ * Compute cost for a usage record using the current pricing table.
51
+ *
52
+ * Returns a NEW UsageInfo with cost_usd + pricing_applied populated when possible,
53
+ * or with both undefined when the model is unpriced.
54
+ */
55
+ export function compute_cost(usage) {
56
+ const key = `${usage.provider}/${usage.model}`.toLowerCase();
57
+ const entry = get_pricing(key);
58
+ if (entry === null)
59
+ return { ...usage };
60
+ let cost_usd;
61
+ if (entry.kind === "text") {
62
+ const input_cost = (usage.tokens.input * entry.input_per_1m_usd) / 1000000;
63
+ const output_cost = (usage.tokens.output * entry.output_per_1m_usd) / 1000000;
64
+ const cached_tokens = usage.tokens.cached_input ?? 0;
65
+ const cached_rate = entry.cached_input_per_1m_usd ?? entry.input_per_1m_usd;
66
+ const cached_cost = (cached_tokens * cached_rate) / 1000000;
67
+ cost_usd = input_cost + output_cost + cached_cost;
68
+ }
69
+ else if (entry.kind === "image") {
70
+ // One image per call for now; future: pass image_count via UsageInfo
71
+ cost_usd = entry.per_image_usd;
72
+ }
73
+ else if (entry.kind === "embedding") {
74
+ cost_usd = (usage.tokens.input * entry.input_per_1m_usd) / 1000000;
75
+ }
76
+ else if (entry.kind === "audio") {
77
+ // Audio not used in 1.3.0 — return undefined cost rather than guess.
78
+ cost_usd = undefined;
79
+ }
80
+ return {
81
+ ...usage,
82
+ cost_usd,
83
+ pricing_applied: entry,
84
+ };
85
+ }
86
+ export async function recompute_costs(opts) {
87
+ const wheres = [];
88
+ const values = [];
89
+ if (opts.from) {
90
+ wheres.push("created_at >= ?");
91
+ values.push(opts.from);
92
+ }
93
+ if (opts.to) {
94
+ wheres.push("created_at <= ?");
95
+ values.push(opts.to);
96
+ }
97
+ if (opts.models && opts.models.length > 0) {
98
+ const placeholders = opts.models.map(() => "?").join(", ");
99
+ wheres.push(`model IN (${placeholders})`);
100
+ values.push(...opts.models);
101
+ }
102
+ const where_clause = wheres.length > 0 ? "WHERE " + wheres.join(" AND ") : "";
103
+ const rows = await opts.connect.raw_sql(`SELECT id, provider, model, tokens_input, tokens_output, tokens_cached_input, pricing_kind, cost_usd
104
+ FROM hazo_llm_api_log ${where_clause}`, values);
105
+ let would_update = 0;
106
+ let updated = 0;
107
+ for (const row of rows) {
108
+ if (!row.model)
109
+ continue;
110
+ const key = `${row.provider}/${row.model}`.toLowerCase();
111
+ const entry = get_pricing(key);
112
+ if (!entry)
113
+ continue;
114
+ let new_cost;
115
+ if (entry.kind === "text") {
116
+ const input_cost = ((row.tokens_input ?? 0) * entry.input_per_1m_usd) / 1000000;
117
+ const output_cost = ((row.tokens_output ?? 0) * entry.output_per_1m_usd) / 1000000;
118
+ const cached_rate = entry.cached_input_per_1m_usd ?? entry.input_per_1m_usd;
119
+ const cached_cost = ((row.tokens_cached_input ?? 0) * cached_rate) / 1000000;
120
+ new_cost = input_cost + output_cost + cached_cost;
121
+ }
122
+ else if (entry.kind === "image") {
123
+ new_cost = entry.per_image_usd;
124
+ }
125
+ else if (entry.kind === "embedding") {
126
+ new_cost = ((row.tokens_input ?? 0) * entry.input_per_1m_usd) / 1000000;
127
+ }
128
+ if (new_cost === undefined)
129
+ continue;
130
+ if (Math.abs((row.cost_usd ?? 0) - new_cost) < 1e-12)
131
+ continue; // no change needed
132
+ if (opts.dry_run) {
133
+ would_update += 1;
134
+ }
135
+ else {
136
+ const pricing_input = entry.kind === "text" ? entry.input_per_1m_usd : null;
137
+ const pricing_output = entry.kind === "text" ? entry.output_per_1m_usd : null;
138
+ const pricing_image = entry.kind === "image" ? entry.per_image_usd : null;
139
+ await opts.connect.raw_sql(`UPDATE hazo_llm_api_log
140
+ SET cost_usd = ?, pricing_kind = ?, pricing_input_per_1m_usd = ?, pricing_output_per_1m_usd = ?, pricing_per_image_usd = ?
141
+ WHERE id = ?`, [new_cost, entry.kind, pricing_input, pricing_output, pricing_image, row.id]);
142
+ updated += 1;
143
+ }
144
+ }
145
+ opts.logger.info("recompute_costs complete", {
146
+ total_inspected: rows.length,
147
+ updated,
148
+ would_update,
149
+ dry_run: opts.dry_run ?? false,
150
+ });
151
+ return { total_inspected: rows.length, updated, would_update };
152
+ }
153
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../../src/lib/pricing/pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAKxC,IAAI,aAAa,GAAwB,IAAI,CAAC;AAE9C,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AACvC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,YAAY;IAC1B,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO;IACnC,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;IACjD,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;AAClD,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,sBAAsB;IACpC,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,aAAa,KAAK,IAAI;QAAE,YAAY,EAAE,CAAC;IAC3C,OAAO,aAAc,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;AACnD,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,KAAmB;IAC7D,IAAI,aAAa,KAAK,IAAI;QAAE,YAAY,EAAE,CAAC;IAC3C,aAAc,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;AAC5C,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,qBAAqB,CAAC,SAAuB;IAC3D,IAAI,aAAa,KAAK,IAAI;QAAE,YAAY,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,aAAc,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC3C,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;IAExC,IAAI,QAA4B,CAAC;IAEjC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,OAAS,CAAC;QAC7E,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,OAAS,CAAC;QAChF,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,KAAK,CAAC,uBAAuB,IAAI,KAAK,CAAC,gBAAgB,CAAC;QAC5E,MAAM,WAAW,GAAG,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,OAAS,CAAC;QAC9D,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;IACpD,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,qEAAqE;QACrE,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC;IACjC,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACtC,QAAQ,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,OAAS,CAAC;IACvE,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,qEAAqE;QACrE,QAAQ,GAAG,SAAS,CAAC;IACvB,CAAC;IAED,OAAO;QACL,GAAG,KAAK;QACR,QAAQ;QACR,eAAe,EAAE,KAAK;KACvB,CAAC;AACJ,CAAC;AA0BD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAmB;IACvD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAC1E,IAAI,IAAI,CAAC,EAAE,EAAI,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IACxE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,aAAa,YAAY,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAQ,CACtC;6BACyB,YAAY,EAAE,EACvC,MAAM,CAUN,CAAC;IAEH,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,SAAS;QACzB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,IAAI,QAA4B,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,OAAS,CAAC;YAClF,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,OAAS,CAAC;YACrF,MAAM,WAAW,GAAG,KAAK,CAAC,uBAAuB,IAAI,KAAK,CAAC,gBAAgB,CAAC;YAC5E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,OAAS,CAAC;YAC/E,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;QACpD,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAClC,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACtC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,OAAS,CAAC;QAC5E,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAS;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,KAAK;YAAE,SAAS,CAAC,mBAAmB;QAEnF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5E,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9E,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1E,MAAM,IAAI,CAAC,OAAO,CAAC,OAAQ,CACzB;;sBAEc,EACd,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC,CAC7E,CAAC;YACF,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;QAC3C,eAAe,EAAE,IAAI,CAAC,MAAM;QAC5B,OAAO;QACP,YAAY;QACZ,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK;KAC/B,CAAC,CAAC;IAEH,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACjE,CAAC"}
@@ -0,0 +1,75 @@
1
+ {
2
+ "anthropic/claude-haiku-4-5-20251001": {
3
+ "kind": "text",
4
+ "input_per_1m_usd": 0.80,
5
+ "output_per_1m_usd": 4.0
6
+ },
7
+ "anthropic/claude-opus-4-7": {
8
+ "kind": "text",
9
+ "input_per_1m_usd": 15.0,
10
+ "output_per_1m_usd": 75.0
11
+ },
12
+ "anthropic/claude-sonnet-4-6": {
13
+ "kind": "text",
14
+ "input_per_1m_usd": 3.0,
15
+ "output_per_1m_usd": 15.0
16
+ },
17
+ "deepseek/deepseek-chat": {
18
+ "kind": "text",
19
+ "input_per_1m_usd": 0.27,
20
+ "output_per_1m_usd": 1.10,
21
+ "cached_input_per_1m_usd": 0.07
22
+ },
23
+ "deepseek/deepseek-reasoner": {
24
+ "kind": "text",
25
+ "input_per_1m_usd": 0.55,
26
+ "output_per_1m_usd": 2.19
27
+ },
28
+ "gemini/gemini-2.5-flash": {
29
+ "kind": "text",
30
+ "input_per_1m_usd": 0.075,
31
+ "output_per_1m_usd": 0.30,
32
+ "cached_input_per_1m_usd": 0.01875
33
+ },
34
+ "gemini/gemini-2.5-flash-image": {
35
+ "kind": "image",
36
+ "per_image_usd": 0.039
37
+ },
38
+ "openai/gpt-4o": {
39
+ "kind": "text",
40
+ "input_per_1m_usd": 2.50,
41
+ "output_per_1m_usd": 10.0
42
+ },
43
+ "openai/gpt-4o-mini": {
44
+ "kind": "text",
45
+ "input_per_1m_usd": 0.15,
46
+ "output_per_1m_usd": 0.60
47
+ },
48
+ "openai/gpt-image-1": {
49
+ "kind": "image",
50
+ "per_image_usd": 0.04
51
+ },
52
+ "qwen/qwen-max": {
53
+ "kind": "text",
54
+ "input_per_1m_usd": 1.60,
55
+ "output_per_1m_usd": 6.40
56
+ },
57
+ "qwen/qwen-plus": {
58
+ "kind": "text",
59
+ "input_per_1m_usd": 0.40,
60
+ "output_per_1m_usd": 1.20
61
+ },
62
+ "qwen/qwen-vl-max": {
63
+ "kind": "text",
64
+ "input_per_1m_usd": 3.00,
65
+ "output_per_1m_usd": 9.00
66
+ },
67
+ "qwen/qwen-image": {
68
+ "kind": "image",
69
+ "per_image_usd": 0.05
70
+ },
71
+ "qwen/qwen-image-edit-plus": {
72
+ "kind": "image",
73
+ "per_image_usd": 0.05
74
+ }
75
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Pricing table types for hazo_llm_api.
3
+ *
4
+ * Each entry is keyed by "<provider>/<model>" (e.g. "openai/gpt-4o-2024-08-06").
5
+ * Token-based services use *_per_1m_usd rates; image gen uses per_image_usd.
6
+ */
7
+ export type PricingKind = "text" | "image" | "embedding" | "audio";
8
+ export interface PricingEntryText {
9
+ kind: "text";
10
+ input_per_1m_usd: number;
11
+ output_per_1m_usd: number;
12
+ /** Anthropic prompt-cache hits / OpenAI cached input tokens — discounted rate. */
13
+ cached_input_per_1m_usd?: number;
14
+ }
15
+ export interface PricingEntryImage {
16
+ kind: "image";
17
+ per_image_usd: number;
18
+ }
19
+ export interface PricingEntryEmbedding {
20
+ kind: "embedding";
21
+ input_per_1m_usd: number;
22
+ }
23
+ export interface PricingEntryAudio {
24
+ kind: "audio";
25
+ input_per_min_usd?: number;
26
+ output_per_min_usd?: number;
27
+ }
28
+ export type PricingEntry = PricingEntryText | PricingEntryImage | PricingEntryEmbedding | PricingEntryAudio;
29
+ export type PricingTable = Record<string, PricingEntry>;
30
+ export type FinishReason = "stop" | "length" | "content_filter" | "tool_calls" | "error";
31
+ export interface UsageTokens {
32
+ input: number;
33
+ output: number;
34
+ total: number;
35
+ /** Provider-reported cached input tokens (Anthropic cache hits, OpenAI cached tokens). */
36
+ cached_input?: number;
37
+ }
38
+ export interface UsageAttempt {
39
+ provider: string;
40
+ success: boolean;
41
+ error_code?: string;
42
+ latency_ms: number;
43
+ }
44
+ export interface UsageInfo {
45
+ /** The actual model used (as reported by the provider). */
46
+ model: string;
47
+ provider: string;
48
+ tokens: UsageTokens;
49
+ /** null when pricing for this model is unknown. */
50
+ cost_usd?: number;
51
+ /** Exact pricing-table entry applied — frozen audit trail. */
52
+ pricing_applied?: PricingEntry;
53
+ latency_ms: number;
54
+ finish_reason?: FinishReason;
55
+ /** Populated only when a cascade actually fired (more than one attempt). */
56
+ attempts?: UsageAttempt[];
57
+ }
58
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/pricing/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kFAAkF;IAClF,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,YAAY,GACpB,gBAAgB,GAChB,iBAAiB,GACjB,qBAAqB,GACrB,iBAAiB,CAAC;AAEtB,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,gBAAgB,GAAG,YAAY,GAAG,OAAO,CAAC;AAEzF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Pricing table types for hazo_llm_api.
3
+ *
4
+ * Each entry is keyed by "<provider>/<model>" (e.g. "openai/gpt-4o-2024-08-06").
5
+ * Token-based services use *_per_1m_usd rates; image gen uses per_image_usd.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/pricing/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Anthropic API Client Module
3
+ *
4
+ * Handles communication with the Anthropic Claude API.
5
+ * Formats requests according to the Anthropic Messages API specification
6
+ * and parses both regular and streaming responses.
7
+ */
8
+ import type { LLMStreamChunk } from '../../llm_api/types.js';
9
+ export interface AnthropicTextContent {
10
+ type: 'text';
11
+ text: string;
12
+ }
13
+ export interface AnthropicImageContent {
14
+ type: 'image';
15
+ source: {
16
+ type: 'base64';
17
+ media_type: string;
18
+ data: string;
19
+ };
20
+ }
21
+ export interface AnthropicDocumentContent {
22
+ type: 'document';
23
+ source: {
24
+ type: 'base64';
25
+ media_type: 'application/pdf';
26
+ data: string;
27
+ };
28
+ }
29
+ export type AnthropicContent = AnthropicTextContent | AnthropicImageContent | AnthropicDocumentContent;
30
+ export interface AnthropicMessage {
31
+ role: 'user' | 'assistant';
32
+ content: AnthropicContent[];
33
+ }
34
+ export interface AnthropicGenerationConfig {
35
+ max_tokens?: number;
36
+ temperature?: number;
37
+ top_p?: number;
38
+ top_k?: number;
39
+ }
40
+ /**
41
+ * Call the Anthropic Messages API (non-streaming)
42
+ * @param opts - API call options
43
+ * @returns Raw API response and HTTP status code
44
+ */
45
+ export declare function call_anthropic_api(opts: {
46
+ api_key: string;
47
+ api_url: string;
48
+ api_version: string;
49
+ model: string;
50
+ messages: AnthropicMessage[];
51
+ generation_config?: AnthropicGenerationConfig;
52
+ }): Promise<{
53
+ raw: Record<string, unknown>;
54
+ status: number;
55
+ }>;
56
+ /**
57
+ * Call the Anthropic Messages API with streaming enabled.
58
+ * Yields LLMStreamChunk objects as SSE events arrive.
59
+ *
60
+ * @param opts - API call options (same as non-streaming, plus stream=true)
61
+ * @yields LLMStreamChunk objects with text deltas or done/error signals
62
+ */
63
+ export declare function call_anthropic_api_stream(opts: {
64
+ api_key: string;
65
+ api_url: string;
66
+ api_version: string;
67
+ model: string;
68
+ messages: AnthropicMessage[];
69
+ generation_config?: AnthropicGenerationConfig;
70
+ }): AsyncGenerator<LLMStreamChunk, void, unknown>;
71
+ //# sourceMappingURL=anthropic_client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic_client.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/anthropic/anthropic_client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAO7D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,iBAAiB,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,MAAM,gBAAgB,GACxB,oBAAoB,GACpB,qBAAqB,GACrB,wBAAwB,CAAC;AAE7B,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;CAC/C,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B5D;AAMD;;;;;;GAMG;AACH,wBAAuB,yBAAyB,CAAC,IAAI,EAAE;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;CAC/C,GAAG,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAkFhD"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Anthropic API Client Module
3
+ *
4
+ * Handles communication with the Anthropic Claude API.
5
+ * Formats requests according to the Anthropic Messages API specification
6
+ * and parses both regular and streaming responses.
7
+ */
8
+ import { fetchWithRequestId } from 'hazo_core';
9
+ // =============================================================================
10
+ // Anthropic API Client (non-streaming)
11
+ // =============================================================================
12
+ /**
13
+ * Call the Anthropic Messages API (non-streaming)
14
+ * @param opts - API call options
15
+ * @returns Raw API response and HTTP status code
16
+ */
17
+ export async function call_anthropic_api(opts) {
18
+ const body = {
19
+ model: opts.model,
20
+ max_tokens: opts.generation_config?.max_tokens ?? 8192,
21
+ messages: opts.messages,
22
+ };
23
+ if (opts.generation_config?.temperature !== undefined) {
24
+ body.temperature = opts.generation_config.temperature;
25
+ }
26
+ if (opts.generation_config?.top_p !== undefined) {
27
+ body.top_p = opts.generation_config.top_p;
28
+ }
29
+ if (opts.generation_config?.top_k !== undefined) {
30
+ body.top_k = opts.generation_config.top_k;
31
+ }
32
+ const response = await fetchWithRequestId(opts.api_url, {
33
+ method: 'POST',
34
+ headers: {
35
+ 'x-api-key': opts.api_key,
36
+ 'anthropic-version': opts.api_version,
37
+ 'content-type': 'application/json',
38
+ },
39
+ body: JSON.stringify(body),
40
+ });
41
+ const raw = (await response.json());
42
+ return { raw, status: response.status };
43
+ }
44
+ // =============================================================================
45
+ // Anthropic API Client (streaming)
46
+ // =============================================================================
47
+ /**
48
+ * Call the Anthropic Messages API with streaming enabled.
49
+ * Yields LLMStreamChunk objects as SSE events arrive.
50
+ *
51
+ * @param opts - API call options (same as non-streaming, plus stream=true)
52
+ * @yields LLMStreamChunk objects with text deltas or done/error signals
53
+ */
54
+ export async function* call_anthropic_api_stream(opts) {
55
+ const body = {
56
+ model: opts.model,
57
+ max_tokens: opts.generation_config?.max_tokens ?? 8192,
58
+ messages: opts.messages,
59
+ stream: true,
60
+ };
61
+ if (opts.generation_config?.temperature !== undefined) {
62
+ body.temperature = opts.generation_config.temperature;
63
+ }
64
+ if (opts.generation_config?.top_p !== undefined) {
65
+ body.top_p = opts.generation_config.top_p;
66
+ }
67
+ if (opts.generation_config?.top_k !== undefined) {
68
+ body.top_k = opts.generation_config.top_k;
69
+ }
70
+ let response;
71
+ try {
72
+ response = await fetchWithRequestId(opts.api_url, {
73
+ method: 'POST',
74
+ headers: {
75
+ 'x-api-key': opts.api_key,
76
+ 'anthropic-version': opts.api_version,
77
+ 'content-type': 'application/json',
78
+ },
79
+ body: JSON.stringify(body),
80
+ });
81
+ }
82
+ catch (err) {
83
+ const msg = err instanceof Error ? err.message : String(err);
84
+ yield { text: '', done: false, error: `Anthropic network error: ${msg}` };
85
+ return;
86
+ }
87
+ if (!response.ok || !response.body) {
88
+ yield { text: '', done: false, error: `Anthropic API error: ${response.status}` };
89
+ return;
90
+ }
91
+ const reader = response.body.getReader();
92
+ const decoder = new TextDecoder();
93
+ let buffer = '';
94
+ try {
95
+ while (true) {
96
+ const { done, value } = await reader.read();
97
+ if (done)
98
+ break;
99
+ buffer += decoder.decode(value, { stream: true });
100
+ const lines = buffer.split('\n');
101
+ buffer = lines.pop() ?? '';
102
+ let event_type = '';
103
+ for (const line of lines) {
104
+ if (line.startsWith('event: ')) {
105
+ event_type = line.slice(7).trim();
106
+ }
107
+ else if (line.startsWith('data: ')) {
108
+ const data_str = line.slice(6).trim();
109
+ if (!data_str)
110
+ continue;
111
+ try {
112
+ const data = JSON.parse(data_str);
113
+ if (event_type === 'content_block_delta' &&
114
+ data.delta?.type === 'text_delta') {
115
+ const text = (data.delta.text ?? '');
116
+ yield { text, done: false };
117
+ }
118
+ else if (event_type === 'message_stop') {
119
+ yield { text: '', done: true };
120
+ return;
121
+ }
122
+ // Ignored events: message_start, content_block_start, content_block_stop, ping, message_delta
123
+ }
124
+ catch {
125
+ // Ignore malformed SSE data lines
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
131
+ finally {
132
+ reader.releaseLock();
133
+ }
134
+ }
135
+ //# sourceMappingURL=anthropic_client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic_client.js","sourceRoot":"","sources":["../../../../src/lib/providers/anthropic/anthropic_client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Anthropic Provider Implementation
3
+ *
4
+ * Implements the LLMProvider interface for Anthropic's Claude API.
5
+ * Handles all Anthropic-specific logic including API calls, configuration,
6
+ * and capabilities (text_text, image_text, document_text, text_text_stream).
7
+ */
8
+ import type { LLMProvider, LLMCapabilities, ServiceType } from '../types.js';
9
+ import type { TextTextParams, ImageTextParams, TextImageParams, ImageImageParams, DocumentTextParams, LLMResponse, LLMStreamResponse, Logger } from '../../llm_api/types.js';
10
+ import { type AnthropicGenerationConfig } from './anthropic_client.js';
11
+ /**
12
+ * Configuration for the Anthropic provider
13
+ */
14
+ export interface AnthropicProviderConfig {
15
+ /** API key from .env.local (ANTHROPIC_API_KEY) */
16
+ api_key: string;
17
+ /** Anthropic Messages API URL (default: 'https://api.anthropic.com/v1/messages') */
18
+ api_url?: string;
19
+ /** Anthropic API version header (default: '2023-06-01') */
20
+ api_version?: string;
21
+ /** Model for text_text service (default: 'claude-sonnet-4-6') */
22
+ model_text_text?: string;
23
+ /** Model for image_text service (default: 'claude-sonnet-4-6') */
24
+ model_image_text?: string;
25
+ /** Model for document_text service (default: 'claude-sonnet-4-6') */
26
+ model_document_text?: string;
27
+ /** Generation parameters applied to all calls */
28
+ generation_config?: AnthropicGenerationConfig;
29
+ /** Capabilities this provider supports (overrides defaults when specified) */
30
+ capabilities?: ServiceType[];
31
+ /** Logger instance */
32
+ logger: Logger;
33
+ }
34
+ /**
35
+ * Anthropic LLM Provider
36
+ * Implements the LLMProvider interface for Anthropic Claude API
37
+ */
38
+ export declare class AnthropicProvider implements LLMProvider {
39
+ private readonly name;
40
+ private readonly api_key;
41
+ private readonly api_url;
42
+ private readonly api_version;
43
+ private readonly model_text_text;
44
+ private readonly model_image_text;
45
+ private readonly model_document_text;
46
+ private readonly generation_config;
47
+ private readonly capabilities;
48
+ private readonly logger;
49
+ constructor(config: AnthropicProviderConfig);
50
+ get_name(): string;
51
+ get_capabilities(): LLMCapabilities;
52
+ get_model_for_service(service_type: ServiceType): string | undefined;
53
+ text_text(params: TextTextParams, _logger: Logger): Promise<LLMResponse>;
54
+ image_text(params: ImageTextParams, _logger: Logger): Promise<LLMResponse>;
55
+ document_text(params: DocumentTextParams, _logger: Logger): Promise<LLMResponse>;
56
+ text_text_stream(params: TextTextParams, _logger: Logger): Promise<LLMStreamResponse>;
57
+ text_image(_params: TextImageParams, _logger: Logger): Promise<LLMResponse>;
58
+ image_image(_params: ImageImageParams, _logger: Logger): Promise<LLMResponse>;
59
+ }
60
+ //# sourceMappingURL=anthropic_provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic_provider.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/anthropic/anthropic_provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,MAAM,EACP,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAIL,KAAK,yBAAyB,EAC/B,MAAM,uBAAuB,CAAC;AAO/B;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAEhB,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAE9C,8EAA8E;IAC9E,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAE7B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAcD;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwC;IAC1E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,uBAAuB;IA0B3C,QAAQ,IAAI,MAAM;IAIlB,gBAAgB,IAAI,eAAe;IAInC,qBAAqB,CAAC,YAAY,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAiB9D,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAmExE,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgE1E,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgEhF,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuBrF,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAO3E,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAMpF"}