@aituber-onair/chat 0.34.1 → 0.36.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 (91) hide show
  1. package/README.ja.md +9 -3
  2. package/README.md +10 -4
  3. package/dist/cjs/constants/claude.d.ts +1 -0
  4. package/dist/cjs/constants/claude.d.ts.map +1 -1
  5. package/dist/cjs/constants/claude.js +3 -1
  6. package/dist/cjs/constants/claude.js.map +1 -1
  7. package/dist/cjs/constants/gemini.d.ts +1 -0
  8. package/dist/cjs/constants/gemini.d.ts.map +1 -1
  9. package/dist/cjs/constants/gemini.js +3 -1
  10. package/dist/cjs/constants/gemini.js.map +1 -1
  11. package/dist/cjs/services/providers/claude/ClaudeChatService.d.ts +0 -24
  12. package/dist/cjs/services/providers/claude/ClaudeChatService.d.ts.map +1 -1
  13. package/dist/cjs/services/providers/claude/ClaudeChatService.js +3 -113
  14. package/dist/cjs/services/providers/claude/ClaudeChatService.js.map +1 -1
  15. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -1
  16. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js +1 -0
  17. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -1
  18. package/dist/cjs/services/providers/claude/claudeMessageConverter.d.ts +6 -0
  19. package/dist/cjs/services/providers/claude/claudeMessageConverter.d.ts.map +1 -0
  20. package/dist/cjs/services/providers/claude/claudeMessageConverter.js +95 -0
  21. package/dist/cjs/services/providers/claude/claudeMessageConverter.js.map +1 -0
  22. package/dist/cjs/services/providers/gemini/GeminiChatService.d.ts +1 -21
  23. package/dist/cjs/services/providers/gemini/GeminiChatService.d.ts.map +1 -1
  24. package/dist/cjs/services/providers/gemini/GeminiChatService.js +21 -258
  25. package/dist/cjs/services/providers/gemini/GeminiChatService.js.map +1 -1
  26. package/dist/cjs/services/providers/gemini/geminiMessageConverter.d.ts +17 -0
  27. package/dist/cjs/services/providers/gemini/geminiMessageConverter.d.ts.map +1 -0
  28. package/dist/cjs/services/providers/gemini/geminiMessageConverter.js +183 -0
  29. package/dist/cjs/services/providers/gemini/geminiMessageConverter.js.map +1 -0
  30. package/dist/cjs/services/providers/gemini/geminiToolAdapter.d.ts +23 -0
  31. package/dist/cjs/services/providers/gemini/geminiToolAdapter.d.ts.map +1 -0
  32. package/dist/cjs/services/providers/gemini/geminiToolAdapter.js +47 -0
  33. package/dist/cjs/services/providers/gemini/geminiToolAdapter.js.map +1 -0
  34. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts +3 -28
  35. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  36. package/dist/cjs/services/providers/openai/OpenAIChatService.js +15 -250
  37. package/dist/cjs/services/providers/openai/OpenAIChatService.js.map +1 -1
  38. package/dist/cjs/services/providers/openai/openaiRequestBuilder.d.ts +33 -0
  39. package/dist/cjs/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -0
  40. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js +218 -0
  41. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js.map +1 -0
  42. package/dist/cjs/services/providers/openai/openaiToolBuilder.d.ts +9 -0
  43. package/dist/cjs/services/providers/openai/openaiToolBuilder.d.ts.map +1 -0
  44. package/dist/cjs/services/providers/openai/openaiToolBuilder.js +36 -0
  45. package/dist/cjs/services/providers/openai/openaiToolBuilder.js.map +1 -0
  46. package/dist/esm/constants/claude.d.ts +1 -0
  47. package/dist/esm/constants/claude.d.ts.map +1 -1
  48. package/dist/esm/constants/claude.js +2 -0
  49. package/dist/esm/constants/claude.js.map +1 -1
  50. package/dist/esm/constants/gemini.d.ts +1 -0
  51. package/dist/esm/constants/gemini.d.ts.map +1 -1
  52. package/dist/esm/constants/gemini.js +2 -0
  53. package/dist/esm/constants/gemini.js.map +1 -1
  54. package/dist/esm/services/providers/claude/ClaudeChatService.d.ts +0 -24
  55. package/dist/esm/services/providers/claude/ClaudeChatService.d.ts.map +1 -1
  56. package/dist/esm/services/providers/claude/ClaudeChatService.js +3 -113
  57. package/dist/esm/services/providers/claude/ClaudeChatService.js.map +1 -1
  58. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -1
  59. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js +2 -1
  60. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -1
  61. package/dist/esm/services/providers/claude/claudeMessageConverter.d.ts +6 -0
  62. package/dist/esm/services/providers/claude/claudeMessageConverter.d.ts.map +1 -0
  63. package/dist/esm/services/providers/claude/claudeMessageConverter.js +89 -0
  64. package/dist/esm/services/providers/claude/claudeMessageConverter.js.map +1 -0
  65. package/dist/esm/services/providers/gemini/GeminiChatService.d.ts +1 -21
  66. package/dist/esm/services/providers/gemini/GeminiChatService.d.ts.map +1 -1
  67. package/dist/esm/services/providers/gemini/GeminiChatService.js +22 -259
  68. package/dist/esm/services/providers/gemini/GeminiChatService.js.map +1 -1
  69. package/dist/esm/services/providers/gemini/geminiMessageConverter.d.ts +17 -0
  70. package/dist/esm/services/providers/gemini/geminiMessageConverter.d.ts.map +1 -0
  71. package/dist/esm/services/providers/gemini/geminiMessageConverter.js +178 -0
  72. package/dist/esm/services/providers/gemini/geminiMessageConverter.js.map +1 -0
  73. package/dist/esm/services/providers/gemini/geminiToolAdapter.d.ts +23 -0
  74. package/dist/esm/services/providers/gemini/geminiToolAdapter.d.ts.map +1 -0
  75. package/dist/esm/services/providers/gemini/geminiToolAdapter.js +42 -0
  76. package/dist/esm/services/providers/gemini/geminiToolAdapter.js.map +1 -0
  77. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts +3 -28
  78. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  79. package/dist/esm/services/providers/openai/OpenAIChatService.js +17 -252
  80. package/dist/esm/services/providers/openai/OpenAIChatService.js.map +1 -1
  81. package/dist/esm/services/providers/openai/openaiRequestBuilder.d.ts +33 -0
  82. package/dist/esm/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -0
  83. package/dist/esm/services/providers/openai/openaiRequestBuilder.js +212 -0
  84. package/dist/esm/services/providers/openai/openaiRequestBuilder.js.map +1 -0
  85. package/dist/esm/services/providers/openai/openaiToolBuilder.d.ts +9 -0
  86. package/dist/esm/services/providers/openai/openaiToolBuilder.d.ts.map +1 -0
  87. package/dist/esm/services/providers/openai/openaiToolBuilder.js +33 -0
  88. package/dist/esm/services/providers/openai/openaiToolBuilder.js.map +1 -0
  89. package/dist/umd/aituber-onair-chat.js +561 -545
  90. package/dist/umd/aituber-onair-chat.min.js +10 -10
  91. package/package.json +3 -1
@@ -0,0 +1,33 @@
1
+ import { OpenAIReasoningEffort } from '../../../constants';
2
+ import { ChatResponseLength } from '../../../constants/chat';
3
+ import type { MCPServerConfig, Message, MessageWithVision, ToolDefinition } from '../../../types';
4
+ type BuildOpenAIRequestBodyOptions = {
5
+ provider: string;
6
+ endpoint: string;
7
+ messages: (Message | MessageWithVision)[];
8
+ model: string;
9
+ stream: boolean;
10
+ tools: ToolDefinition[];
11
+ mcpServers: MCPServerConfig[];
12
+ responseLength?: ChatResponseLength;
13
+ verbosity?: 'low' | 'medium' | 'high';
14
+ reasoning_effort?: OpenAIReasoningEffort;
15
+ enableReasoningSummary?: boolean;
16
+ maxTokens?: number;
17
+ };
18
+ /**
19
+ * Build request body based on the endpoint type.
20
+ */
21
+ export declare function buildOpenAIRequestBody({ provider, endpoint, messages, model, stream, tools, mcpServers, responseLength, verbosity, reasoning_effort, enableReasoningSummary, maxTokens, }: BuildOpenAIRequestBodyOptions): any;
22
+ type ResolveOpenAITokenLimitOptions = {
23
+ provider: string;
24
+ model: string;
25
+ responseLength?: ChatResponseLength;
26
+ reasoning_effort?: OpenAIReasoningEffort;
27
+ maxTokens?: number;
28
+ };
29
+ export declare function resolveOpenAITokenLimit({ provider, model, responseLength, reasoning_effort, maxTokens, }: ResolveOpenAITokenLimitOptions): number | undefined;
30
+ export declare function cleanMessagesForResponsesAPI(messages: (Message | MessageWithVision)[]): any[];
31
+ export declare function cleanMessagesForMistralChatCompletions(messages: (Message | MessageWithVision)[]): any[];
32
+ export {};
33
+ //# sourceMappingURL=openaiRequestBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openaiRequestBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/openai/openaiRequestBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,qBAAqB,EAKtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,iBAAiB,EACjB,cAAc,EACf,MAAM,gBAAgB,CAAC;AA2BxB,KAAK,6BAA6B,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,OAAO,GAAG,iBAAiB,CAAC,EAAE,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,UAAU,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,GACV,EAAE,6BAA6B,GAAG,GAAG,CAsGrC;AAED,KAAK,8BAA8B,GAAG;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,KAAK,EACL,cAAc,EACd,gBAAgB,EAChB,SAAS,GACV,EAAE,8BAA8B,GAAG,MAAM,GAAG,SAAS,CA2BrD;AAmBD,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,CAAC,OAAO,GAAG,iBAAiB,CAAC,EAAE,GACxC,GAAG,EAAE,CAoCP;AAED,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,CAAC,OAAO,GAAG,iBAAiB,CAAC,EAAE,GACxC,GAAG,EAAE,CA2BP"}
@@ -0,0 +1,212 @@
1
+ import { ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, ENDPOINT_OPENAI_RESPONSES_API, getDefaultReasoningEffortForGPT5Model, isGPT5Model, isMistralReasoningEffort, isMistralReasoningEffortModel, } from '../../../constants';
2
+ import { CHAT_RESPONSE_LENGTH, getMaxTokensForResponseLength, } from '../../../constants/chat';
3
+ import { buildOpenAIToolsDefinition } from './openaiToolBuilder';
4
+ const GPT5_RESPONSE_LENGTH_MIN_TOKENS = {
5
+ [CHAT_RESPONSE_LENGTH.VERY_SHORT]: 800,
6
+ [CHAT_RESPONSE_LENGTH.SHORT]: 1200,
7
+ [CHAT_RESPONSE_LENGTH.MEDIUM]: 2000,
8
+ [CHAT_RESPONSE_LENGTH.LONG]: 3000,
9
+ [CHAT_RESPONSE_LENGTH.VERY_LONG]: 8000,
10
+ [CHAT_RESPONSE_LENGTH.DEEP]: 25000,
11
+ };
12
+ const GPT5_REASONING_MIN_TOKENS = {
13
+ none: 1200,
14
+ minimal: 1600,
15
+ low: 2500,
16
+ medium: 4000,
17
+ high: 8000,
18
+ xhigh: 12000,
19
+ };
20
+ const OPENAI_COMPATIBLE_CHAT_COMPLETIONS_PROVIDERS = new Set([
21
+ 'openai-compatible',
22
+ 'deepseek',
23
+ 'mistral',
24
+ ]);
25
+ /**
26
+ * Build request body based on the endpoint type.
27
+ */
28
+ export function buildOpenAIRequestBody({ provider, endpoint, messages, model, stream, tools, mcpServers, responseLength, verbosity, reasoning_effort, enableReasoningSummary, maxTokens, }) {
29
+ const isResponsesAPI = endpoint === ENDPOINT_OPENAI_RESPONSES_API;
30
+ validateMCPCompatibility(endpoint, mcpServers);
31
+ const body = {
32
+ model,
33
+ stream,
34
+ };
35
+ // Add max token field based on endpoint/provider compatibility.
36
+ // For openai-compatible providers, omit token limit by default to avoid
37
+ // server-specific context-window errors on local/self-hosted models.
38
+ const tokenLimit = resolveOpenAITokenLimit({
39
+ provider,
40
+ model,
41
+ responseLength,
42
+ reasoning_effort,
43
+ maxTokens,
44
+ });
45
+ if (isResponsesAPI) {
46
+ if (tokenLimit !== undefined) {
47
+ body.max_output_tokens = tokenLimit;
48
+ }
49
+ }
50
+ else {
51
+ if (tokenLimit !== undefined) {
52
+ // OpenAI-compatible Chat Completions providers expect max_tokens.
53
+ if (usesCompatibleChatCompletions(provider)) {
54
+ body.max_tokens = tokenLimit;
55
+ }
56
+ else {
57
+ body.max_completion_tokens = tokenLimit;
58
+ }
59
+ }
60
+ }
61
+ // Handle messages format based on endpoint.
62
+ if (isResponsesAPI) {
63
+ body.input = cleanMessagesForResponsesAPI(messages);
64
+ }
65
+ else {
66
+ body.messages =
67
+ provider === 'mistral'
68
+ ? cleanMessagesForMistralChatCompletions(messages)
69
+ : messages;
70
+ }
71
+ // Add GPT-5 specific parameters.
72
+ if (isGPT5Model(model)) {
73
+ // For Responses API, use nested structure.
74
+ if (isResponsesAPI) {
75
+ if (reasoning_effort) {
76
+ body.reasoning = {
77
+ ...body.reasoning,
78
+ effort: reasoning_effort,
79
+ };
80
+ // Only add summary if explicitly enabled (requires org verification).
81
+ if (enableReasoningSummary) {
82
+ body.reasoning.summary = 'auto';
83
+ }
84
+ }
85
+ if (verbosity) {
86
+ body.text = {
87
+ ...body.text,
88
+ format: { type: 'text' },
89
+ verbosity,
90
+ };
91
+ }
92
+ }
93
+ else {
94
+ // For Chat Completions API, add GPT-5 parameters directly.
95
+ if (reasoning_effort) {
96
+ body.reasoning_effort = reasoning_effort;
97
+ }
98
+ if (verbosity) {
99
+ body.verbosity = verbosity;
100
+ }
101
+ }
102
+ }
103
+ if (provider === 'mistral' &&
104
+ isMistralReasoningEffortModel(model) &&
105
+ reasoning_effort &&
106
+ isMistralReasoningEffort(reasoning_effort)) {
107
+ body.reasoning_effort = reasoning_effort;
108
+ }
109
+ const toolDefinitions = buildOpenAIToolsDefinition({
110
+ tools,
111
+ mcpServers,
112
+ isResponsesAPI,
113
+ });
114
+ if (toolDefinitions.length > 0) {
115
+ body.tools = toolDefinitions;
116
+ // Only Chat Completions API requires tool_choice.
117
+ if (!isResponsesAPI) {
118
+ body.tool_choice = 'auto';
119
+ }
120
+ }
121
+ return body;
122
+ }
123
+ export function resolveOpenAITokenLimit({ provider, model, responseLength, reasoning_effort, maxTokens, }) {
124
+ if (maxTokens !== undefined) {
125
+ return maxTokens;
126
+ }
127
+ const baseTokenLimit = usesCompatibleChatCompletions(provider)
128
+ ? responseLength !== undefined
129
+ ? getMaxTokensForResponseLength(responseLength)
130
+ : undefined
131
+ : getMaxTokensForResponseLength(responseLength);
132
+ if (provider !== 'openai' ||
133
+ !isGPT5Model(model) ||
134
+ responseLength === undefined) {
135
+ return baseTokenLimit;
136
+ }
137
+ const effectiveReasoningEffort = reasoning_effort ?? getDefaultReasoningEffortForGPT5Model(model);
138
+ return Math.max(baseTokenLimit ?? 0, GPT5_RESPONSE_LENGTH_MIN_TOKENS[responseLength], GPT5_REASONING_MIN_TOKENS[effectiveReasoningEffort]);
139
+ }
140
+ function validateMCPCompatibility(endpoint, mcpServers) {
141
+ if (mcpServers.length > 0 &&
142
+ endpoint === ENDPOINT_OPENAI_CHAT_COMPLETIONS_API) {
143
+ throw new Error(`MCP servers are not supported with Chat Completions API. ` +
144
+ `Current endpoint: ${endpoint}. ` +
145
+ `Please use OpenAI Responses API endpoint: ${ENDPOINT_OPENAI_RESPONSES_API}. ` +
146
+ `MCP tools are only available in the Responses API endpoint.`);
147
+ }
148
+ }
149
+ export function cleanMessagesForResponsesAPI(messages) {
150
+ return messages.map((msg) => {
151
+ // Convert 'tool' role to 'user' for Responses API compatibility.
152
+ const role = msg.role === 'tool' ? 'user' : msg.role;
153
+ const cleanMsg = {
154
+ role: role,
155
+ };
156
+ // Handle content (text or vision).
157
+ if (typeof msg.content === 'string') {
158
+ cleanMsg.content = msg.content;
159
+ }
160
+ else if (Array.isArray(msg.content)) {
161
+ // Vision message case - convert VisionBlock types for Responses API.
162
+ cleanMsg.content = msg.content.map((block) => {
163
+ if (block.type === 'text') {
164
+ // Convert 'text' to 'input_text' for Responses API.
165
+ return {
166
+ type: 'input_text',
167
+ text: block.text,
168
+ };
169
+ }
170
+ else if (block.type === 'image_url') {
171
+ // For Responses API, image_url should be a direct string.
172
+ return {
173
+ type: 'input_image',
174
+ image_url: block.image_url.url,
175
+ };
176
+ }
177
+ return block;
178
+ });
179
+ }
180
+ else {
181
+ cleanMsg.content = msg.content;
182
+ }
183
+ return cleanMsg;
184
+ });
185
+ }
186
+ export function cleanMessagesForMistralChatCompletions(messages) {
187
+ return messages.map((msg) => {
188
+ const cleanMsg = {
189
+ role: msg.role,
190
+ };
191
+ if (!Array.isArray(msg.content)) {
192
+ cleanMsg.content = msg.content;
193
+ return cleanMsg;
194
+ }
195
+ cleanMsg.content = msg.content.map((block) => {
196
+ if (block.type === 'image_url' &&
197
+ typeof block.image_url === 'object' &&
198
+ typeof block.image_url?.url === 'string') {
199
+ return {
200
+ type: 'image_url',
201
+ image_url: block.image_url.url,
202
+ };
203
+ }
204
+ return block;
205
+ });
206
+ return cleanMsg;
207
+ });
208
+ }
209
+ function usesCompatibleChatCompletions(provider) {
210
+ return OPENAI_COMPATIBLE_CHAT_COMPLETIONS_PROVIDERS.has(provider);
211
+ }
212
+ //# sourceMappingURL=openaiRequestBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openaiRequestBuilder.js","sourceRoot":"","sources":["../../../../../src/services/providers/openai/openaiRequestBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { MCPServerConfig, ToolDefinition } from '../../../types';
2
+ type BuildOpenAIToolsDefinitionOptions = {
3
+ tools: ToolDefinition[];
4
+ mcpServers: MCPServerConfig[];
5
+ isResponsesAPI: boolean;
6
+ };
7
+ export declare function buildOpenAIToolsDefinition({ tools, mcpServers, isResponsesAPI, }: BuildOpenAIToolsDefinitionOptions): any[];
8
+ export {};
9
+ //# sourceMappingURL=openaiToolBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openaiToolBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/openai/openaiToolBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGtE,KAAK,iCAAiC,GAAG;IACvC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,EACzC,KAAK,EACL,UAAU,EACV,cAAc,GACf,EAAE,iCAAiC,GAAG,GAAG,EAAE,CAiB3C"}
@@ -0,0 +1,33 @@
1
+ import { buildOpenAICompatibleTools } from '../../../utils';
2
+ export function buildOpenAIToolsDefinition({ tools, mcpServers, isResponsesAPI, }) {
3
+ const toolDefs = [];
4
+ if (tools.length > 0) {
5
+ toolDefs.push(...buildOpenAICompatibleTools(tools, isResponsesAPI ? 'responses' : 'chat-completions'));
6
+ }
7
+ if (mcpServers.length > 0 && isResponsesAPI) {
8
+ toolDefs.push(...buildOpenAIMCPToolsDefinition(mcpServers));
9
+ }
10
+ return toolDefs;
11
+ }
12
+ function buildOpenAIMCPToolsDefinition(mcpServers) {
13
+ return mcpServers.map((server) => {
14
+ const mcpDef = {
15
+ type: 'mcp',
16
+ server_label: server.name,
17
+ server_url: server.url,
18
+ };
19
+ if (server.require_approval) {
20
+ mcpDef.require_approval = server.require_approval;
21
+ }
22
+ if (server.tool_configuration?.allowed_tools) {
23
+ mcpDef.allowed_tools = server.tool_configuration.allowed_tools;
24
+ }
25
+ if (server.authorization_token) {
26
+ mcpDef.headers = {
27
+ Authorization: `Bearer ${server.authorization_token}`,
28
+ };
29
+ }
30
+ return mcpDef;
31
+ });
32
+ }
33
+ //# sourceMappingURL=openaiToolBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openaiToolBuilder.js","sourceRoot":"","sources":["../../../../../src/services/providers/openai/openaiToolBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAQ5D,MAAM,UAAU,0BAA0B,CAAC,EACzC,KAAK,EACL,UAAU,EACV,cAAc,GACoB;IAClC,MAAM,QAAQ,GAAU,EAAE,CAAC;IAE3B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CACX,GAAG,0BAA0B,CAC3B,KAAK,EACL,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAClD,CACF,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,EAAE,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,6BAA6B,CAAC,UAA6B;IAClE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAQ;YAClB,IAAI,EAAE,KAAK;YACX,YAAY,EAAE,MAAM,CAAC,IAAI;YACzB,UAAU,EAAE,MAAM,CAAC,GAAG;SACvB,CAAC;QAEF,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACpD,CAAC;QAED,IAAI,MAAM,CAAC,kBAAkB,EAAE,aAAa,EAAE,CAAC;YAC7C,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC;QACjE,CAAC;QAED,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC/B,MAAM,CAAC,OAAO,GAAG;gBACf,aAAa,EAAE,UAAU,MAAM,CAAC,mBAAmB,EAAE;aACtD,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC"}