@tanstack/ai-gemini 0.0.1
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/LICENSE +21 -0
- package/README.md +131 -0
- package/dist/esm/gemini-adapter.d.ts +71 -0
- package/dist/esm/gemini-adapter.js +375 -0
- package/dist/esm/gemini-adapter.js.map +1 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/message-types.d.ts +84 -0
- package/dist/esm/model-meta.d.ts +189 -0
- package/dist/esm/model-meta.js +43 -0
- package/dist/esm/model-meta.js.map +1 -0
- package/dist/esm/text/text-provider-options.d.ts +184 -0
- package/dist/esm/tools/code-execution-tool.d.ts +7 -0
- package/dist/esm/tools/code-execution-tool.js +9 -0
- package/dist/esm/tools/code-execution-tool.js.map +1 -0
- package/dist/esm/tools/computer-use-tool.d.ts +10 -0
- package/dist/esm/tools/computer-use-tool.js +13 -0
- package/dist/esm/tools/computer-use-tool.js.map +1 -0
- package/dist/esm/tools/file-search-tool.d.ts +7 -0
- package/dist/esm/tools/file-search-tool.js +10 -0
- package/dist/esm/tools/file-search-tool.js.map +1 -0
- package/dist/esm/tools/function-declaration-tool.d.ts +5 -0
- package/dist/esm/tools/google-maps-tool.d.ts +7 -0
- package/dist/esm/tools/google-maps-tool.js +10 -0
- package/dist/esm/tools/google-maps-tool.js.map +1 -0
- package/dist/esm/tools/google-search-retriveal-tool.d.ts +7 -0
- package/dist/esm/tools/google-search-retriveal-tool.js +10 -0
- package/dist/esm/tools/google-search-retriveal-tool.js.map +1 -0
- package/dist/esm/tools/google-search-tool.d.ts +7 -0
- package/dist/esm/tools/google-search-tool.js +10 -0
- package/dist/esm/tools/google-search-tool.js.map +1 -0
- package/dist/esm/tools/index.d.ts +9 -0
- package/dist/esm/tools/tool-converter.d.ts +22 -0
- package/dist/esm/tools/tool-converter.js +64 -0
- package/dist/esm/tools/tool-converter.js.map +1 -0
- package/dist/esm/tools/url-context-tool.d.ts +7 -0
- package/dist/esm/tools/url-context-tool.js +9 -0
- package/dist/esm/tools/url-context-tool.js.map +1 -0
- package/package.json +53 -0
- package/src/gemini-adapter.ts +577 -0
- package/src/index.ts +22 -0
- package/src/message-types.ts +125 -0
- package/src/model-meta.ts +887 -0
- package/src/text/text-provider-options.ts +246 -0
- package/src/tools/code-execution-tool.ts +17 -0
- package/src/tools/computer-use-tool.ts +25 -0
- package/src/tools/file-search-tool.ts +19 -0
- package/src/tools/function-declaration-tool.ts +34 -0
- package/src/tools/google-maps-tool.ts +19 -0
- package/src/tools/google-search-retriveal-tool.ts +21 -0
- package/src/tools/google-search-tool.ts +19 -0
- package/src/tools/index.ts +18 -0
- package/src/tools/tool-converter.ts +99 -0
- package/src/tools/url-context-tool.ts +17 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GoogleMaps } from '@google/genai';
|
|
2
|
+
import { Tool } from '@tanstack/ai';
|
|
3
|
+
export type GoogleMapsTool = GoogleMaps;
|
|
4
|
+
export declare function convertGoogleMapsToolToAdapterFormat(tool: Tool): {
|
|
5
|
+
googleMaps: GoogleMaps;
|
|
6
|
+
};
|
|
7
|
+
export declare function googleMapsTool(config?: GoogleMapsTool): Tool;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-maps-tool.js","sources":["../../../src/tools/google-maps-tool.ts"],"sourcesContent":["import type { GoogleMaps } from '@google/genai'\nimport type { Tool } from '@tanstack/ai'\n\nexport type GoogleMapsTool = GoogleMaps\n\nexport function convertGoogleMapsToolToAdapterFormat(tool: Tool) {\n const metadata = tool.metadata as GoogleMapsTool\n return {\n googleMaps: metadata,\n }\n}\n\nexport function googleMapsTool(config?: GoogleMapsTool): Tool {\n return {\n name: 'google_maps',\n description: '',\n metadata: config,\n }\n}\n"],"names":[],"mappings":"AAKO,SAAS,qCAAqC,MAAY;AAC/D,QAAM,WAAW,KAAK;AACtB,SAAO;AAAA,IACL,YAAY;AAAA,EAAA;AAEhB;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GoogleSearchRetrieval } from '@google/genai';
|
|
2
|
+
import { Tool } from '@tanstack/ai';
|
|
3
|
+
export type GoogleSearchRetrievalTool = GoogleSearchRetrieval;
|
|
4
|
+
export declare function convertGoogleSearchRetrievalToolToAdapterFormat(tool: Tool): {
|
|
5
|
+
googleSearchRetrieval: GoogleSearchRetrieval;
|
|
6
|
+
};
|
|
7
|
+
export declare function googleSearchRetrievalTool(config?: GoogleSearchRetrievalTool): Tool;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function convertGoogleSearchRetrievalToolToAdapterFormat(tool) {
|
|
2
|
+
const metadata = tool.metadata;
|
|
3
|
+
return {
|
|
4
|
+
googleSearchRetrieval: metadata
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
convertGoogleSearchRetrievalToolToAdapterFormat
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=google-search-retriveal-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-search-retriveal-tool.js","sources":["../../../src/tools/google-search-retriveal-tool.ts"],"sourcesContent":["import type { GoogleSearchRetrieval } from '@google/genai'\nimport type { Tool } from '@tanstack/ai'\n\nexport type GoogleSearchRetrievalTool = GoogleSearchRetrieval\n\nexport function convertGoogleSearchRetrievalToolToAdapterFormat(tool: Tool) {\n const metadata = tool.metadata as GoogleSearchRetrievalTool\n return {\n googleSearchRetrieval: metadata,\n }\n}\n\nexport function googleSearchRetrievalTool(\n config?: GoogleSearchRetrievalTool,\n): Tool {\n return {\n name: 'google_search_retrieval',\n description: '',\n metadata: config,\n }\n}\n"],"names":[],"mappings":"AAKO,SAAS,gDAAgD,MAAY;AAC1E,QAAM,WAAW,KAAK;AACtB,SAAO;AAAA,IACL,uBAAuB;AAAA,EAAA;AAE3B;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GoogleSearch } from '@google/genai';
|
|
2
|
+
import { Tool } from '@tanstack/ai';
|
|
3
|
+
export type GoogleSearchTool = GoogleSearch;
|
|
4
|
+
export declare function convertGoogleSearchToolToAdapterFormat(tool: Tool): {
|
|
5
|
+
googleSearch: GoogleSearch;
|
|
6
|
+
};
|
|
7
|
+
export declare function googleSearchTool(config?: GoogleSearchTool): Tool;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-search-tool.js","sources":["../../../src/tools/google-search-tool.ts"],"sourcesContent":["import type { GoogleSearch } from '@google/genai'\nimport type { Tool } from '@tanstack/ai'\n\nexport type GoogleSearchTool = GoogleSearch\n\nexport function convertGoogleSearchToolToAdapterFormat(tool: Tool) {\n const metadata = tool.metadata as GoogleSearchTool\n return {\n googleSearch: metadata,\n }\n}\n\nexport function googleSearchTool(config?: GoogleSearchTool): Tool {\n return {\n name: 'google_search',\n description: '',\n metadata: config,\n }\n}\n"],"names":[],"mappings":"AAKO,SAAS,uCAAuC,MAAY;AACjE,QAAM,WAAW,KAAK;AACtB,SAAO;AAAA,IACL,cAAc;AAAA,EAAA;AAElB;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CodeExecutionTool } from './code-execution-tool.js';
|
|
2
|
+
import { ComputerUseTool } from './computer-use-tool.js';
|
|
3
|
+
import { FileSearchTool } from './file-search-tool.js';
|
|
4
|
+
import { FunctionDeclarationTool } from './function-declaration-tool.js';
|
|
5
|
+
import { GoogleMapsTool } from './google-maps-tool.js';
|
|
6
|
+
import { GoogleSearchRetrievalTool } from './google-search-retriveal-tool.js';
|
|
7
|
+
import { GoogleSearchTool } from './google-search-tool.js';
|
|
8
|
+
import { UrlContextTool } from './url-context-tool.js';
|
|
9
|
+
export type GoogleGeminiTool = CodeExecutionTool | ComputerUseTool | FileSearchTool | FunctionDeclarationTool | GoogleMapsTool | GoogleSearchRetrievalTool | GoogleSearchTool | UrlContextTool;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Tool } from '@tanstack/ai';
|
|
2
|
+
import { ToolUnion } from '@google/genai';
|
|
3
|
+
/**
|
|
4
|
+
* Converts standard Tool format to Gemini-specific tool format
|
|
5
|
+
*
|
|
6
|
+
* @param tools - Array of standard Tool objects
|
|
7
|
+
* @returns Array of Gemini-specific tool definitions
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const tools: Tool[] = [{
|
|
12
|
+
* name: "get_weather",
|
|
13
|
+
* description: "Get weather for a location",
|
|
14
|
+
* inputSchema: z.object({
|
|
15
|
+
* location: z.string()
|
|
16
|
+
* })
|
|
17
|
+
* }];
|
|
18
|
+
*
|
|
19
|
+
* const geminiTools = convertToolsToProviderFormat(tools);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function convertToolsToProviderFormat<TTool extends Tool>(tools: Array<TTool> | undefined): Array<ToolUnion>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { convertZodToJsonSchema } from "@tanstack/ai";
|
|
2
|
+
import { convertCodeExecutionToolToAdapterFormat } from "./code-execution-tool.js";
|
|
3
|
+
import { convertComputerUseToolToAdapterFormat } from "./computer-use-tool.js";
|
|
4
|
+
import { convertFileSearchToolToAdapterFormat } from "./file-search-tool.js";
|
|
5
|
+
import { convertGoogleMapsToolToAdapterFormat } from "./google-maps-tool.js";
|
|
6
|
+
import { convertGoogleSearchRetrievalToolToAdapterFormat } from "./google-search-retriveal-tool.js";
|
|
7
|
+
import { convertGoogleSearchToolToAdapterFormat } from "./google-search-tool.js";
|
|
8
|
+
import { convertUrlContextToolToAdapterFormat } from "./url-context-tool.js";
|
|
9
|
+
function convertToolsToProviderFormat(tools) {
|
|
10
|
+
if (!tools || tools.length === 0) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
const result = [];
|
|
14
|
+
const functionDeclarations = [];
|
|
15
|
+
for (const tool of tools) {
|
|
16
|
+
const name = tool.name;
|
|
17
|
+
switch (name) {
|
|
18
|
+
case "code_execution":
|
|
19
|
+
result.push(convertCodeExecutionToolToAdapterFormat());
|
|
20
|
+
break;
|
|
21
|
+
case "computer_use":
|
|
22
|
+
result.push(convertComputerUseToolToAdapterFormat(tool));
|
|
23
|
+
break;
|
|
24
|
+
case "file_search":
|
|
25
|
+
result.push(convertFileSearchToolToAdapterFormat(tool));
|
|
26
|
+
break;
|
|
27
|
+
case "google_maps":
|
|
28
|
+
result.push(convertGoogleMapsToolToAdapterFormat(tool));
|
|
29
|
+
break;
|
|
30
|
+
case "google_search_retrieval":
|
|
31
|
+
result.push(convertGoogleSearchRetrievalToolToAdapterFormat(tool));
|
|
32
|
+
break;
|
|
33
|
+
case "google_search":
|
|
34
|
+
result.push(convertGoogleSearchToolToAdapterFormat(tool));
|
|
35
|
+
break;
|
|
36
|
+
case "url_context":
|
|
37
|
+
result.push(convertUrlContextToolToAdapterFormat());
|
|
38
|
+
break;
|
|
39
|
+
default:
|
|
40
|
+
if (!tool.description) {
|
|
41
|
+
throw new Error(
|
|
42
|
+
`Tool ${tool.name} requires a description for Gemini adapter`
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
const jsonSchema = convertZodToJsonSchema(tool.inputSchema);
|
|
46
|
+
functionDeclarations.push({
|
|
47
|
+
name: tool.name,
|
|
48
|
+
description: tool.description,
|
|
49
|
+
parameters: jsonSchema
|
|
50
|
+
});
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (functionDeclarations.length > 0) {
|
|
55
|
+
result.push({
|
|
56
|
+
functionDeclarations
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
export {
|
|
62
|
+
convertToolsToProviderFormat
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=tool-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-converter.js","sources":["../../../src/tools/tool-converter.ts"],"sourcesContent":["import { convertZodToJsonSchema } from '@tanstack/ai'\nimport { convertCodeExecutionToolToAdapterFormat } from './code-execution-tool'\nimport { convertComputerUseToolToAdapterFormat } from './computer-use-tool'\nimport { convertFileSearchToolToAdapterFormat } from './file-search-tool'\nimport { convertGoogleMapsToolToAdapterFormat } from './google-maps-tool'\nimport { convertGoogleSearchRetrievalToolToAdapterFormat } from './google-search-retriveal-tool'\nimport { convertGoogleSearchToolToAdapterFormat } from './google-search-tool'\nimport { convertUrlContextToolToAdapterFormat } from './url-context-tool'\nimport type { Tool } from '@tanstack/ai'\nimport type { ToolUnion } from '@google/genai'\n\n/**\n * Converts standard Tool format to Gemini-specific tool format\n *\n * @param tools - Array of standard Tool objects\n * @returns Array of Gemini-specific tool definitions\n *\n * @example\n * ```typescript\n * const tools: Tool[] = [{\n * name: \"get_weather\",\n * description: \"Get weather for a location\",\n * inputSchema: z.object({\n * location: z.string()\n * })\n * }];\n *\n * const geminiTools = convertToolsToProviderFormat(tools);\n * ```\n */\nexport function convertToolsToProviderFormat<TTool extends Tool>(\n tools: Array<TTool> | undefined,\n): Array<ToolUnion> {\n if (!tools || tools.length === 0) {\n return []\n }\n const result: Array<ToolUnion> = []\n const functionDeclarations: Array<{\n name: string\n description?: string\n parameters?: any\n }> = []\n\n // Process each tool and group function declarations together\n for (const tool of tools) {\n const name = tool.name\n\n switch (name) {\n case 'code_execution':\n result.push(convertCodeExecutionToolToAdapterFormat(tool))\n break\n case 'computer_use':\n result.push(convertComputerUseToolToAdapterFormat(tool))\n break\n case 'file_search':\n result.push(convertFileSearchToolToAdapterFormat(tool))\n break\n case 'google_maps':\n result.push(convertGoogleMapsToolToAdapterFormat(tool))\n break\n case 'google_search_retrieval':\n result.push(convertGoogleSearchRetrievalToolToAdapterFormat(tool))\n break\n case 'google_search':\n result.push(convertGoogleSearchToolToAdapterFormat(tool))\n break\n case 'url_context':\n result.push(convertUrlContextToolToAdapterFormat(tool))\n break\n default:\n // Collect function declarations to group together\n // Description is required for Gemini function declarations\n if (!tool.description) {\n throw new Error(\n `Tool ${tool.name} requires a description for Gemini adapter`,\n )\n }\n\n // Convert Zod schema to JSON Schema\n const jsonSchema = convertZodToJsonSchema(tool.inputSchema)\n\n functionDeclarations.push({\n name: tool.name,\n description: tool.description,\n parameters: jsonSchema,\n })\n break\n }\n }\n\n // If we have function declarations, add them as a single tool\n if (functionDeclarations.length > 0) {\n result.push({\n functionDeclarations: functionDeclarations,\n })\n }\n\n return result\n}\n"],"names":[],"mappings":";;;;;;;;AA8BO,SAAS,6BACd,OACkB;AAClB,MAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,WAAO,CAAA;AAAA,EACT;AACA,QAAM,SAA2B,CAAA;AACjC,QAAM,uBAID,CAAA;AAGL,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,KAAK;AAElB,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO,KAAK,wCAA4C,CAAC;AACzD;AAAA,MACF,KAAK;AACH,eAAO,KAAK,sCAAsC,IAAI,CAAC;AACvD;AAAA,MACF,KAAK;AACH,eAAO,KAAK,qCAAqC,IAAI,CAAC;AACtD;AAAA,MACF,KAAK;AACH,eAAO,KAAK,qCAAqC,IAAI,CAAC;AACtD;AAAA,MACF,KAAK;AACH,eAAO,KAAK,gDAAgD,IAAI,CAAC;AACjE;AAAA,MACF,KAAK;AACH,eAAO,KAAK,uCAAuC,IAAI,CAAC;AACxD;AAAA,MACF,KAAK;AACH,eAAO,KAAK,qCAAyC,CAAC;AACtD;AAAA,MACF;AAGE,YAAI,CAAC,KAAK,aAAa;AACrB,gBAAM,IAAI;AAAA,YACR,QAAQ,KAAK,IAAI;AAAA,UAAA;AAAA,QAErB;AAGA,cAAM,aAAa,uBAAuB,KAAK,WAAW;AAE1D,6BAAqB,KAAK;AAAA,UACxB,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY;AAAA,QAAA,CACb;AACD;AAAA,IAAA;AAAA,EAEN;AAGA,MAAI,qBAAqB,SAAS,GAAG;AACnC,WAAO,KAAK;AAAA,MACV;AAAA,IAAA,CACD;AAAA,EACH;AAEA,SAAO;AACT;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-context-tool.js","sources":["../../../src/tools/url-context-tool.ts"],"sourcesContent":["import type { Tool } from '@tanstack/ai'\n\nexport interface UrlContextTool {}\n\nexport function convertUrlContextToolToAdapterFormat(_tool: Tool) {\n return {\n urlContext: {},\n }\n}\n\nexport function urlContextTool(): Tool {\n return {\n name: 'url_context',\n description: '',\n metadata: {},\n }\n}\n"],"names":[],"mappings":"AAIO,SAAS,qCAAqC,OAAa;AAChE,SAAO;AAAA,IACL,YAAY,CAAA;AAAA,EAAC;AAEjB;"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tanstack/ai-gemini",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Google Gemini adapter for TanStack AI",
|
|
5
|
+
"author": "",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/TanStack/ai.git",
|
|
10
|
+
"directory": "packages/typescript/ai-gemini"
|
|
11
|
+
},
|
|
12
|
+
"type": "module",
|
|
13
|
+
"module": "./dist/esm/index.js",
|
|
14
|
+
"types": "./dist/esm/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/esm/index.d.ts",
|
|
18
|
+
"import": "./dist/esm/index.js"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"src"
|
|
24
|
+
],
|
|
25
|
+
"keywords": [
|
|
26
|
+
"ai",
|
|
27
|
+
"gemini",
|
|
28
|
+
"google",
|
|
29
|
+
"tanstack",
|
|
30
|
+
"adapter"
|
|
31
|
+
],
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@google/genai": "^1.30.0",
|
|
34
|
+
"@tanstack/ai": "0.0.1"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@vitest/coverage-v8": "4.0.14",
|
|
38
|
+
"vite": "^7.2.4"
|
|
39
|
+
},
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"@tanstack/ai": "0.0.1"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "vite build",
|
|
45
|
+
"clean": "premove ./build ./dist",
|
|
46
|
+
"lint:fix": "eslint ./src --fix",
|
|
47
|
+
"test:build": "publint --strict",
|
|
48
|
+
"test:eslint": "eslint ./src",
|
|
49
|
+
"test:lib": "vitest",
|
|
50
|
+
"test:lib:dev": "pnpm test:lib --watch",
|
|
51
|
+
"test:types": "tsc"
|
|
52
|
+
}
|
|
53
|
+
}
|