@ai-orchestration/core 0.2.0 → 0.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 (173) hide show
  1. package/README.md +16 -0
  2. package/dist/cjs/core/errors.d.ts +21 -0
  3. package/dist/cjs/core/errors.d.ts.map +1 -0
  4. package/dist/cjs/core/errors.js +40 -0
  5. package/dist/cjs/core/errors.js.map +1 -0
  6. package/dist/cjs/core/interfaces.d.ts +166 -0
  7. package/dist/cjs/core/interfaces.d.ts.map +1 -0
  8. package/dist/cjs/core/interfaces.js +6 -0
  9. package/dist/cjs/core/interfaces.js.map +1 -0
  10. package/dist/cjs/core/metrics.d.ts +161 -0
  11. package/dist/cjs/core/metrics.d.ts.map +1 -0
  12. package/dist/cjs/core/metrics.js +282 -0
  13. package/dist/cjs/core/metrics.js.map +1 -0
  14. package/dist/cjs/core/orchestrator.d.ts +97 -0
  15. package/dist/cjs/core/orchestrator.d.ts.map +1 -0
  16. package/dist/cjs/core/orchestrator.js +402 -0
  17. package/dist/cjs/core/orchestrator.js.map +1 -0
  18. package/dist/cjs/core/types.d.ts +111 -0
  19. package/dist/cjs/core/types.d.ts.map +1 -0
  20. package/dist/cjs/core/types.js +6 -0
  21. package/dist/cjs/core/types.js.map +1 -0
  22. package/dist/cjs/factory/index.d.ts +14 -0
  23. package/dist/cjs/factory/index.d.ts.map +1 -0
  24. package/dist/cjs/factory/index.js +208 -0
  25. package/dist/cjs/factory/index.js.map +1 -0
  26. package/dist/cjs/index.d.ts +16 -0
  27. package/dist/cjs/index.d.ts.map +1 -0
  28. package/dist/cjs/index.js +37 -0
  29. package/dist/cjs/index.js.map +1 -0
  30. package/dist/cjs/providers/base.d.ts +30 -0
  31. package/dist/cjs/providers/base.d.ts.map +1 -0
  32. package/dist/cjs/providers/base.js +35 -0
  33. package/dist/cjs/providers/base.js.map +1 -0
  34. package/dist/cjs/providers/cerebras.d.ts +26 -0
  35. package/dist/cjs/providers/cerebras.d.ts.map +1 -0
  36. package/dist/cjs/providers/cerebras.js +207 -0
  37. package/dist/cjs/providers/cerebras.js.map +1 -0
  38. package/dist/cjs/providers/gemini.d.ts +26 -0
  39. package/dist/cjs/providers/gemini.d.ts.map +1 -0
  40. package/dist/cjs/providers/gemini.js +180 -0
  41. package/dist/cjs/providers/gemini.js.map +1 -0
  42. package/dist/cjs/providers/groq.d.ts +26 -0
  43. package/dist/cjs/providers/groq.d.ts.map +1 -0
  44. package/dist/cjs/providers/groq.js +242 -0
  45. package/dist/cjs/providers/groq.js.map +1 -0
  46. package/dist/cjs/providers/index.d.ts +15 -0
  47. package/dist/cjs/providers/index.d.ts.map +1 -0
  48. package/dist/cjs/providers/index.js +19 -0
  49. package/dist/cjs/providers/index.js.map +1 -0
  50. package/dist/cjs/providers/local.d.ts +27 -0
  51. package/dist/cjs/providers/local.d.ts.map +1 -0
  52. package/dist/cjs/providers/local.js +205 -0
  53. package/dist/cjs/providers/local.js.map +1 -0
  54. package/dist/cjs/providers/openrouter.d.ts +26 -0
  55. package/dist/cjs/providers/openrouter.d.ts.map +1 -0
  56. package/dist/cjs/providers/openrouter.js +187 -0
  57. package/dist/cjs/providers/openrouter.js.map +1 -0
  58. package/dist/cjs/strategies/base.d.ts +16 -0
  59. package/dist/cjs/strategies/base.d.ts.map +1 -0
  60. package/dist/cjs/strategies/base.js +25 -0
  61. package/dist/cjs/strategies/base.js.map +1 -0
  62. package/dist/cjs/strategies/fallback.d.ts +14 -0
  63. package/dist/cjs/strategies/fallback.d.ts.map +1 -0
  64. package/dist/cjs/strategies/fallback.js +32 -0
  65. package/dist/cjs/strategies/fallback.js.map +1 -0
  66. package/dist/cjs/strategies/health-aware.d.ts +20 -0
  67. package/dist/cjs/strategies/health-aware.d.ts.map +1 -0
  68. package/dist/cjs/strategies/health-aware.js +108 -0
  69. package/dist/cjs/strategies/health-aware.js.map +1 -0
  70. package/dist/cjs/strategies/index.d.ts +14 -0
  71. package/dist/cjs/strategies/index.d.ts.map +1 -0
  72. package/dist/cjs/strategies/index.js +19 -0
  73. package/dist/cjs/strategies/index.js.map +1 -0
  74. package/dist/cjs/strategies/priority.d.ts +18 -0
  75. package/dist/cjs/strategies/priority.d.ts.map +1 -0
  76. package/dist/cjs/strategies/priority.js +39 -0
  77. package/dist/cjs/strategies/priority.js.map +1 -0
  78. package/dist/cjs/strategies/round-robin.d.ts +10 -0
  79. package/dist/cjs/strategies/round-robin.d.ts.map +1 -0
  80. package/dist/cjs/strategies/round-robin.js +28 -0
  81. package/dist/cjs/strategies/round-robin.js.map +1 -0
  82. package/dist/cjs/strategies/weighted.d.ts +20 -0
  83. package/dist/cjs/strategies/weighted.d.ts.map +1 -0
  84. package/dist/cjs/strategies/weighted.js +61 -0
  85. package/dist/cjs/strategies/weighted.js.map +1 -0
  86. package/dist/esm/core/errors.d.ts +21 -0
  87. package/dist/esm/core/errors.d.ts.map +1 -0
  88. package/dist/esm/core/errors.js +33 -0
  89. package/dist/esm/core/errors.js.map +1 -0
  90. package/dist/esm/core/interfaces.d.ts +166 -0
  91. package/dist/esm/core/interfaces.d.ts.map +1 -0
  92. package/dist/esm/core/interfaces.js +5 -0
  93. package/dist/esm/core/interfaces.js.map +1 -0
  94. package/dist/esm/core/metrics.d.ts +161 -0
  95. package/dist/esm/core/metrics.d.ts.map +1 -0
  96. package/dist/esm/core/metrics.js +278 -0
  97. package/dist/esm/core/metrics.js.map +1 -0
  98. package/dist/esm/core/orchestrator.d.ts +97 -0
  99. package/dist/esm/core/orchestrator.d.ts.map +1 -0
  100. package/dist/esm/core/orchestrator.js +398 -0
  101. package/dist/esm/core/orchestrator.js.map +1 -0
  102. package/dist/esm/core/types.d.ts +111 -0
  103. package/dist/esm/core/types.d.ts.map +1 -0
  104. package/dist/esm/core/types.js +5 -0
  105. package/dist/esm/core/types.js.map +1 -0
  106. package/dist/esm/factory/index.d.ts +14 -0
  107. package/dist/esm/factory/index.d.ts.map +1 -0
  108. package/dist/esm/factory/index.js +204 -0
  109. package/dist/esm/factory/index.js.map +1 -0
  110. package/dist/esm/index.d.ts +16 -0
  111. package/dist/esm/index.d.ts.map +1 -0
  112. package/dist/esm/index.js +16 -0
  113. package/dist/esm/index.js.map +1 -0
  114. package/dist/esm/providers/base.d.ts +30 -0
  115. package/dist/esm/providers/base.d.ts.map +1 -0
  116. package/dist/esm/providers/base.js +31 -0
  117. package/dist/esm/providers/base.js.map +1 -0
  118. package/dist/esm/providers/cerebras.d.ts +26 -0
  119. package/dist/esm/providers/cerebras.d.ts.map +1 -0
  120. package/dist/esm/providers/cerebras.js +203 -0
  121. package/dist/esm/providers/cerebras.js.map +1 -0
  122. package/dist/esm/providers/gemini.d.ts +26 -0
  123. package/dist/esm/providers/gemini.d.ts.map +1 -0
  124. package/dist/esm/providers/gemini.js +176 -0
  125. package/dist/esm/providers/gemini.js.map +1 -0
  126. package/dist/esm/providers/groq.d.ts +26 -0
  127. package/dist/esm/providers/groq.d.ts.map +1 -0
  128. package/dist/esm/providers/groq.js +238 -0
  129. package/dist/esm/providers/groq.js.map +1 -0
  130. package/dist/esm/providers/index.d.ts +15 -0
  131. package/dist/esm/providers/index.d.ts.map +1 -0
  132. package/dist/esm/providers/index.js +10 -0
  133. package/dist/esm/providers/index.js.map +1 -0
  134. package/dist/esm/providers/local.d.ts +27 -0
  135. package/dist/esm/providers/local.d.ts.map +1 -0
  136. package/dist/esm/providers/local.js +201 -0
  137. package/dist/esm/providers/local.js.map +1 -0
  138. package/dist/esm/providers/openrouter.d.ts +26 -0
  139. package/dist/esm/providers/openrouter.d.ts.map +1 -0
  140. package/dist/esm/providers/openrouter.js +183 -0
  141. package/dist/esm/providers/openrouter.js.map +1 -0
  142. package/dist/esm/strategies/base.d.ts +16 -0
  143. package/dist/esm/strategies/base.d.ts.map +1 -0
  144. package/dist/esm/strategies/base.js +21 -0
  145. package/dist/esm/strategies/base.js.map +1 -0
  146. package/dist/esm/strategies/fallback.d.ts +14 -0
  147. package/dist/esm/strategies/fallback.d.ts.map +1 -0
  148. package/dist/esm/strategies/fallback.js +28 -0
  149. package/dist/esm/strategies/fallback.js.map +1 -0
  150. package/dist/esm/strategies/health-aware.d.ts +20 -0
  151. package/dist/esm/strategies/health-aware.d.ts.map +1 -0
  152. package/dist/esm/strategies/health-aware.js +104 -0
  153. package/dist/esm/strategies/health-aware.js.map +1 -0
  154. package/dist/esm/strategies/index.d.ts +14 -0
  155. package/dist/esm/strategies/index.d.ts.map +1 -0
  156. package/dist/esm/strategies/index.js +10 -0
  157. package/dist/esm/strategies/index.js.map +1 -0
  158. package/dist/esm/strategies/priority.d.ts +18 -0
  159. package/dist/esm/strategies/priority.d.ts.map +1 -0
  160. package/dist/esm/strategies/priority.js +35 -0
  161. package/dist/esm/strategies/priority.js.map +1 -0
  162. package/dist/esm/strategies/round-robin.d.ts +10 -0
  163. package/dist/esm/strategies/round-robin.d.ts.map +1 -0
  164. package/dist/esm/strategies/round-robin.js +24 -0
  165. package/dist/esm/strategies/round-robin.js.map +1 -0
  166. package/dist/esm/strategies/weighted.d.ts +20 -0
  167. package/dist/esm/strategies/weighted.d.ts.map +1 -0
  168. package/dist/esm/strategies/weighted.js +57 -0
  169. package/dist/esm/strategies/weighted.js.map +1 -0
  170. package/examples/metrics.ts +1 -0
  171. package/package.json +15 -6
  172. package/tsconfig.cjs.json +9 -0
  173. package/tsconfig.esm.json +9 -0
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ /**
3
+ * Google Gemini provider implementation
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GeminiProvider = void 0;
7
+ const base_js_1 = require("./base.js");
8
+ class GeminiProvider extends base_js_1.BaseProvider {
9
+ constructor(config) {
10
+ super();
11
+ this.id = config.id;
12
+ this.apiKey = config.apiKey;
13
+ this.model = config.model || 'gemini-pro';
14
+ this.baseURL =
15
+ config.baseURL || 'https://generativelanguage.googleapis.com/v1beta';
16
+ this.metadata = {
17
+ id: this.id,
18
+ name: 'Google Gemini',
19
+ model: this.model,
20
+ };
21
+ }
22
+ async checkHealth() {
23
+ return this.defaultHealthCheck();
24
+ }
25
+ async chat(messages, options) {
26
+ const formatted = this.formatMessages(messages);
27
+ const url = `${this.baseURL}/models/${this.model}:generateContent?key=${this.apiKey}`;
28
+ const response = await fetch(url, {
29
+ method: 'POST',
30
+ headers: {
31
+ 'Content-Type': 'application/json',
32
+ },
33
+ body: JSON.stringify({
34
+ contents: formatted,
35
+ generationConfig: {
36
+ temperature: options?.temperature,
37
+ maxOutputTokens: options?.maxTokens,
38
+ topP: options?.topP,
39
+ topK: options?.topK,
40
+ stopSequences: options?.stopSequences,
41
+ },
42
+ }),
43
+ });
44
+ if (!response.ok) {
45
+ const error = await response.text();
46
+ throw new Error(`Gemini API error: ${response.status} ${error}`);
47
+ }
48
+ const data = await response.json();
49
+ return this.parseResponse(data);
50
+ }
51
+ async chatStream(messages, options) {
52
+ const formatted = this.formatMessages(messages);
53
+ const url = `${this.baseURL}/models/${this.model}:streamGenerateContent?key=${this.apiKey}`;
54
+ const response = await fetch(url, {
55
+ method: 'POST',
56
+ headers: {
57
+ 'Content-Type': 'application/json',
58
+ },
59
+ body: JSON.stringify({
60
+ contents: formatted,
61
+ generationConfig: {
62
+ temperature: options?.temperature,
63
+ maxOutputTokens: options?.maxTokens,
64
+ topP: options?.topP,
65
+ topK: options?.topK,
66
+ stopSequences: options?.stopSequences,
67
+ },
68
+ }),
69
+ });
70
+ if (!response.ok) {
71
+ const error = await response.text();
72
+ throw new Error(`Gemini API error: ${response.status} ${error}`);
73
+ }
74
+ if (!response.body) {
75
+ throw new Error('No response body');
76
+ }
77
+ return this.parseStream(response.body);
78
+ }
79
+ formatMessages(messages) {
80
+ // Gemini uses a different format
81
+ return messages.map((msg) => {
82
+ const role = msg.role === 'assistant' ? 'model' : 'user';
83
+ return {
84
+ role,
85
+ parts: [{ text: msg.content }],
86
+ };
87
+ });
88
+ }
89
+ parseResponse(response) {
90
+ const data = response;
91
+ const candidate = data.candidates?.[0];
92
+ const text = candidate?.content?.parts?.map((p) => p.text || '').join('') || '';
93
+ if (!text) {
94
+ throw new Error('Invalid response format from Gemini');
95
+ }
96
+ return {
97
+ content: text,
98
+ usage: data.usageMetadata
99
+ ? {
100
+ promptTokens: data.usageMetadata.promptTokenCount ?? 0,
101
+ completionTokens: data.usageMetadata.candidatesTokenCount ?? 0,
102
+ totalTokens: data.usageMetadata.totalTokenCount ?? 0,
103
+ }
104
+ : undefined,
105
+ finishReason: candidate?.finishReason,
106
+ };
107
+ }
108
+ parseStream(stream) {
109
+ const reader = stream.getReader();
110
+ const decoder = new TextDecoder();
111
+ return new ReadableStream({
112
+ async start(controller) {
113
+ try {
114
+ while (true) {
115
+ const { done, value } = await reader.read();
116
+ if (done) {
117
+ controller.close();
118
+ break;
119
+ }
120
+ const chunk = decoder.decode(value);
121
+ const lines = chunk.split('\n').filter((line) => line.trim());
122
+ for (const line of lines) {
123
+ if (line.startsWith('data: ')) {
124
+ const data = line.slice(6);
125
+ if (data === '[DONE]') {
126
+ controller.close();
127
+ return;
128
+ }
129
+ try {
130
+ const parsed = JSON.parse(data);
131
+ const candidate = parsed.candidates?.[0];
132
+ const content = candidate?.content;
133
+ if (content?.parts) {
134
+ const text = content.parts
135
+ .map((p) => p.text || '')
136
+ .join('');
137
+ if (text) {
138
+ controller.enqueue({
139
+ content: text,
140
+ done: false,
141
+ finishReason: candidate?.finishReason,
142
+ });
143
+ }
144
+ }
145
+ if (candidate?.finishReason) {
146
+ controller.enqueue({
147
+ content: '',
148
+ done: true,
149
+ finishReason: candidate.finishReason,
150
+ usage: parsed.usageMetadata
151
+ ? {
152
+ promptTokens: parsed.usageMetadata.promptTokenCount,
153
+ completionTokens: parsed.usageMetadata.candidatesTokenCount,
154
+ totalTokens: parsed.usageMetadata.totalTokenCount,
155
+ }
156
+ : undefined,
157
+ });
158
+ controller.close();
159
+ return;
160
+ }
161
+ }
162
+ catch {
163
+ // Skip invalid JSON
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ catch (error) {
170
+ controller.error(error);
171
+ }
172
+ finally {
173
+ reader.releaseLock();
174
+ }
175
+ },
176
+ });
177
+ }
178
+ }
179
+ exports.GeminiProvider = GeminiProvider;
180
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/providers/gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Groq provider implementation
3
+ */
4
+ import { BaseProvider } from './base.js';
5
+ import type { ChatMessage, ChatOptions, ChatResponse, ChatChunk, ProviderHealth, ProviderMetadata } from '../core/types.js';
6
+ export interface GroqProviderConfig {
7
+ id: string;
8
+ apiKey: string;
9
+ model?: string;
10
+ baseURL?: string;
11
+ }
12
+ export declare class GroqProvider extends BaseProvider {
13
+ readonly id: string;
14
+ readonly metadata: ProviderMetadata;
15
+ private apiKey;
16
+ private model;
17
+ private baseURL;
18
+ constructor(config: GroqProviderConfig);
19
+ checkHealth(): Promise<ProviderHealth>;
20
+ chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
21
+ chatStream(messages: ChatMessage[], options?: ChatOptions): Promise<ReadableStream<ChatChunk>>;
22
+ protected formatMessages(messages: ChatMessage[]): unknown;
23
+ protected parseResponse(response: unknown): ChatResponse;
24
+ protected parseStream(stream: ReadableStream<unknown>): ReadableStream<ChatChunk>;
25
+ }
26
+ //# sourceMappingURL=groq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groq.d.ts","sourceRoot":"","sources":["../../../src/providers/groq.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,kBAAkB;IAehC,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC;IA2CtC,IAAI,CACR,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,YAAY,CAAC;IAoDlB,UAAU,CACd,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAwDrC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO;IAO1D,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,YAAY;IAiCxD,SAAS,CAAC,WAAW,CACnB,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,GAC9B,cAAc,CAAC,SAAS,CAAC;CAoE7B"}
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ /**
3
+ * Groq provider implementation
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GroqProvider = void 0;
7
+ const base_js_1 = require("./base.js");
8
+ class GroqProvider extends base_js_1.BaseProvider {
9
+ constructor(config) {
10
+ super();
11
+ this.id = config.id;
12
+ this.apiKey = config.apiKey;
13
+ // Updated default model - llama-3.1-70b-versatile was decommissioned
14
+ this.model = config.model || 'llama-3.3-70b-versatile';
15
+ this.baseURL = config.baseURL || 'https://api.groq.com/openai/v1';
16
+ this.metadata = {
17
+ id: this.id,
18
+ name: 'Groq',
19
+ model: this.model,
20
+ };
21
+ }
22
+ async checkHealth() {
23
+ // Groq-specific health check that doesn't use unsupported options
24
+ try {
25
+ const start = Date.now();
26
+ // Groq health check with minimal request (no maxTokens in options)
27
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
28
+ method: 'POST',
29
+ headers: {
30
+ 'Content-Type': 'application/json',
31
+ Authorization: `Bearer ${this.apiKey}`,
32
+ },
33
+ body: JSON.stringify({
34
+ model: this.model,
35
+ messages: [{ role: 'user', content: 'ping' }],
36
+ max_tokens: 5, // Groq uses max_tokens (snake_case)
37
+ temperature: 0,
38
+ }),
39
+ });
40
+ if (!response.ok) {
41
+ const error = await response.text();
42
+ return {
43
+ healthy: false,
44
+ lastChecked: new Date(),
45
+ error: `Groq API error: ${response.status} ${error}`,
46
+ };
47
+ }
48
+ const latency = Date.now() - start;
49
+ return {
50
+ healthy: true,
51
+ latency,
52
+ lastChecked: new Date(),
53
+ };
54
+ }
55
+ catch (error) {
56
+ return {
57
+ healthy: false,
58
+ lastChecked: new Date(),
59
+ error: error instanceof Error ? error.message : String(error),
60
+ };
61
+ }
62
+ }
63
+ async chat(messages, options) {
64
+ // Build request body, converting camelCase to snake_case for Groq API
65
+ const requestBody = {
66
+ model: this.model,
67
+ messages: this.formatMessages(messages),
68
+ };
69
+ // Add options, converting camelCase to snake_case
70
+ if (options?.temperature !== undefined)
71
+ requestBody.temperature = options.temperature;
72
+ if (options?.maxTokens !== undefined)
73
+ requestBody.max_tokens = options.maxTokens;
74
+ if (options?.topP !== undefined)
75
+ requestBody.top_p = options.topP;
76
+ if (options?.stopSequences !== undefined)
77
+ requestBody.stop = options.stopSequences;
78
+ if (options?.frequencyPenalty !== undefined)
79
+ requestBody.frequency_penalty = options.frequencyPenalty;
80
+ if (options?.presencePenalty !== undefined)
81
+ requestBody.presence_penalty = options.presencePenalty;
82
+ if (options?.seed !== undefined && options.seed !== null)
83
+ requestBody.seed = options.seed;
84
+ if (options?.user !== undefined)
85
+ requestBody.user = options.user;
86
+ // Exclude framework-specific options that shouldn't be sent to the API
87
+ const { maxTokens, topP, stopSequences, responseLanguage, timeout, frequencyPenalty, presencePenalty, seed, user, ...restOptions } = options || {};
88
+ // Add any additional provider-specific options
89
+ Object.assign(requestBody, restOptions);
90
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
91
+ method: 'POST',
92
+ headers: {
93
+ 'Content-Type': 'application/json',
94
+ Authorization: `Bearer ${this.apiKey}`,
95
+ },
96
+ body: JSON.stringify(requestBody),
97
+ });
98
+ if (!response.ok) {
99
+ const error = await response.text();
100
+ throw new Error(`Groq API error: ${response.status} ${error}`);
101
+ }
102
+ const data = await response.json();
103
+ return this.parseResponse(data);
104
+ }
105
+ async chatStream(messages, options) {
106
+ // Build request body, converting camelCase to snake_case for Groq API
107
+ const requestBody = {
108
+ model: this.model,
109
+ messages: this.formatMessages(messages),
110
+ stream: true,
111
+ };
112
+ // Add options, converting camelCase to snake_case
113
+ if (options?.temperature !== undefined)
114
+ requestBody.temperature = options.temperature;
115
+ if (options?.maxTokens !== undefined)
116
+ requestBody.max_tokens = options.maxTokens;
117
+ if (options?.topP !== undefined)
118
+ requestBody.top_p = options.topP;
119
+ if (options?.stopSequences !== undefined)
120
+ requestBody.stop = options.stopSequences;
121
+ if (options?.frequencyPenalty !== undefined)
122
+ requestBody.frequency_penalty = options.frequencyPenalty;
123
+ if (options?.presencePenalty !== undefined)
124
+ requestBody.presence_penalty = options.presencePenalty;
125
+ if (options?.seed !== undefined && options.seed !== null)
126
+ requestBody.seed = options.seed;
127
+ if (options?.user !== undefined)
128
+ requestBody.user = options.user;
129
+ // Exclude framework-specific options that shouldn't be sent to the API
130
+ const { maxTokens, topP, stopSequences, responseLanguage, timeout, frequencyPenalty, presencePenalty, seed, user, ...restOptions } = options || {};
131
+ // Add any additional provider-specific options
132
+ Object.assign(requestBody, restOptions);
133
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
134
+ method: 'POST',
135
+ headers: {
136
+ 'Content-Type': 'application/json',
137
+ Authorization: `Bearer ${this.apiKey}`,
138
+ },
139
+ body: JSON.stringify(requestBody),
140
+ });
141
+ if (!response.ok) {
142
+ const error = await response.text();
143
+ throw new Error(`Groq API error: ${response.status} ${error}`);
144
+ }
145
+ if (!response.body) {
146
+ throw new Error('No response body');
147
+ }
148
+ return this.parseStream(response.body);
149
+ }
150
+ formatMessages(messages) {
151
+ return messages.map((msg) => ({
152
+ role: msg.role,
153
+ content: msg.content,
154
+ }));
155
+ }
156
+ parseResponse(response) {
157
+ const data = response;
158
+ const choice = data.choices?.[0];
159
+ if (!choice?.message?.content) {
160
+ throw new Error('Invalid response format from Groq');
161
+ }
162
+ return {
163
+ content: choice.message.content,
164
+ usage: data.usage
165
+ ? {
166
+ promptTokens: data.usage.prompt_tokens ?? 0,
167
+ completionTokens: data.usage.completion_tokens ?? 0,
168
+ totalTokens: data.usage.total_tokens ?? 0,
169
+ }
170
+ : undefined,
171
+ model: data.model,
172
+ finishReason: choice.finish_reason,
173
+ };
174
+ }
175
+ parseStream(stream) {
176
+ const reader = stream.getReader();
177
+ const decoder = new TextDecoder();
178
+ return new ReadableStream({
179
+ async start(controller) {
180
+ try {
181
+ while (true) {
182
+ const { done, value } = await reader.read();
183
+ if (done) {
184
+ controller.close();
185
+ break;
186
+ }
187
+ const chunk = decoder.decode(value);
188
+ const lines = chunk.split('\n').filter((line) => line.trim());
189
+ for (const line of lines) {
190
+ if (line.startsWith('data: ')) {
191
+ const data = line.slice(6);
192
+ if (data === '[DONE]') {
193
+ controller.close();
194
+ return;
195
+ }
196
+ try {
197
+ const parsed = JSON.parse(data);
198
+ const choice = parsed.choices?.[0];
199
+ const delta = choice?.delta;
200
+ if (delta?.content) {
201
+ controller.enqueue({
202
+ content: delta.content,
203
+ done: false,
204
+ finishReason: choice?.finish_reason,
205
+ });
206
+ }
207
+ if (choice?.finish_reason) {
208
+ controller.enqueue({
209
+ content: '',
210
+ done: true,
211
+ finishReason: choice.finish_reason,
212
+ usage: parsed.usage
213
+ ? {
214
+ promptTokens: parsed.usage.prompt_tokens,
215
+ completionTokens: parsed.usage.completion_tokens,
216
+ totalTokens: parsed.usage.total_tokens,
217
+ }
218
+ : undefined,
219
+ });
220
+ controller.close();
221
+ return;
222
+ }
223
+ }
224
+ catch {
225
+ // Skip invalid JSON
226
+ }
227
+ }
228
+ }
229
+ }
230
+ }
231
+ catch (error) {
232
+ controller.error(error);
233
+ }
234
+ finally {
235
+ reader.releaseLock();
236
+ }
237
+ },
238
+ });
239
+ }
240
+ }
241
+ exports.GroqProvider = GroqProvider;
242
+ //# sourceMappingURL=groq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groq.js","sourceRoot":"","sources":["../../../src/providers/groq.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Export all providers
3
+ */
4
+ export { BaseProvider } from './base.js';
5
+ export { GroqProvider } from './groq.js';
6
+ export type { GroqProviderConfig } from './groq.js';
7
+ export { OpenRouterProvider } from './openrouter.js';
8
+ export type { OpenRouterProviderConfig } from './openrouter.js';
9
+ export { GeminiProvider } from './gemini.js';
10
+ export type { GeminiProviderConfig } from './gemini.js';
11
+ export { CerebrasProvider } from './cerebras.js';
12
+ export type { CerebrasProviderConfig } from './cerebras.js';
13
+ export { LocalProvider } from './local.js';
14
+ export type { LocalProviderConfig } from './local.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * Export all providers
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LocalProvider = exports.CerebrasProvider = exports.GeminiProvider = exports.OpenRouterProvider = exports.GroqProvider = exports.BaseProvider = void 0;
7
+ var base_js_1 = require("./base.js");
8
+ Object.defineProperty(exports, "BaseProvider", { enumerable: true, get: function () { return base_js_1.BaseProvider; } });
9
+ var groq_js_1 = require("./groq.js");
10
+ Object.defineProperty(exports, "GroqProvider", { enumerable: true, get: function () { return groq_js_1.GroqProvider; } });
11
+ var openrouter_js_1 = require("./openrouter.js");
12
+ Object.defineProperty(exports, "OpenRouterProvider", { enumerable: true, get: function () { return openrouter_js_1.OpenRouterProvider; } });
13
+ var gemini_js_1 = require("./gemini.js");
14
+ Object.defineProperty(exports, "GeminiProvider", { enumerable: true, get: function () { return gemini_js_1.GeminiProvider; } });
15
+ var cerebras_js_1 = require("./cerebras.js");
16
+ Object.defineProperty(exports, "CerebrasProvider", { enumerable: true, get: function () { return cerebras_js_1.CerebrasProvider; } });
17
+ var local_js_1 = require("./local.js");
18
+ Object.defineProperty(exports, "LocalProvider", { enumerable: true, get: function () { return local_js_1.LocalProvider; } });
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AACrB,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AAErB,iDAAqD;AAA5C,mHAAA,kBAAkB,OAAA;AAE3B,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AAEvB,6CAAiD;AAAxC,+GAAA,gBAAgB,OAAA;AAEzB,uCAA2C;AAAlC,yGAAA,aAAa,OAAA"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Local provider implementation (for local models via HTTP API)
3
+ */
4
+ import { BaseProvider } from './base.js';
5
+ import type { ChatMessage, ChatOptions, ChatResponse, ChatChunk, ProviderHealth, ProviderMetadata } from '../core/types.js';
6
+ export interface LocalProviderConfig {
7
+ id: string;
8
+ baseURL: string;
9
+ model?: string;
10
+ apiKey?: string;
11
+ }
12
+ export declare class LocalProvider extends BaseProvider {
13
+ readonly id: string;
14
+ readonly metadata: ProviderMetadata;
15
+ private baseURL;
16
+ private model?;
17
+ private apiKey?;
18
+ constructor(config: LocalProviderConfig);
19
+ checkHealth(): Promise<ProviderHealth>;
20
+ chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
21
+ chatStream(messages: ChatMessage[], options?: ChatOptions): Promise<ReadableStream<ChatChunk>>;
22
+ protected formatMessages(messages: ChatMessage[]): unknown;
23
+ protected parseResponse(response: unknown): ChatResponse;
24
+ protected parseStream(stream: ReadableStream<unknown>): ReadableStream<ChatChunk>;
25
+ private getHeaders;
26
+ }
27
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/providers/local.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,EAAE,mBAAmB;IAcjC,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC;IAgCtC,IAAI,CACR,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,YAAY,CAAC;IAgClB,UAAU,CACd,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IA4BrC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO;IAO1D,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,YAAY;IAiCxD,SAAS,CAAC,WAAW,CACnB,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,GAC9B,cAAc,CAAC,SAAS,CAAC;IAqE5B,OAAO,CAAC,UAAU;CAWnB"}