@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,176 @@
1
+ /**
2
+ * Google Gemini provider implementation
3
+ */
4
+ import { BaseProvider } from './base.js';
5
+ export class GeminiProvider extends BaseProvider {
6
+ constructor(config) {
7
+ super();
8
+ this.id = config.id;
9
+ this.apiKey = config.apiKey;
10
+ this.model = config.model || 'gemini-pro';
11
+ this.baseURL =
12
+ config.baseURL || 'https://generativelanguage.googleapis.com/v1beta';
13
+ this.metadata = {
14
+ id: this.id,
15
+ name: 'Google Gemini',
16
+ model: this.model,
17
+ };
18
+ }
19
+ async checkHealth() {
20
+ return this.defaultHealthCheck();
21
+ }
22
+ async chat(messages, options) {
23
+ const formatted = this.formatMessages(messages);
24
+ const url = `${this.baseURL}/models/${this.model}:generateContent?key=${this.apiKey}`;
25
+ const response = await fetch(url, {
26
+ method: 'POST',
27
+ headers: {
28
+ 'Content-Type': 'application/json',
29
+ },
30
+ body: JSON.stringify({
31
+ contents: formatted,
32
+ generationConfig: {
33
+ temperature: options?.temperature,
34
+ maxOutputTokens: options?.maxTokens,
35
+ topP: options?.topP,
36
+ topK: options?.topK,
37
+ stopSequences: options?.stopSequences,
38
+ },
39
+ }),
40
+ });
41
+ if (!response.ok) {
42
+ const error = await response.text();
43
+ throw new Error(`Gemini API error: ${response.status} ${error}`);
44
+ }
45
+ const data = await response.json();
46
+ return this.parseResponse(data);
47
+ }
48
+ async chatStream(messages, options) {
49
+ const formatted = this.formatMessages(messages);
50
+ const url = `${this.baseURL}/models/${this.model}:streamGenerateContent?key=${this.apiKey}`;
51
+ const response = await fetch(url, {
52
+ method: 'POST',
53
+ headers: {
54
+ 'Content-Type': 'application/json',
55
+ },
56
+ body: JSON.stringify({
57
+ contents: formatted,
58
+ generationConfig: {
59
+ temperature: options?.temperature,
60
+ maxOutputTokens: options?.maxTokens,
61
+ topP: options?.topP,
62
+ topK: options?.topK,
63
+ stopSequences: options?.stopSequences,
64
+ },
65
+ }),
66
+ });
67
+ if (!response.ok) {
68
+ const error = await response.text();
69
+ throw new Error(`Gemini API error: ${response.status} ${error}`);
70
+ }
71
+ if (!response.body) {
72
+ throw new Error('No response body');
73
+ }
74
+ return this.parseStream(response.body);
75
+ }
76
+ formatMessages(messages) {
77
+ // Gemini uses a different format
78
+ return messages.map((msg) => {
79
+ const role = msg.role === 'assistant' ? 'model' : 'user';
80
+ return {
81
+ role,
82
+ parts: [{ text: msg.content }],
83
+ };
84
+ });
85
+ }
86
+ parseResponse(response) {
87
+ const data = response;
88
+ const candidate = data.candidates?.[0];
89
+ const text = candidate?.content?.parts?.map((p) => p.text || '').join('') || '';
90
+ if (!text) {
91
+ throw new Error('Invalid response format from Gemini');
92
+ }
93
+ return {
94
+ content: text,
95
+ usage: data.usageMetadata
96
+ ? {
97
+ promptTokens: data.usageMetadata.promptTokenCount ?? 0,
98
+ completionTokens: data.usageMetadata.candidatesTokenCount ?? 0,
99
+ totalTokens: data.usageMetadata.totalTokenCount ?? 0,
100
+ }
101
+ : undefined,
102
+ finishReason: candidate?.finishReason,
103
+ };
104
+ }
105
+ parseStream(stream) {
106
+ const reader = stream.getReader();
107
+ const decoder = new TextDecoder();
108
+ return new ReadableStream({
109
+ async start(controller) {
110
+ try {
111
+ while (true) {
112
+ const { done, value } = await reader.read();
113
+ if (done) {
114
+ controller.close();
115
+ break;
116
+ }
117
+ const chunk = decoder.decode(value);
118
+ const lines = chunk.split('\n').filter((line) => line.trim());
119
+ for (const line of lines) {
120
+ if (line.startsWith('data: ')) {
121
+ const data = line.slice(6);
122
+ if (data === '[DONE]') {
123
+ controller.close();
124
+ return;
125
+ }
126
+ try {
127
+ const parsed = JSON.parse(data);
128
+ const candidate = parsed.candidates?.[0];
129
+ const content = candidate?.content;
130
+ if (content?.parts) {
131
+ const text = content.parts
132
+ .map((p) => p.text || '')
133
+ .join('');
134
+ if (text) {
135
+ controller.enqueue({
136
+ content: text,
137
+ done: false,
138
+ finishReason: candidate?.finishReason,
139
+ });
140
+ }
141
+ }
142
+ if (candidate?.finishReason) {
143
+ controller.enqueue({
144
+ content: '',
145
+ done: true,
146
+ finishReason: candidate.finishReason,
147
+ usage: parsed.usageMetadata
148
+ ? {
149
+ promptTokens: parsed.usageMetadata.promptTokenCount,
150
+ completionTokens: parsed.usageMetadata.candidatesTokenCount,
151
+ totalTokens: parsed.usageMetadata.totalTokenCount,
152
+ }
153
+ : undefined,
154
+ });
155
+ controller.close();
156
+ return;
157
+ }
158
+ }
159
+ catch {
160
+ // Skip invalid JSON
161
+ }
162
+ }
163
+ }
164
+ }
165
+ }
166
+ catch (error) {
167
+ controller.error(error);
168
+ }
169
+ finally {
170
+ reader.releaseLock();
171
+ }
172
+ },
173
+ });
174
+ }
175
+ }
176
+ //# 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,238 @@
1
+ /**
2
+ * Groq provider implementation
3
+ */
4
+ import { BaseProvider } from './base.js';
5
+ export class GroqProvider extends BaseProvider {
6
+ constructor(config) {
7
+ super();
8
+ this.id = config.id;
9
+ this.apiKey = config.apiKey;
10
+ // Updated default model - llama-3.1-70b-versatile was decommissioned
11
+ this.model = config.model || 'llama-3.3-70b-versatile';
12
+ this.baseURL = config.baseURL || 'https://api.groq.com/openai/v1';
13
+ this.metadata = {
14
+ id: this.id,
15
+ name: 'Groq',
16
+ model: this.model,
17
+ };
18
+ }
19
+ async checkHealth() {
20
+ // Groq-specific health check that doesn't use unsupported options
21
+ try {
22
+ const start = Date.now();
23
+ // Groq health check with minimal request (no maxTokens in options)
24
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
25
+ method: 'POST',
26
+ headers: {
27
+ 'Content-Type': 'application/json',
28
+ Authorization: `Bearer ${this.apiKey}`,
29
+ },
30
+ body: JSON.stringify({
31
+ model: this.model,
32
+ messages: [{ role: 'user', content: 'ping' }],
33
+ max_tokens: 5, // Groq uses max_tokens (snake_case)
34
+ temperature: 0,
35
+ }),
36
+ });
37
+ if (!response.ok) {
38
+ const error = await response.text();
39
+ return {
40
+ healthy: false,
41
+ lastChecked: new Date(),
42
+ error: `Groq API error: ${response.status} ${error}`,
43
+ };
44
+ }
45
+ const latency = Date.now() - start;
46
+ return {
47
+ healthy: true,
48
+ latency,
49
+ lastChecked: new Date(),
50
+ };
51
+ }
52
+ catch (error) {
53
+ return {
54
+ healthy: false,
55
+ lastChecked: new Date(),
56
+ error: error instanceof Error ? error.message : String(error),
57
+ };
58
+ }
59
+ }
60
+ async chat(messages, options) {
61
+ // Build request body, converting camelCase to snake_case for Groq API
62
+ const requestBody = {
63
+ model: this.model,
64
+ messages: this.formatMessages(messages),
65
+ };
66
+ // Add options, converting camelCase to snake_case
67
+ if (options?.temperature !== undefined)
68
+ requestBody.temperature = options.temperature;
69
+ if (options?.maxTokens !== undefined)
70
+ requestBody.max_tokens = options.maxTokens;
71
+ if (options?.topP !== undefined)
72
+ requestBody.top_p = options.topP;
73
+ if (options?.stopSequences !== undefined)
74
+ requestBody.stop = options.stopSequences;
75
+ if (options?.frequencyPenalty !== undefined)
76
+ requestBody.frequency_penalty = options.frequencyPenalty;
77
+ if (options?.presencePenalty !== undefined)
78
+ requestBody.presence_penalty = options.presencePenalty;
79
+ if (options?.seed !== undefined && options.seed !== null)
80
+ requestBody.seed = options.seed;
81
+ if (options?.user !== undefined)
82
+ requestBody.user = options.user;
83
+ // Exclude framework-specific options that shouldn't be sent to the API
84
+ const { maxTokens, topP, stopSequences, responseLanguage, timeout, frequencyPenalty, presencePenalty, seed, user, ...restOptions } = options || {};
85
+ // Add any additional provider-specific options
86
+ Object.assign(requestBody, restOptions);
87
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
88
+ method: 'POST',
89
+ headers: {
90
+ 'Content-Type': 'application/json',
91
+ Authorization: `Bearer ${this.apiKey}`,
92
+ },
93
+ body: JSON.stringify(requestBody),
94
+ });
95
+ if (!response.ok) {
96
+ const error = await response.text();
97
+ throw new Error(`Groq API error: ${response.status} ${error}`);
98
+ }
99
+ const data = await response.json();
100
+ return this.parseResponse(data);
101
+ }
102
+ async chatStream(messages, options) {
103
+ // Build request body, converting camelCase to snake_case for Groq API
104
+ const requestBody = {
105
+ model: this.model,
106
+ messages: this.formatMessages(messages),
107
+ stream: true,
108
+ };
109
+ // Add options, converting camelCase to snake_case
110
+ if (options?.temperature !== undefined)
111
+ requestBody.temperature = options.temperature;
112
+ if (options?.maxTokens !== undefined)
113
+ requestBody.max_tokens = options.maxTokens;
114
+ if (options?.topP !== undefined)
115
+ requestBody.top_p = options.topP;
116
+ if (options?.stopSequences !== undefined)
117
+ requestBody.stop = options.stopSequences;
118
+ if (options?.frequencyPenalty !== undefined)
119
+ requestBody.frequency_penalty = options.frequencyPenalty;
120
+ if (options?.presencePenalty !== undefined)
121
+ requestBody.presence_penalty = options.presencePenalty;
122
+ if (options?.seed !== undefined && options.seed !== null)
123
+ requestBody.seed = options.seed;
124
+ if (options?.user !== undefined)
125
+ requestBody.user = options.user;
126
+ // Exclude framework-specific options that shouldn't be sent to the API
127
+ const { maxTokens, topP, stopSequences, responseLanguage, timeout, frequencyPenalty, presencePenalty, seed, user, ...restOptions } = options || {};
128
+ // Add any additional provider-specific options
129
+ Object.assign(requestBody, restOptions);
130
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
131
+ method: 'POST',
132
+ headers: {
133
+ 'Content-Type': 'application/json',
134
+ Authorization: `Bearer ${this.apiKey}`,
135
+ },
136
+ body: JSON.stringify(requestBody),
137
+ });
138
+ if (!response.ok) {
139
+ const error = await response.text();
140
+ throw new Error(`Groq API error: ${response.status} ${error}`);
141
+ }
142
+ if (!response.body) {
143
+ throw new Error('No response body');
144
+ }
145
+ return this.parseStream(response.body);
146
+ }
147
+ formatMessages(messages) {
148
+ return messages.map((msg) => ({
149
+ role: msg.role,
150
+ content: msg.content,
151
+ }));
152
+ }
153
+ parseResponse(response) {
154
+ const data = response;
155
+ const choice = data.choices?.[0];
156
+ if (!choice?.message?.content) {
157
+ throw new Error('Invalid response format from Groq');
158
+ }
159
+ return {
160
+ content: choice.message.content,
161
+ usage: data.usage
162
+ ? {
163
+ promptTokens: data.usage.prompt_tokens ?? 0,
164
+ completionTokens: data.usage.completion_tokens ?? 0,
165
+ totalTokens: data.usage.total_tokens ?? 0,
166
+ }
167
+ : undefined,
168
+ model: data.model,
169
+ finishReason: choice.finish_reason,
170
+ };
171
+ }
172
+ parseStream(stream) {
173
+ const reader = stream.getReader();
174
+ const decoder = new TextDecoder();
175
+ return new ReadableStream({
176
+ async start(controller) {
177
+ try {
178
+ while (true) {
179
+ const { done, value } = await reader.read();
180
+ if (done) {
181
+ controller.close();
182
+ break;
183
+ }
184
+ const chunk = decoder.decode(value);
185
+ const lines = chunk.split('\n').filter((line) => line.trim());
186
+ for (const line of lines) {
187
+ if (line.startsWith('data: ')) {
188
+ const data = line.slice(6);
189
+ if (data === '[DONE]') {
190
+ controller.close();
191
+ return;
192
+ }
193
+ try {
194
+ const parsed = JSON.parse(data);
195
+ const choice = parsed.choices?.[0];
196
+ const delta = choice?.delta;
197
+ if (delta?.content) {
198
+ controller.enqueue({
199
+ content: delta.content,
200
+ done: false,
201
+ finishReason: choice?.finish_reason,
202
+ });
203
+ }
204
+ if (choice?.finish_reason) {
205
+ controller.enqueue({
206
+ content: '',
207
+ done: true,
208
+ finishReason: choice.finish_reason,
209
+ usage: parsed.usage
210
+ ? {
211
+ promptTokens: parsed.usage.prompt_tokens,
212
+ completionTokens: parsed.usage.completion_tokens,
213
+ totalTokens: parsed.usage.total_tokens,
214
+ }
215
+ : undefined,
216
+ });
217
+ controller.close();
218
+ return;
219
+ }
220
+ }
221
+ catch {
222
+ // Skip invalid JSON
223
+ }
224
+ }
225
+ }
226
+ }
227
+ }
228
+ catch (error) {
229
+ controller.error(error);
230
+ }
231
+ finally {
232
+ reader.releaseLock();
233
+ }
234
+ },
235
+ });
236
+ }
237
+ }
238
+ //# 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,10 @@
1
+ /**
2
+ * Export all providers
3
+ */
4
+ export { BaseProvider } from './base.js';
5
+ export { GroqProvider } from './groq.js';
6
+ export { OpenRouterProvider } from './openrouter.js';
7
+ export { GeminiProvider } from './gemini.js';
8
+ export { CerebrasProvider } from './cerebras.js';
9
+ export { LocalProvider } from './local.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","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;AAEzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -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"}