@hilbras/omnihilbras 0.1.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 (54) hide show
  1. package/README.md +57 -0
  2. package/dist/adapters/anthropic.d.ts +38 -0
  3. package/dist/adapters/anthropic.d.ts.map +1 -0
  4. package/dist/adapters/anthropic.js +298 -0
  5. package/dist/adapters/anthropic.js.map +1 -0
  6. package/dist/adapters/gemini.d.ts +35 -0
  7. package/dist/adapters/gemini.d.ts.map +1 -0
  8. package/dist/adapters/gemini.js +322 -0
  9. package/dist/adapters/gemini.js.map +1 -0
  10. package/dist/adapters/openai-compatible.d.ts +52 -0
  11. package/dist/adapters/openai-compatible.d.ts.map +1 -0
  12. package/dist/adapters/openai-compatible.js +246 -0
  13. package/dist/adapters/openai-compatible.js.map +1 -0
  14. package/dist/adapters/openai.d.ts +10 -0
  15. package/dist/adapters/openai.d.ts.map +1 -0
  16. package/dist/adapters/openai.js +17 -0
  17. package/dist/adapters/openai.js.map +1 -0
  18. package/dist/adapters/openrouter.d.ts +32 -0
  19. package/dist/adapters/openrouter.d.ts.map +1 -0
  20. package/dist/adapters/openrouter.js +171 -0
  21. package/dist/adapters/openrouter.js.map +1 -0
  22. package/dist/errors.d.ts +28 -0
  23. package/dist/errors.d.ts.map +1 -0
  24. package/dist/errors.js +60 -0
  25. package/dist/errors.js.map +1 -0
  26. package/dist/index.d.ts +13 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +13 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/registry.d.ts +12 -0
  31. package/dist/registry.d.ts.map +1 -0
  32. package/dist/registry.js +45 -0
  33. package/dist/registry.js.map +1 -0
  34. package/dist/secret-store.d.ts +12 -0
  35. package/dist/secret-store.d.ts.map +1 -0
  36. package/dist/secret-store.js +18 -0
  37. package/dist/secret-store.js.map +1 -0
  38. package/dist/streaming.d.ts +11 -0
  39. package/dist/streaming.d.ts.map +1 -0
  40. package/dist/streaming.js +87 -0
  41. package/dist/streaming.js.map +1 -0
  42. package/dist/transport.d.ts +44 -0
  43. package/dist/transport.d.ts.map +1 -0
  44. package/dist/transport.js +239 -0
  45. package/dist/transport.js.map +1 -0
  46. package/dist/types.d.ts +132 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/url.d.ts +12 -0
  51. package/dist/url.d.ts.map +1 -0
  52. package/dist/url.js +104 -0
  53. package/dist/url.js.map +1 -0
  54. package/package.json +57 -0
package/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # @hilbras/omnihilbras
2
+
3
+ Typed provider SDK for the [OmniHilbras](https://github.com/Hilbras/OmniHilbras)
4
+ gateway. One normalized contract for chat, streaming, model listing, and
5
+ capabilities across OpenAI, Anthropic, Gemini, OpenRouter, and any
6
+ OpenAI-compatible endpoint.
7
+
8
+ ```bash
9
+ npm i @hilbras/omnihilbras
10
+ ```
11
+
12
+ Requires Node.js 20 or newer. Ships ESM only.
13
+
14
+ ## Quick start
15
+
16
+ ```ts
17
+ import { AnthropicAdapter, FetchHttpTransport, GeminiAdapter, OpenAIAdapter, ProviderRegistry } from '@hilbras/omnihilbras';
18
+
19
+ const registry = new ProviderRegistry();
20
+ registry.register(new OpenAIAdapter({ baseUrl: 'https://api.openai.com/v1' }));
21
+ registry.register(new AnthropicAdapter({ baseUrl: 'https://api.anthropic.com' }));
22
+ registry.register(new GeminiAdapter({ baseUrl: 'https://generativelanguage.googleapis.com/v1beta' }));
23
+
24
+ const adapter = registry.require('openai');
25
+ const response = await adapter.chat(
26
+ { model: 'gpt-4.1-mini', messages: [{ role: 'user', content: 'Hello' }] },
27
+ { credential: { type: 'api-key', value: process.env.OPENAI_API_KEY! } },
28
+ );
29
+ ```
30
+
31
+ ## What you get
32
+
33
+ - **Normalized types** for `ChatRequest`, `ChatResponse`, `ChatChunk`, and `Model`,
34
+ so application code never branches on provider wire formats.
35
+ - **`AsyncIterable` streaming.** Native SSE for each provider is normalized into
36
+ the same chunk stream, and a stream that ends without a terminal finish reason
37
+ is rejected instead of silently truncating.
38
+ - **A capability registry.** Adapters declare what they support; the registry
39
+ refuses an adapter that claims a capability it does not implement, and
40
+ `registry.require()` throws a typed error for an unknown provider.
41
+ - **One error type.** `ProviderError` carries a code, provider, HTTP status, and
42
+ a `retryable` flag, with a public message that never includes provider response
43
+ bodies or credentials.
44
+ - **Transport controls.** Timeouts, cancellation, response and stream size caps,
45
+ no redirect following, and provider URL validation.
46
+ - **A credential abstraction.** `SecretStore` keeps provider keys out of your
47
+ call sites.
48
+
49
+ ```ts
50
+ for await (const chunk of adapter.streamChat(request, context)) {
51
+ process.stdout.write(chunk.delta.content ?? '');
52
+ }
53
+ ```
54
+
55
+ ## License
56
+
57
+ MIT. See [LICENSE](https://github.com/Hilbras/OmniHilbras/blob/main/LICENSE).
@@ -0,0 +1,38 @@
1
+ import { type HttpTransport } from '../transport.js';
2
+ import type { ChatChunk, ChatRequest, ChatResponse, Model, ProviderAdapter, ProviderCapabilities, ProviderRequestContext } from '../types.js';
3
+ export type AnthropicAdapterOptions = {
4
+ baseUrl?: string;
5
+ apiVersion?: string;
6
+ defaultMaxTokens?: number;
7
+ headers?: Record<string, string>;
8
+ transport?: HttpTransport;
9
+ timeoutMs?: number;
10
+ };
11
+ export declare class AnthropicAdapter implements ProviderAdapter {
12
+ readonly id = "anthropic";
13
+ readonly name = "Anthropic";
14
+ readonly capabilities: ProviderCapabilities;
15
+ private readonly baseUrl;
16
+ private readonly apiVersion;
17
+ private readonly defaultMaxTokens;
18
+ private readonly defaultHeaders;
19
+ private readonly transport;
20
+ constructor(options?: AnthropicAdapterOptions);
21
+ listModels(context?: ProviderRequestContext): Promise<Model[]>;
22
+ chat(request: ChatRequest, context?: ProviderRequestContext): Promise<ChatResponse>;
23
+ streamChat(request: ChatRequest, context?: ProviderRequestContext): AsyncIterable<ChatChunk>;
24
+ healthCheck(context?: ProviderRequestContext): Promise<{
25
+ status: "healthy";
26
+ latencyMs: number;
27
+ checkedAt: string;
28
+ } | {
29
+ status: "unavailable";
30
+ checkedAt: string;
31
+ latencyMs?: undefined;
32
+ }>;
33
+ private url;
34
+ private requestHeaders;
35
+ private toRequestBody;
36
+ private toChatResponse;
37
+ }
38
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/adapters/anthropic.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,KAAK,EACV,SAAS,EAET,WAAW,EACX,YAAY,EAGZ,KAAK,EACL,eAAe,EACf,oBAAoB,EAEpB,sBAAsB,EAIvB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAoDF,qBAAa,gBAAiB,YAAW,eAAe;IACtD,QAAQ,CAAC,EAAE,eAAe;IAC1B,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAiD;IAC5F,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAE9B,OAAO,GAAE,uBAA4B;IAS3C,UAAU,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAqBlE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,YAAY,CAAC;IAYtF,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAAC,SAAS,CAAC;IA0FjG,WAAW,CAAC,OAAO,GAAE,sBAA2B;;;;;;;;;IAUtD,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,cAAc;CAmCvB"}
@@ -0,0 +1,298 @@
1
+ import { ProviderError } from '../errors.js';
2
+ import { parseSseJson, parseSseStream } from '../streaming.js';
3
+ import { FetchHttpTransport } from '../transport.js';
4
+ import { assertSafeProviderHeaderValue, normalizeProviderBaseUrl, resolveProviderUrl, sanitizeProviderHeaders } from '../url.js';
5
+ const defaultApiVersion = '2023-06-01';
6
+ const defaultMaxTokens = 4096;
7
+ export class AnthropicAdapter {
8
+ id = 'anthropic';
9
+ name = 'Anthropic';
10
+ capabilities = { chat: true, streaming: true, models: true };
11
+ baseUrl;
12
+ apiVersion;
13
+ defaultMaxTokens;
14
+ defaultHeaders;
15
+ transport;
16
+ constructor(options = {}) {
17
+ this.baseUrl = normalizeProviderBaseUrl(options.baseUrl ?? 'https://api.anthropic.com', this.id);
18
+ this.apiVersion = options.apiVersion ?? defaultApiVersion;
19
+ assertSafeProviderHeaderValue('anthropic-version', this.apiVersion, this.id);
20
+ this.defaultMaxTokens = options.defaultMaxTokens ?? defaultMaxTokens;
21
+ this.defaultHeaders = sanitizeProviderHeaders(options.headers, this.id);
22
+ this.transport = options.transport ?? new FetchHttpTransport({ timeoutMs: options.timeoutMs });
23
+ }
24
+ async listModels(context = {}) {
25
+ const url = new URL(this.url('v1/models'));
26
+ url.searchParams.set('limit', '1000');
27
+ const response = await this.transport.request({
28
+ method: 'GET',
29
+ providerId: this.id,
30
+ url: url.toString(),
31
+ headers: this.requestHeaders(context.credential, 'application/json'),
32
+ ...(context.signal ? { signal: context.signal } : {}),
33
+ });
34
+ const data = response.data?.data;
35
+ if (!Array.isArray(data))
36
+ throw invalidResponse(this.id, 'Anthropic model list is missing data.');
37
+ return data.flatMap((model) => model.id ? [{
38
+ id: model.id,
39
+ providerId: this.id,
40
+ displayName: model.display_name,
41
+ contextWindow: model.max_input_tokens,
42
+ }] : []);
43
+ }
44
+ async chat(request, context = {}) {
45
+ const response = await this.transport.request({
46
+ method: 'POST',
47
+ providerId: this.id,
48
+ url: this.url('v1/messages'),
49
+ headers: this.requestHeaders(context.credential, 'application/json'),
50
+ body: JSON.stringify(this.toRequestBody(request, false)),
51
+ ...(context.signal ? { signal: context.signal } : {}),
52
+ });
53
+ return this.toChatResponse(response.data, request.model);
54
+ }
55
+ async *streamChat(request, context = {}) {
56
+ const events = this.transport.stream({
57
+ method: 'POST',
58
+ providerId: this.id,
59
+ url: this.url('v1/messages'),
60
+ headers: this.requestHeaders(context.credential, 'text/event-stream'),
61
+ body: JSON.stringify(this.toRequestBody(request, true)),
62
+ ...(context.signal ? { signal: context.signal } : {}),
63
+ });
64
+ const toolBlocks = new Map();
65
+ let responseId = `stream-${request.model}`;
66
+ let responseModel = request.model;
67
+ let sawPayload = false;
68
+ let sawFinishReason = false;
69
+ let sawMessageStop = false;
70
+ for await (const event of parseSseStream(events)) {
71
+ const payload = parseSseJson(event, this.id);
72
+ if (!payload)
73
+ continue;
74
+ sawPayload = true;
75
+ if (event.event === 'error' || payload.type === 'error') {
76
+ throw new ProviderError('PROVIDER_REQUEST_FAILED', 'The Anthropic stream returned an error.', {
77
+ providerId: this.id,
78
+ });
79
+ }
80
+ if (payload.type === 'message_stop') {
81
+ sawMessageStop = true;
82
+ break;
83
+ }
84
+ if (payload.type === 'message_start') {
85
+ responseId = payload.message?.id ?? responseId;
86
+ responseModel = payload.message?.model ?? responseModel;
87
+ continue;
88
+ }
89
+ if (payload.type === 'content_block_start' && payload.index !== undefined && payload.content_block?.type === 'tool_use') {
90
+ toolBlocks.set(payload.index, { id: payload.content_block.id, name: payload.content_block.name });
91
+ continue;
92
+ }
93
+ if (payload.type === 'content_block_delta' && payload.index !== undefined && payload.delta) {
94
+ const block = toolBlocks.get(payload.index);
95
+ if (payload.delta.type === 'text_delta' && payload.delta.text !== undefined) {
96
+ yield {
97
+ id: responseId,
98
+ providerId: this.id,
99
+ model: responseModel,
100
+ delta: { role: 'assistant', content: payload.delta.text },
101
+ };
102
+ }
103
+ else if (payload.delta.type === 'input_json_delta' && payload.delta.partial_json !== undefined) {
104
+ yield {
105
+ id: responseId,
106
+ providerId: this.id,
107
+ model: responseModel,
108
+ delta: {
109
+ toolCalls: [{
110
+ index: payload.index,
111
+ ...(block?.id ? { id: block.id } : {}),
112
+ ...(block?.name ? { function: { name: block.name, arguments: payload.delta.partial_json } } : { function: { arguments: payload.delta.partial_json } }),
113
+ }],
114
+ },
115
+ };
116
+ }
117
+ continue;
118
+ }
119
+ if (payload.type === 'message_delta') {
120
+ const finishReason = payload.delta?.stop_reason ? normalizeFinishReason(payload.delta.stop_reason) : undefined;
121
+ if (finishReason)
122
+ sawFinishReason = true;
123
+ const usage = payload.usage ? normalizeUsage(payload.usage) : undefined;
124
+ if (finishReason || usage) {
125
+ yield {
126
+ id: responseId,
127
+ providerId: this.id,
128
+ model: responseModel,
129
+ delta: {},
130
+ ...(finishReason ? { finishReason } : {}),
131
+ ...(usage ? { usage } : {}),
132
+ };
133
+ }
134
+ }
135
+ }
136
+ if (!sawPayload || !sawFinishReason || !sawMessageStop) {
137
+ throw new ProviderError('INVALID_RESPONSE', 'The Anthropic stream ended before completion.', { providerId: this.id });
138
+ }
139
+ }
140
+ async healthCheck(context = {}) {
141
+ const startedAt = performance.now();
142
+ try {
143
+ await this.listModels(context);
144
+ return { status: 'healthy', latencyMs: Math.round(performance.now() - startedAt), checkedAt: new Date().toISOString() };
145
+ }
146
+ catch {
147
+ return { status: 'unavailable', checkedAt: new Date().toISOString() };
148
+ }
149
+ }
150
+ url(path) {
151
+ return resolveProviderUrl(this.baseUrl, path, this.id);
152
+ }
153
+ requestHeaders(credential, accept) {
154
+ if (credential?.type !== 'api-key') {
155
+ throw new ProviderError('AUTHENTICATION_FAILED', `Missing API key for provider ${this.id}.`, { providerId: this.id });
156
+ }
157
+ assertSafeProviderHeaderValue('x-api-key', credential.value, this.id);
158
+ return {
159
+ accept,
160
+ ...this.defaultHeaders,
161
+ 'content-type': 'application/json',
162
+ 'anthropic-version': this.apiVersion,
163
+ 'x-api-key': credential.value,
164
+ };
165
+ }
166
+ toRequestBody(request, stream) {
167
+ assertNoProviderOptions(request, this.id);
168
+ const system = request.messages.filter((message) => message.role === 'system').map((message) => contentToText(message.content)).filter(Boolean).join('\n\n');
169
+ const messages = request.messages.filter((message) => message.role !== 'system').map(toAnthropicMessage);
170
+ const body = {
171
+ model: request.model,
172
+ max_tokens: request.maxOutputTokens ?? this.defaultMaxTokens,
173
+ messages,
174
+ stream,
175
+ };
176
+ if (system)
177
+ body.system = system;
178
+ if (request.temperature !== undefined)
179
+ body.temperature = request.temperature;
180
+ if (request.topP !== undefined)
181
+ body.top_p = request.topP;
182
+ if (request.stop !== undefined)
183
+ body.stop_sequences = request.stop;
184
+ if (request.tools !== undefined)
185
+ body.tools = request.tools.map(toAnthropicTool);
186
+ return body;
187
+ }
188
+ toChatResponse(response, requestedModel) {
189
+ const blocks = response.content;
190
+ if (!Array.isArray(blocks))
191
+ throw invalidResponse(this.id, 'Anthropic response is missing content blocks.');
192
+ const text = blocks.filter((block) => block.type === 'text').map((block) => block.text ?? '').join('');
193
+ const toolCalls = blocks.filter((block) => block.type === 'tool_use').map(normalizeToolUse);
194
+ if (!text && toolCalls.length === 0) {
195
+ if (response.stop_reason === 'refusal') {
196
+ return {
197
+ id: response.id ?? `response-${requestedModel}`,
198
+ providerId: this.id,
199
+ model: response.model ?? requestedModel,
200
+ createdAt: new Date().toISOString(),
201
+ message: { role: 'assistant', content: null },
202
+ finishReason: 'content_filter',
203
+ ...(response.usage ? { usage: normalizeUsage(response.usage) } : {}),
204
+ };
205
+ }
206
+ throw invalidResponse(this.id, 'Anthropic response did not contain text or tool use.');
207
+ }
208
+ return {
209
+ id: response.id ?? `response-${requestedModel}`,
210
+ providerId: this.id,
211
+ model: response.model ?? requestedModel,
212
+ createdAt: new Date().toISOString(),
213
+ message: {
214
+ role: 'assistant',
215
+ content: text || null,
216
+ ...(toolCalls.length ? { toolCalls } : {}),
217
+ },
218
+ finishReason: normalizeFinishReason(response.stop_reason),
219
+ ...(response.usage ? { usage: normalizeUsage(response.usage) } : {}),
220
+ };
221
+ }
222
+ }
223
+ function assertNoProviderOptions(request, providerId) {
224
+ if (request.providerOptions && Object.keys(request.providerOptions).length > 0) {
225
+ throw new ProviderError('INVALID_REQUEST', `Provider options are not supported by ${providerId} yet.`, { providerId });
226
+ }
227
+ }
228
+ function toAnthropicMessage(message) {
229
+ if (message.role === 'tool') {
230
+ return {
231
+ role: 'user',
232
+ content: [{ type: 'tool_result', tool_use_id: message.toolCallId ?? '', content: contentToText(message.content) }],
233
+ };
234
+ }
235
+ const content = toAnthropicContent(message.content);
236
+ if (message.role === 'assistant' && message.toolCalls?.length) {
237
+ const toolBlocks = message.toolCalls.map((toolCall) => ({ type: 'tool_use', id: toolCall.id, name: toolCall.function.name, input: parseToolArguments(toolCall.function.arguments) }));
238
+ return { role: message.role, content: [...content, ...toolBlocks] };
239
+ }
240
+ return { role: message.role, content };
241
+ }
242
+ function toAnthropicContent(content) {
243
+ if (typeof content === 'string')
244
+ return [{ type: 'text', text: content }];
245
+ if (content === null)
246
+ return [];
247
+ return content.map((part) => {
248
+ if (part.type === 'text')
249
+ return { type: 'text', text: part.text };
250
+ const dataUrl = part.imageUrl.url.match(/^data:([^;]+);base64,(.+)$/i);
251
+ if (dataUrl)
252
+ return { type: 'image', source: { type: 'base64', media_type: dataUrl[1], data: dataUrl[2] } };
253
+ return { type: 'image', source: { type: 'url', url: part.imageUrl.url } };
254
+ });
255
+ }
256
+ function contentToText(content) {
257
+ if (typeof content === 'string')
258
+ return content;
259
+ if (content === null)
260
+ return '';
261
+ return content.filter((part) => part.type === 'text').map((part) => part.text).join('');
262
+ }
263
+ function toAnthropicTool(tool) {
264
+ return { name: tool.name, description: tool.description, input_schema: tool.parameters };
265
+ }
266
+ function parseToolArguments(value) {
267
+ try {
268
+ return JSON.parse(value);
269
+ }
270
+ catch {
271
+ return {};
272
+ }
273
+ }
274
+ function normalizeToolUse(block) {
275
+ return {
276
+ id: block.id ?? '',
277
+ type: 'function',
278
+ function: { name: block.name ?? '', arguments: JSON.stringify(block.input ?? {}) },
279
+ };
280
+ }
281
+ function normalizeFinishReason(reason) {
282
+ if (reason === 'end_turn' || reason === 'stop_sequence')
283
+ return 'stop';
284
+ if (reason === 'max_tokens')
285
+ return 'length';
286
+ if (reason === 'tool_use')
287
+ return 'tool_calls';
288
+ if (reason === 'refusal')
289
+ return 'content_filter';
290
+ return reason ? 'other' : 'other';
291
+ }
292
+ function normalizeUsage(usage) {
293
+ return { inputTokens: usage.input_tokens, outputTokens: usage.output_tokens };
294
+ }
295
+ function invalidResponse(providerId, message) {
296
+ return new ProviderError('INVALID_RESPONSE', message, { providerId });
297
+ }
298
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/adapters/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { type HttpTransport } from '../transport.js';
2
+ import type { ChatChunk, ChatRequest, ChatResponse, Model, ProviderAdapter, ProviderCapabilities, ProviderRequestContext } from '../types.js';
3
+ export type GeminiAdapterOptions = {
4
+ baseUrl?: string;
5
+ headers?: Record<string, string>;
6
+ transport?: HttpTransport;
7
+ timeoutMs?: number;
8
+ };
9
+ export declare class GeminiAdapter implements ProviderAdapter {
10
+ readonly id = "gemini";
11
+ readonly name = "Gemini";
12
+ readonly capabilities: ProviderCapabilities;
13
+ private readonly baseUrl;
14
+ private readonly defaultHeaders;
15
+ private readonly transport;
16
+ constructor(options?: GeminiAdapterOptions);
17
+ listModels(context?: ProviderRequestContext): Promise<Model[]>;
18
+ chat(request: ChatRequest, context?: ProviderRequestContext): Promise<ChatResponse>;
19
+ streamChat(request: ChatRequest, context?: ProviderRequestContext): AsyncIterable<ChatChunk>;
20
+ healthCheck(context?: ProviderRequestContext): Promise<{
21
+ status: "healthy";
22
+ latencyMs: number;
23
+ checkedAt: string;
24
+ } | {
25
+ status: "unavailable";
26
+ checkedAt: string;
27
+ latencyMs?: undefined;
28
+ }>;
29
+ private url;
30
+ private modelUrl;
31
+ private requestHeaders;
32
+ private toRequestBody;
33
+ private toChatResponse;
34
+ }
35
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/adapters/gemini.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,KAAK,EACV,SAAS,EAET,WAAW,EACX,YAAY,EAGZ,KAAK,EACL,eAAe,EACf,oBAAoB,EAEpB,sBAAsB,EAIvB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAwCF,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,EAAE,YAAY;IACvB,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAiD;IAC5F,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAE9B,OAAO,GAAE,oBAAyB;IAMxC,UAAU,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAyBlE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,YAAY,CAAC;IAYtF,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAAC,SAAS,CAAC;IAuFjG,WAAW,CAAC,OAAO,GAAE,sBAA2B;;;;;;;;;IAUtD,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,cAAc;CA6BvB"}