@zimtsui/brainswitch 0.0.54 → 0.0.56

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 (215) hide show
  1. package/DEVELOPMENT.md +13 -14
  2. package/README.md +7 -14
  3. package/build/adaptor.d.ts +5 -5
  4. package/build/adaptor.js +16 -16
  5. package/build/adaptor.js.map +1 -1
  6. package/build/agentloop.d.ts +5 -5
  7. package/build/agentloop.js +4 -4
  8. package/build/agentloop.js.map +1 -1
  9. package/build/api-types/anthropic/billing.d.ts +12 -0
  10. package/build/api-types/anthropic/billing.js +15 -0
  11. package/build/api-types/anthropic/billing.js.map +1 -0
  12. package/build/api-types/anthropic/tool-codec.d.ts +17 -0
  13. package/build/api-types/anthropic/tool-codec.js +73 -0
  14. package/build/api-types/anthropic/tool-codec.js.map +1 -0
  15. package/build/api-types/google/billing.d.ts +12 -0
  16. package/build/api-types/google/billing.js +24 -0
  17. package/build/api-types/google/billing.js.map +1 -0
  18. package/build/api-types/google/restful-request.d.ts +8 -0
  19. package/build/api-types/google/restful-request.js +2 -0
  20. package/build/api-types/google/restful-request.js.map +1 -0
  21. package/build/api-types/google/tool-codec.d.ts +16 -0
  22. package/build/api-types/{google.js → google/tool-codec.js} +27 -26
  23. package/build/api-types/google/tool-codec.js.map +1 -0
  24. package/build/api-types/openai-chatcompletion/billing.d.ts +13 -0
  25. package/build/api-types/openai-chatcompletion/billing.js +16 -0
  26. package/build/api-types/openai-chatcompletion/billing.js.map +1 -0
  27. package/build/api-types/openai-chatcompletion/tool-codec.d.ts +18 -0
  28. package/build/api-types/openai-chatcompletion/tool-codec.js +86 -0
  29. package/build/api-types/openai-chatcompletion/tool-codec.js.map +1 -0
  30. package/build/api-types/openai-responses/billing.d.ts +12 -0
  31. package/build/api-types/openai-responses/billing.js +15 -0
  32. package/build/api-types/openai-responses/billing.js.map +1 -0
  33. package/build/api-types/openai-responses/tool-codec.d.ts +16 -0
  34. package/build/api-types/openai-responses/tool-codec.js +72 -0
  35. package/build/api-types/openai-responses/tool-codec.js.map +1 -0
  36. package/build/compatible/engine.d/aliyun.d.ts +23 -0
  37. package/build/compatible/engine.d/aliyun.js +44 -0
  38. package/build/compatible/engine.d/aliyun.js.map +1 -0
  39. package/build/compatible/engine.d/anthropic.d.ts +23 -0
  40. package/build/compatible/engine.d/anthropic.js +41 -0
  41. package/build/compatible/engine.d/anthropic.js.map +1 -0
  42. package/build/compatible/engine.d/google.d.ts +23 -0
  43. package/build/compatible/engine.d/google.js +45 -0
  44. package/build/compatible/engine.d/google.js.map +1 -0
  45. package/build/compatible/engine.d/openai-responses.d.ts +23 -0
  46. package/build/compatible/engine.d/openai-responses.js +41 -0
  47. package/build/compatible/engine.d/openai-responses.js.map +1 -0
  48. package/build/compatible/engine.d.ts +18 -0
  49. package/build/compatible/engine.js +21 -0
  50. package/build/compatible/engine.js.map +1 -0
  51. package/build/compatible/session.d.ts +78 -0
  52. package/build/compatible/session.js +138 -0
  53. package/build/compatible/session.js.map +1 -0
  54. package/build/compatible/tool-call-validator.d.ts +11 -0
  55. package/build/compatible/tool-call-validator.js +12 -0
  56. package/build/compatible/tool-call-validator.js.map +1 -0
  57. package/build/compatible.d/aliyun/transport.d.ts +11 -0
  58. package/build/compatible.d/aliyun/transport.js +9 -0
  59. package/build/compatible.d/aliyun/transport.js.map +1 -0
  60. package/build/compatible.d/anthropic/message-codec.d.ts +31 -0
  61. package/build/compatible.d/anthropic/message-codec.js +88 -0
  62. package/build/compatible.d/anthropic/message-codec.js.map +1 -0
  63. package/build/compatible.d/anthropic/transport.d.ts +31 -0
  64. package/build/compatible.d/anthropic/transport.js +137 -0
  65. package/build/compatible.d/anthropic/transport.js.map +1 -0
  66. package/build/compatible.d/google/message-codec.d.ts +31 -0
  67. package/build/compatible.d/google/message-codec.js +98 -0
  68. package/build/compatible.d/google/message-codec.js.map +1 -0
  69. package/build/compatible.d/google/transport.d.ts +28 -0
  70. package/build/compatible.d/google/transport.js +74 -0
  71. package/build/compatible.d/google/transport.js.map +1 -0
  72. package/build/compatible.d/openai-chatcompletions/message-codec.d.ts +19 -0
  73. package/build/compatible.d/openai-chatcompletions/message-codec.js +66 -0
  74. package/build/compatible.d/openai-chatcompletions/message-codec.js.map +1 -0
  75. package/build/compatible.d/openai-chatcompletions/transport.d.ts +9 -0
  76. package/build/compatible.d/openai-chatcompletions/transport.js +25 -0
  77. package/build/compatible.d/openai-chatcompletions/transport.js.map +1 -0
  78. package/build/compatible.d/openai-chatcompletions.d/monolith.d.ts +36 -0
  79. package/build/compatible.d/openai-chatcompletions.d/monolith.js +74 -0
  80. package/build/compatible.d/openai-chatcompletions.d/monolith.js.map +1 -0
  81. package/build/compatible.d/openai-chatcompletions.d/stream.d.ts +35 -0
  82. package/build/{compatible-engines.d → compatible.d}/openai-chatcompletions.d/stream.js +52 -42
  83. package/build/compatible.d/openai-chatcompletions.d/stream.js.map +1 -0
  84. package/build/compatible.d/openai-responses/message-codec.d.ts +32 -0
  85. package/build/compatible.d/openai-responses/message-codec.js +105 -0
  86. package/build/compatible.d/openai-responses/message-codec.js.map +1 -0
  87. package/build/compatible.d/openai-responses/transport.d.ts +33 -0
  88. package/build/compatible.d/openai-responses/transport.js +88 -0
  89. package/build/compatible.d/openai-responses/transport.js.map +1 -0
  90. package/build/config.js +1 -1
  91. package/build/config.js.map +1 -1
  92. package/build/engine.d.ts +48 -26
  93. package/build/engine.js +78 -29
  94. package/build/engine.js.map +1 -1
  95. package/build/exports.d.ts +14 -13
  96. package/build/exports.js +14 -13
  97. package/build/exports.js.map +1 -1
  98. package/build/function.d.ts +25 -13
  99. package/build/function.js +2 -1
  100. package/build/function.js.map +1 -1
  101. package/build/inference-context.d.ts +1 -1
  102. package/build/native-engines.d/google/agentloop.d.ts +6 -6
  103. package/build/native-engines.d/google/agentloop.js +5 -5
  104. package/build/native-engines.d/google/agentloop.js.map +1 -1
  105. package/build/native-engines.d/google/engine.d.ts +28 -103
  106. package/build/native-engines.d/google/engine.js +63 -304
  107. package/build/native-engines.d/google/engine.js.map +1 -1
  108. package/build/native-engines.d/google/exports.d.ts +5 -5
  109. package/build/native-engines.d/google/exports.js +5 -5
  110. package/build/native-engines.d/google/exports.js.map +1 -1
  111. package/build/native-engines.d/google/message-codec.d.ts +21 -0
  112. package/build/native-engines.d/google/message-codec.js +69 -0
  113. package/build/native-engines.d/google/message-codec.js.map +1 -0
  114. package/build/native-engines.d/google/session.d.ts +16 -15
  115. package/build/native-engines.d/google/session.js +2 -2
  116. package/build/native-engines.d/google/session.js.map +1 -1
  117. package/build/native-engines.d/google/transport.d.ts +31 -0
  118. package/build/native-engines.d/google/transport.js +81 -0
  119. package/build/native-engines.d/google/transport.js.map +1 -0
  120. package/build/native-engines.d/openai-responses/agentloop.d.ts +7 -7
  121. package/build/native-engines.d/openai-responses/agentloop.js +6 -6
  122. package/build/native-engines.d/openai-responses/agentloop.js.map +1 -1
  123. package/build/native-engines.d/openai-responses/engine.d.ts +26 -106
  124. package/build/native-engines.d/openai-responses/engine.js +53 -334
  125. package/build/native-engines.d/openai-responses/engine.js.map +1 -1
  126. package/build/native-engines.d/openai-responses/exports.d.ts +6 -7
  127. package/build/native-engines.d/openai-responses/exports.js +6 -7
  128. package/build/native-engines.d/openai-responses/exports.js.map +1 -1
  129. package/build/native-engines.d/openai-responses/message-codec.d.ts +21 -0
  130. package/build/native-engines.d/openai-responses/message-codec.js +69 -0
  131. package/build/native-engines.d/openai-responses/message-codec.js.map +1 -0
  132. package/build/native-engines.d/openai-responses/session.d.ts +27 -26
  133. package/build/native-engines.d/openai-responses/session.js +3 -3
  134. package/build/native-engines.d/openai-responses/session.js.map +1 -1
  135. package/build/native-engines.d/openai-responses/tool-call-validator.d.ts +12 -0
  136. package/build/native-engines.d/openai-responses/tool-call-validator.js +33 -0
  137. package/build/native-engines.d/openai-responses/tool-call-validator.js.map +1 -0
  138. package/build/native-engines.d/openai-responses/tool.d.ts +3 -3
  139. package/build/native-engines.d/openai-responses/tool.js +1 -1
  140. package/build/native-engines.d/openai-responses/tool.js.map +1 -1
  141. package/build/native-engines.d/openai-responses/transport.d.ts +36 -0
  142. package/build/native-engines.d/openai-responses/transport.js +104 -0
  143. package/build/native-engines.d/openai-responses/transport.js.map +1 -0
  144. package/build/session.d.ts +5 -75
  145. package/build/session.js +0 -136
  146. package/build/session.js.map +1 -1
  147. package/build/throttle.d.ts +1 -1
  148. package/build/tsconfig.tsbuildinfo +1 -1
  149. package/package.json +4 -4
  150. package/test/build/test-codecs.js +230 -0
  151. package/test/build/test-codecs.js.map +1 -0
  152. package/test/build/test-compatible-engine.d.ts +1 -0
  153. package/test/build/test-compatible-engine.js +27 -0
  154. package/test/build/test-compatible-engine.js.map +1 -0
  155. package/test/build/test-compatible-engines.d.ts +1 -0
  156. package/test/build/test-compatible-engines.js +112 -0
  157. package/test/build/test-compatible-engines.js.map +1 -0
  158. package/test/build/test-engine.d.ts +1 -0
  159. package/test/build/test-engine.js +97 -0
  160. package/test/build/test-engine.js.map +1 -0
  161. package/test/build/test-helpers.d.ts +46 -0
  162. package/test/build/test-helpers.js +45 -0
  163. package/test/build/test-helpers.js.map +1 -0
  164. package/test/build/test-native-engines.d.ts +1 -0
  165. package/test/build/test-native-engines.js +64 -0
  166. package/test/build/test-native-engines.js.map +1 -0
  167. package/test/build/test.d.ts +5 -0
  168. package/test/build/test.js +6 -0
  169. package/test/build/test.js.map +1 -0
  170. package/test/build/tsconfig.tsbuildinfo +1 -0
  171. package/test/src/test-codecs.ts +256 -0
  172. package/test/src/test-compatible-engine.ts +45 -0
  173. package/test/src/test-compatible-engines.ts +129 -0
  174. package/test/src/test-engine.ts +144 -0
  175. package/test/src/test-helpers.ts +53 -0
  176. package/test/src/test-native-engines.ts +75 -0
  177. package/test/src/test.ts +5 -0
  178. package/test/src/tsconfig.json +30 -0
  179. package/build/api-types/anthropic.d.ts +0 -29
  180. package/build/api-types/anthropic.js +0 -93
  181. package/build/api-types/anthropic.js.map +0 -1
  182. package/build/api-types/google.d.ts +0 -28
  183. package/build/api-types/google.js.map +0 -1
  184. package/build/api-types/openai-chat-completions.d.ts +0 -31
  185. package/build/api-types/openai-chat-completions.js +0 -113
  186. package/build/api-types/openai-chat-completions.js.map +0 -1
  187. package/build/api-types/openai-responses.d.ts +0 -23
  188. package/build/api-types/openai-responses.js +0 -71
  189. package/build/api-types/openai-responses.js.map +0 -1
  190. package/build/compatible-engine.d.ts +0 -51
  191. package/build/compatible-engine.js +0 -67
  192. package/build/compatible-engine.js.map +0 -1
  193. package/build/compatible-engines.d/aliyun.d.ts +0 -69
  194. package/build/compatible-engines.d/aliyun.js +0 -149
  195. package/build/compatible-engines.d/aliyun.js.map +0 -1
  196. package/build/compatible-engines.d/anthropic.d.ts +0 -78
  197. package/build/compatible-engines.d/anthropic.js +0 -312
  198. package/build/compatible-engines.d/anthropic.js.map +0 -1
  199. package/build/compatible-engines.d/google.d.ts +0 -83
  200. package/build/compatible-engines.d/google.js +0 -279
  201. package/build/compatible-engines.d/google.js.map +0 -1
  202. package/build/compatible-engines.d/openai-chatcompletions.d/monolith.d.ts +0 -15
  203. package/build/compatible-engines.d/openai-chatcompletions.d/monolith.js +0 -75
  204. package/build/compatible-engines.d/openai-chatcompletions.d/monolith.js.map +0 -1
  205. package/build/compatible-engines.d/openai-chatcompletions.d/stream.d.ts +0 -21
  206. package/build/compatible-engines.d/openai-chatcompletions.d/stream.js.map +0 -1
  207. package/build/compatible-engines.d/openai-chatcompletions.d.ts +0 -27
  208. package/build/compatible-engines.d/openai-chatcompletions.js +0 -76
  209. package/build/compatible-engines.d/openai-chatcompletions.js.map +0 -1
  210. package/build/compatible-engines.d/openai-responses.d.ts +0 -93
  211. package/build/compatible-engines.d/openai-responses.js +0 -300
  212. package/build/compatible-engines.d/openai-responses.js.map +0 -1
  213. package/build/test.js +0 -198
  214. package/build/test.js.map +0 -1
  215. /package/{build/test.d.ts → test/build/test-codecs.d.ts} +0 -0
@@ -1,33 +1,47 @@
1
- import { RoleMessage } from "../../session.js";
2
- import { Function } from "../../function.js";
3
- import { OpenAIChatCompletionsCompatibleEngine } from "../openai-chatcompletions.js";
4
- import {} from "../../inference-context.js";
5
- import { ResponseInvalid } from "../../engine.js";
6
- import { logger } from "../../telemetry.js";
7
- export var OpenAIChatCompletionsCompatibleStreamEngine;
8
- (function (OpenAIChatCompletionsCompatibleStreamEngine) {
9
- function makeParams(session) {
10
- const fdentries = Object.entries(this.fdm);
11
- const tools = fdentries.map(fdentry => this.convertFromFunctionDeclarationEntry(fdentry));
1
+ import { RoleMessage } from '#@/compatible/session.ts';
2
+ import { Function } from '#@/function.ts';
3
+ import OpenAI from 'openai';
4
+ import { OpenAIChatCompletionsCompatibleTransport } from '#@/compatible.d/openai-chatcompletions/transport.ts';
5
+ import {} from '#@/inference-context.ts';
6
+ import { ResponseInvalid } from '#@/engine.ts';
7
+ import { logger } from '#@/telemetry.ts';
8
+ import { Throttle } from '#@/throttle.ts';
9
+ import * as Undici from 'undici';
10
+ import {} from '#@/compatible.d/openai-chatcompletions/message-codec.ts';
11
+ export class OpenAIChatCompletionsCompatibleStream extends OpenAIChatCompletionsCompatibleTransport {
12
+ ctx;
13
+ client;
14
+ constructor(ctx) {
15
+ super();
16
+ this.ctx = ctx;
17
+ this.client = new OpenAI({
18
+ baseURL: this.ctx.providerSpec.baseUrl,
19
+ apiKey: this.ctx.providerSpec.apiKey,
20
+ fetchOptions: {
21
+ dispatcher: this.ctx.providerSpec.proxyAgent,
22
+ },
23
+ });
24
+ }
25
+ makeParams(session) {
26
+ const tools = this.ctx.toolCodec.convertFromFunctionDeclarationMap(this.ctx.fdm);
12
27
  return {
13
- model: this.model,
28
+ model: this.ctx.inferenceParams.model,
14
29
  messages: [
15
- ...(session.developerMessage ? this.convertFromRoleMessage(session.developerMessage) : []),
16
- ...session.chatMessages.flatMap(chatMessage => this.convertFromRoleMessage(chatMessage)),
30
+ ...(session.developerMessage ? this.ctx.messageCodec.convertFromRoleMessage(session.developerMessage) : []),
31
+ ...this.ctx.messageCodec.convertFromChatMessages(session.chatMessages),
17
32
  ],
18
33
  tools: tools.length ? tools : undefined,
19
- tool_choice: tools.length ? this.convertFromToolChoice(this.toolChoice) : undefined,
20
- parallel_tool_calls: tools.length ? this.parallelToolCall : undefined,
34
+ tool_choice: tools.length ? this.ctx.toolCodec.convertFromToolChoice(this.ctx.toolChoice) : undefined,
35
+ parallel_tool_calls: tools.length ? this.ctx.parallelToolCall : undefined,
21
36
  stream: true,
22
37
  stream_options: {
23
38
  include_usage: true
24
39
  },
25
- max_completion_tokens: this.maxTokens ?? undefined,
26
- ...this.additionalOptions,
40
+ max_completion_tokens: this.ctx.inferenceParams.maxTokens ?? undefined,
41
+ ...this.ctx.inferenceParams.additionalOptions,
27
42
  };
28
43
  }
29
- OpenAIChatCompletionsCompatibleStreamEngine.makeParams = makeParams;
30
- function convertToFunctionCallFromDelta(apifc) {
44
+ convertToFunctionCallFromDelta(apifc) {
31
45
  if (apifc.id) { }
32
46
  else
33
47
  throw new Error();
@@ -37,10 +51,9 @@ export var OpenAIChatCompletionsCompatibleStreamEngine;
37
51
  if (apifc.function?.arguments) { }
38
52
  else
39
53
  throw new Error();
40
- return this.convertToFunctionCall(apifc);
54
+ return this.ctx.toolCodec.convertToFunctionCall(apifc);
41
55
  }
42
- OpenAIChatCompletionsCompatibleStreamEngine.convertToFunctionCallFromDelta = convertToFunctionCallFromDelta;
43
- function convertCompletionStockToCompletion(stock) {
56
+ convertCompletionStockToCompletion(stock) {
44
57
  const stockChoice = stock?.choices[0];
45
58
  if (stockChoice?.finish_reason) { }
46
59
  else
@@ -83,11 +96,10 @@ export var OpenAIChatCompletionsCompatibleStreamEngine;
83
96
  };
84
97
  return completion;
85
98
  }
86
- OpenAIChatCompletionsCompatibleStreamEngine.convertCompletionStockToCompletion = convertCompletionStockToCompletion;
87
- async function fetchRaw(wfctx, session, signal) {
99
+ async fetchRaw(wfctx, session, signal) {
88
100
  const params = this.makeParams(session);
89
- logger.message?.trace(params);
90
- await this.throttle.requests(wfctx);
101
+ logger.message.trace(params);
102
+ await this.ctx.throttle.requests(wfctx);
91
103
  const stream = await this.client.chat.completions.create(params, { signal });
92
104
  let stock = null;
93
105
  let thoughts = null, thinking = false;
@@ -113,9 +125,9 @@ export var OpenAIChatCompletionsCompatibleStreamEngine;
113
125
  if (deltaThoughts) {
114
126
  if (!thinking) {
115
127
  thinking = true;
116
- logger.inference?.trace('<think>\n');
128
+ logger.inference.trace('<think>\n');
117
129
  }
118
- logger.inference?.trace(deltaThoughts);
130
+ logger.inference.trace(deltaThoughts);
119
131
  thoughts ??= '';
120
132
  thoughts += deltaThoughts;
121
133
  }
@@ -123,9 +135,9 @@ export var OpenAIChatCompletionsCompatibleStreamEngine;
123
135
  if (deltaChoice.delta.content) {
124
136
  if (thinking) {
125
137
  thinking = false;
126
- logger.inference?.trace('\n</think>\n');
138
+ logger.inference.trace('\n</think>\n');
127
139
  }
128
- logger.inference?.debug(deltaChoice.delta.content);
140
+ logger.inference.debug(deltaChoice.delta.content);
129
141
  stock.choices[0].delta.content ??= '';
130
142
  stock.choices[0].delta.content += deltaChoice.delta.content;
131
143
  }
@@ -133,7 +145,7 @@ export var OpenAIChatCompletionsCompatibleStreamEngine;
133
145
  if (deltaChoice.delta.tool_calls) {
134
146
  if (thinking) {
135
147
  thinking = false;
136
- logger.inference?.trace('\n</think>\n');
148
+ logger.inference.trace('\n</think>\n');
137
149
  }
138
150
  stock.choices[0].delta.tool_calls ??= [];
139
151
  for (const deltaToolCall of deltaChoice.delta.tool_calls) {
@@ -165,22 +177,20 @@ export var OpenAIChatCompletionsCompatibleStreamEngine;
165
177
  else
166
178
  throw new ResponseInvalid('Content missing', { cause: completion });
167
179
  if (choice.message.content)
168
- logger.inference?.debug('\n');
180
+ logger.inference.debug('\n');
169
181
  this.handleFinishReason(completion, choice.finish_reason);
170
182
  if (completion.usage) { }
171
183
  else
172
184
  throw new Error();
173
- const cost = this.calcCost(completion.usage);
174
- wfctx.cost?.(cost);
175
- const aiMessage = this.convertToAiMessage(choice.message);
176
- // logging
185
+ const cost = this.ctx.billing.charge(completion.usage);
186
+ const aiMessage = this.ctx.messageCodec.convertToAiMessage(choice.message);
177
187
  const apifcs = choice.message.tool_calls;
178
188
  if (apifcs?.length)
179
- logger.message?.debug(apifcs);
180
- logger.message?.debug(completion.usage);
181
- this.validateToolCallsByToolChoice(aiMessage.getFunctionCalls());
189
+ logger.message.debug(apifcs);
190
+ logger.message.debug(completion.usage);
191
+ wfctx.cost?.(cost);
192
+ this.ctx.toolCallValidator.validate(aiMessage.getFunctionCalls());
182
193
  return aiMessage;
183
194
  }
184
- OpenAIChatCompletionsCompatibleStreamEngine.fetchRaw = fetchRaw;
185
- })(OpenAIChatCompletionsCompatibleStreamEngine || (OpenAIChatCompletionsCompatibleStreamEngine = {}));
195
+ }
186
196
  //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/compatible.d/openai-chatcompletions.d/stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { RoleMessage, type Session } from '#@/compatible/session.ts';
2
+ import { Function } from '#@/function.ts';
3
+ import OpenAI from 'openai';
4
+ import type { OpenAIResponsesToolCodec } from '#@/api-types/openai-responses/tool-codec.ts';
5
+ export declare class OpenAIResponsesCompatibleMessageCodec<in out fdm extends Function.Declaration.Map> {
6
+ protected ctx: OpenAIResponsesCompatibleMessageCodec.Context<fdm>;
7
+ constructor(ctx: OpenAIResponsesCompatibleMessageCodec.Context<fdm>);
8
+ convertToAiMessage(output: OpenAI.Responses.ResponseOutputItem[]): OpenAIResponsesCompatibleMessageCodec.Message.Ai<fdm>;
9
+ convertFromFunctionCall(fc: Function.Call.From<fdm>): OpenAI.Responses.ResponseFunctionToolCall;
10
+ convertFromUserMessage(userMessage: RoleMessage.User<fdm>): OpenAI.Responses.ResponseInput;
11
+ convertFromAiMessage(aiMessage: RoleMessage.Ai<fdm>): OpenAI.Responses.ResponseInput;
12
+ convertFromDeveloperMessage(developerMessage: RoleMessage.Developer): string;
13
+ convertFromChatMessage(chatMessage: Session.ChatMessage<fdm>): OpenAI.Responses.ResponseInput;
14
+ }
15
+ export declare namespace OpenAIResponsesCompatibleMessageCodec {
16
+ interface Context<in out fdm extends Function.Declaration.Map> {
17
+ toolCodec: OpenAIResponsesToolCodec<fdm>;
18
+ }
19
+ namespace Message {
20
+ type Ai<fdm extends Function.Declaration.Map> = Ai.Instance<fdm>;
21
+ namespace Ai {
22
+ function create<fdm extends Function.Declaration.Map>(parts: RoleMessage.Ai.Part<fdm>[], raw: OpenAI.Responses.ResponseOutputItem[]): Ai<fdm>;
23
+ const NOMINAL: unique symbol;
24
+ class Instance<in out fdm extends Function.Declaration.Map> extends RoleMessage.Ai.Instance<fdm> {
25
+ protected raw: OpenAI.Responses.ResponseOutputItem[];
26
+ readonly [NOMINAL]: void;
27
+ constructor(parts: RoleMessage.Ai.Part<fdm>[], raw: OpenAI.Responses.ResponseOutputItem[]);
28
+ getRaw(): OpenAI.Responses.ResponseOutputItem[];
29
+ }
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,105 @@
1
+ import { ResponseInvalid } from '#@/engine.ts';
2
+ import { RoleMessage } from '#@/compatible/session.ts';
3
+ import { Function } from '#@/function.ts';
4
+ import OpenAI from 'openai';
5
+ export class OpenAIResponsesCompatibleMessageCodec {
6
+ ctx;
7
+ constructor(ctx) {
8
+ this.ctx = ctx;
9
+ }
10
+ convertToAiMessage(output) {
11
+ const parts = output.flatMap((item) => {
12
+ if (item.type === 'message') {
13
+ if (item.content.every(part => part.type === 'output_text')) { }
14
+ else
15
+ throw new Error();
16
+ return [RoleMessage.Part.Text.create(item.content.map(part => part.text).join(''))];
17
+ }
18
+ else if (item.type === 'function_call')
19
+ return [this.ctx.toolCodec.convertToFunctionCall(item)];
20
+ else if (item.type === 'reasoning')
21
+ return [];
22
+ else
23
+ throw new Error();
24
+ });
25
+ return OpenAIResponsesCompatibleMessageCodec.Message.Ai.create(parts, output);
26
+ }
27
+ convertFromFunctionCall(fc) {
28
+ if (fc.id) { }
29
+ else
30
+ throw new Error();
31
+ return {
32
+ type: 'function_call',
33
+ call_id: fc.id,
34
+ name: fc.name,
35
+ arguments: JSON.stringify(fc.args),
36
+ };
37
+ }
38
+ convertFromUserMessage(userMessage) {
39
+ return userMessage.getParts().map(part => {
40
+ if (part instanceof RoleMessage.Part.Text.Instance)
41
+ return {
42
+ type: 'message',
43
+ role: 'user',
44
+ content: part.text,
45
+ };
46
+ else if (part instanceof Function.Response)
47
+ return this.ctx.toolCodec.convertFromFunctionResponse(part);
48
+ else
49
+ throw new Error();
50
+ });
51
+ }
52
+ convertFromAiMessage(aiMessage) {
53
+ if (aiMessage instanceof OpenAIResponsesCompatibleMessageCodec.Message.Ai.Instance)
54
+ return aiMessage.getRaw();
55
+ else {
56
+ return aiMessage.getParts().map(part => {
57
+ if (part instanceof RoleMessage.Part.Text.Instance)
58
+ return {
59
+ role: 'assistant',
60
+ content: part.text,
61
+ };
62
+ else if (part instanceof Function.Call)
63
+ return this.convertFromFunctionCall(part);
64
+ else
65
+ throw new Error();
66
+ });
67
+ }
68
+ }
69
+ convertFromDeveloperMessage(developerMessage) {
70
+ return developerMessage.getOnlyText();
71
+ }
72
+ convertFromChatMessage(chatMessage) {
73
+ if (chatMessage instanceof RoleMessage.User.Instance)
74
+ return this.convertFromUserMessage(chatMessage);
75
+ else if (chatMessage instanceof RoleMessage.Ai.Instance)
76
+ return this.convertFromAiMessage(chatMessage);
77
+ else
78
+ throw new Error();
79
+ }
80
+ }
81
+ (function (OpenAIResponsesCompatibleMessageCodec) {
82
+ let Message;
83
+ (function (Message) {
84
+ let Ai;
85
+ (function (Ai) {
86
+ function create(parts, raw) {
87
+ return new Instance(parts, raw);
88
+ }
89
+ Ai.create = create;
90
+ Ai.NOMINAL = Symbol();
91
+ class Instance extends RoleMessage.Ai.Instance {
92
+ raw;
93
+ constructor(parts, raw) {
94
+ super(parts);
95
+ this.raw = raw;
96
+ }
97
+ getRaw() {
98
+ return this.raw;
99
+ }
100
+ }
101
+ Ai.Instance = Instance;
102
+ })(Ai = Message.Ai || (Message.Ai = {}));
103
+ })(Message = OpenAIResponsesCompatibleMessageCodec.Message || (OpenAIResponsesCompatibleMessageCodec.Message = {}));
104
+ })(OpenAIResponsesCompatibleMessageCodec || (OpenAIResponsesCompatibleMessageCodec = {}));
105
+ //# sourceMappingURL=message-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-codec.js","sourceRoot":"","sources":["../../../src/compatible.d/openai-responses/message-codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type InferenceParams, type ProviderSpec } from '#@/engine.ts';
2
+ import { RoleMessage, type Session } from '#@/compatible/session.ts';
3
+ import { Function } from '#@/function.ts';
4
+ import OpenAI from 'openai';
5
+ import { type InferenceContext } from '#@/inference-context.ts';
6
+ import { Throttle } from '#@/throttle.ts';
7
+ import type { OpenAIResponsesCompatibleMessageCodec } from '#@/compatible.d/openai-responses/message-codec.ts';
8
+ import type { OpenAIResponsesToolCodec } from '#@/api-types/openai-responses/tool-codec.ts';
9
+ import type { OpenAIResponsesBilling } from '#@/api-types/openai-responses/billing.ts';
10
+ import type { ToolCallValidator } from '#@/compatible/tool-call-validator.ts';
11
+ export declare class OpenAIResponsesCompatibleTransport<in out fdm extends Function.Declaration.Map> {
12
+ protected ctx: OpenAIResponsesCompatibleTransport.Context<fdm>;
13
+ protected apiURL: URL;
14
+ constructor(ctx: OpenAIResponsesCompatibleTransport.Context<fdm>);
15
+ protected makeParams(session: Session<fdm>): OpenAI.Responses.ResponseCreateParamsNonStreaming;
16
+ protected logAiMessage(output: OpenAI.Responses.ResponseOutputItem[]): void;
17
+ protected fetchRaw(wfctx: InferenceContext, session: Session<fdm>, signal?: AbortSignal): Promise<OpenAIResponsesCompatibleMessageCodec.Message.Ai<fdm>>;
18
+ fetch(wfctx: InferenceContext, session: Session<fdm>, signal?: AbortSignal): Promise<RoleMessage.Ai<fdm>>;
19
+ }
20
+ export declare namespace OpenAIResponsesCompatibleTransport {
21
+ interface Context<in out fdm extends Function.Declaration.Map> {
22
+ inferenceSpec: InferenceParams;
23
+ providerSpec: ProviderSpec;
24
+ fdm: fdm;
25
+ throttle: Throttle;
26
+ toolChoice: Function.ToolChoice<fdm>;
27
+ parallelToolCall: boolean;
28
+ messageCodec: OpenAIResponsesCompatibleMessageCodec<fdm>;
29
+ toolCodec: OpenAIResponsesToolCodec<fdm>;
30
+ billing: OpenAIResponsesBilling;
31
+ toolCallValidator: ToolCallValidator<fdm>;
32
+ }
33
+ }
@@ -0,0 +1,88 @@
1
+ import { ResponseInvalid } from '#@/engine.ts';
2
+ import { RoleMessage } from '#@/compatible/session.ts';
3
+ import { Function } from '#@/function.ts';
4
+ import OpenAI from 'openai';
5
+ import * as Undici from 'undici';
6
+ import {} from '#@/inference-context.ts';
7
+ import { Throttle } from '#@/throttle.ts';
8
+ import { logger } from '#@/telemetry.ts';
9
+ export class OpenAIResponsesCompatibleTransport {
10
+ ctx;
11
+ apiURL;
12
+ constructor(ctx) {
13
+ this.ctx = ctx;
14
+ this.apiURL = new URL(`${this.ctx.providerSpec.baseUrl}/responses`);
15
+ }
16
+ makeParams(session) {
17
+ const tools = this.ctx.toolCodec.convertFromFunctionDeclarationMap(this.ctx.fdm);
18
+ return {
19
+ model: this.ctx.inferenceSpec.model,
20
+ include: ['reasoning.encrypted_content'],
21
+ store: false,
22
+ input: session.chatMessages.flatMap(chatMessage => this.ctx.messageCodec.convertFromChatMessage(chatMessage)),
23
+ instructions: session.developerMessage && this.ctx.messageCodec.convertFromDeveloperMessage(session.developerMessage),
24
+ tools: tools.length ? tools : undefined,
25
+ tool_choice: tools.length ? this.ctx.toolCodec.convertFromToolChoice(this.ctx.toolChoice) : undefined,
26
+ parallel_tool_calls: tools.length ? this.ctx.parallelToolCall : undefined,
27
+ max_output_tokens: this.ctx.inferenceSpec.maxTokens,
28
+ ...this.ctx.inferenceSpec.additionalOptions,
29
+ };
30
+ }
31
+ logAiMessage(output) {
32
+ for (const item of output)
33
+ if (item.type === 'message') {
34
+ if (item.content.every(part => part.type === 'output_text')) { }
35
+ else
36
+ throw new Error();
37
+ logger.inference.debug(item.content.map(part => part.text).join(''));
38
+ }
39
+ else if (item.type === 'function_call')
40
+ logger.message.debug(item);
41
+ }
42
+ async fetchRaw(wfctx, session, signal) {
43
+ const params = this.makeParams(session);
44
+ logger.message.trace(params);
45
+ await this.ctx.throttle.requests(wfctx);
46
+ const res = await Undici.fetch(this.apiURL, {
47
+ method: 'POST',
48
+ headers: new Headers({
49
+ 'Content-Type': 'application/json',
50
+ 'Authorization': `Bearer ${this.ctx.providerSpec.apiKey}`,
51
+ }),
52
+ body: JSON.stringify(params),
53
+ dispatcher: this.ctx.providerSpec.proxyAgent,
54
+ signal,
55
+ });
56
+ if (res.ok) { }
57
+ else
58
+ throw new Error(undefined, { cause: res });
59
+ const response = await res.json();
60
+ logger.message.trace(response);
61
+ if (response.status === 'incomplete' && response.incomplete_details?.reason === 'max_output_tokens')
62
+ throw new ResponseInvalid('Token limit exceeded.', { cause: response });
63
+ if (response.status === 'completed') { }
64
+ else
65
+ throw new ResponseInvalid('Abnormal response status', { cause: response });
66
+ this.logAiMessage(response.output);
67
+ if (response.usage) { }
68
+ else
69
+ throw new Error();
70
+ logger.message.debug(response.usage);
71
+ wfctx.cost?.(this.ctx.billing.charge(response.usage));
72
+ const aiMessage = this.ctx.messageCodec.convertToAiMessage(response.output);
73
+ this.ctx.toolCallValidator.validate(aiMessage.getFunctionCalls());
74
+ return aiMessage;
75
+ }
76
+ async fetch(wfctx, session, signal) {
77
+ try {
78
+ return await this.fetchRaw(wfctx, session, signal);
79
+ }
80
+ catch (e) {
81
+ if (e instanceof OpenAI.APIError)
82
+ throw new ResponseInvalid(undefined, { cause: e });
83
+ else
84
+ throw e;
85
+ }
86
+ }
87
+ }
88
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/compatible.d/openai-responses/transport.ts"],"names":[],"mappings":"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"}
package/build/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Type } from '@sinclair/typebox';
2
- import { EndpointSpec } from "./endpoint-spec.js";
2
+ import { EndpointSpec } from '#@/endpoint-spec.ts';
3
3
  import {} from '@sinclair/typebox';
4
4
  export var Config;
5
5
  (function (Config) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAe,MAAM,mBAAmB,CAAC;AAIhD,MAAM,KAAW,MAAM,CAMtB;AAND,WAAiB,MAAM;IACN,aAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;YACrB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC;SAC7D,CAAC;KACL,CAAC,CAAC;AACP,CAAC,EANgB,MAAM,KAAN,MAAM,QAMtB"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAe,MAAM,mBAAmB,CAAC;AAIhD,MAAM,KAAW,MAAM,CAMtB;AAND,WAAiB,MAAM;IACN,aAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;YACrB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC;SAC7D,CAAC;KACL,CAAC,CAAC;AACP,CAAC,EANgB,MAAM,KAAN,MAAM,QAMtB"}
package/build/engine.d.ts CHANGED
@@ -1,9 +1,51 @@
1
- import { Function } from './function.ts';
2
- import { EndpointSpec } from './endpoint-spec.ts';
3
- import { Throttle } from './throttle.ts';
1
+ import { Function } from '#@/function.ts';
2
+ import { EndpointSpec } from '#@/endpoint-spec.ts';
3
+ import { Throttle } from '#@/throttle.ts';
4
4
  import { ProxyAgent } from 'undici';
5
- export interface Engine {
5
+ import { type InferenceContext } from '#@/inference-context.ts';
6
+ import { type GenericSession } from '#@/session.ts';
7
+ export interface Pricing {
8
+ inputPrice: number;
9
+ cachePrice: number;
10
+ outputPrice: number;
11
+ }
12
+ export interface ProviderSpec {
13
+ baseUrl: string;
14
+ apiKey: string;
15
+ proxyAgent?: ProxyAgent;
16
+ }
17
+ export interface InferenceParams {
18
+ model: string;
19
+ additionalOptions?: Record<string, unknown>;
20
+ maxTokens?: number;
21
+ timeout?: number;
22
+ }
23
+ export declare abstract class Engine<in out fdm extends Function.Declaration.Map, userm, aim, devm, session extends GenericSession<userm, aim, devm>> {
24
+ protected providerSpec: ProviderSpec;
25
+ protected inferenceParams: InferenceParams;
6
26
  name: string;
27
+ pricing: Pricing;
28
+ fdm: fdm;
29
+ protected throttle: Throttle;
30
+ protected abstract parallelToolCall: boolean;
31
+ constructor(options: Engine.Options<fdm>);
32
+ protected abstract infer(wfctx: InferenceContext, session: session, signal?: AbortSignal): Promise<aim>;
33
+ /**
34
+ * @throws {@link UserAbortion} 用户中止
35
+ * @throws {@link InferenceTimeout} 推理超时
36
+ * @throws {@link ResponseInvalid} 模型抽风
37
+ * @throws {TypeError} 网络故障
38
+ */
39
+ stateless(wfctx: InferenceContext, session: session): Promise<aim>;
40
+ /**
41
+ * @param session mutable
42
+ */
43
+ stateful(wfctx: InferenceContext, session: session): Promise<aim>;
44
+ abstract appendUserMessage(session: session, message: userm): session;
45
+ /**
46
+ * @param session mutable
47
+ */
48
+ abstract pushUserMessage(session: session, message: userm): session;
7
49
  }
8
50
  export declare namespace Engine {
9
51
  interface Options<in out fdm extends Function.Declaration.Map> extends EndpointSpec, Options.Tools<fdm> {
@@ -15,31 +57,11 @@ export declare namespace Engine {
15
57
  parallelToolCall?: boolean;
16
58
  }
17
59
  }
18
- interface OwnProps<in out fdm extends Function.Declaration.Map> {
19
- baseUrl: string;
20
- apiKey: string;
21
- model: string;
22
- name: string;
23
- inputPrice: number;
24
- outputPrice: number;
25
- cachePrice: number;
26
- fdm: fdm;
27
- additionalOptions?: Record<string, unknown>;
28
- throttle: Throttle;
29
- timeout?: number;
30
- maxTokens?: number;
31
- proxyAgent?: ProxyAgent;
32
- }
33
- namespace OwnProps {
34
- function init<fdm extends Function.Declaration.Map>(options: Options<fdm>): OwnProps<fdm>;
35
- }
36
- interface Underhood<in out fdm extends Function.Declaration.Map> extends Engine, OwnProps<fdm> {
37
- parallelToolCall: boolean;
38
- }
39
60
  }
40
61
  export declare class ResponseInvalid extends Error {
41
62
  }
42
- export declare const USER_ABORTION: unique symbol;
63
+ export declare class UserAbortion {
64
+ }
43
65
  export declare class InferenceTimeout extends Error {
44
66
  }
45
67
  declare global {