@tanstack/openai-base 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 (110) hide show
  1. package/dist/esm/adapters/chat-completions-text.d.ts +76 -0
  2. package/dist/esm/adapters/chat-completions-text.js +411 -0
  3. package/dist/esm/adapters/chat-completions-text.js.map +1 -0
  4. package/dist/esm/adapters/chat-completions-tool-converter.d.ts +24 -0
  5. package/dist/esm/adapters/chat-completions-tool-converter.js +29 -0
  6. package/dist/esm/adapters/chat-completions-tool-converter.js.map +1 -0
  7. package/dist/esm/adapters/image.d.ts +32 -0
  8. package/dist/esm/adapters/image.js +69 -0
  9. package/dist/esm/adapters/image.js.map +1 -0
  10. package/dist/esm/adapters/responses-text.d.ts +115 -0
  11. package/dist/esm/adapters/responses-text.js +635 -0
  12. package/dist/esm/adapters/responses-text.js.map +1 -0
  13. package/dist/esm/adapters/responses-tool-converter.d.ts +35 -0
  14. package/dist/esm/adapters/responses-tool-converter.js +27 -0
  15. package/dist/esm/adapters/responses-tool-converter.js.map +1 -0
  16. package/dist/esm/adapters/summarize.d.ts +28 -0
  17. package/dist/esm/adapters/summarize.js +74 -0
  18. package/dist/esm/adapters/summarize.js.map +1 -0
  19. package/dist/esm/adapters/transcription.d.ts +39 -0
  20. package/dist/esm/adapters/transcription.js +139 -0
  21. package/dist/esm/adapters/transcription.js.map +1 -0
  22. package/dist/esm/adapters/tts.d.ts +26 -0
  23. package/dist/esm/adapters/tts.js +65 -0
  24. package/dist/esm/adapters/tts.js.map +1 -0
  25. package/dist/esm/adapters/video.d.ts +48 -0
  26. package/dist/esm/adapters/video.js +192 -0
  27. package/dist/esm/adapters/video.js.map +1 -0
  28. package/dist/esm/index.d.ts +15 -0
  29. package/dist/esm/index.js +65 -0
  30. package/dist/esm/index.js.map +1 -0
  31. package/dist/esm/tools/apply-patch-tool.d.ts +11 -0
  32. package/dist/esm/tools/apply-patch-tool.js +17 -0
  33. package/dist/esm/tools/apply-patch-tool.js.map +1 -0
  34. package/dist/esm/tools/code-interpreter-tool.d.ts +11 -0
  35. package/dist/esm/tools/code-interpreter-tool.js +22 -0
  36. package/dist/esm/tools/code-interpreter-tool.js.map +1 -0
  37. package/dist/esm/tools/computer-use-tool.d.ts +11 -0
  38. package/dist/esm/tools/computer-use-tool.js +23 -0
  39. package/dist/esm/tools/computer-use-tool.js.map +1 -0
  40. package/dist/esm/tools/custom-tool.d.ts +11 -0
  41. package/dist/esm/tools/custom-tool.js +23 -0
  42. package/dist/esm/tools/custom-tool.js.map +1 -0
  43. package/dist/esm/tools/file-search-tool.d.ts +11 -0
  44. package/dist/esm/tools/file-search-tool.js +30 -0
  45. package/dist/esm/tools/file-search-tool.js.map +1 -0
  46. package/dist/esm/tools/function-tool.d.ts +15 -0
  47. package/dist/esm/tools/function-tool.js +24 -0
  48. package/dist/esm/tools/function-tool.js.map +1 -0
  49. package/dist/esm/tools/image-generation-tool.d.ts +11 -0
  50. package/dist/esm/tools/image-generation-tool.js +27 -0
  51. package/dist/esm/tools/image-generation-tool.js.map +1 -0
  52. package/dist/esm/tools/index.d.ts +27 -0
  53. package/dist/esm/tools/local-shell-tool.d.ts +11 -0
  54. package/dist/esm/tools/local-shell-tool.js +17 -0
  55. package/dist/esm/tools/local-shell-tool.js.map +1 -0
  56. package/dist/esm/tools/mcp-tool.d.ts +12 -0
  57. package/dist/esm/tools/mcp-tool.js +31 -0
  58. package/dist/esm/tools/mcp-tool.js.map +1 -0
  59. package/dist/esm/tools/shell-tool.d.ts +11 -0
  60. package/dist/esm/tools/shell-tool.js +17 -0
  61. package/dist/esm/tools/shell-tool.js.map +1 -0
  62. package/dist/esm/tools/tool-choice.d.ts +17 -0
  63. package/dist/esm/tools/tool-converter.d.ts +6 -0
  64. package/dist/esm/tools/tool-converter.js +61 -0
  65. package/dist/esm/tools/tool-converter.js.map +1 -0
  66. package/dist/esm/tools/web-search-preview-tool.d.ts +11 -0
  67. package/dist/esm/tools/web-search-preview-tool.js +20 -0
  68. package/dist/esm/tools/web-search-preview-tool.js.map +1 -0
  69. package/dist/esm/tools/web-search-tool.d.ts +11 -0
  70. package/dist/esm/tools/web-search-tool.js +16 -0
  71. package/dist/esm/tools/web-search-tool.js.map +1 -0
  72. package/dist/esm/types/config.d.ts +4 -0
  73. package/dist/esm/types/message-metadata.d.ts +19 -0
  74. package/dist/esm/types/provider-options.d.ts +40 -0
  75. package/dist/esm/utils/client.d.ts +3 -0
  76. package/dist/esm/utils/client.js +8 -0
  77. package/dist/esm/utils/client.js.map +1 -0
  78. package/dist/esm/utils/schema-converter.d.ts +12 -0
  79. package/dist/esm/utils/schema-converter.js +65 -0
  80. package/dist/esm/utils/schema-converter.js.map +1 -0
  81. package/package.json +57 -0
  82. package/src/adapters/chat-completions-text.ts +817 -0
  83. package/src/adapters/chat-completions-tool-converter.ts +70 -0
  84. package/src/adapters/image.ts +158 -0
  85. package/src/adapters/responses-text.ts +1147 -0
  86. package/src/adapters/responses-tool-converter.ts +77 -0
  87. package/src/adapters/summarize.ts +174 -0
  88. package/src/adapters/transcription.ts +194 -0
  89. package/src/adapters/tts.ts +124 -0
  90. package/src/adapters/video.ts +385 -0
  91. package/src/index.ts +24 -0
  92. package/src/tools/apply-patch-tool.ts +32 -0
  93. package/src/tools/code-interpreter-tool.ts +39 -0
  94. package/src/tools/computer-use-tool.ts +38 -0
  95. package/src/tools/custom-tool.ts +33 -0
  96. package/src/tools/file-search-tool.ts +51 -0
  97. package/src/tools/function-tool.ts +44 -0
  98. package/src/tools/image-generation-tool.ts +51 -0
  99. package/src/tools/index.ts +41 -0
  100. package/src/tools/local-shell-tool.ts +32 -0
  101. package/src/tools/mcp-tool.ts +47 -0
  102. package/src/tools/shell-tool.ts +30 -0
  103. package/src/tools/tool-choice.ts +31 -0
  104. package/src/tools/tool-converter.ts +68 -0
  105. package/src/tools/web-search-preview-tool.ts +39 -0
  106. package/src/tools/web-search-tool.ts +38 -0
  107. package/src/types/config.ts +5 -0
  108. package/src/utils/client.ts +8 -0
  109. package/src/utils/request-options.ts +16 -0
  110. package/src/utils/schema-converter.ts +89 -0
@@ -0,0 +1,27 @@
1
+ const validatePartialImages = (value) => {
2
+ if (value !== void 0 && (value < 0 || value > 3)) {
3
+ throw new Error("partial_images must be between 0 and 3");
4
+ }
5
+ };
6
+ function convertImageGenerationToolToAdapterFormat(tool) {
7
+ const metadata = tool.metadata;
8
+ return {
9
+ type: "image_generation",
10
+ ...metadata
11
+ };
12
+ }
13
+ function imageGenerationTool(toolData) {
14
+ validatePartialImages(toolData.partial_images);
15
+ return {
16
+ name: "image_generation",
17
+ description: "Generate images based on text descriptions",
18
+ metadata: {
19
+ ...toolData
20
+ }
21
+ };
22
+ }
23
+ export {
24
+ convertImageGenerationToolToAdapterFormat,
25
+ imageGenerationTool
26
+ };
27
+ //# sourceMappingURL=image-generation-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-generation-tool.js","sources":["../../../src/tools/image-generation-tool.ts"],"sourcesContent":["import type OpenAI from 'openai'\nimport type { Tool } from '@tanstack/ai'\n\nexport type ImageGenerationTool = OpenAI.Responses.Tool.ImageGeneration\n\nconst validatePartialImages = (value: number | undefined) => {\n if (value !== undefined && (value < 0 || value > 3)) {\n throw new Error('partial_images must be between 0 and 3')\n }\n}\n\n/**\n * Converts a standard Tool to OpenAI ImageGenerationTool format\n */\nexport function convertImageGenerationToolToAdapterFormat(\n tool: Tool,\n): ImageGenerationTool {\n const metadata = tool.metadata as Omit<ImageGenerationTool, 'type'>\n return {\n type: 'image_generation',\n ...metadata,\n }\n}\n\n/**\n * Creates a standard Tool from ImageGenerationTool parameters\n */\nexport function imageGenerationTool(\n toolData: Omit<ImageGenerationTool, 'type'>,\n): Tool {\n validatePartialImages(toolData.partial_images)\n return {\n name: 'image_generation',\n description: 'Generate images based on text descriptions',\n metadata: {\n ...toolData,\n },\n }\n}\n"],"names":[],"mappings":"AAKA,MAAM,wBAAwB,CAAC,UAA8B;AAC3D,MAAI,UAAU,WAAc,QAAQ,KAAK,QAAQ,IAAI;AACnD,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AACF;AAKO,SAAS,0CACd,MACqB;AACrB,QAAM,WAAW,KAAK;AACtB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,GAAG;AAAA,EAAA;AAEP;AAKO,SAAS,oBACd,UACM;AACN,wBAAsB,SAAS,cAAc;AAC7C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,MACR,GAAG;AAAA,IAAA;AAAA,EACL;AAEJ;"}
@@ -0,0 +1,27 @@
1
+ import { ApplyPatchTool } from './apply-patch-tool.js';
2
+ import { CodeInterpreterTool } from './code-interpreter-tool.js';
3
+ import { ComputerUseTool } from './computer-use-tool.js';
4
+ import { CustomTool } from './custom-tool.js';
5
+ import { FileSearchTool } from './file-search-tool.js';
6
+ import { FunctionTool } from './function-tool.js';
7
+ import { ImageGenerationTool } from './image-generation-tool.js';
8
+ import { LocalShellTool } from './local-shell-tool.js';
9
+ import { MCPTool } from './mcp-tool.js';
10
+ import { ShellTool } from './shell-tool.js';
11
+ import { WebSearchPreviewTool } from './web-search-preview-tool.js';
12
+ import { WebSearchTool } from './web-search-tool.js';
13
+ export type OpenAITool = ApplyPatchTool | CodeInterpreterTool | ComputerUseTool | CustomTool | FileSearchTool | FunctionTool | ImageGenerationTool | LocalShellTool | MCPTool | ShellTool | WebSearchPreviewTool | WebSearchTool;
14
+ export * from './apply-patch-tool.js';
15
+ export * from './code-interpreter-tool.js';
16
+ export * from './computer-use-tool.js';
17
+ export * from './custom-tool.js';
18
+ export * from './file-search-tool.js';
19
+ export * from './function-tool.js';
20
+ export * from './image-generation-tool.js';
21
+ export * from './local-shell-tool.js';
22
+ export * from './mcp-tool.js';
23
+ export * from './shell-tool.js';
24
+ export * from './tool-choice.js';
25
+ export * from './tool-converter.js';
26
+ export * from './web-search-preview-tool.js';
27
+ export * from './web-search-tool.js';
@@ -0,0 +1,11 @@
1
+ import { default as OpenAI } from 'openai';
2
+ import { Tool } from '@tanstack/ai';
3
+ export type LocalShellTool = OpenAI.Responses.Tool.LocalShell;
4
+ /**
5
+ * Converts a standard Tool to OpenAI LocalShellTool format
6
+ */
7
+ export declare function convertLocalShellToolToAdapterFormat(_tool: Tool): LocalShellTool;
8
+ /**
9
+ * Creates a standard Tool from LocalShellTool parameters
10
+ */
11
+ export declare function localShellTool(): Tool;
@@ -0,0 +1,17 @@
1
+ function convertLocalShellToolToAdapterFormat(_tool) {
2
+ return {
3
+ type: "local_shell"
4
+ };
5
+ }
6
+ function localShellTool() {
7
+ return {
8
+ name: "local_shell",
9
+ description: "Execute local shell commands",
10
+ metadata: {}
11
+ };
12
+ }
13
+ export {
14
+ convertLocalShellToolToAdapterFormat,
15
+ localShellTool
16
+ };
17
+ //# sourceMappingURL=local-shell-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-shell-tool.js","sources":["../../../src/tools/local-shell-tool.ts"],"sourcesContent":["import type OpenAI from 'openai'\nimport type { Tool } from '@tanstack/ai'\n\nexport type LocalShellTool = OpenAI.Responses.Tool.LocalShell\n\n/**\n * Converts a standard Tool to OpenAI LocalShellTool format\n */\nexport function convertLocalShellToolToAdapterFormat(\n _tool: Tool,\n): LocalShellTool {\n return {\n type: 'local_shell',\n }\n}\n\n/**\n * Creates a standard Tool from LocalShellTool parameters\n */\nexport function localShellTool(): Tool {\n return {\n name: 'local_shell',\n description: 'Execute local shell commands',\n metadata: {},\n }\n}\n"],"names":[],"mappings":"AAQO,SAAS,qCACd,OACgB;AAChB,SAAO;AAAA,IACL,MAAM;AAAA,EAAA;AAEV;AAKO,SAAS,iBAAuB;AACrC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU,CAAA;AAAA,EAAC;AAEf;"}
@@ -0,0 +1,12 @@
1
+ import { default as OpenAI } from 'openai';
2
+ import { Tool } from '@tanstack/ai';
3
+ export type MCPTool = OpenAI.Responses.Tool.Mcp;
4
+ export declare function validateMCPtool(tool: MCPTool): void;
5
+ /**
6
+ * Converts a standard Tool to OpenAI MCPTool format
7
+ */
8
+ export declare function convertMCPToolToAdapterFormat(tool: Tool): MCPTool;
9
+ /**
10
+ * Creates a standard Tool from MCPTool parameters
11
+ */
12
+ export declare function mcpTool(toolData: Omit<MCPTool, 'type'>): Tool;
@@ -0,0 +1,31 @@
1
+ function validateMCPtool(tool) {
2
+ if (!tool.server_url && !tool.connector_id) {
3
+ throw new Error("Either server_url or connector_id must be provided.");
4
+ }
5
+ if (tool.connector_id && tool.server_url) {
6
+ throw new Error("Only one of server_url or connector_id can be provided.");
7
+ }
8
+ }
9
+ function convertMCPToolToAdapterFormat(tool) {
10
+ const metadata = tool.metadata;
11
+ const mcpTool2 = {
12
+ ...metadata,
13
+ type: "mcp"
14
+ };
15
+ validateMCPtool(mcpTool2);
16
+ return mcpTool2;
17
+ }
18
+ function mcpTool(toolData) {
19
+ validateMCPtool({ ...toolData });
20
+ return {
21
+ name: "mcp",
22
+ description: toolData.server_description || "",
23
+ metadata: toolData
24
+ };
25
+ }
26
+ export {
27
+ convertMCPToolToAdapterFormat,
28
+ mcpTool,
29
+ validateMCPtool
30
+ };
31
+ //# sourceMappingURL=mcp-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tool.js","sources":["../../../src/tools/mcp-tool.ts"],"sourcesContent":["import type OpenAI from 'openai'\nimport type { Tool } from '@tanstack/ai'\n\nexport type MCPTool = OpenAI.Responses.Tool.Mcp\n\nexport function validateMCPtool(tool: MCPTool) {\n if (!tool.server_url && !tool.connector_id) {\n throw new Error('Either server_url or connector_id must be provided.')\n }\n if (tool.connector_id && tool.server_url) {\n throw new Error('Only one of server_url or connector_id can be provided.')\n }\n}\n\n/**\n * Converts a standard Tool to OpenAI MCPTool format\n */\nexport function convertMCPToolToAdapterFormat(tool: Tool): MCPTool {\n const metadata = tool.metadata as Omit<MCPTool, 'type'>\n\n const mcpTool: MCPTool = {\n ...metadata,\n type: 'mcp',\n }\n\n validateMCPtool(mcpTool)\n return mcpTool\n}\n\n/**\n * Creates a standard Tool from MCPTool parameters\n */\nexport function mcpTool(toolData: Omit<MCPTool, 'type'>): Tool {\n validateMCPtool({ ...toolData, type: 'mcp' })\n\n return {\n name: 'mcp',\n description: toolData.server_description || '',\n metadata: toolData,\n }\n}\n"],"names":["mcpTool"],"mappings":"AAKO,SAAS,gBAAgB,MAAe;AAC7C,MAAI,CAAC,KAAK,cAAc,CAAC,KAAK,cAAc;AAC1C,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,MAAI,KAAK,gBAAgB,KAAK,YAAY;AACxC,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AACF;AAKO,SAAS,8BAA8B,MAAqB;AACjE,QAAM,WAAW,KAAK;AAEtB,QAAMA,WAAmB;AAAA,IACvB,GAAG;AAAA,IACH,MAAM;AAAA,EAAA;AAGR,kBAAgBA,QAAO;AACvB,SAAOA;AACT;AAKO,SAAS,QAAQ,UAAuC;AAC7D,kBAAgB,EAAE,GAAG,SAAsB,CAAC;AAE5C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa,SAAS,sBAAsB;AAAA,IAC5C,UAAU;AAAA,EAAA;AAEd;"}
@@ -0,0 +1,11 @@
1
+ import { default as OpenAI } from 'openai';
2
+ import { Tool } from '@tanstack/ai';
3
+ export type ShellTool = OpenAI.Responses.FunctionShellTool;
4
+ /**
5
+ * Converts a standard Tool to OpenAI ShellTool format
6
+ */
7
+ export declare function convertShellToolToAdapterFormat(_tool: Tool): ShellTool;
8
+ /**
9
+ * Creates a standard Tool from ShellTool parameters
10
+ */
11
+ export declare function shellTool(): Tool;
@@ -0,0 +1,17 @@
1
+ function convertShellToolToAdapterFormat(_tool) {
2
+ return {
3
+ type: "shell"
4
+ };
5
+ }
6
+ function shellTool() {
7
+ return {
8
+ name: "shell",
9
+ description: "Execute shell commands",
10
+ metadata: {}
11
+ };
12
+ }
13
+ export {
14
+ convertShellToolToAdapterFormat,
15
+ shellTool
16
+ };
17
+ //# sourceMappingURL=shell-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-tool.js","sources":["../../../src/tools/shell-tool.ts"],"sourcesContent":["import type OpenAI from 'openai'\nimport type { Tool } from '@tanstack/ai'\n\nexport type ShellTool = OpenAI.Responses.FunctionShellTool\n\n/**\n * Converts a standard Tool to OpenAI ShellTool format\n */\nexport function convertShellToolToAdapterFormat(_tool: Tool): ShellTool {\n return {\n type: 'shell',\n }\n}\n\n/**\n * Creates a standard Tool from ShellTool parameters\n */\nexport function shellTool(): Tool {\n return {\n name: 'shell',\n description: 'Execute shell commands',\n metadata: {},\n }\n}\n"],"names":[],"mappings":"AAQO,SAAS,gCAAgC,OAAwB;AACtE,SAAO;AAAA,IACL,MAAM;AAAA,EAAA;AAEV;AAKO,SAAS,YAAkB;AAChC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU,CAAA;AAAA,EAAC;AAEf;"}
@@ -0,0 +1,17 @@
1
+ interface MCPToolChoice {
2
+ type: 'mcp';
3
+ server_label: string;
4
+ }
5
+ interface FunctionToolChoice {
6
+ type: 'function';
7
+ name: string;
8
+ }
9
+ interface CustomToolChoice {
10
+ type: 'custom';
11
+ name: string;
12
+ }
13
+ interface HostedToolChoice {
14
+ type: 'file_search' | 'web_search_preview' | 'computer_use_preview' | 'code_interpreter' | 'image_generation' | 'shell' | 'apply_patch';
15
+ }
16
+ export type ToolChoice = MCPToolChoice | FunctionToolChoice | CustomToolChoice | HostedToolChoice;
17
+ export {};
@@ -0,0 +1,6 @@
1
+ import { OpenAITool } from './index.js';
2
+ import { Tool } from '@tanstack/ai';
3
+ /**
4
+ * Converts an array of standard Tools to OpenAI-specific format
5
+ */
6
+ export declare function convertToolsToProviderFormat(tools: Array<Tool>): Array<OpenAITool>;
@@ -0,0 +1,61 @@
1
+ import { convertApplyPatchToolToAdapterFormat } from "./apply-patch-tool.js";
2
+ import { convertCodeInterpreterToolToAdapterFormat } from "./code-interpreter-tool.js";
3
+ import { convertComputerUseToolToAdapterFormat } from "./computer-use-tool.js";
4
+ import { convertCustomToolToAdapterFormat } from "./custom-tool.js";
5
+ import { convertFileSearchToolToAdapterFormat } from "./file-search-tool.js";
6
+ import { convertFunctionToolToAdapterFormat } from "./function-tool.js";
7
+ import { convertImageGenerationToolToAdapterFormat } from "./image-generation-tool.js";
8
+ import { convertLocalShellToolToAdapterFormat } from "./local-shell-tool.js";
9
+ import { convertMCPToolToAdapterFormat } from "./mcp-tool.js";
10
+ import { convertShellToolToAdapterFormat } from "./shell-tool.js";
11
+ import { convertWebSearchPreviewToolToAdapterFormat } from "./web-search-preview-tool.js";
12
+ import { convertWebSearchToolToAdapterFormat } from "./web-search-tool.js";
13
+ const SPECIAL_TOOL_NAMES = /* @__PURE__ */ new Set([
14
+ "apply_patch",
15
+ "code_interpreter",
16
+ "computer_use_preview",
17
+ "file_search",
18
+ "image_generation",
19
+ "local_shell",
20
+ "mcp",
21
+ "shell",
22
+ "web_search_preview",
23
+ "web_search",
24
+ "custom"
25
+ ]);
26
+ function convertToolsToProviderFormat(tools) {
27
+ return tools.map((tool) => {
28
+ const toolName = tool.name;
29
+ if (SPECIAL_TOOL_NAMES.has(toolName)) {
30
+ switch (toolName) {
31
+ case "apply_patch":
32
+ return convertApplyPatchToolToAdapterFormat();
33
+ case "code_interpreter":
34
+ return convertCodeInterpreterToolToAdapterFormat(tool);
35
+ case "computer_use_preview":
36
+ return convertComputerUseToolToAdapterFormat(tool);
37
+ case "file_search":
38
+ return convertFileSearchToolToAdapterFormat(tool);
39
+ case "image_generation":
40
+ return convertImageGenerationToolToAdapterFormat(tool);
41
+ case "local_shell":
42
+ return convertLocalShellToolToAdapterFormat();
43
+ case "mcp":
44
+ return convertMCPToolToAdapterFormat(tool);
45
+ case "shell":
46
+ return convertShellToolToAdapterFormat();
47
+ case "web_search_preview":
48
+ return convertWebSearchPreviewToolToAdapterFormat(tool);
49
+ case "web_search":
50
+ return convertWebSearchToolToAdapterFormat(tool);
51
+ case "custom":
52
+ return convertCustomToolToAdapterFormat(tool);
53
+ }
54
+ }
55
+ return convertFunctionToolToAdapterFormat(tool);
56
+ });
57
+ }
58
+ export {
59
+ convertToolsToProviderFormat
60
+ };
61
+ //# sourceMappingURL=tool-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-converter.js","sources":["../../../src/tools/tool-converter.ts"],"sourcesContent":["import { convertApplyPatchToolToAdapterFormat } from './apply-patch-tool'\nimport { convertCodeInterpreterToolToAdapterFormat } from './code-interpreter-tool'\nimport { convertComputerUseToolToAdapterFormat } from './computer-use-tool'\nimport { convertCustomToolToAdapterFormat } from './custom-tool'\nimport { convertFileSearchToolToAdapterFormat } from './file-search-tool'\nimport { convertFunctionToolToAdapterFormat } from './function-tool'\nimport { convertImageGenerationToolToAdapterFormat } from './image-generation-tool'\nimport { convertLocalShellToolToAdapterFormat } from './local-shell-tool'\nimport { convertMCPToolToAdapterFormat } from './mcp-tool'\nimport { convertShellToolToAdapterFormat } from './shell-tool'\nimport { convertWebSearchPreviewToolToAdapterFormat } from './web-search-preview-tool'\nimport { convertWebSearchToolToAdapterFormat } from './web-search-tool'\nimport type { OpenAITool } from './index'\nimport type { Tool } from '@tanstack/ai'\n\nconst SPECIAL_TOOL_NAMES = new Set([\n 'apply_patch',\n 'code_interpreter',\n 'computer_use_preview',\n 'file_search',\n 'image_generation',\n 'local_shell',\n 'mcp',\n 'shell',\n 'web_search_preview',\n 'web_search',\n 'custom',\n])\n\n/**\n * Converts an array of standard Tools to OpenAI-specific format\n */\nexport function convertToolsToProviderFormat(\n tools: Array<Tool>,\n): Array<OpenAITool> {\n return tools.map((tool) => {\n const toolName = tool.name\n\n if (SPECIAL_TOOL_NAMES.has(toolName)) {\n switch (toolName) {\n case 'apply_patch':\n return convertApplyPatchToolToAdapterFormat(tool)\n case 'code_interpreter':\n return convertCodeInterpreterToolToAdapterFormat(tool)\n case 'computer_use_preview':\n return convertComputerUseToolToAdapterFormat(tool)\n case 'file_search':\n return convertFileSearchToolToAdapterFormat(tool)\n case 'image_generation':\n return convertImageGenerationToolToAdapterFormat(tool)\n case 'local_shell':\n return convertLocalShellToolToAdapterFormat(tool)\n case 'mcp':\n return convertMCPToolToAdapterFormat(tool)\n case 'shell':\n return convertShellToolToAdapterFormat(tool)\n case 'web_search_preview':\n return convertWebSearchPreviewToolToAdapterFormat(tool)\n case 'web_search':\n return convertWebSearchToolToAdapterFormat(tool)\n case 'custom':\n return convertCustomToolToAdapterFormat(tool)\n }\n }\n\n return convertFunctionToolToAdapterFormat(tool)\n })\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAeA,MAAM,yCAAyB,IAAI;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAKM,SAAS,6BACd,OACmB;AACnB,SAAO,MAAM,IAAI,CAAC,SAAS;AACzB,UAAM,WAAW,KAAK;AAEtB,QAAI,mBAAmB,IAAI,QAAQ,GAAG;AACpC,cAAQ,UAAA;AAAA,QACN,KAAK;AACH,iBAAO,qCAAyC;AAAA,QAClD,KAAK;AACH,iBAAO,0CAA0C,IAAI;AAAA,QACvD,KAAK;AACH,iBAAO,sCAAsC,IAAI;AAAA,QACnD,KAAK;AACH,iBAAO,qCAAqC,IAAI;AAAA,QAClD,KAAK;AACH,iBAAO,0CAA0C,IAAI;AAAA,QACvD,KAAK;AACH,iBAAO,qCAAyC;AAAA,QAClD,KAAK;AACH,iBAAO,8BAA8B,IAAI;AAAA,QAC3C,KAAK;AACH,iBAAO,gCAAoC;AAAA,QAC7C,KAAK;AACH,iBAAO,2CAA2C,IAAI;AAAA,QACxD,KAAK;AACH,iBAAO,oCAAoC,IAAI;AAAA,QACjD,KAAK;AACH,iBAAO,iCAAiC,IAAI;AAAA,MAAA;AAAA,IAElD;AAEA,WAAO,mCAAmC,IAAI;AAAA,EAChD,CAAC;AACH;"}
@@ -0,0 +1,11 @@
1
+ import { default as OpenAI } from 'openai';
2
+ import { Tool } from '@tanstack/ai';
3
+ export type WebSearchPreviewTool = OpenAI.Responses.WebSearchPreviewTool;
4
+ /**
5
+ * Converts a standard Tool to OpenAI WebSearchPreviewTool format
6
+ */
7
+ export declare function convertWebSearchPreviewToolToAdapterFormat(tool: Tool): WebSearchPreviewTool;
8
+ /**
9
+ * Creates a standard Tool from WebSearchPreviewTool parameters
10
+ */
11
+ export declare function webSearchPreviewTool(toolData: WebSearchPreviewTool): Tool;
@@ -0,0 +1,20 @@
1
+ function convertWebSearchPreviewToolToAdapterFormat(tool) {
2
+ const metadata = tool.metadata;
3
+ return {
4
+ type: metadata.type,
5
+ search_context_size: metadata.search_context_size,
6
+ user_location: metadata.user_location
7
+ };
8
+ }
9
+ function webSearchPreviewTool(toolData) {
10
+ return {
11
+ name: "web_search_preview",
12
+ description: "Search the web (preview version)",
13
+ metadata: toolData
14
+ };
15
+ }
16
+ export {
17
+ convertWebSearchPreviewToolToAdapterFormat,
18
+ webSearchPreviewTool
19
+ };
20
+ //# sourceMappingURL=web-search-preview-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-search-preview-tool.js","sources":["../../../src/tools/web-search-preview-tool.ts"],"sourcesContent":["import type OpenAI from 'openai'\nimport type { Tool } from '@tanstack/ai'\n\nexport type WebSearchPreviewTool = OpenAI.Responses.WebSearchPreviewTool\n\n/**\n * Converts a standard Tool to OpenAI WebSearchPreviewTool format\n */\nexport function convertWebSearchPreviewToolToAdapterFormat(\n tool: Tool,\n): WebSearchPreviewTool {\n const metadata = tool.metadata as WebSearchPreviewTool\n return {\n type: metadata.type,\n search_context_size: metadata.search_context_size,\n user_location: metadata.user_location,\n }\n}\n\n/**\n * Creates a standard Tool from WebSearchPreviewTool parameters\n */\nexport function webSearchPreviewTool(toolData: WebSearchPreviewTool): Tool {\n return {\n name: 'web_search_preview',\n description: 'Search the web (preview version)',\n metadata: toolData,\n }\n}\n"],"names":[],"mappings":"AAQO,SAAS,2CACd,MACsB;AACtB,QAAM,WAAW,KAAK;AACtB,SAAO;AAAA,IACL,MAAM,SAAS;AAAA,IACf,qBAAqB,SAAS;AAAA,IAC9B,eAAe,SAAS;AAAA,EAAA;AAE5B;AAKO,SAAS,qBAAqB,UAAsC;AACzE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EAAA;AAEd;"}
@@ -0,0 +1,11 @@
1
+ import { default as OpenAI } from 'openai';
2
+ import { Tool } from '@tanstack/ai';
3
+ export type WebSearchTool = OpenAI.Responses.WebSearchTool;
4
+ /**
5
+ * Converts a standard Tool to OpenAI WebSearchTool format
6
+ */
7
+ export declare function convertWebSearchToolToAdapterFormat(tool: Tool): WebSearchTool;
8
+ /**
9
+ * Creates a standard Tool from WebSearchTool parameters
10
+ */
11
+ export declare function webSearchTool(toolData: WebSearchTool): Tool;
@@ -0,0 +1,16 @@
1
+ function convertWebSearchToolToAdapterFormat(tool) {
2
+ const metadata = tool.metadata;
3
+ return metadata;
4
+ }
5
+ function webSearchTool(toolData) {
6
+ return {
7
+ name: "web_search",
8
+ description: "Search the web",
9
+ metadata: toolData
10
+ };
11
+ }
12
+ export {
13
+ convertWebSearchToolToAdapterFormat,
14
+ webSearchTool
15
+ };
16
+ //# sourceMappingURL=web-search-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-search-tool.js","sources":["../../../src/tools/web-search-tool.ts"],"sourcesContent":["import type OpenAI from 'openai'\nimport type { Tool } from '@tanstack/ai'\n\nexport type WebSearchTool = OpenAI.Responses.WebSearchTool\n\n/**\n * Converts a standard Tool to OpenAI WebSearchTool format\n */\nexport function convertWebSearchToolToAdapterFormat(tool: Tool): WebSearchTool {\n const metadata = tool.metadata as WebSearchTool\n return metadata\n}\n\n/**\n * Creates a standard Tool from WebSearchTool parameters\n */\nexport function webSearchTool(toolData: WebSearchTool): Tool {\n return {\n name: 'web_search',\n description: 'Search the web',\n metadata: toolData,\n }\n}\n"],"names":[],"mappings":"AAQO,SAAS,oCAAoC,MAA2B;AAC7E,QAAM,WAAW,KAAK;AACtB,SAAO;AACT;AAKO,SAAS,cAAc,UAA+B;AAC3D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EAAA;AAEd;"}
@@ -0,0 +1,4 @@
1
+ import { ClientOptions } from 'openai';
2
+ export interface OpenAICompatibleClientConfig extends ClientOptions {
3
+ apiKey: string;
4
+ }
@@ -0,0 +1,19 @@
1
+ export interface OpenAICompatibleImageMetadata {
2
+ detail?: 'auto' | 'low' | 'high';
3
+ }
4
+ export interface OpenAICompatibleAudioMetadata {
5
+ format?: 'mp3' | 'wav' | 'flac' | 'ogg' | 'webm' | 'aac';
6
+ }
7
+ export interface OpenAICompatibleVideoMetadata {
8
+ }
9
+ export interface OpenAICompatibleDocumentMetadata {
10
+ }
11
+ export interface OpenAICompatibleTextMetadata {
12
+ }
13
+ export interface OpenAICompatibleMessageMetadataByModality {
14
+ text: OpenAICompatibleTextMetadata;
15
+ image: OpenAICompatibleImageMetadata;
16
+ audio: OpenAICompatibleAudioMetadata;
17
+ video: OpenAICompatibleVideoMetadata;
18
+ document: OpenAICompatibleDocumentMetadata;
19
+ }
@@ -0,0 +1,40 @@
1
+ export interface OpenAICompatibleBaseOptions {
2
+ temperature?: number;
3
+ top_p?: number;
4
+ max_tokens?: number;
5
+ frequency_penalty?: number;
6
+ presence_penalty?: number;
7
+ stop?: string | Array<string>;
8
+ user?: string;
9
+ }
10
+ export interface OpenAICompatibleReasoningOptions {
11
+ reasoning?: {
12
+ effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high';
13
+ summary?: 'auto' | 'detailed';
14
+ };
15
+ }
16
+ export interface OpenAICompatibleStructuredOutputOptions {
17
+ text?: {
18
+ format: {
19
+ type: string;
20
+ name?: string;
21
+ schema?: Record<string, unknown>;
22
+ strict?: boolean;
23
+ };
24
+ };
25
+ }
26
+ export interface OpenAICompatibleToolsOptions {
27
+ max_tool_calls?: number;
28
+ parallel_tool_calls?: boolean;
29
+ tool_choice?: 'auto' | 'none' | 'required' | {
30
+ type: 'function';
31
+ function: {
32
+ name: string;
33
+ };
34
+ };
35
+ }
36
+ export interface OpenAICompatibleStreamingOptions {
37
+ stream_options?: {
38
+ include_usage?: boolean;
39
+ };
40
+ }
@@ -0,0 +1,3 @@
1
+ import { default as OpenAI } from 'openai';
2
+ import { OpenAICompatibleClientConfig } from '../types/config.js';
3
+ export declare function createOpenAICompatibleClient(config: OpenAICompatibleClientConfig): OpenAI;
@@ -0,0 +1,8 @@
1
+ import OpenAI from "openai";
2
+ function createOpenAICompatibleClient(config) {
3
+ return new OpenAI(config);
4
+ }
5
+ export {
6
+ createOpenAICompatibleClient
7
+ };
8
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sources":["../../../src/utils/client.ts"],"sourcesContent":["import OpenAI from 'openai'\nimport type { OpenAICompatibleClientConfig } from '../types/config'\n\nexport function createOpenAICompatibleClient(\n config: OpenAICompatibleClientConfig,\n): OpenAI {\n return new OpenAI(config)\n}\n"],"names":[],"mappings":";AAGO,SAAS,6BACd,QACQ;AACR,SAAO,IAAI,OAAO,MAAM;AAC1B;"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Transform a JSON schema to be compatible with OpenAI's structured output requirements.
3
+ * OpenAI requires:
4
+ * - All properties must be in the `required` array
5
+ * - Optional fields should have null added to their type union
6
+ * - additionalProperties must be false for objects
7
+ *
8
+ * @param schema - JSON schema to transform
9
+ * @param originalRequired - Original required array (to know which fields were optional)
10
+ * @returns Transformed schema compatible with OpenAI structured output
11
+ */
12
+ export declare function makeStructuredOutputCompatible(schema: Record<string, any>, originalRequired?: Array<string>): Record<string, any>;
@@ -0,0 +1,65 @@
1
+ function makeStructuredOutputCompatible(schema, originalRequired) {
2
+ const result = { ...schema };
3
+ const required = originalRequired ?? (Array.isArray(result.required) ? result.required : []);
4
+ if (result.type === "object" && result.properties) {
5
+ const properties = { ...result.properties };
6
+ const allPropertyNames = Object.keys(properties);
7
+ for (const propName of allPropertyNames) {
8
+ let prop = properties[propName];
9
+ const wasOptional = !required.includes(propName);
10
+ if (prop.type === "object" && prop.properties) {
11
+ prop = makeStructuredOutputCompatible(prop, prop.required || []);
12
+ } else if (prop.type === "array" && prop.items) {
13
+ prop = {
14
+ ...prop,
15
+ items: makeStructuredOutputCompatible(
16
+ prop.items,
17
+ prop.items.required || []
18
+ )
19
+ };
20
+ } else if (prop.anyOf) {
21
+ prop = makeStructuredOutputCompatible(prop, prop.required || []);
22
+ } else if (prop.oneOf) {
23
+ throw new Error(
24
+ "oneOf is not supported in OpenAI structured output schemas. Check the supported outputs here: https://platform.openai.com/docs/guides/structured-outputs#supported-types"
25
+ );
26
+ }
27
+ if (wasOptional) {
28
+ if (prop.anyOf) {
29
+ if (!prop.anyOf.some((v) => v.type === "null")) {
30
+ prop = { ...prop, anyOf: [...prop.anyOf, { type: "null" }] };
31
+ }
32
+ } else if (prop.type && !Array.isArray(prop.type)) {
33
+ prop = { ...prop, type: [prop.type, "null"] };
34
+ } else if (Array.isArray(prop.type) && !prop.type.includes("null")) {
35
+ prop = { ...prop, type: [...prop.type, "null"] };
36
+ }
37
+ }
38
+ properties[propName] = prop;
39
+ }
40
+ result.properties = properties;
41
+ result.required = allPropertyNames;
42
+ result.additionalProperties = false;
43
+ }
44
+ if (result.type === "array" && result.items) {
45
+ result.items = makeStructuredOutputCompatible(
46
+ result.items,
47
+ result.items.required || []
48
+ );
49
+ }
50
+ if (result.anyOf && Array.isArray(result.anyOf)) {
51
+ result.anyOf = result.anyOf.map(
52
+ (variant) => makeStructuredOutputCompatible(variant, variant.required || [])
53
+ );
54
+ }
55
+ if (result.oneOf) {
56
+ throw new Error(
57
+ "oneOf is not supported in OpenAI structured output schemas. Check the supported outputs here: https://platform.openai.com/docs/guides/structured-outputs#supported-types"
58
+ );
59
+ }
60
+ return result;
61
+ }
62
+ export {
63
+ makeStructuredOutputCompatible
64
+ };
65
+ //# sourceMappingURL=schema-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-converter.js","sources":["../../../src/utils/schema-converter.ts"],"sourcesContent":["/**\n * Transform a JSON schema to be compatible with OpenAI's structured output requirements.\n * OpenAI requires:\n * - All properties must be in the `required` array\n * - Optional fields should have null added to their type union\n * - additionalProperties must be false for objects\n *\n * @param schema - JSON schema to transform\n * @param originalRequired - Original required array (to know which fields were optional)\n * @returns Transformed schema compatible with OpenAI structured output\n */\nexport function makeStructuredOutputCompatible(\n schema: Record<string, any>,\n originalRequired?: Array<string>,\n): Record<string, any> {\n const result = { ...schema }\n const required =\n originalRequired ?? (Array.isArray(result.required) ? result.required : [])\n\n if (result.type === 'object' && result.properties) {\n const properties = { ...result.properties }\n const allPropertyNames = Object.keys(properties)\n\n for (const propName of allPropertyNames) {\n let prop = properties[propName]\n const wasOptional = !required.includes(propName)\n\n // Step 1: Recurse into nested structures\n if (prop.type === 'object' && prop.properties) {\n prop = makeStructuredOutputCompatible(prop, prop.required || [])\n } else if (prop.type === 'array' && prop.items) {\n prop = {\n ...prop,\n items: makeStructuredOutputCompatible(\n prop.items,\n prop.items.required || [],\n ),\n }\n } else if (prop.anyOf) {\n prop = makeStructuredOutputCompatible(prop, prop.required || [])\n } else if (prop.oneOf) {\n throw new Error(\n 'oneOf is not supported in OpenAI structured output schemas. Check the supported outputs here: https://platform.openai.com/docs/guides/structured-outputs#supported-types',\n )\n }\n\n // Step 2: Apply null-widening for optional properties (after recursion)\n if (wasOptional) {\n if (prop.anyOf) {\n // For anyOf, add a null variant if not already present\n if (!prop.anyOf.some((v: any) => v.type === 'null')) {\n prop = { ...prop, anyOf: [...prop.anyOf, { type: 'null' }] }\n }\n } else if (prop.type && !Array.isArray(prop.type)) {\n prop = { ...prop, type: [prop.type, 'null'] }\n } else if (Array.isArray(prop.type) && !prop.type.includes('null')) {\n prop = { ...prop, type: [...prop.type, 'null'] }\n }\n }\n\n properties[propName] = prop\n }\n\n result.properties = properties\n result.required = allPropertyNames\n result.additionalProperties = false\n }\n\n if (result.type === 'array' && result.items) {\n result.items = makeStructuredOutputCompatible(\n result.items,\n result.items.required || [],\n )\n }\n\n if (result.anyOf && Array.isArray(result.anyOf)) {\n result.anyOf = result.anyOf.map((variant) =>\n makeStructuredOutputCompatible(variant, variant.required || []),\n )\n }\n\n if (result.oneOf) {\n throw new Error(\n 'oneOf is not supported in OpenAI structured output schemas. Check the supported outputs here: https://platform.openai.com/docs/guides/structured-outputs#supported-types',\n )\n }\n\n return result\n}\n"],"names":[],"mappings":"AAWO,SAAS,+BACd,QACA,kBACqB;AACrB,QAAM,SAAS,EAAE,GAAG,OAAA;AACpB,QAAM,WACJ,qBAAqB,MAAM,QAAQ,OAAO,QAAQ,IAAI,OAAO,WAAW;AAE1E,MAAI,OAAO,SAAS,YAAY,OAAO,YAAY;AACjD,UAAM,aAAa,EAAE,GAAG,OAAO,WAAA;AAC/B,UAAM,mBAAmB,OAAO,KAAK,UAAU;AAE/C,eAAW,YAAY,kBAAkB;AACvC,UAAI,OAAO,WAAW,QAAQ;AAC9B,YAAM,cAAc,CAAC,SAAS,SAAS,QAAQ;AAG/C,UAAI,KAAK,SAAS,YAAY,KAAK,YAAY;AAC7C,eAAO,+BAA+B,MAAM,KAAK,YAAY,CAAA,CAAE;AAAA,MACjE,WAAW,KAAK,SAAS,WAAW,KAAK,OAAO;AAC9C,eAAO;AAAA,UACL,GAAG;AAAA,UACH,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK,MAAM,YAAY,CAAA;AAAA,UAAC;AAAA,QAC1B;AAAA,MAEJ,WAAW,KAAK,OAAO;AACrB,eAAO,+BAA+B,MAAM,KAAK,YAAY,CAAA,CAAE;AAAA,MACjE,WAAW,KAAK,OAAO;AACrB,cAAM,IAAI;AAAA,UACR;AAAA,QAAA;AAAA,MAEJ;AAGA,UAAI,aAAa;AACf,YAAI,KAAK,OAAO;AAEd,cAAI,CAAC,KAAK,MAAM,KAAK,CAAC,MAAW,EAAE,SAAS,MAAM,GAAG;AACnD,mBAAO,EAAE,GAAG,MAAM,OAAO,CAAC,GAAG,KAAK,OAAO,EAAE,MAAM,OAAA,CAAQ,EAAA;AAAA,UAC3D;AAAA,QACF,WAAW,KAAK,QAAQ,CAAC,MAAM,QAAQ,KAAK,IAAI,GAAG;AACjD,iBAAO,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,MAAM,MAAM,EAAA;AAAA,QAC5C,WAAW,MAAM,QAAQ,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,MAAM,GAAG;AAClE,iBAAO,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,KAAK,MAAM,MAAM,EAAA;AAAA,QAC/C;AAAA,MACF;AAEA,iBAAW,QAAQ,IAAI;AAAA,IACzB;AAEA,WAAO,aAAa;AACpB,WAAO,WAAW;AAClB,WAAO,uBAAuB;AAAA,EAChC;AAEA,MAAI,OAAO,SAAS,WAAW,OAAO,OAAO;AAC3C,WAAO,QAAQ;AAAA,MACb,OAAO;AAAA,MACP,OAAO,MAAM,YAAY,CAAA;AAAA,IAAC;AAAA,EAE9B;AAEA,MAAI,OAAO,SAAS,MAAM,QAAQ,OAAO,KAAK,GAAG;AAC/C,WAAO,QAAQ,OAAO,MAAM;AAAA,MAAI,CAAC,YAC/B,+BAA+B,SAAS,QAAQ,YAAY,CAAA,CAAE;AAAA,IAAA;AAAA,EAElE;AAEA,MAAI,OAAO,OAAO;AAChB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,SAAO;AACT;"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@tanstack/openai-base",
3
+ "version": "0.1.0",
4
+ "description": "Shared base adapters and utilities for OpenAI-compatible providers in 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/openai-base"
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
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "scripts": {
29
+ "build": "vite build",
30
+ "clean": "premove ./build ./dist",
31
+ "lint:fix": "eslint ./src --fix",
32
+ "test:build": "publint --strict",
33
+ "test:eslint": "eslint ./src",
34
+ "test:lib": "vitest run",
35
+ "test:lib:dev": "pnpm test:lib --watch",
36
+ "test:types": "tsc"
37
+ },
38
+ "keywords": [
39
+ "ai",
40
+ "openai",
41
+ "tanstack",
42
+ "adapter",
43
+ "base"
44
+ ],
45
+ "dependencies": {
46
+ "@tanstack/ai-utils": "workspace:*",
47
+ "openai": "^6.9.1"
48
+ },
49
+ "peerDependencies": {
50
+ "@tanstack/ai": "workspace:^"
51
+ },
52
+ "devDependencies": {
53
+ "@tanstack/ai": "workspace:*",
54
+ "@vitest/coverage-v8": "4.0.14",
55
+ "vite": "^7.2.7"
56
+ }
57
+ }