cost-katana 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 (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +550 -0
  3. package/dist/analyzers/cost-analyzer.d.ts +28 -0
  4. package/dist/analyzers/cost-analyzer.d.ts.map +1 -0
  5. package/dist/analyzers/cost-analyzer.js +165 -0
  6. package/dist/analyzers/cost-analyzer.js.map +1 -0
  7. package/dist/analyzers/token-counter.d.ts +21 -0
  8. package/dist/analyzers/token-counter.d.ts.map +1 -0
  9. package/dist/analyzers/token-counter.js +100 -0
  10. package/dist/analyzers/token-counter.js.map +1 -0
  11. package/dist/analyzers/usage-tracker.d.ts +29 -0
  12. package/dist/analyzers/usage-tracker.d.ts.map +1 -0
  13. package/dist/analyzers/usage-tracker.js +142 -0
  14. package/dist/analyzers/usage-tracker.js.map +1 -0
  15. package/dist/config/default.d.ts +45 -0
  16. package/dist/config/default.d.ts.map +1 -0
  17. package/dist/config/default.js +103 -0
  18. package/dist/config/default.js.map +1 -0
  19. package/dist/config/model-types.d.ts +45 -0
  20. package/dist/config/model-types.d.ts.map +1 -0
  21. package/dist/config/model-types.js +101 -0
  22. package/dist/config/model-types.js.map +1 -0
  23. package/dist/config/pricing/anthropic.d.ts +3 -0
  24. package/dist/config/pricing/anthropic.d.ts.map +1 -0
  25. package/dist/config/pricing/anthropic.js +191 -0
  26. package/dist/config/pricing/anthropic.js.map +1 -0
  27. package/dist/config/pricing/aws-bedrock.d.ts +3 -0
  28. package/dist/config/pricing/aws-bedrock.d.ts.map +1 -0
  29. package/dist/config/pricing/aws-bedrock.js +747 -0
  30. package/dist/config/pricing/aws-bedrock.js.map +1 -0
  31. package/dist/config/pricing/cohere.d.ts +3 -0
  32. package/dist/config/pricing/cohere.d.ts.map +1 -0
  33. package/dist/config/pricing/cohere.js +371 -0
  34. package/dist/config/pricing/cohere.js.map +1 -0
  35. package/dist/config/pricing/deepseek.d.ts +3 -0
  36. package/dist/config/pricing/deepseek.d.ts.map +1 -0
  37. package/dist/config/pricing/deepseek.js +102 -0
  38. package/dist/config/pricing/deepseek.js.map +1 -0
  39. package/dist/config/pricing/google.d.ts +3 -0
  40. package/dist/config/pricing/google.d.ts.map +1 -0
  41. package/dist/config/pricing/google.js +671 -0
  42. package/dist/config/pricing/google.js.map +1 -0
  43. package/dist/config/pricing/grok.d.ts +3 -0
  44. package/dist/config/pricing/grok.d.ts.map +1 -0
  45. package/dist/config/pricing/grok.js +59 -0
  46. package/dist/config/pricing/grok.js.map +1 -0
  47. package/dist/config/pricing/index.d.ts +11 -0
  48. package/dist/config/pricing/index.d.ts.map +1 -0
  49. package/dist/config/pricing/index.js +24 -0
  50. package/dist/config/pricing/index.js.map +1 -0
  51. package/dist/config/pricing/meta.d.ts +3 -0
  52. package/dist/config/pricing/meta.d.ts.map +1 -0
  53. package/dist/config/pricing/meta.js +69 -0
  54. package/dist/config/pricing/meta.js.map +1 -0
  55. package/dist/config/pricing/mistral.d.ts +3 -0
  56. package/dist/config/pricing/mistral.d.ts.map +1 -0
  57. package/dist/config/pricing/mistral.js +690 -0
  58. package/dist/config/pricing/mistral.js.map +1 -0
  59. package/dist/config/pricing/openai.d.ts +3 -0
  60. package/dist/config/pricing/openai.d.ts.map +1 -0
  61. package/dist/config/pricing/openai.js +475 -0
  62. package/dist/config/pricing/openai.js.map +1 -0
  63. package/dist/config/pricing/xai.d.ts +3 -0
  64. package/dist/config/pricing/xai.d.ts.map +1 -0
  65. package/dist/config/pricing/xai.js +141 -0
  66. package/dist/config/pricing/xai.js.map +1 -0
  67. package/dist/config/pricing-data.d.ts +55 -0
  68. package/dist/config/pricing-data.d.ts.map +1 -0
  69. package/dist/config/pricing-data.js +179 -0
  70. package/dist/config/pricing-data.js.map +1 -0
  71. package/dist/feedback/client.d.ts +14 -0
  72. package/dist/feedback/client.d.ts.map +1 -0
  73. package/dist/feedback/client.js +95 -0
  74. package/dist/feedback/client.js.map +1 -0
  75. package/dist/feedback/index.d.ts +3 -0
  76. package/dist/feedback/index.d.ts.map +1 -0
  77. package/dist/feedback/index.js +21 -0
  78. package/dist/feedback/index.js.map +1 -0
  79. package/dist/gateway/client.d.ts +77 -0
  80. package/dist/gateway/client.d.ts.map +1 -0
  81. package/dist/gateway/client.js +630 -0
  82. package/dist/gateway/client.js.map +1 -0
  83. package/dist/gateway/index.d.ts +9 -0
  84. package/dist/gateway/index.d.ts.map +1 -0
  85. package/dist/gateway/index.js +66 -0
  86. package/dist/gateway/index.js.map +1 -0
  87. package/dist/index.d.ts +183 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +1438 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/optimizers/context-trimmer.d.ts +18 -0
  92. package/dist/optimizers/context-trimmer.d.ts.map +1 -0
  93. package/dist/optimizers/context-trimmer.js +221 -0
  94. package/dist/optimizers/context-trimmer.js.map +1 -0
  95. package/dist/optimizers/index.d.ts +6 -0
  96. package/dist/optimizers/index.d.ts.map +1 -0
  97. package/dist/optimizers/index.js +14 -0
  98. package/dist/optimizers/index.js.map +1 -0
  99. package/dist/optimizers/prompt-compressor.d.ts +15 -0
  100. package/dist/optimizers/prompt-compressor.d.ts.map +1 -0
  101. package/dist/optimizers/prompt-compressor.js +268 -0
  102. package/dist/optimizers/prompt-compressor.js.map +1 -0
  103. package/dist/optimizers/prompt-optimizer.d.ts +29 -0
  104. package/dist/optimizers/prompt-optimizer.d.ts.map +1 -0
  105. package/dist/optimizers/prompt-optimizer.js +381 -0
  106. package/dist/optimizers/prompt-optimizer.js.map +1 -0
  107. package/dist/optimizers/request-fusion.d.ts +34 -0
  108. package/dist/optimizers/request-fusion.d.ts.map +1 -0
  109. package/dist/optimizers/request-fusion.js +284 -0
  110. package/dist/optimizers/request-fusion.js.map +1 -0
  111. package/dist/optimizers/suggestion-engine.d.ts +29 -0
  112. package/dist/optimizers/suggestion-engine.d.ts.map +1 -0
  113. package/dist/optimizers/suggestion-engine.js +234 -0
  114. package/dist/optimizers/suggestion-engine.js.map +1 -0
  115. package/dist/providers/anthropic.d.ts +23 -0
  116. package/dist/providers/anthropic.d.ts.map +1 -0
  117. package/dist/providers/anthropic.js +108 -0
  118. package/dist/providers/anthropic.js.map +1 -0
  119. package/dist/providers/azure.d.ts +15 -0
  120. package/dist/providers/azure.d.ts.map +1 -0
  121. package/dist/providers/azure.js +115 -0
  122. package/dist/providers/azure.js.map +1 -0
  123. package/dist/providers/base.d.ts +20 -0
  124. package/dist/providers/base.d.ts.map +1 -0
  125. package/dist/providers/base.js +67 -0
  126. package/dist/providers/base.js.map +1 -0
  127. package/dist/providers/bedrock.d.ts +23 -0
  128. package/dist/providers/bedrock.d.ts.map +1 -0
  129. package/dist/providers/bedrock.js +247 -0
  130. package/dist/providers/bedrock.js.map +1 -0
  131. package/dist/providers/cohere.d.ts +17 -0
  132. package/dist/providers/cohere.d.ts.map +1 -0
  133. package/dist/providers/cohere.js +122 -0
  134. package/dist/providers/cohere.js.map +1 -0
  135. package/dist/providers/deepseek.d.ts +6 -0
  136. package/dist/providers/deepseek.d.ts.map +1 -0
  137. package/dist/providers/deepseek.js +17 -0
  138. package/dist/providers/deepseek.js.map +1 -0
  139. package/dist/providers/google.d.ts +17 -0
  140. package/dist/providers/google.d.ts.map +1 -0
  141. package/dist/providers/google.js +141 -0
  142. package/dist/providers/google.js.map +1 -0
  143. package/dist/providers/index.d.ts +13 -0
  144. package/dist/providers/index.d.ts.map +1 -0
  145. package/dist/providers/index.js +61 -0
  146. package/dist/providers/index.js.map +1 -0
  147. package/dist/providers/openai.d.ts +16 -0
  148. package/dist/providers/openai.d.ts.map +1 -0
  149. package/dist/providers/openai.js +194 -0
  150. package/dist/providers/openai.js.map +1 -0
  151. package/dist/trace/client.d.ts +48 -0
  152. package/dist/trace/client.d.ts.map +1 -0
  153. package/dist/trace/client.js +130 -0
  154. package/dist/trace/client.js.map +1 -0
  155. package/dist/trace/index.d.ts +7 -0
  156. package/dist/trace/index.d.ts.map +1 -0
  157. package/dist/trace/index.js +30 -0
  158. package/dist/trace/index.js.map +1 -0
  159. package/dist/trace/middleware.d.ts +70 -0
  160. package/dist/trace/middleware.d.ts.map +1 -0
  161. package/dist/trace/middleware.js +104 -0
  162. package/dist/trace/middleware.js.map +1 -0
  163. package/dist/trace/providers.d.ts +83 -0
  164. package/dist/trace/providers.d.ts.map +1 -0
  165. package/dist/trace/providers.js +340 -0
  166. package/dist/trace/providers.js.map +1 -0
  167. package/dist/trace/service.d.ts +59 -0
  168. package/dist/trace/service.d.ts.map +1 -0
  169. package/dist/trace/service.js +425 -0
  170. package/dist/trace/service.js.map +1 -0
  171. package/dist/trace/types.d.ts +102 -0
  172. package/dist/trace/types.d.ts.map +1 -0
  173. package/dist/trace/types.js +3 -0
  174. package/dist/trace/types.js.map +1 -0
  175. package/dist/types/failover.d.ts +29 -0
  176. package/dist/types/failover.d.ts.map +1 -0
  177. package/dist/types/failover.js +3 -0
  178. package/dist/types/failover.js.map +1 -0
  179. package/dist/types/feedback.d.ts +69 -0
  180. package/dist/types/feedback.d.ts.map +1 -0
  181. package/dist/types/feedback.js +3 -0
  182. package/dist/types/feedback.js.map +1 -0
  183. package/dist/types/gateway.d.ts +303 -0
  184. package/dist/types/gateway.d.ts.map +1 -0
  185. package/dist/types/gateway.js +3 -0
  186. package/dist/types/gateway.js.map +1 -0
  187. package/dist/types/index.d.ts +242 -0
  188. package/dist/types/index.d.ts.map +1 -0
  189. package/dist/types/index.js +37 -0
  190. package/dist/types/index.js.map +1 -0
  191. package/dist/types/models.d.ts +7 -0
  192. package/dist/types/models.d.ts.map +1 -0
  193. package/dist/types/models.js +3838 -0
  194. package/dist/types/models.js.map +1 -0
  195. package/dist/types/providers.d.ts +128 -0
  196. package/dist/types/providers.d.ts.map +1 -0
  197. package/dist/types/providers.js +10 -0
  198. package/dist/types/providers.js.map +1 -0
  199. package/dist/types/simplified.d.ts +65 -0
  200. package/dist/types/simplified.d.ts.map +1 -0
  201. package/dist/types/simplified.js +4 -0
  202. package/dist/types/simplified.js.map +1 -0
  203. package/dist/utils/logger.d.ts +35 -0
  204. package/dist/utils/logger.d.ts.map +1 -0
  205. package/dist/utils/logger.js +154 -0
  206. package/dist/utils/logger.js.map +1 -0
  207. package/dist/utils/pricing.d.ts +30 -0
  208. package/dist/utils/pricing.d.ts.map +1 -0
  209. package/dist/utils/pricing.js +148 -0
  210. package/dist/utils/pricing.js.map +1 -0
  211. package/dist/utils/validators.d.ts +10 -0
  212. package/dist/utils/validators.d.ts.map +1 -0
  213. package/dist/utils/validators.js +133 -0
  214. package/dist/utils/validators.js.map +1 -0
  215. package/package.json +92 -0
@@ -0,0 +1,17 @@
1
+ import { BaseProvider } from './base';
2
+ import { ProviderConfig } from '../types';
3
+ import { ProviderRequest, ProviderResponse, CohereUsage, AnyUsage } from '../types/providers';
4
+ export declare class CohereProvider extends BaseProvider {
5
+ private apiKey;
6
+ private apiUrl;
7
+ constructor(config: ProviderConfig);
8
+ countTokens(text: string, _model: string): Promise<number>;
9
+ makeRequest(request: ProviderRequest): Promise<ProviderResponse>;
10
+ private formatRequestBody;
11
+ private messagesToCohereHistory;
12
+ private formatResponse;
13
+ parseUsage(usage: any): CohereUsage;
14
+ protected getPromptTokens(usage: AnyUsage): number;
15
+ protected getCompletionTokens(usage: AnyUsage): number;
16
+ }
17
+ //# sourceMappingURL=cohere.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohere.d.ts","sourceRoot":"","sources":["../../src/providers/cohere.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAc,MAAM,UAAU,CAAC;AACtD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,QAAQ,EAET,MAAM,oBAAoB,CAAC;AA8B5B,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,cAAc;IAW5B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAY1D,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuCtE,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,cAAc;IAkBtB,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,WAAW;IAenC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAIlD,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;CAGvD"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CohereProvider = void 0;
4
+ const base_1 = require("./base");
5
+ const types_1 = require("../types");
6
+ const gpt_3_encoder_1 = require("gpt-3-encoder");
7
+ class CohereProvider extends base_1.BaseProvider {
8
+ constructor(config) {
9
+ super({ ...config, provider: types_1.AIProvider.Cohere });
10
+ if (!config.apiKey) {
11
+ throw new Error('Cohere API key is required');
12
+ }
13
+ this.apiKey = config.apiKey;
14
+ this.apiUrl = config.endpoint || 'https://api.cohere.ai/v1';
15
+ }
16
+ async countTokens(text, _model) {
17
+ try {
18
+ const encoded = (0, gpt_3_encoder_1.encode)(text);
19
+ return Promise.resolve(encoded.length);
20
+ }
21
+ catch (error) {
22
+ console.warn('Token counting failed for Cohere model:', error);
23
+ return Promise.resolve(Math.ceil(text.length / 4));
24
+ }
25
+ }
26
+ async makeRequest(request) {
27
+ const url = `${this.apiUrl}/chat`;
28
+ const body = this.formatRequestBody(request);
29
+ try {
30
+ const response = await fetch(url, {
31
+ method: 'POST',
32
+ headers: {
33
+ 'Content-Type': 'application/json',
34
+ Authorization: `Bearer ${this.apiKey}`
35
+ },
36
+ body: JSON.stringify(body)
37
+ });
38
+ if (!response.ok) {
39
+ let errorMsg = response.statusText;
40
+ try {
41
+ const error = await response.json();
42
+ if (typeof error === 'object' && error !== null && 'message' in error) {
43
+ const errObj = error;
44
+ errorMsg = errObj.message || errorMsg;
45
+ }
46
+ }
47
+ catch (_err) {
48
+ console.debug('Error parsing response:', _err);
49
+ }
50
+ throw new Error(`Cohere API error: ${errorMsg}`);
51
+ }
52
+ const data = (await response.json());
53
+ return this.formatResponse(data, request);
54
+ }
55
+ catch (error) {
56
+ if (error instanceof Error) {
57
+ throw error;
58
+ }
59
+ throw new Error('Failed to make Cohere request');
60
+ }
61
+ }
62
+ formatRequestBody(request) {
63
+ const { model, messages, prompt, maxTokens, temperature, topP } = request;
64
+ const lastMessage = messages ? messages[messages.length - 1] : { content: prompt || '' };
65
+ const chatHistory = messages
66
+ ? this.messagesToCohereHistory(messages.slice(0, messages.length - 1))
67
+ : [];
68
+ return {
69
+ model,
70
+ message: lastMessage.content,
71
+ chat_history: chatHistory,
72
+ max_tokens: maxTokens,
73
+ temperature,
74
+ p: topP
75
+ };
76
+ }
77
+ messagesToCohereHistory(messages) {
78
+ return messages.map(msg => ({
79
+ role: msg.role === 'user' ? 'USER' : 'CHATBOT',
80
+ message: msg.content
81
+ }));
82
+ }
83
+ formatResponse(response, request) {
84
+ return {
85
+ id: response.generation_id,
86
+ model: request.model,
87
+ choices: [
88
+ {
89
+ message: {
90
+ role: 'assistant',
91
+ content: response.text
92
+ },
93
+ index: 0,
94
+ finishReason: response.finish_reason
95
+ }
96
+ ],
97
+ usage: response.meta?.billed_units ?? { input_tokens: 0, output_tokens: 0 }
98
+ };
99
+ }
100
+ parseUsage(usage) {
101
+ return {
102
+ tokens: {
103
+ input_tokens: usage.input_tokens || 0,
104
+ output_tokens: usage.output_tokens || 0
105
+ },
106
+ meta: {
107
+ billed_units: {
108
+ input_tokens: usage.input_tokens || 0,
109
+ output_tokens: usage.output_tokens || 0
110
+ }
111
+ }
112
+ };
113
+ }
114
+ getPromptTokens(usage) {
115
+ return usage.meta?.billed_units.input_tokens || 0;
116
+ }
117
+ getCompletionTokens(usage) {
118
+ return usage.meta?.billed_units.output_tokens || 0;
119
+ }
120
+ }
121
+ exports.CohereProvider = CohereProvider;
122
+ //# sourceMappingURL=cohere.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohere.js","sourceRoot":"","sources":["../../src/providers/cohere.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { OpenAIProvider } from './openai';
2
+ import { ProviderConfig } from '../types';
3
+ export declare class DeepSeekProvider extends OpenAIProvider {
4
+ constructor(config: ProviderConfig);
5
+ }
6
+ //# sourceMappingURL=deepseek.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek.d.ts","sourceRoot":"","sources":["../../src/providers/deepseek.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAc,MAAM,UAAU,CAAC;AAEtD,qBAAa,gBAAiB,SAAQ,cAAc;gBACtC,MAAM,EAAE,cAAc;CAQnC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeepSeekProvider = void 0;
4
+ const openai_1 = require("./openai");
5
+ const types_1 = require("../types");
6
+ class DeepSeekProvider extends openai_1.OpenAIProvider {
7
+ constructor(config) {
8
+ const deepSeekConfig = {
9
+ ...config,
10
+ provider: types_1.AIProvider.DeepSeek,
11
+ endpoint: 'https://api.deepseek.com/v1'
12
+ };
13
+ super(deepSeekConfig);
14
+ }
15
+ }
16
+ exports.DeepSeekProvider = DeepSeekProvider;
17
+ //# sourceMappingURL=deepseek.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek.js","sourceRoot":"","sources":["../../src/providers/deepseek.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAC1C,oCAAsD;AAEtD,MAAa,gBAAiB,SAAQ,uBAAc;IAClD,YAAY,MAAsB;QAChC,MAAM,cAAc,GAAmB;YACrC,GAAG,MAAM;YACT,QAAQ,EAAE,kBAAU,CAAC,QAAQ;YAC7B,QAAQ,EAAE,6BAA6B;SACxC,CAAC;QACF,KAAK,CAAC,cAAc,CAAC,CAAC;IACxB,CAAC;CACF;AATD,4CASC"}
@@ -0,0 +1,17 @@
1
+ import { BaseProvider } from './base';
2
+ import { ProviderConfig } from '../types';
3
+ import { ProviderRequest, ProviderResponse, GoogleUsage, AnyUsage } from '../types/providers';
4
+ export declare class GoogleProvider extends BaseProvider {
5
+ private apiKey;
6
+ private apiUrl;
7
+ constructor(config: ProviderConfig);
8
+ countTokens(text: string, model: string): Promise<number>;
9
+ makeRequest(request: ProviderRequest): Promise<ProviderResponse>;
10
+ private formatRequestBody;
11
+ private messagesToGoogleContents;
12
+ private formatResponse;
13
+ parseUsage(usage: any): GoogleUsage;
14
+ protected getPromptTokens(usage: AnyUsage): number;
15
+ protected getCompletionTokens(usage: AnyUsage): number;
16
+ }
17
+ //# sourceMappingURL=google.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAc,MAAM,UAAU,CAAC;AACtD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,QAAQ,EAET,MAAM,oBAAoB,CAAC;AAoC5B,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,cAAc;IAW5B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BzD,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuCtE,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,cAAc;IA8BtB,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,WAAW;IAQnC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAIlD,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;CAGvD"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GoogleProvider = void 0;
4
+ const base_1 = require("./base");
5
+ const types_1 = require("../types");
6
+ class GoogleProvider extends base_1.BaseProvider {
7
+ constructor(config) {
8
+ super({ ...config, provider: types_1.AIProvider.Google });
9
+ if (!config.apiKey) {
10
+ throw new Error('Google API key is required');
11
+ }
12
+ this.apiKey = config.apiKey;
13
+ this.apiUrl = config.endpoint || 'https://generativelanguage.googleapis.com/v1beta';
14
+ }
15
+ async countTokens(text, model) {
16
+ const url = `${this.apiUrl}/models/${model}:countTokens?key=${this.apiKey}`;
17
+ try {
18
+ const response = await fetch(url, {
19
+ method: 'POST',
20
+ headers: { 'Content-Type': 'application/json' },
21
+ body: JSON.stringify({
22
+ generateContentRequest: {
23
+ contents: [{ parts: [{ text }] }]
24
+ }
25
+ })
26
+ });
27
+ if (!response.ok) {
28
+ return Math.ceil(text.length / 4);
29
+ }
30
+ const data = await response.json();
31
+ return data.totalTokens || Math.ceil(text.length / 4);
32
+ }
33
+ catch (error) {
34
+ console.warn('Token counting failed for Google model:', error);
35
+ return Math.ceil(text.length / 4);
36
+ }
37
+ }
38
+ async makeRequest(request) {
39
+ const url = `${this.apiUrl}/models/${request.model}:generateContent?key=${this.apiKey}`;
40
+ const body = this.formatRequestBody(request);
41
+ try {
42
+ const response = await fetch(url, {
43
+ method: 'POST',
44
+ headers: {
45
+ 'Content-Type': 'application/json'
46
+ },
47
+ body: JSON.stringify(body)
48
+ });
49
+ if (!response.ok) {
50
+ let errorMsg = response.statusText;
51
+ try {
52
+ const error = await response.json();
53
+ if (typeof error === 'object' && error !== null && 'error' in error) {
54
+ const errObj = error;
55
+ errorMsg = errObj.error?.message || errorMsg;
56
+ }
57
+ }
58
+ catch (_err) {
59
+ console.debug('Error parsing response:', _err);
60
+ }
61
+ throw new Error(`Google API error: ${errorMsg}`);
62
+ }
63
+ const data = (await response.json());
64
+ return this.formatResponse(data, request);
65
+ }
66
+ catch (error) {
67
+ if (error instanceof Error) {
68
+ throw error;
69
+ }
70
+ throw new Error('Failed to make Google request');
71
+ }
72
+ }
73
+ formatRequestBody(request) {
74
+ const { messages, prompt, maxTokens, temperature, topP } = request;
75
+ const contents = messages
76
+ ? this.messagesToGoogleContents(messages)
77
+ : [{ role: 'user', parts: [{ text: prompt }] }];
78
+ return {
79
+ contents,
80
+ generationConfig: {
81
+ maxOutputTokens: maxTokens,
82
+ temperature,
83
+ topP
84
+ }
85
+ };
86
+ }
87
+ messagesToGoogleContents(messages) {
88
+ const contents = [];
89
+ messages.forEach(msg => {
90
+ const role = msg.role === 'assistant' ? 'model' : 'user';
91
+ contents.push({
92
+ role: role,
93
+ parts: [{ text: msg.content }]
94
+ });
95
+ });
96
+ return contents;
97
+ }
98
+ formatResponse(response, request) {
99
+ const choice = response.candidates?.[0];
100
+ const usage = response.usageMetadata ?? {};
101
+ return {
102
+ id: `google-${Date.now()}`,
103
+ model: request.model,
104
+ choices: choice
105
+ ? [
106
+ {
107
+ message: {
108
+ role: 'assistant',
109
+ content: choice.content?.parts?.[0]?.text || ''
110
+ },
111
+ index: 0,
112
+ finishReason: choice.finishReason
113
+ }
114
+ ]
115
+ : [],
116
+ usage: {
117
+ promptTokenCount: usage.promptTokenCount ?? 0,
118
+ candidatesTokenCount: usage.candidatesTokenCount ?? 0,
119
+ totalTokenCount: usage.totalTokenCount ?? 0
120
+ },
121
+ metadata: {
122
+ safetyRatings: choice?.safetyRatings
123
+ }
124
+ };
125
+ }
126
+ parseUsage(usage) {
127
+ return {
128
+ promptTokenCount: usage.promptTokenCount || 0,
129
+ candidatesTokenCount: usage.candidatesTokenCount || 0,
130
+ totalTokenCount: usage.totalTokenCount || 0
131
+ };
132
+ }
133
+ getPromptTokens(usage) {
134
+ return usage.promptTokenCount;
135
+ }
136
+ getCompletionTokens(usage) {
137
+ return usage.candidatesTokenCount;
138
+ }
139
+ }
140
+ exports.GoogleProvider = GoogleProvider;
141
+ //# sourceMappingURL=google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":";;;AAAA,iCAAsC;AACtC,oCAAsD;AA2CtD,MAAa,cAAe,SAAQ,mBAAY;IAI9C,YAAY,MAAsB;QAChC,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,kBAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,IAAI,kDAAkD,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,KAAa;QAC3C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,WAAW,KAAK,oBAAoB,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,sBAAsB,EAAE;wBACtB,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;qBAClC;iBACF,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAEjB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpC,CAAC;YAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAwB;QACxC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,WAAW,OAAO,CAAC,KAAK,wBAAwB,IAAI,CAAC,MAAM,EAAE,CAAC;QAExF,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC;gBACnC,IAAI,CAAC;oBACH,MAAM,KAAK,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;wBACpE,MAAM,MAAM,GAAG,KAAoB,CAAC;wBACpC,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,CAAC;oBAC/C,CAAC;gBACH,CAAC;gBAAC,OAAO,IAAI,EAAE,CAAC;oBAEd,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;gBACjD,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;YACvD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,OAAwB;QAChD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAEnE,MAAM,QAAQ,GAAG,QAAQ;YACvB,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC;YACzC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAElD,OAAO;YACL,QAAQ;YACR,gBAAgB,EAAE;gBAChB,eAAe,EAAE,SAAS;gBAC1B,WAAW;gBACX,IAAI;aACL;SACF,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAC9B,QAAmB;QAEnB,MAAM,QAAQ,GAA4D,EAAE,CAAC;QAC7E,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAErB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YAEzD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;aAC/B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,cAAc,CAAC,QAAwB,EAAE,OAAwB;QACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,IAAI,EAAiB,CAAC;QAE1D,OAAO;YACL,EAAE,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,MAAM;gBACb,CAAC,CAAC;oBACE;wBACE,OAAO,EAAE;4BACP,IAAI,EAAE,WAAW;4BACjB,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;yBAChD;wBACD,KAAK,EAAE,CAAC;wBACR,YAAY,EAAE,MAAM,CAAC,YAAY;qBAClC;iBACF;gBACH,CAAC,CAAC,EAAE;YACN,KAAK,EAAE;gBACL,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,CAAC;gBAC7C,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAAI,CAAC;gBACrD,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,CAAC;aAC5C;YACD,QAAQ,EAAE;gBACR,aAAa,EAAE,MAAM,EAAE,aAAa;aACrC;SACF,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,KAAU;QACnB,OAAO;YACL,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,CAAC;YAC7C,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAAI,CAAC;YACrD,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,CAAC;SAC5C,CAAC;IACJ,CAAC;IAES,eAAe,CAAC,KAAe;QACvC,OAAQ,KAAqB,CAAC,gBAAgB,CAAC;IACjD,CAAC;IAES,mBAAmB,CAAC,KAAe;QAC3C,OAAQ,KAAqB,CAAC,oBAAoB,CAAC;IACrD,CAAC;CACF;AA/JD,wCA+JC"}
@@ -0,0 +1,13 @@
1
+ export { BaseProvider } from './base';
2
+ export { OpenAIProvider } from './openai';
3
+ export { BedrockProvider } from './bedrock';
4
+ export { GoogleProvider } from './google';
5
+ export { CohereProvider } from './cohere';
6
+ export { AnthropicProvider } from './anthropic';
7
+ export { AzureProvider } from './azure';
8
+ export { DeepSeekProvider } from './deepseek';
9
+ import { AIProvider, ProviderConfig } from '../types';
10
+ import { BaseProvider } from './base';
11
+ export declare function createProvider(config: ProviderConfig): BaseProvider;
12
+ export declare function isProviderSupported(provider: AIProvider): boolean;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAStC,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAmBnE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAUjE"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeepSeekProvider = exports.AzureProvider = exports.AnthropicProvider = exports.CohereProvider = exports.GoogleProvider = exports.BedrockProvider = exports.OpenAIProvider = exports.BaseProvider = void 0;
4
+ exports.createProvider = createProvider;
5
+ exports.isProviderSupported = isProviderSupported;
6
+ var base_1 = require("./base");
7
+ Object.defineProperty(exports, "BaseProvider", { enumerable: true, get: function () { return base_1.BaseProvider; } });
8
+ var openai_1 = require("./openai");
9
+ Object.defineProperty(exports, "OpenAIProvider", { enumerable: true, get: function () { return openai_1.OpenAIProvider; } });
10
+ var bedrock_1 = require("./bedrock");
11
+ Object.defineProperty(exports, "BedrockProvider", { enumerable: true, get: function () { return bedrock_1.BedrockProvider; } });
12
+ var google_1 = require("./google");
13
+ Object.defineProperty(exports, "GoogleProvider", { enumerable: true, get: function () { return google_1.GoogleProvider; } });
14
+ var cohere_1 = require("./cohere");
15
+ Object.defineProperty(exports, "CohereProvider", { enumerable: true, get: function () { return cohere_1.CohereProvider; } });
16
+ var anthropic_1 = require("./anthropic");
17
+ Object.defineProperty(exports, "AnthropicProvider", { enumerable: true, get: function () { return anthropic_1.AnthropicProvider; } });
18
+ var azure_1 = require("./azure");
19
+ Object.defineProperty(exports, "AzureProvider", { enumerable: true, get: function () { return azure_1.AzureProvider; } });
20
+ var deepseek_1 = require("./deepseek");
21
+ Object.defineProperty(exports, "DeepSeekProvider", { enumerable: true, get: function () { return deepseek_1.DeepSeekProvider; } });
22
+ const types_1 = require("../types");
23
+ const openai_2 = require("./openai");
24
+ const bedrock_2 = require("./bedrock");
25
+ const google_2 = require("./google");
26
+ const cohere_2 = require("./cohere");
27
+ const anthropic_2 = require("./anthropic");
28
+ const azure_2 = require("./azure");
29
+ const deepseek_2 = require("./deepseek");
30
+ function createProvider(config) {
31
+ switch (config.provider) {
32
+ case types_1.AIProvider.OpenAI:
33
+ return new openai_2.OpenAIProvider(config);
34
+ case types_1.AIProvider.AWSBedrock:
35
+ return new bedrock_2.BedrockProvider(config);
36
+ case types_1.AIProvider.Anthropic:
37
+ return new anthropic_2.AnthropicProvider(config);
38
+ case types_1.AIProvider.Google:
39
+ return new google_2.GoogleProvider(config);
40
+ case types_1.AIProvider.Cohere:
41
+ return new cohere_2.CohereProvider(config);
42
+ case types_1.AIProvider.Azure:
43
+ return new azure_2.AzureProvider(config);
44
+ case types_1.AIProvider.DeepSeek:
45
+ return new deepseek_2.DeepSeekProvider(config);
46
+ default:
47
+ throw new Error(`Unknown or unsupported provider: ${config.provider}`);
48
+ }
49
+ }
50
+ function isProviderSupported(provider) {
51
+ return [
52
+ types_1.AIProvider.OpenAI,
53
+ types_1.AIProvider.AWSBedrock,
54
+ types_1.AIProvider.Anthropic,
55
+ types_1.AIProvider.Google,
56
+ types_1.AIProvider.Cohere,
57
+ types_1.AIProvider.Azure,
58
+ types_1.AIProvider.DeepSeek
59
+ ].includes(provider);
60
+ }
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;;AAmBA,wCAmBC;AAED,kDAUC;AAlDD,+BAAsC;AAA7B,oGAAA,YAAY,OAAA;AACrB,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,qCAA4C;AAAnC,0GAAA,eAAe,OAAA;AACxB,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,yCAAgD;AAAvC,8GAAA,iBAAiB,OAAA;AAC1B,iCAAwC;AAA/B,sGAAA,aAAa,OAAA;AACtB,uCAA8C;AAArC,4GAAA,gBAAgB,OAAA;AAEzB,oCAAsD;AAEtD,qCAA0C;AAC1C,uCAA4C;AAC5C,qCAA0C;AAC1C,qCAA0C;AAC1C,2CAAgD;AAChD,mCAAwC;AACxC,yCAA8C;AAE9C,SAAgB,cAAc,CAAC,MAAsB;IACnD,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,kBAAU,CAAC,MAAM;YACpB,OAAO,IAAI,uBAAc,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,kBAAU,CAAC,UAAU;YACxB,OAAO,IAAI,yBAAe,CAAC,MAAM,CAAC,CAAC;QACrC,KAAK,kBAAU,CAAC,SAAS;YACvB,OAAO,IAAI,6BAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,kBAAU,CAAC,MAAM;YACpB,OAAO,IAAI,uBAAc,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,kBAAU,CAAC,MAAM;YACpB,OAAO,IAAI,uBAAc,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,kBAAU,CAAC,KAAK;YACnB,OAAO,IAAI,qBAAa,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,kBAAU,CAAC,QAAQ;YACtB,OAAO,IAAI,2BAAgB,CAAC,MAAM,CAAC,CAAC;QACtC;YACE,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB,CAAC,QAAoB;IACtD,OAAO;QACL,kBAAU,CAAC,MAAM;QACjB,kBAAU,CAAC,UAAU;QACrB,kBAAU,CAAC,SAAS;QACpB,kBAAU,CAAC,MAAM;QACjB,kBAAU,CAAC,MAAM;QACjB,kBAAU,CAAC,KAAK;QAChB,kBAAU,CAAC,QAAQ;KACpB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { BaseProvider } from './base';
2
+ import { ProviderConfig } from '../types';
3
+ import { ProviderRequest, ProviderResponse, OpenAIUsage, AnyUsage } from '../types/providers';
4
+ export declare class OpenAIProvider extends BaseProvider {
5
+ private apiKey;
6
+ private apiUrl;
7
+ constructor(config: ProviderConfig);
8
+ countTokens(text: string, _model: string): Promise<number>;
9
+ makeRequest(request: ProviderRequest): Promise<ProviderResponse>;
10
+ parseUsage(usage: unknown): OpenAIUsage;
11
+ protected getPromptTokens(usage: AnyUsage): number;
12
+ protected getCompletionTokens(usage: AnyUsage): number;
13
+ createEmbedding(input: string | string[], model?: string): Promise<any>;
14
+ listModels(): Promise<unknown[]>;
15
+ }
16
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AA+B9F,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,cAAc;IAW5B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa1D,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmFtE,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW;IAYvC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAIlD,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAKhD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,KAAK,GAAE,MAAiC;IAwClF,UAAU;CAsCjB"}
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenAIProvider = void 0;
4
+ const base_1 = require("./base");
5
+ const gpt_3_encoder_1 = require("gpt-3-encoder");
6
+ class OpenAIProvider extends base_1.BaseProvider {
7
+ constructor(config) {
8
+ super(config);
9
+ if (!config.apiKey) {
10
+ throw new Error('OpenAI API key is required');
11
+ }
12
+ this.apiKey = config.apiKey;
13
+ this.apiUrl = config.endpoint || 'https://api.openai.com/v1';
14
+ }
15
+ async countTokens(text, _model) {
16
+ try {
17
+ const encoded = (0, gpt_3_encoder_1.encode)(text);
18
+ return Promise.resolve(encoded.length);
19
+ }
20
+ catch (error) {
21
+ console.warn('Token counting failed for OpenAI model:', error);
22
+ return Promise.resolve(Math.ceil(text.length / 4));
23
+ }
24
+ }
25
+ async makeRequest(request) {
26
+ const endpoint = request.messages ? '/chat/completions' : '/completions';
27
+ const url = `${this.apiUrl}${endpoint}`;
28
+ const body = {
29
+ model: request.model,
30
+ max_tokens: request.maxTokens,
31
+ temperature: request.temperature,
32
+ top_p: request.topP,
33
+ stop: request.stopSequences,
34
+ stream: false,
35
+ user: request.userId
36
+ };
37
+ if (request.messages) {
38
+ body.messages = request.messages;
39
+ }
40
+ else {
41
+ body.prompt = request.prompt;
42
+ }
43
+ try {
44
+ const response = await fetch(url, {
45
+ method: 'POST',
46
+ headers: {
47
+ 'Content-Type': 'application/json',
48
+ Authorization: `Bearer ${this.apiKey}`
49
+ },
50
+ body: JSON.stringify(body)
51
+ });
52
+ if (!response.ok) {
53
+ let errorMsg = response.statusText;
54
+ try {
55
+ const error = await response.json();
56
+ if (typeof error === 'object' && error !== null && 'error' in error) {
57
+ const errObj = error;
58
+ errorMsg = errObj.error?.message || errorMsg;
59
+ }
60
+ }
61
+ catch (_err) {
62
+ console.debug('Error parsing response:', _err);
63
+ }
64
+ throw new Error(`OpenAI API error: ${errorMsg}`);
65
+ }
66
+ const data = await response.json();
67
+ if (!data || typeof data !== 'object') {
68
+ throw new Error('Invalid response from OpenAI API');
69
+ }
70
+ const apiData = data;
71
+ return {
72
+ id: apiData.id,
73
+ model: apiData.model,
74
+ choices: Array.isArray(apiData.choices)
75
+ ? apiData.choices.map((choice) => ({
76
+ text: choice.text,
77
+ message: typeof choice.message === 'object' &&
78
+ choice.message !== null &&
79
+ 'role' in choice.message &&
80
+ 'content' in choice.message
81
+ ? choice.message
82
+ : undefined,
83
+ index: choice.index,
84
+ finishReason: choice.finish_reason
85
+ }))
86
+ : [],
87
+ usage: apiData.usage,
88
+ created: apiData.created,
89
+ metadata: {
90
+ object: apiData.object,
91
+ system_fingerprint: apiData.system_fingerprint
92
+ }
93
+ };
94
+ }
95
+ catch (error) {
96
+ if (error instanceof Error) {
97
+ throw error;
98
+ }
99
+ throw new Error('Failed to make OpenAI request');
100
+ }
101
+ }
102
+ parseUsage(usage) {
103
+ if (typeof usage === 'object' && usage !== null) {
104
+ const u = usage;
105
+ return {
106
+ prompt_tokens: u.prompt_tokens ?? 0,
107
+ completion_tokens: u.completion_tokens ?? 0,
108
+ total_tokens: u.total_tokens ?? 0
109
+ };
110
+ }
111
+ return { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 };
112
+ }
113
+ getPromptTokens(usage) {
114
+ return usage.prompt_tokens;
115
+ }
116
+ getCompletionTokens(usage) {
117
+ return usage.completion_tokens;
118
+ }
119
+ async createEmbedding(input, model = 'text-embedding-ada-002') {
120
+ const url = `${this.apiUrl}/embeddings`;
121
+ try {
122
+ const response = await fetch(url, {
123
+ method: 'POST',
124
+ headers: {
125
+ 'Content-Type': 'application/json',
126
+ Authorization: `Bearer ${this.apiKey}`
127
+ },
128
+ body: JSON.stringify({
129
+ input,
130
+ model
131
+ })
132
+ });
133
+ if (!response.ok) {
134
+ let errorMsg = response.statusText;
135
+ try {
136
+ const error = await response.json();
137
+ if (typeof error === 'object' && error !== null && 'error' in error) {
138
+ const errObj = error;
139
+ errorMsg = errObj.error?.message || errorMsg;
140
+ }
141
+ }
142
+ catch (_err) {
143
+ console.debug('Error parsing response:', _err);
144
+ }
145
+ throw new Error(`OpenAI API error: ${errorMsg}`);
146
+ }
147
+ return await response.json();
148
+ }
149
+ catch (error) {
150
+ if (error instanceof Error) {
151
+ throw error;
152
+ }
153
+ throw new Error('Failed to create embedding');
154
+ }
155
+ }
156
+ async listModels() {
157
+ const url = `${this.apiUrl}/models`;
158
+ try {
159
+ const response = await fetch(url, {
160
+ method: 'GET',
161
+ headers: {
162
+ Authorization: `Bearer ${this.apiKey}`
163
+ }
164
+ });
165
+ if (!response.ok) {
166
+ let errorMsg = response.statusText;
167
+ try {
168
+ const error = await response.json();
169
+ if (typeof error === 'object' && error !== null && 'error' in error) {
170
+ const errObj = error;
171
+ errorMsg = errObj.error?.message || errorMsg;
172
+ }
173
+ }
174
+ catch (_err) {
175
+ console.debug('Error parsing response:', _err);
176
+ }
177
+ throw new Error(`OpenAI API error: ${errorMsg}`);
178
+ }
179
+ const data = await response.json();
180
+ if (!data || typeof data !== 'object' || !('data' in data)) {
181
+ throw new Error('Invalid response from OpenAI API');
182
+ }
183
+ return data.data;
184
+ }
185
+ catch (error) {
186
+ if (error instanceof Error) {
187
+ throw error;
188
+ }
189
+ throw new Error('Failed to list models');
190
+ }
191
+ }
192
+ }
193
+ exports.OpenAIProvider = OpenAIProvider;
194
+ //# sourceMappingURL=openai.js.map