@captra-ai/gemini 0.0.0-stage → 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.
package/README.md CHANGED
@@ -1,3 +1,14 @@
1
- # Temporary Holding Version
1
+ # @captra-ai/gemini
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Official Google Gemini GenerateContent adapter for Captra. It supports text generation, token streaming, function calling, native structured output, usage accounting, cancellation, retries, and portable provider errors.
4
+
5
+ ```ts
6
+ import { createGemini } from '@captra-ai/gemini'
7
+
8
+ const model=createGemini({
9
+ model:process.env.GEMINI_MODEL ?? 'gemini-3-flash-preview',
10
+ apiKey:process.env.GEMINI_API_KEY,
11
+ })
12
+ ```
13
+
14
+ The adapter is server-only. Never expose `GEMINI_API_KEY` to browser code.
@@ -0,0 +1,11 @@
1
+ import { type ModelAdapter } from '@captra-ai/core';
2
+ export type GeminiOptions = {
3
+ model: string;
4
+ apiKey?: string;
5
+ baseUrl?: string;
6
+ fetch?: typeof fetch;
7
+ headers?: HeadersInit;
8
+ maxRetries?: number;
9
+ };
10
+ export declare function createGemini(options: GeminiOptions): ModelAdapter;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,YAAY,EAA4E,MAAM,iBAAiB,CAAA;AAEhJ,MAAM,MAAM,aAAa,GAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAA,MAAM,CAAC,EAAC,MAAM,CAAC;IAAA,OAAO,CAAC,EAAC,MAAM,CAAC;IAAA,KAAK,CAAC,EAAC,OAAO,KAAK,CAAC;IAAA,OAAO,CAAC,EAAC,WAAW,CAAC;IAAA,UAAU,CAAC,EAAC,MAAM,CAAA;CAAC,CAAA;AAInI,wBAAgB,YAAY,CAAC,OAAO,EAAC,aAAa,GAAE,YAAY,CAU/D"}
package/dist/index.js ADDED
@@ -0,0 +1,81 @@
1
+ import { ModelProviderError } from '@captra-ai/core';
2
+ export function createGemini(options) {
3
+ const request = options.fetch ?? globalThis.fetch, baseUrl = (options.baseUrl ?? 'https://generativelanguage.googleapis.com/v1beta').replace(/\/$/, ''), apiKey = options.apiKey ?? env('GEMINI_API_KEY') ?? env('GOOGLE_API_KEY');
4
+ if (!apiKey)
5
+ throw new Error('Gemini API key is required');
6
+ const headers = { 'content-type': 'application/json', 'x-goog-api-key': apiKey, ...options.headers }, model = encodeURIComponent(options.model);
7
+ const bodyFor = (input) => { const system = input.messages.filter(message => message.role === 'system').map(message => message.content).join('\n\n'); return { contents: toContents(input.messages), ...(system ? { systemInstruction: { parts: [{ text: system }] } } : {}), ...(input.tools?.length ? { tools: [{ functionDeclarations: input.tools.map(tool => ({ name: tool.name, description: tool.description, parameters: tool.inputSchema })) }] } : {}), generationConfig: { ...(input.temperature === undefined ? {} : { temperature: input.temperature }), ...(input.maxOutputTokens === undefined ? {} : { maxOutputTokens: input.maxOutputTokens }), ...(input.output ? { responseMimeType: 'application/json', responseJsonSchema: input.output.schema } : {}) } }; };
8
+ const send = async (url, body, signal) => { for (let attempt = 0;; attempt++) {
9
+ const response = await request(url, { method: 'POST', headers, body: JSON.stringify(body), signal });
10
+ if (!retryable(response.status) || attempt >= (options.maxRetries ?? 2))
11
+ return response;
12
+ await wait(response, attempt, signal);
13
+ } };
14
+ return {
15
+ async generate(input) { const response = await send(`${baseUrl}/models/${model}:generateContent`, bodyFor(input), input.signal), data = await response.json(); if (!response.ok)
16
+ throw providerError(response.status, data.error); return { ...fromResponse(data), provider: 'gemini' }; },
17
+ async *stream(input) { const response = await send(`${baseUrl}/models/${model}:streamGenerateContent?alt=sse`, bodyFor(input), input.signal); if (!response.ok || !response.body) {
18
+ const data = await safeJson(response);
19
+ throw providerError(response.status, data?.error, await safeText(response));
20
+ } let text = '', modelVersion, usage, toolCalls = []; for await (const data of sse(response.body)) {
21
+ if (data.error)
22
+ throw providerError(data.error.code ?? 500, data.error);
23
+ const chunk = fromResponse(data), delta = chunk.text;
24
+ if (delta) {
25
+ text += delta;
26
+ yield { type: 'text-delta', delta };
27
+ }
28
+ modelVersion = data.modelVersion ?? modelVersion;
29
+ usage = data.usageMetadata ?? usage;
30
+ for (const call of chunk.toolCalls ?? [])
31
+ if (!toolCalls.some(item => item.id === call.id))
32
+ toolCalls.push(call);
33
+ } yield { type: 'finish', response: { text, toolCalls: toolCalls.length ? toolCalls : undefined, model: modelVersion, provider: 'gemini', usage: toUsage(usage) } }; }
34
+ };
35
+ }
36
+ function toContents(messages) { return messages.filter(message => message.role !== 'system').map(message => { if (message.role === 'tool')
37
+ return { role: 'user', parts: [{ functionResponse: { id: message.toolCallId, name: message.name, response: parseToolResult(message.content) } }] }; if (message.toolCalls?.length)
38
+ return { role: 'model', parts: [...(message.content ? [{ text: message.content }] : []), ...message.toolCalls.map(call => ({ functionCall: { id: call.id, name: call.name, args: call.input } }))] }; return { role: message.role === 'assistant' ? 'model' : 'user', parts: [{ text: message.content }] }; }); }
39
+ function fromResponse(data) { const parts = data.candidates?.[0]?.content?.parts ?? [], text = parts.map(part => part.text ?? '').join(''), toolCalls = parts.flatMap(part => part.functionCall ? [{ id: part.functionCall.id ?? crypto.randomUUID(), name: part.functionCall.name ?? '', input: part.functionCall.args ?? {} }] : []); return { text, toolCalls: toolCalls.length ? toolCalls : undefined, model: data.modelVersion, usage: toUsage(data.usageMetadata) }; }
40
+ function toUsage(usage) { return { inputTokens: usage?.promptTokenCount, outputTokens: usage?.candidatesTokenCount, cachedInputTokens: usage?.cachedContentTokenCount, reasoningTokens: usage?.thoughtsTokenCount }; }
41
+ function parseToolResult(value) { try {
42
+ const parsed = JSON.parse(value);
43
+ return parsed && typeof parsed === 'object' ? parsed : { result: parsed };
44
+ }
45
+ catch {
46
+ return { result: value };
47
+ } }
48
+ function providerError(status, error, fallback) { return new ModelProviderError(error?.message ?? fallback ?? `Gemini request failed: ${status}`, { provider: 'gemini', status, code: error?.status?.toLowerCase() ?? `gemini_http_${status}`, retryable: retryable(status) }); }
49
+ function retryable(status) { return status === 408 || status === 429 || status >= 500; }
50
+ function env(name) { return globalThis.process?.env?.[name]; }
51
+ async function wait(response, attempt, signal) { const value = Number(response.headers.get('retry-after')); await delay(Number.isFinite(value) ? value * 1000 : 250 * 2 ** attempt, signal); }
52
+ function delay(ms, signal) { return new Promise((resolve, reject) => { const done = () => { signal?.removeEventListener('abort', abort); resolve(); }, timer = setTimeout(done, ms), abort = () => { clearTimeout(timer); reject(signal?.reason ?? new DOMException('Aborted', 'AbortError')); }; if (signal?.aborted)
53
+ abort();
54
+ else
55
+ signal?.addEventListener('abort', abort, { once: true }); }); }
56
+ async function* sse(body) { const reader = body.pipeThrough(new TextDecoderStream()).getReader(); let buffer = ''; for (;;) {
57
+ const { done, value } = await reader.read();
58
+ buffer += value ?? '';
59
+ const frames = buffer.split('\n\n');
60
+ buffer = frames.pop() ?? '';
61
+ for (const frame of frames) {
62
+ const raw = frame.split('\n').filter(line => line.startsWith('data:')).map(line => line.slice(5).trim()).join('');
63
+ if (raw)
64
+ yield JSON.parse(raw);
65
+ }
66
+ if (done)
67
+ break;
68
+ } }
69
+ async function safeJson(response) { try {
70
+ return await response.clone().json();
71
+ }
72
+ catch {
73
+ return undefined;
74
+ } }
75
+ async function safeText(response) { try {
76
+ return await response.text();
77
+ }
78
+ catch {
79
+ return undefined;
80
+ } }
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,16 @@
1
1
  {
2
2
  "name": "@captra-ai/gemini",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Google Gemini model adapter for Captra.",
5
+ "license": "MIT",
6
+ "repository": { "type": "git", "url": "git+https://github.com/VaibhavBansal26/captra.git", "directory": "packages/gemini" },
7
+ "type": "module",
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": { ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" } },
11
+ "files": ["dist"],
12
+ "publishConfig": { "access": "public" },
13
+ "peerDependencies": { "@captra-ai/core": ">=0.21.0 <1" },
14
+ "devDependencies": { "vitest": "^4.1.12" },
15
+ "scripts": { "build": "tsc -p tsconfig.json", "test": "vitest run" }
16
+ }