hazo_llm_api 1.2.12 → 1.3.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 (204) hide show
  1. package/README.md +321 -8
  2. package/config/hazo_llm_api_config.ini +33 -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/index.d.ts +2 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/lib/cascade/cascade_runner.d.ts +50 -0
  26. package/dist/lib/cascade/cascade_runner.d.ts.map +1 -0
  27. package/dist/lib/cascade/cascade_runner.js +115 -0
  28. package/dist/lib/cascade/cascade_runner.js.map +1 -0
  29. package/dist/lib/cascade/index.d.ts +5 -0
  30. package/dist/lib/cascade/index.d.ts.map +1 -0
  31. package/dist/lib/cascade/index.js +4 -0
  32. package/dist/lib/cascade/index.js.map +1 -0
  33. package/dist/lib/cascade/types.d.ts +35 -0
  34. package/dist/lib/cascade/types.d.ts.map +1 -0
  35. package/dist/lib/cascade/types.js +14 -0
  36. package/dist/lib/cascade/types.js.map +1 -0
  37. package/dist/lib/cost_cap/cost_cap.d.ts +40 -0
  38. package/dist/lib/cost_cap/cost_cap.d.ts.map +1 -0
  39. package/dist/lib/cost_cap/cost_cap.js +150 -0
  40. package/dist/lib/cost_cap/cost_cap.js.map +1 -0
  41. package/dist/lib/cost_cap/index.d.ts +3 -0
  42. package/dist/lib/cost_cap/index.d.ts.map +1 -0
  43. package/dist/lib/cost_cap/index.js +2 -0
  44. package/dist/lib/cost_cap/index.js.map +1 -0
  45. package/dist/lib/database/init_api_log.d.ts +10 -0
  46. package/dist/lib/database/init_api_log.d.ts.map +1 -0
  47. package/dist/lib/database/init_api_log.js +91 -0
  48. package/dist/lib/database/init_api_log.js.map +1 -0
  49. package/dist/lib/hazo_connect/direct_db_connect.d.ts +11 -7
  50. package/dist/lib/hazo_connect/direct_db_connect.d.ts.map +1 -1
  51. package/dist/lib/hazo_connect/direct_db_connect.js +59 -6
  52. package/dist/lib/hazo_connect/direct_db_connect.js.map +1 -1
  53. package/dist/lib/hazo_connect/types.d.ts +35 -3
  54. package/dist/lib/hazo_connect/types.d.ts.map +1 -1
  55. package/dist/lib/llm_api/embed_cache.d.ts +15 -0
  56. package/dist/lib/llm_api/embed_cache.d.ts.map +1 -0
  57. package/dist/lib/llm_api/embed_cache.js +53 -0
  58. package/dist/lib/llm_api/embed_cache.js.map +1 -0
  59. package/dist/lib/llm_api/hazo_llm_document_text.d.ts.map +1 -1
  60. package/dist/lib/llm_api/hazo_llm_document_text.js +56 -14
  61. package/dist/lib/llm_api/hazo_llm_document_text.js.map +1 -1
  62. package/dist/lib/llm_api/hazo_llm_dynamic_data_extract.d.ts.map +1 -1
  63. package/dist/lib/llm_api/hazo_llm_dynamic_data_extract.js +19 -1
  64. package/dist/lib/llm_api/hazo_llm_dynamic_data_extract.js.map +1 -1
  65. package/dist/lib/llm_api/hazo_llm_embed.d.ts +10 -0
  66. package/dist/lib/llm_api/hazo_llm_embed.d.ts.map +1 -0
  67. package/dist/lib/llm_api/hazo_llm_embed.js +80 -0
  68. package/dist/lib/llm_api/hazo_llm_embed.js.map +1 -0
  69. package/dist/lib/llm_api/hazo_llm_image_image.d.ts.map +1 -1
  70. package/dist/lib/llm_api/hazo_llm_image_image.js +56 -14
  71. package/dist/lib/llm_api/hazo_llm_image_image.js.map +1 -1
  72. package/dist/lib/llm_api/hazo_llm_image_text.d.ts.map +1 -1
  73. package/dist/lib/llm_api/hazo_llm_image_text.js +56 -14
  74. package/dist/lib/llm_api/hazo_llm_image_text.js.map +1 -1
  75. package/dist/lib/llm_api/hazo_llm_prompt_chain.d.ts.map +1 -1
  76. package/dist/lib/llm_api/hazo_llm_prompt_chain.js +17 -1
  77. package/dist/lib/llm_api/hazo_llm_prompt_chain.js.map +1 -1
  78. package/dist/lib/llm_api/hazo_llm_text_image.d.ts.map +1 -1
  79. package/dist/lib/llm_api/hazo_llm_text_image.js +56 -14
  80. package/dist/lib/llm_api/hazo_llm_text_image.js.map +1 -1
  81. package/dist/lib/llm_api/hazo_llm_text_text.d.ts.map +1 -1
  82. package/dist/lib/llm_api/hazo_llm_text_text.js +90 -15
  83. package/dist/lib/llm_api/hazo_llm_text_text.js.map +1 -1
  84. package/dist/lib/llm_api/index.d.ts +29 -1
  85. package/dist/lib/llm_api/index.d.ts.map +1 -1
  86. package/dist/lib/llm_api/index.js +433 -6
  87. package/dist/lib/llm_api/index.js.map +1 -1
  88. package/dist/lib/llm_api/prompt_parts_helper.d.ts +15 -0
  89. package/dist/lib/llm_api/prompt_parts_helper.d.ts.map +1 -0
  90. package/dist/lib/llm_api/prompt_parts_helper.js +9 -0
  91. package/dist/lib/llm_api/prompt_parts_helper.js.map +1 -0
  92. package/dist/lib/llm_api/types.d.ts +187 -2
  93. package/dist/lib/llm_api/types.d.ts.map +1 -1
  94. package/dist/lib/llm_api/types.js +4 -0
  95. package/dist/lib/llm_api/types.js.map +1 -1
  96. package/dist/lib/maintenance/purge_log_job.d.ts +23 -0
  97. package/dist/lib/maintenance/purge_log_job.d.ts.map +1 -0
  98. package/dist/lib/maintenance/purge_log_job.js +42 -0
  99. package/dist/lib/maintenance/purge_log_job.js.map +1 -0
  100. package/dist/lib/observability/log_context.d.ts +15 -0
  101. package/dist/lib/observability/log_context.d.ts.map +1 -0
  102. package/dist/lib/observability/log_context.js +32 -0
  103. package/dist/lib/observability/log_context.js.map +1 -0
  104. package/dist/lib/observability/log_writer.d.ts +35 -0
  105. package/dist/lib/observability/log_writer.d.ts.map +1 -0
  106. package/dist/lib/observability/log_writer.js +106 -0
  107. package/dist/lib/observability/log_writer.js.map +1 -0
  108. package/dist/lib/observability/queries.d.ts +15 -0
  109. package/dist/lib/observability/queries.d.ts.map +1 -0
  110. package/dist/lib/observability/queries.js +78 -0
  111. package/dist/lib/observability/queries.js.map +1 -0
  112. package/dist/lib/observability/types.d.ts +77 -0
  113. package/dist/lib/observability/types.d.ts.map +1 -0
  114. package/dist/lib/observability/types.js +8 -0
  115. package/dist/lib/observability/types.js.map +1 -0
  116. package/dist/lib/pricing/pricing.d.ts +49 -0
  117. package/dist/lib/pricing/pricing.d.ts.map +1 -0
  118. package/dist/lib/pricing/pricing.js +153 -0
  119. package/dist/lib/pricing/pricing.js.map +1 -0
  120. package/dist/lib/pricing/pricing.json +75 -0
  121. package/dist/lib/pricing/types.d.ts +58 -0
  122. package/dist/lib/pricing/types.d.ts.map +1 -0
  123. package/dist/lib/pricing/types.js +8 -0
  124. package/dist/lib/pricing/types.js.map +1 -0
  125. package/dist/lib/providers/anthropic/anthropic_client.d.ts +71 -0
  126. package/dist/lib/providers/anthropic/anthropic_client.d.ts.map +1 -0
  127. package/dist/lib/providers/anthropic/anthropic_client.js +134 -0
  128. package/dist/lib/providers/anthropic/anthropic_client.js.map +1 -0
  129. package/dist/lib/providers/anthropic/anthropic_provider.d.ts +60 -0
  130. package/dist/lib/providers/anthropic/anthropic_provider.d.ts.map +1 -0
  131. package/dist/lib/providers/anthropic/anthropic_provider.js +273 -0
  132. package/dist/lib/providers/anthropic/anthropic_provider.js.map +1 -0
  133. package/dist/lib/providers/anthropic/anthropic_response_to_usage.d.ts +21 -0
  134. package/dist/lib/providers/anthropic/anthropic_response_to_usage.d.ts.map +1 -0
  135. package/dist/lib/providers/anthropic/anthropic_response_to_usage.js +46 -0
  136. package/dist/lib/providers/anthropic/anthropic_response_to_usage.js.map +1 -0
  137. package/dist/lib/providers/anthropic/index.d.ts +3 -0
  138. package/dist/lib/providers/anthropic/index.d.ts.map +1 -0
  139. package/dist/lib/providers/anthropic/index.js +2 -0
  140. package/dist/lib/providers/anthropic/index.js.map +1 -0
  141. package/dist/lib/providers/deepseek/deepseek_client.d.ts +55 -0
  142. package/dist/lib/providers/deepseek/deepseek_client.d.ts.map +1 -0
  143. package/dist/lib/providers/deepseek/deepseek_client.js +129 -0
  144. package/dist/lib/providers/deepseek/deepseek_client.js.map +1 -0
  145. package/dist/lib/providers/deepseek/deepseek_provider.d.ts +50 -0
  146. package/dist/lib/providers/deepseek/deepseek_provider.d.ts.map +1 -0
  147. package/dist/lib/providers/deepseek/deepseek_provider.js +147 -0
  148. package/dist/lib/providers/deepseek/deepseek_provider.js.map +1 -0
  149. package/dist/lib/providers/deepseek/deepseek_response_to_usage.d.ts +21 -0
  150. package/dist/lib/providers/deepseek/deepseek_response_to_usage.d.ts.map +1 -0
  151. package/dist/lib/providers/deepseek/deepseek_response_to_usage.js +40 -0
  152. package/dist/lib/providers/deepseek/deepseek_response_to_usage.js.map +1 -0
  153. package/dist/lib/providers/deepseek/index.d.ts +3 -0
  154. package/dist/lib/providers/deepseek/index.d.ts.map +1 -0
  155. package/dist/lib/providers/deepseek/index.js +2 -0
  156. package/dist/lib/providers/deepseek/index.js.map +1 -0
  157. package/dist/lib/providers/gemini/gemini_provider.d.ts.map +1 -1
  158. package/dist/lib/providers/gemini/gemini_provider.js +40 -4
  159. package/dist/lib/providers/gemini/gemini_provider.js.map +1 -1
  160. package/dist/lib/providers/gemini/gemini_response_to_usage.d.ts +37 -0
  161. package/dist/lib/providers/gemini/gemini_response_to_usage.d.ts.map +1 -0
  162. package/dist/lib/providers/gemini/gemini_response_to_usage.js +49 -0
  163. package/dist/lib/providers/gemini/gemini_response_to_usage.js.map +1 -0
  164. package/dist/lib/providers/index.d.ts +3 -0
  165. package/dist/lib/providers/index.d.ts.map +1 -1
  166. package/dist/lib/providers/index.js +3 -0
  167. package/dist/lib/providers/index.js.map +1 -1
  168. package/dist/lib/providers/openai/index.d.ts +3 -0
  169. package/dist/lib/providers/openai/index.d.ts.map +1 -0
  170. package/dist/lib/providers/openai/index.js +2 -0
  171. package/dist/lib/providers/openai/index.js.map +1 -0
  172. package/dist/lib/providers/openai/openai_client.d.ts +99 -0
  173. package/dist/lib/providers/openai/openai_client.d.ts.map +1 -0
  174. package/dist/lib/providers/openai/openai_client.js +187 -0
  175. package/dist/lib/providers/openai/openai_client.js.map +1 -0
  176. package/dist/lib/providers/openai/openai_provider.d.ts +66 -0
  177. package/dist/lib/providers/openai/openai_provider.d.ts.map +1 -0
  178. package/dist/lib/providers/openai/openai_provider.js +297 -0
  179. package/dist/lib/providers/openai/openai_provider.js.map +1 -0
  180. package/dist/lib/providers/openai/openai_response_to_usage.d.ts +21 -0
  181. package/dist/lib/providers/openai/openai_response_to_usage.d.ts.map +1 -0
  182. package/dist/lib/providers/openai/openai_response_to_usage.js +50 -0
  183. package/dist/lib/providers/openai/openai_response_to_usage.js.map +1 -0
  184. package/dist/lib/providers/qwen/qwen_provider.d.ts.map +1 -1
  185. package/dist/lib/providers/qwen/qwen_provider.js +52 -5
  186. package/dist/lib/providers/qwen/qwen_provider.js.map +1 -1
  187. package/dist/lib/providers/qwen/qwen_response_to_usage.d.ts +36 -0
  188. package/dist/lib/providers/qwen/qwen_response_to_usage.d.ts.map +1 -0
  189. package/dist/lib/providers/qwen/qwen_response_to_usage.js +50 -0
  190. package/dist/lib/providers/qwen/qwen_response_to_usage.js.map +1 -0
  191. package/dist/lib/providers/types.d.ts +16 -6
  192. package/dist/lib/providers/types.d.ts.map +1 -1
  193. package/dist/lib/providers/types.js +1 -0
  194. package/dist/lib/providers/types.js.map +1 -1
  195. package/dist/lib/utils.d.ts +13 -0
  196. package/dist/lib/utils.d.ts.map +1 -0
  197. package/dist/lib/utils.js +16 -0
  198. package/dist/lib/utils.js.map +1 -0
  199. package/dist/server.d.ts +16 -2
  200. package/dist/server.d.ts.map +1 -1
  201. package/dist/server.js +29 -2
  202. package/dist/server.js.map +1 -1
  203. package/migrations/hazo_llm_api_log.sql +69 -0
  204. package/package.json +26 -11
@@ -0,0 +1,147 @@
1
+ /**
2
+ * DeepSeek Provider Implementation
3
+ *
4
+ * Implements the LLMProvider interface for the DeepSeek API.
5
+ * Handles text generation and streaming using OpenAI-compatible API format.
6
+ */
7
+ import { SERVICE_TYPES } from '../types.js';
8
+ import { call_deepseek_api, call_deepseek_api_stream, } from './deepseek_client.js';
9
+ import { deepseek_response_to_usage } from './deepseek_response_to_usage.js';
10
+ // =============================================================================
11
+ // Default constants
12
+ // =============================================================================
13
+ const DEFAULT_API_URL = 'https://api.deepseek.com/v1/chat/completions';
14
+ const DEFAULT_MODEL_TEXT_TEXT = 'deepseek-chat';
15
+ // =============================================================================
16
+ // DeepSeek Provider Class
17
+ // =============================================================================
18
+ /**
19
+ * DeepSeek LLM Provider
20
+ * Implements the LLMProvider interface for the DeepSeek API
21
+ */
22
+ export class DeepSeekProvider {
23
+ constructor(config) {
24
+ this.name = 'deepseek';
25
+ this.api_key = config.api_key;
26
+ this.api_url = config.api_url ?? DEFAULT_API_URL;
27
+ this.model_text_text = config.model_text_text ?? DEFAULT_MODEL_TEXT_TEXT;
28
+ this.generation_config = config.generation_config;
29
+ this.logger = config.logger;
30
+ if (config.capabilities && config.capabilities.length > 0) {
31
+ this.capabilities = new Set(config.capabilities);
32
+ }
33
+ else {
34
+ this.capabilities = new Set([
35
+ SERVICE_TYPES.TEXT_TEXT,
36
+ 'text_text_stream',
37
+ ]);
38
+ }
39
+ }
40
+ // =========================================================================
41
+ // LLMProvider interface — identity & introspection
42
+ // =========================================================================
43
+ get_name() {
44
+ return this.name;
45
+ }
46
+ get_capabilities() {
47
+ return new Set(this.capabilities);
48
+ }
49
+ get_model_for_service(service_type) {
50
+ switch (service_type) {
51
+ case SERVICE_TYPES.TEXT_TEXT:
52
+ return this.model_text_text;
53
+ default:
54
+ return undefined;
55
+ }
56
+ }
57
+ // =========================================================================
58
+ // text_text — Text input → Text output
59
+ // =========================================================================
60
+ async text_text(params, _logger) {
61
+ const model = this.model_text_text;
62
+ const messages = [
63
+ { role: 'user', content: params.prompt ?? '' },
64
+ ];
65
+ const start_time = Date.now();
66
+ let raw;
67
+ let status;
68
+ try {
69
+ ({ raw, status } = await call_deepseek_api({
70
+ api_key: this.api_key,
71
+ api_url: this.api_url,
72
+ model,
73
+ messages,
74
+ generation_config: this.generation_config,
75
+ }));
76
+ }
77
+ catch (err) {
78
+ const error = err instanceof Error ? err.message : String(err);
79
+ return { success: false, error, error_code: 'NETWORK_ERROR', retryable: true };
80
+ }
81
+ const latency_ms = Date.now() - start_time;
82
+ if (status >= 400) {
83
+ const error_code = status === 429 ? 'RATE_LIMITED' : 'API_ERROR';
84
+ return {
85
+ success: false,
86
+ error: `DeepSeek API error: ${status}`,
87
+ error_code,
88
+ retryable: error_code === 'RATE_LIMITED',
89
+ };
90
+ }
91
+ const choices = raw.choices;
92
+ const message = choices?.[0]?.message;
93
+ const data = message?.content;
94
+ const usage = deepseek_response_to_usage({ raw, model_fallback: model, latency_ms });
95
+ return {
96
+ success: true,
97
+ data,
98
+ text: data,
99
+ raw_response: raw,
100
+ usage,
101
+ };
102
+ }
103
+ // =========================================================================
104
+ // text_text_stream — Text input → streaming Text output
105
+ // =========================================================================
106
+ async text_text_stream(params, _logger) {
107
+ const model = this.model_text_text;
108
+ const messages = [
109
+ { role: 'user', content: params.prompt ?? '' },
110
+ ];
111
+ return call_deepseek_api_stream({
112
+ api_key: this.api_key,
113
+ api_url: this.api_url,
114
+ model,
115
+ messages,
116
+ generation_config: this.generation_config,
117
+ });
118
+ }
119
+ // =========================================================================
120
+ // Unsupported methods (satisfy LLMProvider interface completeness)
121
+ // =========================================================================
122
+ async image_text(_params, _logger) {
123
+ return {
124
+ success: false,
125
+ error: 'DeepSeek provider does not support image_text via this implementation',
126
+ };
127
+ }
128
+ async text_image(_params, _logger) {
129
+ return {
130
+ success: false,
131
+ error: 'DeepSeek provider does not support text_image via this implementation',
132
+ };
133
+ }
134
+ async image_image(_params, _logger) {
135
+ return {
136
+ success: false,
137
+ error: 'DeepSeek provider does not support image_image via this implementation',
138
+ };
139
+ }
140
+ async document_text(_params, _logger) {
141
+ return {
142
+ success: false,
143
+ error: 'DeepSeek provider does not support document_text via this implementation',
144
+ };
145
+ }
146
+ }
147
+ //# sourceMappingURL=deepseek_provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek_provider.js","sourceRoot":"","sources":["../../../../src/lib/providers/deepseek/deepseek_provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Pure transform: DeepSeek API response → normalized UsageInfo.
3
+ *
4
+ * Kept separate so it can be unit-tested without network access or mocking
5
+ * any provider internals.
6
+ */
7
+ import type { UsageInfo } from '../../pricing/types.js';
8
+ /**
9
+ * Convert a raw DeepSeek Chat Completions API response into a normalized UsageInfo object.
10
+ * Calls compute_cost() to enrich with pricing data.
11
+ *
12
+ * @param opts.raw - The raw JSON response from the DeepSeek API
13
+ * @param opts.model_fallback - Model string used when raw.model is absent
14
+ * @param opts.latency_ms - Wall-clock milliseconds from request start to response received
15
+ */
16
+ export declare function deepseek_response_to_usage(opts: {
17
+ raw: Record<string, unknown>;
18
+ model_fallback: string;
19
+ latency_ms: number;
20
+ }): UsageInfo;
21
+ //# sourceMappingURL=deepseek_response_to_usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek_response_to_usage.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/deepseek/deepseek_response_to_usage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,SAAS,CA+BZ"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Pure transform: DeepSeek API response → normalized UsageInfo.
3
+ *
4
+ * Kept separate so it can be unit-tested without network access or mocking
5
+ * any provider internals.
6
+ */
7
+ import { compute_cost } from '../../pricing/pricing.js';
8
+ /**
9
+ * Convert a raw DeepSeek Chat Completions API response into a normalized UsageInfo object.
10
+ * Calls compute_cost() to enrich with pricing data.
11
+ *
12
+ * @param opts.raw - The raw JSON response from the DeepSeek API
13
+ * @param opts.model_fallback - Model string used when raw.model is absent
14
+ * @param opts.latency_ms - Wall-clock milliseconds from request start to response received
15
+ */
16
+ export function deepseek_response_to_usage(opts) {
17
+ const { raw, model_fallback, latency_ms } = opts;
18
+ const usage = raw.usage;
19
+ const input_tokens = typeof usage?.prompt_tokens === 'number' ? usage.prompt_tokens : 0;
20
+ const output_tokens = typeof usage?.completion_tokens === 'number' ? usage.completion_tokens : 0;
21
+ const model = typeof raw.model === 'string' ? raw.model : model_fallback;
22
+ const choices = raw.choices;
23
+ const finish_reason = typeof choices?.[0]?.finish_reason === 'string'
24
+ ? choices[0].finish_reason
25
+ : undefined;
26
+ const base = {
27
+ provider: 'deepseek',
28
+ model,
29
+ tokens: {
30
+ input: input_tokens,
31
+ output: output_tokens,
32
+ total: input_tokens + output_tokens,
33
+ },
34
+ latency_ms,
35
+ finish_reason: finish_reason,
36
+ };
37
+ const enriched = compute_cost(base);
38
+ return enriched;
39
+ }
40
+ //# sourceMappingURL=deepseek_response_to_usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek_response_to_usage.js","sourceRoot":"","sources":["../../../../src/lib/providers/deepseek/deepseek_response_to_usage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGxD;;;;;;;GAOG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAI1C;IACC,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAEjD,MAAM,KAAK,GAAG,GAAG,CAAC,KAA4C,CAAC;IAC/D,MAAM,YAAY,GAChB,OAAO,KAAK,EAAE,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,aAAa,GACjB,OAAO,KAAK,EAAE,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC;IACzE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAqD,CAAC;IAC1E,MAAM,aAAa,GACjB,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,KAAK,QAAQ;QAC7C,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa;QAC1B,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,IAAI,GAAc;QACtB,QAAQ,EAAE,UAAU;QACpB,KAAK;QACL,MAAM,EAAE;YACN,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,YAAY,GAAG,aAAa;SACpC;QACD,UAAU;QACV,aAAa,EAAE,aAA2C;KAC3D,CAAC;IAEF,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { DeepSeekProvider, type DeepSeekProviderConfig } from './deepseek_provider.js';
2
+ export type { DeepSeekGenerationConfig } from './deepseek_client.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/deepseek/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACvF,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DeepSeekProvider } from './deepseek_provider.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/providers/deepseek/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA+B,MAAM,wBAAwB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"gemini_provider.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/gemini/gemini_provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;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,MAAM,EAEN,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAUhC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,qDAAqD;IACrD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAErC,4CAA4C;IAC5C,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAEtC,0CAA0C;IAC1C,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAE7B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IACvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC;;;OAGG;gBACS,MAAM,EAAE,oBAAoB;IA4BxC;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACH,gBAAgB,IAAI,eAAe;IAInC;;;;OAIG;IACH,qBAAqB,CAAC,YAAY,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAiBpE;;;;;;;OAOG;IACG,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAoB7E;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B/E;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAiH/E;;;;;;;OAOG;IACG,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAoJjF;;;;;;;;;;OAUG;IACG,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAqCtF"}
1
+ {"version":3,"file":"gemini_provider.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/gemini/gemini_provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;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,MAAM,EAEN,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAYhC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,qDAAqD;IACrD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAErC,4CAA4C;IAC5C,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAEtC,0CAA0C;IAC1C,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAE7B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IACvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC;;;OAGG;gBACS,MAAM,EAAE,oBAAoB;IA4BxC;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACH,gBAAgB,IAAI,eAAe;IAInC;;;;OAIG;IACH,qBAAqB,CAAC,YAAY,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAiBpE;;;;;;;OAOG;IACG,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA6B7E;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAoC/E;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAuH/E;;;;;;;OAOG;IACG,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA0JjF;;;;;;;;;;OAUG;IACG,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA8CtF"}
@@ -7,6 +7,8 @@
7
7
  import { SERVICE_TYPES } from '../types.js';
8
8
  import { call_gemini_api } from './gemini_client.js';
9
9
  import { get_gemini_api_url } from './gemini_client.js';
10
+ import { gemini_response_to_usage } from './gemini_response_to_usage.js';
11
+ import { compute_cost } from '../../pricing/pricing.js';
10
12
  // =============================================================================
11
13
  // Gemini Provider Class
12
14
  // =============================================================================
@@ -93,12 +95,20 @@ export class GeminiProvider {
93
95
  async text_text(params, logger) {
94
96
  const file_name = 'gemini_provider.ts';
95
97
  // Use the prompt directly (variable substitution should be done by service layer)
96
- const prompt_text = params.prompt;
98
+ const prompt_text = params.prompt ?? '';
97
99
  // Use per-service model if configured, otherwise use default api_url
98
100
  const model = this.model_text_text;
99
101
  const api_url = model ? get_gemini_api_url(model) : this.api_url;
100
- return await call_gemini_api(api_url, this.api_key, prompt_text, undefined, // No image data
102
+ const start_time = Date.now();
103
+ const result = await call_gemini_api(api_url, this.api_key, prompt_text, undefined, // No image data
101
104
  logger, this.text_config);
105
+ const latency_ms = Date.now() - start_time;
106
+ if (result.success && result.raw_response) {
107
+ const model_fallback = this.get_model_for_service(SERVICE_TYPES.TEXT_TEXT) ?? 'gemini-2.5-flash';
108
+ const usage = compute_cost(gemini_response_to_usage({ raw: result.raw_response, model_fallback, latency_ms }));
109
+ return { ...result, usage };
110
+ }
111
+ return result;
102
112
  }
103
113
  /**
104
114
  * Image input → Text output
@@ -122,7 +132,15 @@ export class GeminiProvider {
122
132
  // Use per-service model if configured, otherwise use default api_url
123
133
  const model = this.model_image_text;
124
134
  const api_url = model ? get_gemini_api_url(model) : this.api_url;
125
- return await call_gemini_api(api_url, this.api_key, params.prompt, image_data, logger, this.image_config);
135
+ const start_time = Date.now();
136
+ const result = await call_gemini_api(api_url, this.api_key, params.prompt, image_data, logger, this.image_config);
137
+ const latency_ms = Date.now() - start_time;
138
+ if (result.success && result.raw_response) {
139
+ const model_fallback = this.get_model_for_service(SERVICE_TYPES.IMAGE_TEXT) ?? 'gemini-2.5-flash';
140
+ const usage = compute_cost(gemini_response_to_usage({ raw: result.raw_response, model_fallback, latency_ms }));
141
+ return { ...result, usage };
142
+ }
143
+ return result;
126
144
  }
127
145
  /**
128
146
  * Text input → Image output
@@ -182,12 +200,14 @@ export class GeminiProvider {
182
200
  ],
183
201
  generationConfig: gen_config,
184
202
  };
203
+ const ti_start_time = Date.now();
185
204
  const response = await fetch(url, {
186
205
  method: 'POST',
187
206
  headers: { 'Content-Type': 'application/json' },
188
207
  body: JSON.stringify(request_body),
189
208
  });
190
209
  const data = await response.json();
210
+ const ti_latency_ms = Date.now() - ti_start_time;
191
211
  if (!response.ok) {
192
212
  const error_msg = data?.error?.message || `API error: ${response.status}`;
193
213
  logger.error('Gemini image generation failed', {
@@ -215,12 +235,15 @@ export class GeminiProvider {
215
235
  text = part.text;
216
236
  }
217
237
  }
238
+ const ti_model_fallback = this.get_model_for_service(SERVICE_TYPES.TEXT_IMAGE) ?? 'gemini-2.5-flash';
239
+ const ti_usage = compute_cost(gemini_response_to_usage({ raw: data, model_fallback: ti_model_fallback, latency_ms: ti_latency_ms }));
218
240
  return {
219
241
  success: true,
220
242
  text,
221
243
  image_b64,
222
244
  image_mime_type,
223
245
  raw_response: data,
246
+ usage: ti_usage,
224
247
  };
225
248
  }
226
249
  catch (error) {
@@ -321,12 +344,14 @@ export class GeminiProvider {
321
344
  ],
322
345
  generationConfig: gen_config,
323
346
  };
347
+ const ii_start_time = Date.now();
324
348
  const response = await fetch(url, {
325
349
  method: 'POST',
326
350
  headers: { 'Content-Type': 'application/json' },
327
351
  body: JSON.stringify(request_body),
328
352
  });
329
353
  const data = await response.json();
354
+ const ii_latency_ms = Date.now() - ii_start_time;
330
355
  if (!response.ok) {
331
356
  const error_msg = data?.error?.message || `API error: ${response.status}`;
332
357
  logger.error('Gemini image transformation failed', {
@@ -354,12 +379,15 @@ export class GeminiProvider {
354
379
  text = part.text;
355
380
  }
356
381
  }
382
+ const ii_model_fallback = this.get_model_for_service(SERVICE_TYPES.IMAGE_IMAGE) ?? 'gemini-2.5-flash';
383
+ const ii_usage = compute_cost(gemini_response_to_usage({ raw: data, model_fallback: ii_model_fallback, latency_ms: ii_latency_ms }));
357
384
  return {
358
385
  success: true,
359
386
  text,
360
387
  image_b64,
361
388
  image_mime_type,
362
389
  raw_response: data,
390
+ usage: ii_usage,
363
391
  };
364
392
  }
365
393
  catch (error) {
@@ -406,8 +434,16 @@ export class GeminiProvider {
406
434
  const model = this.model_document_text || this.model_image_text;
407
435
  const api_url = model ? get_gemini_api_url(model) : this.api_url;
408
436
  // Use the same call_gemini_api function - Gemini handles PDFs as multimodal input
409
- return await call_gemini_api(api_url, this.api_key, params.prompt, document_data, logger, this.image_config // Use same config as image analysis
437
+ const dt_start_time = Date.now();
438
+ const result = await call_gemini_api(api_url, this.api_key, params.prompt, document_data, logger, this.image_config // Use same config as image analysis
410
439
  );
440
+ const dt_latency_ms = Date.now() - dt_start_time;
441
+ if (result.success && result.raw_response) {
442
+ const model_fallback = this.get_model_for_service(SERVICE_TYPES.DOCUMENT_TEXT) ?? 'gemini-2.5-flash';
443
+ const usage = compute_cost(gemini_response_to_usage({ raw: result.raw_response, model_fallback, latency_ms: dt_latency_ms }));
444
+ return { ...result, usage };
445
+ }
446
+ return result;
411
447
  }
412
448
  }
413
449
  //# sourceMappingURL=gemini_provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini_provider.js","sourceRoot":"","sources":["../../../../src/lib/providers/gemini/gemini_provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini_provider.js","sourceRoot":"","sources":["../../../../src/lib/providers/gemini/gemini_provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Pure transform: Gemini API response → normalized UsageInfo.
3
+ *
4
+ * Kept separate so it can be unit-tested without network access or mocking
5
+ * any provider internals.
6
+ */
7
+ import type { UsageInfo } from "../../pricing/types.js";
8
+ interface GeminiUsageMetadata {
9
+ promptTokenCount?: number;
10
+ candidatesTokenCount?: number;
11
+ totalTokenCount?: number;
12
+ cachedContentTokenCount?: number;
13
+ }
14
+ interface GeminiResponseLike {
15
+ candidates?: Array<{
16
+ finishReason?: string;
17
+ }>;
18
+ usageMetadata?: GeminiUsageMetadata;
19
+ modelVersion?: string;
20
+ }
21
+ export interface GeminiUsageInputs {
22
+ /** The raw JSON response from the Gemini API. */
23
+ raw: GeminiResponseLike;
24
+ /** Model string to use when `raw.modelVersion` is absent. */
25
+ model_fallback: string;
26
+ /** Wall-clock milliseconds from request start to response received. */
27
+ latency_ms: number;
28
+ }
29
+ /**
30
+ * Convert a raw Gemini API response into a normalized UsageInfo object.
31
+ *
32
+ * Does NOT call `compute_cost()` — callers are responsible for enriching with
33
+ * pricing data after this function returns.
34
+ */
35
+ export declare function gemini_response_to_usage(inputs: GeminiUsageInputs): UsageInfo;
36
+ export {};
37
+ //# sourceMappingURL=gemini_response_to_usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini_response_to_usage.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/gemini/gemini_response_to_usage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,wBAAwB,CAAC;AAMtE,UAAU,mBAAmB;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,UAAU,kBAAkB;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAmBD,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,GAAG,EAAE,kBAAkB,CAAC;IACxB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAwB7E"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Pure transform: Gemini API response → normalized UsageInfo.
3
+ *
4
+ * Kept separate so it can be unit-tested without network access or mocking
5
+ * any provider internals.
6
+ */
7
+ // =============================================================================
8
+ // Finish-reason normalization
9
+ // =============================================================================
10
+ function normalize_finish_reason(reason) {
11
+ if (!reason)
12
+ return undefined;
13
+ const upper = reason.toUpperCase();
14
+ if (upper === "STOP")
15
+ return "stop";
16
+ if (upper === "MAX_TOKENS")
17
+ return "length";
18
+ if (upper === "SAFETY" || upper === "RECITATION" || upper === "BLOCKLIST")
19
+ return "content_filter";
20
+ return "stop"; // unknown values default to stop
21
+ }
22
+ /**
23
+ * Convert a raw Gemini API response into a normalized UsageInfo object.
24
+ *
25
+ * Does NOT call `compute_cost()` — callers are responsible for enriching with
26
+ * pricing data after this function returns.
27
+ */
28
+ export function gemini_response_to_usage(inputs) {
29
+ const meta = inputs.raw.usageMetadata ?? {};
30
+ const finish = inputs.raw.candidates?.[0]?.finishReason;
31
+ const input_tokens = meta.promptTokenCount ?? 0;
32
+ const output_tokens = meta.candidatesTokenCount ?? 0;
33
+ const tokens = {
34
+ input: input_tokens,
35
+ output: output_tokens,
36
+ total: meta.totalTokenCount ?? (input_tokens + output_tokens),
37
+ };
38
+ if (meta.cachedContentTokenCount !== undefined) {
39
+ tokens.cached_input = meta.cachedContentTokenCount;
40
+ }
41
+ return {
42
+ model: inputs.raw.modelVersion ?? inputs.model_fallback,
43
+ provider: "gemini",
44
+ tokens,
45
+ latency_ms: inputs.latency_ms,
46
+ finish_reason: normalize_finish_reason(finish),
47
+ };
48
+ }
49
+ //# sourceMappingURL=gemini_response_to_usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini_response_to_usage.js","sourceRoot":"","sources":["../../../../src/lib/providers/gemini/gemini_response_to_usage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAEhF,SAAS,uBAAuB,CAAC,MAA0B;IACzD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACpC,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,QAAQ,CAAC;IAC5C,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,WAAW;QAAE,OAAO,gBAAgB,CAAC;IACnG,OAAO,MAAM,CAAC,CAAC,iCAAiC;AAClD,CAAC;AAeD;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAyB;IAChE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC;IAExD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC;IAErD,MAAM,MAAM,GAAwB;QAClC,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,IAAI,CAAC,eAAe,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC;KAC9D,CAAC;IAEF,IAAI,IAAI,CAAC,uBAAuB,KAAK,SAAS,EAAE,CAAC;QAC/C,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC;IACrD,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,cAAc;QACvD,QAAQ,EAAE,QAAQ;QAClB,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,aAAa,EAAE,uBAAuB,CAAC,MAAM,CAAC;KAC/C,CAAC;AACJ,CAAC"}
@@ -5,4 +5,7 @@
5
5
  */
6
6
  export * from './gemini/index.js';
7
7
  export * from './qwen/index.js';
8
+ export * from './anthropic/index.js';
9
+ export * from './openai/index.js';
10
+ export * from './deepseek/index.js';
8
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
@@ -5,4 +5,7 @@
5
5
  */
6
6
  export * from './gemini/index.js';
7
7
  export * from './qwen/index.js';
8
+ export * from './anthropic/index.js';
9
+ export * from './openai/index.js';
10
+ export * from './deepseek/index.js';
8
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { OpenAIProvider, type OpenAIProviderConfig } from './openai_provider.js';
2
+ export type { OpenAIGenerationConfig } from './openai_client.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/openai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { OpenAIProvider } from './openai_provider.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/providers/openai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA6B,MAAM,sBAAsB,CAAC"}