@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.
- package/dist/esm/adapters/chat-completions-text.d.ts +76 -0
- package/dist/esm/adapters/chat-completions-text.js +411 -0
- package/dist/esm/adapters/chat-completions-text.js.map +1 -0
- package/dist/esm/adapters/chat-completions-tool-converter.d.ts +24 -0
- package/dist/esm/adapters/chat-completions-tool-converter.js +29 -0
- package/dist/esm/adapters/chat-completions-tool-converter.js.map +1 -0
- package/dist/esm/adapters/image.d.ts +32 -0
- package/dist/esm/adapters/image.js +69 -0
- package/dist/esm/adapters/image.js.map +1 -0
- package/dist/esm/adapters/responses-text.d.ts +115 -0
- package/dist/esm/adapters/responses-text.js +635 -0
- package/dist/esm/adapters/responses-text.js.map +1 -0
- package/dist/esm/adapters/responses-tool-converter.d.ts +35 -0
- package/dist/esm/adapters/responses-tool-converter.js +27 -0
- package/dist/esm/adapters/responses-tool-converter.js.map +1 -0
- package/dist/esm/adapters/summarize.d.ts +28 -0
- package/dist/esm/adapters/summarize.js +74 -0
- package/dist/esm/adapters/summarize.js.map +1 -0
- package/dist/esm/adapters/transcription.d.ts +39 -0
- package/dist/esm/adapters/transcription.js +139 -0
- package/dist/esm/adapters/transcription.js.map +1 -0
- package/dist/esm/adapters/tts.d.ts +26 -0
- package/dist/esm/adapters/tts.js +65 -0
- package/dist/esm/adapters/tts.js.map +1 -0
- package/dist/esm/adapters/video.d.ts +48 -0
- package/dist/esm/adapters/video.js +192 -0
- package/dist/esm/adapters/video.js.map +1 -0
- package/dist/esm/index.d.ts +15 -0
- package/dist/esm/index.js +65 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/tools/apply-patch-tool.d.ts +11 -0
- package/dist/esm/tools/apply-patch-tool.js +17 -0
- package/dist/esm/tools/apply-patch-tool.js.map +1 -0
- package/dist/esm/tools/code-interpreter-tool.d.ts +11 -0
- package/dist/esm/tools/code-interpreter-tool.js +22 -0
- package/dist/esm/tools/code-interpreter-tool.js.map +1 -0
- package/dist/esm/tools/computer-use-tool.d.ts +11 -0
- package/dist/esm/tools/computer-use-tool.js +23 -0
- package/dist/esm/tools/computer-use-tool.js.map +1 -0
- package/dist/esm/tools/custom-tool.d.ts +11 -0
- package/dist/esm/tools/custom-tool.js +23 -0
- package/dist/esm/tools/custom-tool.js.map +1 -0
- package/dist/esm/tools/file-search-tool.d.ts +11 -0
- package/dist/esm/tools/file-search-tool.js +30 -0
- package/dist/esm/tools/file-search-tool.js.map +1 -0
- package/dist/esm/tools/function-tool.d.ts +15 -0
- package/dist/esm/tools/function-tool.js +24 -0
- package/dist/esm/tools/function-tool.js.map +1 -0
- package/dist/esm/tools/image-generation-tool.d.ts +11 -0
- package/dist/esm/tools/image-generation-tool.js +27 -0
- package/dist/esm/tools/image-generation-tool.js.map +1 -0
- package/dist/esm/tools/index.d.ts +27 -0
- package/dist/esm/tools/local-shell-tool.d.ts +11 -0
- package/dist/esm/tools/local-shell-tool.js +17 -0
- package/dist/esm/tools/local-shell-tool.js.map +1 -0
- package/dist/esm/tools/mcp-tool.d.ts +12 -0
- package/dist/esm/tools/mcp-tool.js +31 -0
- package/dist/esm/tools/mcp-tool.js.map +1 -0
- package/dist/esm/tools/shell-tool.d.ts +11 -0
- package/dist/esm/tools/shell-tool.js +17 -0
- package/dist/esm/tools/shell-tool.js.map +1 -0
- package/dist/esm/tools/tool-choice.d.ts +17 -0
- package/dist/esm/tools/tool-converter.d.ts +6 -0
- package/dist/esm/tools/tool-converter.js +61 -0
- package/dist/esm/tools/tool-converter.js.map +1 -0
- package/dist/esm/tools/web-search-preview-tool.d.ts +11 -0
- package/dist/esm/tools/web-search-preview-tool.js +20 -0
- package/dist/esm/tools/web-search-preview-tool.js.map +1 -0
- package/dist/esm/tools/web-search-tool.d.ts +11 -0
- package/dist/esm/tools/web-search-tool.js +16 -0
- package/dist/esm/tools/web-search-tool.js.map +1 -0
- package/dist/esm/types/config.d.ts +4 -0
- package/dist/esm/types/message-metadata.d.ts +19 -0
- package/dist/esm/types/provider-options.d.ts +40 -0
- package/dist/esm/utils/client.d.ts +3 -0
- package/dist/esm/utils/client.js +8 -0
- package/dist/esm/utils/client.js.map +1 -0
- package/dist/esm/utils/schema-converter.d.ts +12 -0
- package/dist/esm/utils/schema-converter.js +65 -0
- package/dist/esm/utils/schema-converter.js.map +1 -0
- package/package.json +57 -0
- package/src/adapters/chat-completions-text.ts +817 -0
- package/src/adapters/chat-completions-tool-converter.ts +70 -0
- package/src/adapters/image.ts +158 -0
- package/src/adapters/responses-text.ts +1147 -0
- package/src/adapters/responses-tool-converter.ts +77 -0
- package/src/adapters/summarize.ts +174 -0
- package/src/adapters/transcription.ts +194 -0
- package/src/adapters/tts.ts +124 -0
- package/src/adapters/video.ts +385 -0
- package/src/index.ts +24 -0
- package/src/tools/apply-patch-tool.ts +32 -0
- package/src/tools/code-interpreter-tool.ts +39 -0
- package/src/tools/computer-use-tool.ts +38 -0
- package/src/tools/custom-tool.ts +33 -0
- package/src/tools/file-search-tool.ts +51 -0
- package/src/tools/function-tool.ts +44 -0
- package/src/tools/image-generation-tool.ts +51 -0
- package/src/tools/index.ts +41 -0
- package/src/tools/local-shell-tool.ts +32 -0
- package/src/tools/mcp-tool.ts +47 -0
- package/src/tools/shell-tool.ts +30 -0
- package/src/tools/tool-choice.ts +31 -0
- package/src/tools/tool-converter.ts +68 -0
- package/src/tools/web-search-preview-tool.ts +39 -0
- package/src/tools/web-search-tool.ts +38 -0
- package/src/types/config.ts +5 -0
- package/src/utils/client.ts +8 -0
- package/src/utils/request-options.ts +16 -0
- 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,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,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 @@
|
|
|
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
|
+
}
|