@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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +131 -0
  3. package/dist/esm/gemini-adapter.d.ts +71 -0
  4. package/dist/esm/gemini-adapter.js +375 -0
  5. package/dist/esm/gemini-adapter.js.map +1 -0
  6. package/dist/esm/index.d.ts +6 -0
  7. package/dist/esm/index.js +7 -0
  8. package/dist/esm/index.js.map +1 -0
  9. package/dist/esm/message-types.d.ts +84 -0
  10. package/dist/esm/model-meta.d.ts +189 -0
  11. package/dist/esm/model-meta.js +43 -0
  12. package/dist/esm/model-meta.js.map +1 -0
  13. package/dist/esm/text/text-provider-options.d.ts +184 -0
  14. package/dist/esm/tools/code-execution-tool.d.ts +7 -0
  15. package/dist/esm/tools/code-execution-tool.js +9 -0
  16. package/dist/esm/tools/code-execution-tool.js.map +1 -0
  17. package/dist/esm/tools/computer-use-tool.d.ts +10 -0
  18. package/dist/esm/tools/computer-use-tool.js +13 -0
  19. package/dist/esm/tools/computer-use-tool.js.map +1 -0
  20. package/dist/esm/tools/file-search-tool.d.ts +7 -0
  21. package/dist/esm/tools/file-search-tool.js +10 -0
  22. package/dist/esm/tools/file-search-tool.js.map +1 -0
  23. package/dist/esm/tools/function-declaration-tool.d.ts +5 -0
  24. package/dist/esm/tools/google-maps-tool.d.ts +7 -0
  25. package/dist/esm/tools/google-maps-tool.js +10 -0
  26. package/dist/esm/tools/google-maps-tool.js.map +1 -0
  27. package/dist/esm/tools/google-search-retriveal-tool.d.ts +7 -0
  28. package/dist/esm/tools/google-search-retriveal-tool.js +10 -0
  29. package/dist/esm/tools/google-search-retriveal-tool.js.map +1 -0
  30. package/dist/esm/tools/google-search-tool.d.ts +7 -0
  31. package/dist/esm/tools/google-search-tool.js +10 -0
  32. package/dist/esm/tools/google-search-tool.js.map +1 -0
  33. package/dist/esm/tools/index.d.ts +9 -0
  34. package/dist/esm/tools/tool-converter.d.ts +22 -0
  35. package/dist/esm/tools/tool-converter.js +64 -0
  36. package/dist/esm/tools/tool-converter.js.map +1 -0
  37. package/dist/esm/tools/url-context-tool.d.ts +7 -0
  38. package/dist/esm/tools/url-context-tool.js +9 -0
  39. package/dist/esm/tools/url-context-tool.js.map +1 -0
  40. package/package.json +53 -0
  41. package/src/gemini-adapter.ts +577 -0
  42. package/src/index.ts +22 -0
  43. package/src/message-types.ts +125 -0
  44. package/src/model-meta.ts +887 -0
  45. package/src/text/text-provider-options.ts +246 -0
  46. package/src/tools/code-execution-tool.ts +17 -0
  47. package/src/tools/computer-use-tool.ts +25 -0
  48. package/src/tools/file-search-tool.ts +19 -0
  49. package/src/tools/function-declaration-tool.ts +34 -0
  50. package/src/tools/google-maps-tool.ts +19 -0
  51. package/src/tools/google-search-retriveal-tool.ts +21 -0
  52. package/src/tools/google-search-tool.ts +19 -0
  53. package/src/tools/index.ts +18 -0
  54. package/src/tools/tool-converter.ts +99 -0
  55. 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,10 @@
1
+ function convertGoogleMapsToolToAdapterFormat(tool) {
2
+ const metadata = tool.metadata;
3
+ return {
4
+ googleMaps: metadata
5
+ };
6
+ }
7
+ export {
8
+ convertGoogleMapsToolToAdapterFormat
9
+ };
10
+ //# sourceMappingURL=google-maps-tool.js.map
@@ -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,10 @@
1
+ function convertGoogleSearchToolToAdapterFormat(tool) {
2
+ const metadata = tool.metadata;
3
+ return {
4
+ googleSearch: metadata
5
+ };
6
+ }
7
+ export {
8
+ convertGoogleSearchToolToAdapterFormat
9
+ };
10
+ //# sourceMappingURL=google-search-tool.js.map
@@ -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,7 @@
1
+ import { Tool } from '@tanstack/ai';
2
+ export interface UrlContextTool {
3
+ }
4
+ export declare function convertUrlContextToolToAdapterFormat(_tool: Tool): {
5
+ urlContext: {};
6
+ };
7
+ export declare function urlContextTool(): Tool;
@@ -0,0 +1,9 @@
1
+ function convertUrlContextToolToAdapterFormat(_tool) {
2
+ return {
3
+ urlContext: {}
4
+ };
5
+ }
6
+ export {
7
+ convertUrlContextToolToAdapterFormat
8
+ };
9
+ //# sourceMappingURL=url-context-tool.js.map
@@ -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
+ }