@zimtsui/brainswitch 0.0.40 → 0.0.42

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 (88) hide show
  1. package/README.md +9 -20
  2. package/build/adaptor.d.ts +4 -2
  3. package/build/adaptor.js +27 -10
  4. package/build/adaptor.js.map +1 -1
  5. package/build/agentloop.d.ts +1 -1
  6. package/build/agentloop.js +2 -4
  7. package/build/agentloop.js.map +1 -1
  8. package/build/api-types/anthropic.d.ts +18 -22
  9. package/build/api-types/anthropic.js +81 -72
  10. package/build/api-types/anthropic.js.map +1 -1
  11. package/build/api-types/google.d.ts +13 -18
  12. package/build/api-types/google.js +32 -33
  13. package/build/api-types/google.js.map +1 -1
  14. package/build/api-types/openai-chat-completions.d.ts +17 -19
  15. package/build/api-types/openai-chat-completions.js +101 -85
  16. package/build/api-types/openai-chat-completions.js.map +1 -1
  17. package/build/api-types/openai-responses.d.ts +13 -13
  18. package/build/api-types/openai-responses.js +59 -51
  19. package/build/api-types/openai-responses.js.map +1 -1
  20. package/build/compatible-engine.d.ts +19 -24
  21. package/build/compatible-engine.js +54 -56
  22. package/build/compatible-engine.js.map +1 -1
  23. package/build/compatible-engines.d/aliyun.d.ts +38 -55
  24. package/build/compatible-engines.d/aliyun.js +91 -143
  25. package/build/compatible-engines.d/aliyun.js.map +1 -1
  26. package/build/compatible-engines.d/anthropic.d.ts +35 -60
  27. package/build/compatible-engines.d/anthropic.js +233 -282
  28. package/build/compatible-engines.d/anthropic.js.map +1 -1
  29. package/build/compatible-engines.d/google.d.ts +38 -59
  30. package/build/compatible-engines.d/google.js +172 -231
  31. package/build/compatible-engines.d/google.js.map +1 -1
  32. package/build/compatible-engines.d/openai-chatcompletions.d/monolith.d.ts +7 -14
  33. package/build/compatible-engines.d/openai-chatcompletions.d/monolith.js +64 -66
  34. package/build/compatible-engines.d/openai-chatcompletions.d/monolith.js.map +1 -1
  35. package/build/compatible-engines.d/openai-chatcompletions.d/stream.d.ts +10 -16
  36. package/build/compatible-engines.d/openai-chatcompletions.d/stream.js +169 -165
  37. package/build/compatible-engines.d/openai-chatcompletions.d/stream.js.map +1 -1
  38. package/build/compatible-engines.d/openai-chatcompletions.d.ts +12 -18
  39. package/build/compatible-engines.d/openai-chatcompletions.js +64 -64
  40. package/build/compatible-engines.d/openai-chatcompletions.js.map +1 -1
  41. package/build/compatible-engines.d/openai-responses.d.ts +46 -68
  42. package/build/compatible-engines.d/openai-responses.js +222 -274
  43. package/build/compatible-engines.d/openai-responses.js.map +1 -1
  44. package/build/engine.d.ts +10 -24
  45. package/build/engine.js +25 -38
  46. package/build/engine.js.map +1 -1
  47. package/build/exports.d.ts +1 -0
  48. package/build/exports.js +1 -0
  49. package/build/exports.js.map +1 -1
  50. package/build/frontmatter.js +2 -2
  51. package/build/frontmatter.js.map +1 -1
  52. package/build/function.js +9 -4
  53. package/build/function.js.map +1 -1
  54. package/build/inference-context.d.ts +1 -10
  55. package/build/inference-context.js +0 -2
  56. package/build/inference-context.js.map +1 -1
  57. package/build/native-engines.d/google/agentloop.d.ts +1 -1
  58. package/build/native-engines.d/google/agentloop.js +2 -4
  59. package/build/native-engines.d/google/agentloop.js.map +1 -1
  60. package/build/native-engines.d/google/engine.d.ts +56 -73
  61. package/build/native-engines.d/google/engine.js +265 -295
  62. package/build/native-engines.d/google/engine.js.map +1 -1
  63. package/build/native-engines.d/google/exports.d.ts +3 -2
  64. package/build/native-engines.d/google/exports.js +3 -2
  65. package/build/native-engines.d/google/exports.js.map +1 -1
  66. package/build/native-engines.d/google/session.js +6 -3
  67. package/build/native-engines.d/google/session.js.map +1 -1
  68. package/build/native-engines.d/openai-responses/agentloop.d.ts +1 -1
  69. package/build/native-engines.d/openai-responses/agentloop.js +2 -5
  70. package/build/native-engines.d/openai-responses/agentloop.js.map +1 -1
  71. package/build/native-engines.d/openai-responses/engine.d.ts +59 -78
  72. package/build/native-engines.d/openai-responses/engine.js +285 -321
  73. package/build/native-engines.d/openai-responses/engine.js.map +1 -1
  74. package/build/native-engines.d/openai-responses/exports.d.ts +4 -2
  75. package/build/native-engines.d/openai-responses/exports.js +4 -2
  76. package/build/native-engines.d/openai-responses/exports.js.map +1 -1
  77. package/build/native-engines.d/openai-responses/session.js +21 -8
  78. package/build/native-engines.d/openai-responses/session.js.map +1 -1
  79. package/build/session.js +12 -5
  80. package/build/session.js.map +1 -1
  81. package/build/telemetry.d.ts +6 -0
  82. package/build/telemetry.js +3 -0
  83. package/build/telemetry.js.map +1 -0
  84. package/build/throttle.d.ts +1 -1
  85. package/build/throttle.js +6 -6
  86. package/build/throttle.js.map +1 -1
  87. package/build/tsconfig.tsbuildinfo +1 -1
  88. package/package.json +2 -2
@@ -1,376 +1,340 @@
1
1
  import { Function } from "../../function.js";
2
2
  import { RoleMessage } from "./session.js";
3
3
  import { Tool } from "./tool.js";
4
- import { ResponseInvalid, Engine, UserAbortion, InferenceTimeout } from "../../engine.js";
4
+ import { ResponseInvalid, Engine, USER_ABORTION, InferenceTimeout } from "../../engine.js";
5
5
  import {} from "../../inference-context.js";
6
6
  import OpenAI from 'openai';
7
- import assert from 'node:assert';
8
- import { fetch } from 'undici';
7
+ import * as Undici from 'undici';
9
8
  import { OpenAIResponsesEngine } from "../../api-types/openai-responses.js";
9
+ import { Throttle } from "../../throttle.js";
10
+ import {} from "../../telemetry.js";
10
11
  export var OpenAIResponsesNativeEngine;
11
12
  (function (OpenAIResponsesNativeEngine) {
12
- let Base;
13
- (function (Base) {
14
- class Instance {
15
- instance;
16
- apiURL;
17
- parallel;
18
- applyPatch;
19
- toolChoice;
20
- constructor(instance, options) {
21
- this.instance = instance;
22
- this.apiURL = new URL(`${this.instance.baseUrl}/responses`);
23
- this.parallel = options.parallelToolCall ?? false;
24
- this.applyPatch = options.applyPatch ?? false;
25
- this.toolChoice = options.toolChoice ?? Function.ToolChoice.AUTO;
13
+ let OwnProps;
14
+ (function (OwnProps) {
15
+ function init(options) {
16
+ return {
17
+ apiURL: new URL(`${this.baseUrl}/responses`),
18
+ toolChoice: options.toolChoice ?? Function.ToolChoice.AUTO,
19
+ applyPatch: options.applyPatch ?? false,
20
+ };
21
+ }
22
+ OwnProps.init = init;
23
+ })(OwnProps = OpenAIResponsesNativeEngine.OwnProps || (OpenAIResponsesNativeEngine.OwnProps = {}));
24
+ async function stateless(wfctx, session) {
25
+ for (let retry = 0;; retry++) {
26
+ const signalTimeout = this.timeout ? AbortSignal.timeout(this.timeout) : undefined;
27
+ const signal = wfctx.signal && signalTimeout ? AbortSignal.any([
28
+ wfctx.signal,
29
+ signalTimeout,
30
+ ]) : wfctx.signal || signalTimeout;
31
+ try {
32
+ return await this.fetch(wfctx, session, signal);
26
33
  }
27
- async stateless(ctx, session) {
28
- for (let retry = 0;; retry++) {
29
- const signalTimeout = this.instance.timeout ? AbortSignal.timeout(this.instance.timeout) : undefined;
30
- const signal = ctx.signal && signalTimeout ? AbortSignal.any([
31
- ctx.signal,
32
- signalTimeout,
33
- ]) : ctx.signal || signalTimeout;
34
- try {
35
- return await this.fetch(ctx, session, signal);
36
- }
37
- catch (e) {
38
- if (ctx.signal?.aborted)
39
- throw new UserAbortion(); // 用户中止
40
- else if (signalTimeout?.aborted)
41
- e = new InferenceTimeout(undefined, { cause: e }); // 推理超时
42
- else if (e instanceof ResponseInvalid) { } // 模型抽风
43
- else if (e instanceof TypeError) { } // 网络故障
44
- else
45
- throw e;
46
- if (retry < 3)
47
- ctx.logger.message?.warn(e);
48
- else
49
- throw e;
50
- }
51
- }
34
+ catch (e) {
35
+ if (wfctx.signal?.aborted)
36
+ throw USER_ABORTION; // 用户中止
37
+ else if (signalTimeout?.aborted)
38
+ e = new InferenceTimeout(undefined, { cause: e }); // 推理超时
39
+ else if (e instanceof ResponseInvalid) { } // 模型抽风
40
+ else if (e instanceof TypeError) { } // 网络故障
41
+ else
42
+ throw e;
43
+ if (retry < 3)
44
+ this.logger.message?.warn(e);
45
+ else
46
+ throw e;
52
47
  }
53
- async stateful(ctx, session) {
54
- const response = await this.stateless(ctx, session);
55
- session.chatMessages.push(response);
56
- return response;
48
+ }
49
+ }
50
+ OpenAIResponsesNativeEngine.stateless = stateless;
51
+ async function stateful(wfctx, session) {
52
+ const response = await this.stateless(wfctx, session);
53
+ session.chatMessages.push(response);
54
+ return response;
55
+ }
56
+ OpenAIResponsesNativeEngine.stateful = stateful;
57
+ function appendUserMessage(session, message) {
58
+ return {
59
+ ...session,
60
+ chatMessages: [...session.chatMessages, message],
61
+ };
62
+ }
63
+ OpenAIResponsesNativeEngine.appendUserMessage = appendUserMessage;
64
+ function pushUserMessage(session, message) {
65
+ session.chatMessages.push(message);
66
+ return session;
67
+ }
68
+ OpenAIResponsesNativeEngine.pushUserMessage = pushUserMessage;
69
+ function convertToAiMessage(output) {
70
+ const parts = output.flatMap((item) => {
71
+ if (item.type === 'message') {
72
+ if (item.content.every(part => part.type === 'output_text')) { }
73
+ else
74
+ throw new Error();
75
+ return [RoleMessage.Part.Text.create(item.content.map(part => part.text).join(''))];
57
76
  }
58
- appendUserMessage(session, message) {
77
+ else if (item.type === 'function_call')
78
+ return [this.convertToFunctionCall(item)];
79
+ else if (item.type === 'reasoning')
80
+ return [];
81
+ else if (item.type === 'apply_patch_call')
82
+ return [Tool.ApplyPatch.Call.create(item)];
83
+ else
84
+ throw new Error();
85
+ });
86
+ return RoleMessage.Ai.create(parts, output);
87
+ }
88
+ OpenAIResponsesNativeEngine.convertToAiMessage = convertToAiMessage;
89
+ function convertFromUserMessage(userMessage) {
90
+ return userMessage.getParts().map(part => {
91
+ if (part instanceof RoleMessage.Part.Text.Instance)
59
92
  return {
60
- ...session,
61
- chatMessages: [...session.chatMessages, message],
93
+ type: 'message',
94
+ role: 'user',
95
+ content: part.text,
62
96
  };
63
- }
64
- pushUserMessage(session, message) {
65
- session.chatMessages.push(message);
66
- return session;
67
- }
68
- convertToAiMessage(output) {
69
- const parts = output.flatMap((item) => {
70
- if (item.type === 'message') {
71
- assert(item.content.every(part => part.type === 'output_text'));
72
- return [RoleMessage.Part.Text.create(item.content.map(part => part.text).join(''))];
73
- }
74
- else if (item.type === 'function_call')
75
- return [this.instance.convertToFunctionCall(item)];
76
- else if (item.type === 'reasoning')
77
- return [];
78
- else if (item.type === 'apply_patch_call')
79
- return [Tool.ApplyPatch.Call.create(item)];
97
+ else if (part instanceof Function.Response)
98
+ return this.convertFromFunctionResponse(part);
99
+ else if (part instanceof Tool.ApplyPatch.Response)
100
+ return {
101
+ type: 'apply_patch_call_output',
102
+ call_id: part.id,
103
+ status: part.failure ? 'failed' : 'completed',
104
+ output: part.failure || undefined,
105
+ };
106
+ else
107
+ throw new Error();
108
+ });
109
+ }
110
+ OpenAIResponsesNativeEngine.convertFromUserMessage = convertFromUserMessage;
111
+ function convertFromDeveloperMessage(developerMessage) {
112
+ return developerMessage.getOnlyText();
113
+ }
114
+ OpenAIResponsesNativeEngine.convertFromDeveloperMessage = convertFromDeveloperMessage;
115
+ function convertFromChatMessage(chatMessage) {
116
+ if (chatMessage instanceof RoleMessage.User.Instance)
117
+ return this.convertFromUserMessage(chatMessage);
118
+ else if (chatMessage instanceof RoleMessage.Ai.Instance)
119
+ return chatMessage.getRaw();
120
+ else
121
+ throw new Error();
122
+ }
123
+ OpenAIResponsesNativeEngine.convertFromChatMessage = convertFromChatMessage;
124
+ function convertFromToolChoice(toolChoice) {
125
+ if (toolChoice === Function.ToolChoice.NONE)
126
+ return 'none';
127
+ else if (toolChoice === Function.ToolChoice.REQUIRED)
128
+ return 'required';
129
+ else if (toolChoice === Function.ToolChoice.AUTO)
130
+ return 'auto';
131
+ else {
132
+ return {
133
+ type: 'allowed_tools',
134
+ mode: 'required',
135
+ tools: toolChoice.map(name => {
136
+ if (name === Tool.Choice.APPLY_PATCH)
137
+ return { type: 'apply_patch' };
80
138
  else
81
- throw new Error();
82
- });
83
- return RoleMessage.Ai.create(parts, output);
139
+ return { type: 'function', name };
140
+ }),
141
+ };
142
+ }
143
+ }
144
+ OpenAIResponsesNativeEngine.convertFromToolChoice = convertFromToolChoice;
145
+ function makeMonolithParams(session) {
146
+ const fdentries = Object.entries(this.fdm);
147
+ const tools = fdentries.map(fdentry => this.convertFromFunctionDeclarationEntry(fdentry));
148
+ if (this.applyPatch)
149
+ tools.push({ type: 'apply_patch' });
150
+ return {
151
+ model: this.model,
152
+ include: ['reasoning.encrypted_content'],
153
+ store: false,
154
+ input: session.chatMessages.flatMap(chatMessage => this.convertFromChatMessage(chatMessage)),
155
+ instructions: session.developerMessage && this.convertFromDeveloperMessage(session.developerMessage),
156
+ tools: tools.length ? tools : undefined,
157
+ tool_choice: tools.length ? this.convertFromToolChoice(this.toolChoice) : undefined,
158
+ parallel_tool_calls: fdentries.length ? this.parallelToolCall : undefined,
159
+ max_output_tokens: this.maxTokens,
160
+ ...this.additionalOptions,
161
+ };
162
+ }
163
+ OpenAIResponsesNativeEngine.makeMonolithParams = makeMonolithParams;
164
+ function logAiMessage(output) {
165
+ for (const item of output)
166
+ if (item.type === 'message') {
167
+ if (item.content.every(part => part.type === 'output_text')) { }
168
+ else
169
+ throw new Error();
170
+ this.logger.inference?.debug(item.content.map(part => part.text).join('') + '\n');
84
171
  }
85
- convertFromUserMessage(userMessage) {
86
- return userMessage.getParts().map(part => {
87
- if (part instanceof RoleMessage.Part.Text.Instance)
88
- return {
89
- type: 'message',
90
- role: 'user',
91
- content: part.text,
92
- };
93
- else if (part instanceof Function.Response)
94
- return this.instance.convertFromFunctionResponse(part);
95
- else if (part instanceof Tool.ApplyPatch.Response)
96
- return {
97
- type: 'apply_patch_call_output',
98
- call_id: part.id,
99
- status: part.failure ? 'failed' : 'completed',
100
- output: part.failure || undefined,
101
- };
172
+ else if (item.type === 'function_call')
173
+ this.logger.message?.debug(item);
174
+ else if (item.type === 'apply_patch_call')
175
+ this.logger.message?.debug(item);
176
+ }
177
+ OpenAIResponsesNativeEngine.logAiMessage = logAiMessage;
178
+ async function fetch(wfctx, session, signal) {
179
+ return await this.fetchRaw(wfctx, session, signal).catch(e => Promise.reject(e instanceof OpenAI.APIError ? new ResponseInvalid(undefined, { cause: e }) : e));
180
+ }
181
+ OpenAIResponsesNativeEngine.fetch = fetch;
182
+ async function fetchRaw(wfctx, session, signal) {
183
+ const params = this.makeMonolithParams(session);
184
+ this.logger.message?.trace(params);
185
+ await this.throttle.requests(wfctx);
186
+ const res = await Undici.fetch(this.apiURL, {
187
+ method: 'POST',
188
+ headers: new Headers({
189
+ 'Content-Type': 'application/json',
190
+ 'Authorization': `Bearer ${this.apiKey}`,
191
+ }),
192
+ body: JSON.stringify(params),
193
+ dispatcher: this.proxyAgent,
194
+ signal,
195
+ });
196
+ if (res.ok) { }
197
+ else
198
+ throw new Error(undefined, { cause: res });
199
+ const response = await res.json();
200
+ this.logger.message?.trace(response);
201
+ if (response.status === 'incomplete' && response.incomplete_details?.reason === 'max_output_tokens')
202
+ throw new ResponseInvalid('Token limit exceeded.', { cause: response });
203
+ if (response.status === 'completed') { }
204
+ else
205
+ throw new ResponseInvalid('Abnormal response status', { cause: response });
206
+ this.logAiMessage(response.output);
207
+ if (response.usage) { }
208
+ else
209
+ throw new Error();
210
+ const cost = this.calcCost(response.usage);
211
+ wfctx.cost?.(cost);
212
+ this.logger.message?.debug(response.usage);
213
+ const aiMessage = this.convertToAiMessage(response.output);
214
+ this.validateToolCallsByToolChoice(aiMessage.getToolCalls());
215
+ return aiMessage;
216
+ }
217
+ OpenAIResponsesNativeEngine.fetchRaw = fetchRaw;
218
+ function validateToolCallsByToolChoice(toolCalls) {
219
+ if (this.toolChoice === Function.ToolChoice.REQUIRED)
220
+ if (toolCalls.length) { }
221
+ else
222
+ throw new ResponseInvalid('Invalid function call', { cause: toolCalls });
223
+ else if (this.toolChoice instanceof Array)
224
+ for (const tc of toolCalls) {
225
+ if (tc instanceof Function.Call)
226
+ if (this.toolChoice.includes(tc.name)) { }
102
227
  else
103
- throw new Error();
104
- });
105
- }
106
- convertFromDeveloperMessage(developerMessage) {
107
- return developerMessage.getOnlyText();
108
- }
109
- convertFromChatMessage(chatMessage) {
110
- if (chatMessage instanceof RoleMessage.User.Instance)
111
- return this.convertFromUserMessage(chatMessage);
112
- else if (chatMessage instanceof RoleMessage.Ai.Instance)
113
- return chatMessage.getRaw();
228
+ throw new ResponseInvalid('Invalid function call', { cause: toolCalls });
229
+ else if (tc instanceof Tool.ApplyPatch.Call)
230
+ if (this.toolChoice.includes(Tool.Choice.APPLY_PATCH)) { }
231
+ else
232
+ throw new ResponseInvalid('Invalid function call', { cause: toolCalls });
114
233
  else
115
234
  throw new Error();
116
235
  }
117
- convertFromToolChoice(toolChoice) {
118
- if (toolChoice === Function.ToolChoice.NONE)
119
- return 'none';
120
- else if (toolChoice === Function.ToolChoice.REQUIRED)
121
- return 'required';
122
- else if (toolChoice === Function.ToolChoice.AUTO)
123
- return 'auto';
124
- else {
125
- return {
126
- type: 'allowed_tools',
127
- mode: 'required',
128
- tools: toolChoice.map(name => {
129
- if (name === Tool.Choice.APPLY_PATCH)
130
- return { type: 'apply_patch' };
131
- else
132
- return { type: 'function', name };
133
- }),
134
- };
135
- }
136
- }
137
- makeMonolithParams(session) {
138
- const fdentries = Object.entries(this.instance.fdm);
139
- const tools = fdentries.map(fdentry => this.instance.convertFromFunctionDeclarationEntry(fdentry));
140
- if (this.applyPatch)
141
- tools.push({ type: 'apply_patch' });
142
- return {
143
- model: this.instance.model,
144
- include: ['reasoning.encrypted_content'],
145
- store: false,
146
- input: session.chatMessages.flatMap(chatMessage => this.convertFromChatMessage(chatMessage)),
147
- instructions: session.developerMessage && this.convertFromDeveloperMessage(session.developerMessage),
148
- tools: tools.length ? tools : undefined,
149
- tool_choice: tools.length ? this.convertFromToolChoice(this.toolChoice) : undefined,
150
- parallel_tool_calls: fdentries.length ? this.parallel : undefined,
151
- max_output_tokens: this.instance.maxTokens,
152
- ...this.instance.additionalOptions,
153
- };
154
- }
155
- logAiMessage(ctx, output) {
156
- for (const item of output)
157
- if (item.type === 'message') {
158
- assert(item.content.every(part => part.type === 'output_text'));
159
- ctx.logger.inference?.debug(item.content.map(part => part.text).join('') + '\n');
160
- }
161
- else if (item.type === 'function_call')
162
- ctx.logger.message?.debug(item);
163
- else if (item.type === 'apply_patch_call')
164
- ctx.logger.message?.debug(item);
165
- }
166
- async fetch(ctx, session, signal) {
167
- return await this.fetchRaw(ctx, session, signal).catch(e => Promise.reject(e instanceof OpenAI.APIError ? new ResponseInvalid(undefined, { cause: e }) : e));
168
- }
169
- async fetchRaw(ctx, session, signal) {
170
- const params = this.makeMonolithParams(session);
171
- ctx.logger.message?.trace(params);
172
- await this.instance.throttle.requests(ctx);
173
- const res = await fetch(this.apiURL, {
174
- method: 'POST',
175
- headers: new Headers({
176
- 'Content-Type': 'application/json',
177
- 'Authorization': `Bearer ${this.instance.apiKey}`,
178
- }),
179
- body: JSON.stringify(params),
180
- dispatcher: this.instance.proxyAgent,
181
- signal,
182
- });
183
- assert(res.ok, new Error(undefined, { cause: res }));
184
- const response = await res.json();
185
- ctx.logger.message?.trace(response);
186
- if (response.status === 'incomplete' && response.incomplete_details?.reason === 'max_output_tokens')
187
- throw new ResponseInvalid('Token limit exceeded.', { cause: response });
188
- assert(response.status === 'completed', new ResponseInvalid('Abnormal response status', { cause: response }));
189
- this.logAiMessage(ctx, response.output);
190
- assert(response.usage);
191
- const cost = this.instance.calcCost(response.usage);
192
- ctx.logger.cost?.(cost);
193
- ctx.logger.message?.debug(response.usage);
194
- const aiMessage = this.convertToAiMessage(response.output);
195
- this.validateToolCallsByToolChoice(aiMessage.getToolCalls());
196
- return aiMessage;
197
- }
198
- validateToolCallsByToolChoice(toolCalls) {
199
- if (this.toolChoice === Function.ToolChoice.REQUIRED)
200
- assert(toolCalls.length, new ResponseInvalid('Invalid function call', { cause: toolCalls }));
201
- else if (this.toolChoice instanceof Array)
202
- for (const tc of toolCalls) {
203
- if (tc instanceof Function.Call)
204
- assert(this.toolChoice.includes(tc.name), new ResponseInvalid('Invalid function call', { cause: toolCalls }));
205
- else if (tc instanceof Tool.ApplyPatch.Call)
206
- assert(this.toolChoice.includes(Tool.Choice.APPLY_PATCH), new ResponseInvalid('Invalid function call', { cause: toolCalls }));
207
- else
208
- throw new Error();
209
- }
210
- else if (this.toolChoice === Function.ToolChoice.NONE)
211
- assert(!toolCalls.length, new ResponseInvalid('Invalid function call', { cause: toolCalls }));
212
- }
213
- }
214
- Base.Instance = Instance;
215
- })(Base = OpenAIResponsesNativeEngine.Base || (OpenAIResponsesNativeEngine.Base = {}));
236
+ else if (this.toolChoice === Function.ToolChoice.NONE)
237
+ if (!toolCalls.length) { }
238
+ else
239
+ throw new ResponseInvalid('Invalid function call', { cause: toolCalls });
240
+ }
241
+ OpenAIResponsesNativeEngine.validateToolCallsByToolChoice = validateToolCallsByToolChoice;
216
242
  class Instance {
217
- engineBase;
218
- openAIResponsesEngineBase;
219
- openAIResponsesNativeEngineBase;
243
+ baseUrl;
244
+ apiKey;
245
+ model;
246
+ name;
247
+ inputPrice;
248
+ outputPrice;
249
+ cachePrice;
250
+ fdm;
251
+ additionalOptions;
252
+ throttle;
253
+ timeout;
254
+ maxTokens;
255
+ proxyAgent;
256
+ logger;
257
+ apiURL;
258
+ parallelToolCall;
259
+ applyPatch;
260
+ toolChoice;
220
261
  constructor(options) {
221
- this.engineBase = new Engine.Base.Instance(this, options);
222
- this.openAIResponsesEngineBase = new OpenAIResponsesEngine.Base.Instance(this);
223
- this.openAIResponsesNativeEngineBase = new OpenAIResponsesNativeEngine.Base.Instance(this, options);
224
- }
225
- get baseUrl() {
226
- return this.engineBase.baseUrl;
227
- }
228
- set baseUrl(value) {
229
- this.engineBase.baseUrl = value;
230
- }
231
- get apiKey() {
232
- return this.engineBase.apiKey;
233
- }
234
- set apiKey(value) {
235
- this.engineBase.apiKey = value;
236
- }
237
- get model() {
238
- return this.engineBase.model;
239
- }
240
- set model(value) {
241
- this.engineBase.model = value;
242
- }
243
- get name() {
244
- return this.engineBase.name;
245
- }
246
- set name(value) {
247
- this.engineBase.name = value;
248
- }
249
- get inputPrice() {
250
- return this.engineBase.inputPrice;
251
- }
252
- set inputPrice(value) {
253
- this.engineBase.inputPrice = value;
254
- }
255
- get outputPrice() {
256
- return this.engineBase.outputPrice;
257
- }
258
- set outputPrice(value) {
259
- this.engineBase.outputPrice = value;
260
- }
261
- get cachedPrice() {
262
- return this.engineBase.cachedPrice;
263
- }
264
- set cachedPrice(value) {
265
- this.engineBase.cachedPrice = value;
266
- }
267
- get fdm() {
268
- return this.engineBase.fdm;
269
- }
270
- set fdm(value) {
271
- this.engineBase.fdm = value;
272
- }
273
- get additionalOptions() {
274
- return this.engineBase.additionalOptions;
275
- }
276
- set additionalOptions(value) {
277
- this.engineBase.additionalOptions = value;
278
- }
279
- get throttle() {
280
- return this.engineBase.throttle;
281
- }
282
- set throttle(value) {
283
- this.engineBase.throttle = value;
284
- }
285
- get timeout() {
286
- return this.engineBase.timeout;
287
- }
288
- set timeout(value) {
289
- this.engineBase.timeout = value;
290
- }
291
- get maxTokens() {
292
- return this.engineBase.maxTokens;
293
- }
294
- set maxTokens(value) {
295
- this.engineBase.maxTokens = value;
296
- }
297
- get proxyAgent() {
298
- return this.engineBase.proxyAgent;
299
- }
300
- set proxyAgent(value) {
301
- this.engineBase.proxyAgent = value;
262
+ ({
263
+ baseUrl: this.baseUrl,
264
+ apiKey: this.apiKey,
265
+ model: this.model,
266
+ name: this.name,
267
+ inputPrice: this.inputPrice,
268
+ outputPrice: this.outputPrice,
269
+ cachePrice: this.cachePrice,
270
+ fdm: this.fdm,
271
+ additionalOptions: this.additionalOptions,
272
+ throttle: this.throttle,
273
+ timeout: this.timeout,
274
+ maxTokens: this.maxTokens,
275
+ proxyAgent: this.proxyAgent,
276
+ logger: this.logger,
277
+ } = (Engine.OwnProps.init).call(this, options));
278
+ ({ parallelToolCall: this.parallelToolCall } = (OpenAIResponsesEngine.OwnProps.init).call(this, options));
279
+ ({
280
+ applyPatch: this.applyPatch,
281
+ toolChoice: this.toolChoice,
282
+ apiURL: this.apiURL,
283
+ } = (OwnProps.init).call(this, options));
302
284
  }
303
285
  convertFromFunctionResponse(fr) {
304
- return this.openAIResponsesEngineBase.convertFromFunctionResponse(fr);
286
+ return (OpenAIResponsesEngine.convertFromFunctionResponse).call(this, fr);
305
287
  }
306
288
  calcCost(usage) {
307
- return this.openAIResponsesEngineBase.calcCost(usage);
289
+ return (OpenAIResponsesEngine.calcCost).call(this, usage);
308
290
  }
309
291
  convertFromFunctionDeclarationEntry(fdentry) {
310
- return this.openAIResponsesEngineBase.convertFromFunctionDeclarationEntry(fdentry);
292
+ return (OpenAIResponsesEngine.convertFromFunctionDeclarationEntry).call(this, fdentry);
311
293
  }
312
294
  convertToFunctionCall(apifc) {
313
- return this.openAIResponsesEngineBase.convertToFunctionCall(apifc);
314
- }
315
- get toolChoice() {
316
- return this.openAIResponsesNativeEngineBase.toolChoice;
317
- }
318
- set toolChoice(value) {
319
- this.openAIResponsesNativeEngineBase.toolChoice = value;
320
- }
321
- get parallel() {
322
- return this.openAIResponsesNativeEngineBase.parallel;
323
- }
324
- set parallel(value) {
325
- this.openAIResponsesNativeEngineBase.parallel = value;
326
- }
327
- get applyPatch() {
328
- return this.openAIResponsesNativeEngineBase.applyPatch;
329
- }
330
- set applyPatch(value) {
331
- this.openAIResponsesNativeEngineBase.applyPatch = value;
295
+ return (OpenAIResponsesEngine.convertToFunctionCall).call(this, apifc);
332
296
  }
333
- stateless(ctx, session) {
334
- return this.openAIResponsesNativeEngineBase.stateless(ctx, session);
297
+ stateless(wfctx, session) {
298
+ return (OpenAIResponsesNativeEngine.stateless).call(this, wfctx, session);
335
299
  }
336
- stateful(ctx, session) {
337
- return this.openAIResponsesNativeEngineBase.stateful(ctx, session);
300
+ stateful(wfctx, session) {
301
+ return (OpenAIResponsesNativeEngine.stateful).call(this, wfctx, session);
338
302
  }
339
303
  appendUserMessage(session, message) {
340
- return this.openAIResponsesNativeEngineBase.appendUserMessage(session, message);
304
+ return (OpenAIResponsesNativeEngine.appendUserMessage).call(this, session, message);
341
305
  }
342
306
  pushUserMessage(session, message) {
343
- return this.openAIResponsesNativeEngineBase.pushUserMessage(session, message);
307
+ return (OpenAIResponsesNativeEngine.pushUserMessage).call(this, session, message);
344
308
  }
345
- async fetch(ctx, session, signal) {
346
- return this.openAIResponsesNativeEngineBase.fetch(ctx, session, signal);
309
+ async fetch(wfctx, session, signal) {
310
+ return (OpenAIResponsesNativeEngine.fetch).call(this, wfctx, session, signal);
347
311
  }
348
- async fetchRaw(ctx, session, signal) {
349
- return this.openAIResponsesNativeEngineBase.fetchRaw(ctx, session, signal);
312
+ async fetchRaw(wfctx, session, signal) {
313
+ return (OpenAIResponsesNativeEngine.fetchRaw).call(this, wfctx, session, signal);
350
314
  }
351
315
  convertToAiMessage(output) {
352
- return this.openAIResponsesNativeEngineBase.convertToAiMessage(output);
316
+ return (OpenAIResponsesNativeEngine.convertToAiMessage).call(this, output);
353
317
  }
354
318
  convertFromChatMessage(chatMessage) {
355
- return this.openAIResponsesNativeEngineBase.convertFromChatMessage(chatMessage);
319
+ return (OpenAIResponsesNativeEngine.convertFromChatMessage).call(this, chatMessage);
356
320
  }
357
321
  convertFromUserMessage(userMessage) {
358
- return this.openAIResponsesNativeEngineBase.convertFromUserMessage(userMessage);
322
+ return (OpenAIResponsesNativeEngine.convertFromUserMessage).call(this, userMessage);
359
323
  }
360
324
  convertFromDeveloperMessage(developerMessage) {
361
- return this.openAIResponsesNativeEngineBase.convertFromDeveloperMessage(developerMessage);
325
+ return (OpenAIResponsesNativeEngine.convertFromDeveloperMessage).call(this, developerMessage);
362
326
  }
363
327
  convertFromToolChoice(toolChoice) {
364
- return this.openAIResponsesNativeEngineBase.convertFromToolChoice(toolChoice);
328
+ return (OpenAIResponsesNativeEngine.convertFromToolChoice).call(this, toolChoice);
365
329
  }
366
330
  makeMonolithParams(session) {
367
- return this.openAIResponsesNativeEngineBase.makeMonolithParams(session);
331
+ return (OpenAIResponsesNativeEngine.makeMonolithParams).call(this, session);
368
332
  }
369
- logAiMessage(ctx, output) {
370
- return this.openAIResponsesNativeEngineBase.logAiMessage(ctx, output);
333
+ logAiMessage(output) {
334
+ return (OpenAIResponsesNativeEngine.logAiMessage).call(this, output);
371
335
  }
372
336
  validateToolCallsByToolChoice(toolCalls) {
373
- return this.openAIResponsesNativeEngineBase.validateToolCallsByToolChoice(toolCalls);
337
+ return (OpenAIResponsesNativeEngine.validateToolCallsByToolChoice).call(this, toolCalls);
374
338
  }
375
339
  }
376
340
  OpenAIResponsesNativeEngine.Instance = Instance;