@zimtsui/brainswitch 0.0.36 → 0.0.38

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 (120) hide show
  1. package/DEVELOPMENT.md +17 -0
  2. package/README.md +2 -9
  3. package/build/adaptor.d.ts +3 -3
  4. package/build/adaptor.js +11 -17
  5. package/build/adaptor.js.map +1 -1
  6. package/build/agentloop.d.ts +1 -1
  7. package/build/agentloop.js +1 -1
  8. package/build/agentloop.js.map +1 -1
  9. package/build/api-types/anthropic.d.ts +33 -0
  10. package/build/api-types/anthropic.js +90 -0
  11. package/build/api-types/anthropic.js.map +1 -0
  12. package/build/api-types/google.d.ts +25 -0
  13. package/build/api-types/google.js +74 -0
  14. package/build/api-types/google.js.map +1 -0
  15. package/build/api-types/openai-chat-completions.d.ts +33 -0
  16. package/build/api-types/openai-chat-completions.js +97 -0
  17. package/build/api-types/openai-chat-completions.js.map +1 -0
  18. package/build/api-types/openai-responses.d.ts +19 -10
  19. package/build/api-types/openai-responses.js +54 -52
  20. package/build/api-types/openai-responses.js.map +1 -1
  21. package/build/compatible-engine.d.ts +43 -8
  22. package/build/compatible-engine.js +60 -1
  23. package/build/compatible-engine.js.map +1 -1
  24. package/build/compatible-engines/aliyun.d.ts +88 -0
  25. package/build/compatible-engines/aliyun.js +204 -0
  26. package/build/compatible-engines/aliyun.js.map +1 -0
  27. package/build/compatible-engines/anthropic.d.ts +105 -0
  28. package/build/compatible-engines/anthropic.js +363 -0
  29. package/build/compatible-engines/anthropic.js.map +1 -0
  30. package/build/compatible-engines/google/engine.d.ts +43 -0
  31. package/build/compatible-engines/google/engine.js +138 -0
  32. package/build/compatible-engines/google/engine.js.map +1 -0
  33. package/build/compatible-engines/google/restful-engine.d.ts +86 -0
  34. package/build/compatible-engines/google/restful-engine.js +239 -0
  35. package/build/compatible-engines/google/restful-engine.js.map +1 -0
  36. package/build/compatible-engines/openai-chatcompletions.d/default.d.ts +71 -0
  37. package/build/compatible-engines/openai-chatcompletions.d/default.js +185 -0
  38. package/build/compatible-engines/openai-chatcompletions.d/default.js.map +1 -0
  39. package/build/compatible-engines/openai-chatcompletions.d/monolith.d.ts +22 -0
  40. package/build/compatible-engines/openai-chatcompletions.d/monolith.js +76 -0
  41. package/build/compatible-engines/openai-chatcompletions.d/monolith.js.map +1 -0
  42. package/build/compatible-engines/openai-chatcompletions.d/stream.d.ts +27 -0
  43. package/build/compatible-engines/openai-chatcompletions.d/stream.js +181 -0
  44. package/build/compatible-engines/openai-chatcompletions.d/stream.js.map +1 -0
  45. package/build/compatible-engines/openai-chatcompletions.d.ts +33 -0
  46. package/build/compatible-engines/openai-chatcompletions.js +76 -0
  47. package/build/compatible-engines/openai-chatcompletions.js.map +1 -0
  48. package/build/compatible-engines/openai-responses.d.ts +117 -0
  49. package/build/compatible-engines/openai-responses.js +354 -0
  50. package/build/compatible-engines/openai-responses.js.map +1 -0
  51. package/build/engine.d.ts +47 -19
  52. package/build/engine.js +42 -1
  53. package/build/engine.js.map +1 -1
  54. package/build/function.d.ts +1 -1
  55. package/build/{native-engine.d → native-engines}/openai-responses/agentloop.js +1 -1
  56. package/build/native-engines/openai-responses/agentloop.js.map +1 -0
  57. package/build/native-engines/openai-responses/engine.d.ts +133 -0
  58. package/build/native-engines/openai-responses/engine.js +382 -0
  59. package/build/native-engines/openai-responses/engine.js.map +1 -0
  60. package/build/{native-engine.d → native-engines}/openai-responses/exports.d.ts +1 -0
  61. package/build/{native-engine.d → native-engines}/openai-responses/exports.js +1 -0
  62. package/build/native-engines/openai-responses/exports.js.map +1 -0
  63. package/build/{native-engine.d → native-engines}/openai-responses/session.d.ts +7 -7
  64. package/build/{native-engine.d → native-engines}/openai-responses/session.js +12 -12
  65. package/build/native-engines/openai-responses/session.js.map +1 -0
  66. package/build/{native-engine.d → native-engines}/openai-responses/tool.d.ts +1 -1
  67. package/build/native-engines/openai-responses/tool.js.map +1 -0
  68. package/build/session.d.ts +14 -14
  69. package/build/session.js +19 -19
  70. package/build/session.js.map +1 -1
  71. package/build/tsconfig.tsbuildinfo +1 -1
  72. package/package.json +2 -2
  73. package/build/compatible-engine.d/aliyun.d.ts +0 -13
  74. package/build/compatible-engine.d/aliyun.js +0 -17
  75. package/build/compatible-engine.d/aliyun.js.map +0 -1
  76. package/build/compatible-engine.d/anthropic.d.ts +0 -39
  77. package/build/compatible-engine.d/anthropic.js +0 -267
  78. package/build/compatible-engine.d/anthropic.js.map +0 -1
  79. package/build/compatible-engine.d/compatible-base.d.ts +0 -15
  80. package/build/compatible-engine.d/compatible-base.js +0 -58
  81. package/build/compatible-engine.d/compatible-base.js.map +0 -1
  82. package/build/compatible-engine.d/google-base.d.ts +0 -32
  83. package/build/compatible-engine.d/google-base.js +0 -165
  84. package/build/compatible-engine.d/google-base.js.map +0 -1
  85. package/build/compatible-engine.d/google-rest.d.ts +0 -21
  86. package/build/compatible-engine.d/google-rest.js +0 -84
  87. package/build/compatible-engine.d/google-rest.js.map +0 -1
  88. package/build/compatible-engine.d/openai-chatcompletions-base.d.ts +0 -26
  89. package/build/compatible-engine.d/openai-chatcompletions-base.js +0 -146
  90. package/build/compatible-engine.d/openai-chatcompletions-base.js.map +0 -1
  91. package/build/compatible-engine.d/openai-chatcompletions-monolith-base.d.ts +0 -12
  92. package/build/compatible-engine.d/openai-chatcompletions-monolith-base.js +0 -69
  93. package/build/compatible-engine.d/openai-chatcompletions-monolith-base.js.map +0 -1
  94. package/build/compatible-engine.d/openai-chatcompletions-stream-base.d.ts +0 -15
  95. package/build/compatible-engine.d/openai-chatcompletions-stream-base.js +0 -174
  96. package/build/compatible-engine.d/openai-chatcompletions-stream-base.js.map +0 -1
  97. package/build/compatible-engine.d/openai-chatcompletions.d.ts +0 -8
  98. package/build/compatible-engine.d/openai-chatcompletions.js +0 -14
  99. package/build/compatible-engine.d/openai-chatcompletions.js.map +0 -1
  100. package/build/compatible-engine.d/openai-responses.d.ts +0 -43
  101. package/build/compatible-engine.d/openai-responses.js +0 -190
  102. package/build/compatible-engine.d/openai-responses.js.map +0 -1
  103. package/build/compatible-engine.d/openrouter-monolith.d.ts +0 -26
  104. package/build/compatible-engine.d/openrouter-monolith.js +0 -48
  105. package/build/compatible-engine.d/openrouter-monolith.js.map +0 -1
  106. package/build/compatible-engine.d/openrouter-stream.d.ts +0 -28
  107. package/build/compatible-engine.d/openrouter-stream.js +0 -59
  108. package/build/compatible-engine.d/openrouter-stream.js.map +0 -1
  109. package/build/engine-base.d.ts +0 -39
  110. package/build/engine-base.js +0 -38
  111. package/build/engine-base.js.map +0 -1
  112. package/build/native-engine.d/openai-responses/agentloop.js.map +0 -1
  113. package/build/native-engine.d/openai-responses/engine.d.ts +0 -38
  114. package/build/native-engine.d/openai-responses/engine.js +0 -220
  115. package/build/native-engine.d/openai-responses/engine.js.map +0 -1
  116. package/build/native-engine.d/openai-responses/exports.js.map +0 -1
  117. package/build/native-engine.d/openai-responses/session.js.map +0 -1
  118. package/build/native-engine.d/openai-responses/tool.js.map +0 -1
  119. /package/build/{native-engine.d → native-engines}/openai-responses/agentloop.d.ts +0 -0
  120. /package/build/{native-engine.d → native-engines}/openai-responses/tool.js +0 -0
package/DEVELOPMENT.md ADDED
@@ -0,0 +1,17 @@
1
+ ```mermaid
2
+ classDiagram
3
+
4
+ OpenAIResponsesEngine <|.. OpenAIResponsesNativeEngine
5
+
6
+ CompatibleEngine <|.. OpenAIResponsesCompatibleEngine
7
+ OpenAIResponsesEngine <|.. OpenAIResponsesCompatibleEngine
8
+ Engine <|.. OpenAIResponsesEngine
9
+
10
+ Engine <|.. CompatibleEngine
11
+
12
+ Engine <|.. OpenAIChatCompletionsEngine
13
+ OpenAIChatCompletionsEngine <|.. OpenAIChatCompletionsCompatibleEngine
14
+ CompatibleEngine <|.. OpenAIChatCompletionsCompatibleEngine
15
+ OpenAIChatCompletionsCompatibleEngine <|.. OpenAIChatCompletionsCompatibleMonolithEngine
16
+ OpenAIChatCompletionsCompatibleEngine <|.. OpenAIChatCompletionsCompatibleStreamEngine
17
+ ```
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Brainswitch
4
4
 
5
- [![Npm package version](https://shields.io/npm/v/@zimtsui/brainswitch)](https://www.npmjs.com/package/@zimtsui/brainswitch)
5
+ [![NPM Version](https://img.shields.io/npm/v/@zimtsui/brainswitch?style=flat-square)](https://www.npmjs.com/package/@zimtsui/brainswitch)
6
6
 
7
7
  Brainswitch 是一个为 AI 工作流设计的 LLM 推理 API 适配器,支持在会话中途切换模型。
8
8
 
@@ -10,7 +10,7 @@ Brainswitch 是一个为 AI 工作流设计的 LLM 推理 API 适配器,支持
10
10
 
11
11
  大多数 LLM 的[聊天模板](https://huggingface.co/docs/transformers/en/chat_templating) ChatML 原生不支持[严格函数调用](https://platform.openai.com/docs/guides/function-calling#strict-mode),在批处理 AI 工作流中难以达到生产级可靠性。如果仅使用 OpenAI 等支持严格函数调用的服务商,那么可选的模型型号会大幅受限。
12
12
 
13
- Brainswitch 支持在一次会话中途切换模型并保持对话上下文,包括 OpenAI、Google、Anthropic 的深度思考模型[交替思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking#interleaved-thinking)的加密思考内容。有了 Brainswitch 就可以在会话的大量推理阶段使用最合适的模型生成自然语言结果,在最后的总结阶段切换成支持严格函数调用的模型进行结构化提交。
13
+ Brainswitch 支持在一次会话中途切换模型并保持对话上下文,包括 OpenAI、Google、Anthropic 的深度思考模型[交替思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking#interleaved-thinking)的加密思考内容,这样即可在会话的大量推理阶段使用最合适的模型生成自然语言结果,在最后的总结阶段切换成支持严格函数调用的模型进行结构化提交。
14
14
 
15
15
  ## 支持服务商 API 类型
16
16
 
@@ -18,7 +18,6 @@ Brainswitch 支持在一次会话中途切换模型并保持对话上下文,
18
18
  - OpenAI Responses
19
19
  - Google
20
20
  - 百炼
21
- - OpenRouter
22
21
  - Anthropic
23
22
 
24
23
  ## 安装
@@ -54,8 +53,6 @@ export type Config = {
54
53
  | 'openai-responses'
55
54
  | 'google'
56
55
  | 'aliyun'
57
- | 'openrouter-monolith'
58
- | 'openrouter-stream'
59
56
  | 'anthropic'
60
57
  ;
61
58
  proxy?: string;
@@ -71,10 +68,6 @@ export type Config = {
71
68
  }
72
69
  ```
73
70
 
74
- ### 计费说明
75
-
76
- OpenRouter 的成本会自动按服务器返回的美元成本并使用固定汇率(1 USD = 8 CNY)换算为人民币记账。
77
-
78
71
  ## 快速上手
79
72
 
80
73
  下面演示:定义一个工具函数,先用 Google 做推理与工具调用,再在同一会话中切换到 OpenAI Responses 做最终的结构化总结。
@@ -1,12 +1,12 @@
1
1
  import { Config } from '#config';
2
2
  import { Function } from './function.ts';
3
3
  import { type CompatibleEngine } from './compatible-engine.ts';
4
- import { OpenAIResponsesNativeEngine } from './native-engine.d/openai-responses/engine.ts';
4
+ import { OpenAIResponsesNativeEngine } from './native-engines/openai-responses/engine.ts';
5
5
  export declare class Adaptor {
6
6
  config: Config;
7
7
  static create(config: Config): Adaptor;
8
8
  private throttles;
9
9
  protected constructor(config: Config);
10
- makeEngine<fdm extends Function.Declaration.Map = {}>(endpoint: string, functionDeclarationMap: fdm, toolChoice?: Function.ToolChoice<fdm>, parallelToolCall?: boolean): CompatibleEngine<Function.Declaration.From<fdm>>;
11
- makeOpenAIResponsesNativeEngine<fdm extends Function.Declaration.Map = {}>(endpoint: string, functionDeclarationMap: fdm, applyPatch?: boolean, toolChoice?: Function.ToolChoice<fdm>, parallelToolCall?: boolean): OpenAIResponsesNativeEngine<fdm>;
10
+ makeEngine<fdm extends Function.Declaration.Map>(endpoint: string, functionDeclarationMap: fdm, toolChoice?: Function.ToolChoice<fdm>, parallelToolCall?: boolean): CompatibleEngine<fdm>;
11
+ makeOpenAIResponsesNativeEngine<fdm extends Function.Declaration.Map>(endpoint: string, functionDeclarationMap: fdm, applyPatch?: boolean, toolChoice?: Function.ToolChoice<fdm>, parallelToolCall?: boolean): OpenAIResponsesNativeEngine<fdm>;
12
12
  }
package/build/adaptor.js CHANGED
@@ -3,14 +3,12 @@ import { Function } from "./function.js";
3
3
  import {} from "./compatible-engine.js";
4
4
  import assert from 'node:assert';
5
5
  import { Throttle } from "./throttle.js";
6
- import { OpenAIChatCompletionsEngine } from "./compatible-engine.d/openai-chatcompletions.js";
7
- import { GoogleRestfulEngine } from "./compatible-engine.d/google-rest.js";
8
- import { OpenRouterMonolithEngine } from "./compatible-engine.d/openrouter-monolith.js";
9
- import { OpenRouterStreamEngine } from "./compatible-engine.d/openrouter-stream.js";
10
- import { AliyunEngine } from "./compatible-engine.d/aliyun.js";
11
- import { OpenAIResponsesEngine } from "./compatible-engine.d/openai-responses.js";
12
- import { AnthropicEngine } from "./compatible-engine.d/anthropic.js";
13
- import { OpenAIResponsesNativeEngine } from "./native-engine.d/openai-responses/engine.js";
6
+ import { OpenAIChatCompletionsCompatibleDefaultEngine } from "./compatible-engines/openai-chatcompletions.d/default.js";
7
+ import { GoogleCompatibleRestfulEngine } from "./compatible-engines/google/restful-engine.js";
8
+ import { AliyunEngine } from "./compatible-engines/aliyun.js";
9
+ import { OpenAIResponsesCompatibleEngine } from "./compatible-engines/openai-responses.js";
10
+ import { AnthropicCompatibleEngine } from "./compatible-engines/anthropic.js";
11
+ import { OpenAIResponsesNativeEngine } from "./native-engines/openai-responses/engine.js";
14
12
  export class Adaptor {
15
13
  config;
16
14
  static create(config) {
@@ -37,25 +35,21 @@ export class Adaptor {
37
35
  throttle,
38
36
  };
39
37
  if (endpointSpec.apiType === 'openai-responses')
40
- return OpenAIResponsesEngine.create(options);
38
+ return OpenAIResponsesCompatibleEngine.create(options);
41
39
  else if (endpointSpec.apiType === 'openai-chatcompletions')
42
- return OpenAIChatCompletionsEngine.create(options);
40
+ return OpenAIChatCompletionsCompatibleDefaultEngine.create(options);
43
41
  else if (endpointSpec.apiType === 'google')
44
- return GoogleRestfulEngine.create(options);
42
+ return GoogleCompatibleRestfulEngine.create(options);
45
43
  else if (endpointSpec.apiType === 'aliyun')
46
44
  return AliyunEngine.create(options);
47
- else if (endpointSpec.apiType === 'openrouter-monolith')
48
- return OpenRouterMonolithEngine.create(options);
49
- else if (endpointSpec.apiType === 'openrouter-stream')
50
- return OpenRouterStreamEngine.create(options);
51
45
  else if (endpointSpec.apiType === 'anthropic')
52
- return AnthropicEngine.create(options);
46
+ return AnthropicCompatibleEngine.create(options);
53
47
  else
54
48
  throw new Error();
55
49
  }
56
50
  makeOpenAIResponsesNativeEngine(endpoint, functionDeclarationMap, applyPatch, toolChoice, parallelToolCall) {
57
51
  const endpointSpec = this.config.brainswitch.endpoints[endpoint];
58
- assert(endpointSpec);
52
+ assert(endpointSpec?.apiType === 'openai-responses');
59
53
  const throttle = this.throttles.get(endpoint);
60
54
  assert(throttle);
61
55
  const options = {
@@ -1 +1 @@
1
- {"version":3,"file":"adaptor.js","sourceRoot":"","sources":["../src/adaptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAyB,MAAM,wBAAwB,CAAC;AAC/D,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAG3F,MAAM,OAAO,OAAO;IAMa;IALtB,MAAM,CAAC,MAAM,CAAC,MAAc;QAC/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAEO,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAChD,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QACvC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAE,CAAC,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC;YAC3F,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAEM,UAAU,CACb,QAAgB,EAChB,sBAA2B,EAC3B,UAAqC,EACrC,gBAA0B;QAE1B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,CAAC,YAAY,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjB,MAAM,OAAO,GAAkC;YAC3C,GAAG,YAAY;YACf,sBAAsB;YACtB,UAAU;YACV,gBAAgB;YAChB,QAAQ;SACX,CAAC;QACF,IAAI,YAAY,CAAC,OAAO,KAAK,kBAAkB;YAC3C,OAAO,qBAAqB,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;aACjD,IAAI,YAAY,CAAC,OAAO,KAAK,wBAAwB;YACtD,OAAO,2BAA2B,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;aACvD,IAAI,YAAY,CAAC,OAAO,KAAK,QAAQ;YACtC,OAAO,mBAAmB,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;aAC/C,IAAI,YAAY,CAAC,OAAO,KAAK,QAAQ;YACtC,OAAO,YAAY,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;aACxC,IAAI,YAAY,CAAC,OAAO,KAAK,qBAAqB;YACnD,OAAO,wBAAwB,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;aACpD,IAAI,YAAY,CAAC,OAAO,KAAK,mBAAmB;YACjD,OAAO,sBAAsB,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;aAClD,IAAI,YAAY,CAAC,OAAO,KAAK,WAAW;YACzC,OAAO,eAAe,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;;YAC3C,MAAM,IAAI,KAAK,EAAE,CAAC;IAC3B,CAAC;IAEM,+BAA+B,CAClC,QAAgB,EAChB,sBAA2B,EAC3B,UAAoB,EACpB,UAAqC,EACrC,gBAA0B;QAE1B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,CAAC,YAAY,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjB,MAAM,OAAO,GAA6C;YACtD,GAAG,YAAY;YACf,sBAAsB;YACtB,UAAU;YACV,gBAAgB;YAChB,QAAQ;YACR,UAAU;SACb,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,OAAO,KAAK,kBAAkB,CAAC,CAAC;QACpD,OAAO,2BAA2B,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;IAC5D,CAAC;CACJ"}
1
+ {"version":3,"file":"adaptor.js","sourceRoot":"","sources":["../src/adaptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAyB,MAAM,wBAAwB,CAAC;AAC/D,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,4CAA4C,EAAE,MAAM,0DAA0D,CAAC;AACxH,OAAO,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,MAAM,0CAA0C,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAG1F,MAAM,OAAO,OAAO;IAMa;IALtB,MAAM,CAAC,MAAM,CAAC,MAAc;QAC/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAEO,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAChD,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QACvC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAE,CAAC,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC;YAC3F,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAEM,UAAU,CACb,QAAgB,EAChB,sBAA2B,EAC3B,UAAqC,EACrC,gBAA0B;QAE1B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,CAAC,YAAY,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjB,MAAM,OAAO,GAAkC;YAC3C,GAAG,YAAY;YACf,sBAAsB;YACtB,UAAU;YACV,gBAAgB;YAChB,QAAQ;SACX,CAAC;QACF,IAAI,YAAY,CAAC,OAAO,KAAK,kBAAkB;YAC3C,OAAO,+BAA+B,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;aAC3D,IAAI,YAAY,CAAC,OAAO,KAAK,wBAAwB;YACtD,OAAO,4CAA4C,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;aACxE,IAAI,YAAY,CAAC,OAAO,KAAK,QAAQ;YACtC,OAAO,6BAA6B,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;aACzD,IAAI,YAAY,CAAC,OAAO,KAAK,QAAQ;YACtC,OAAO,YAAY,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;aACxC,IAAI,YAAY,CAAC,OAAO,KAAK,WAAW;YACzC,OAAO,yBAAyB,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;;YACrD,MAAM,IAAI,KAAK,EAAE,CAAC;IAC3B,CAAC;IAEM,+BAA+B,CAClC,QAAgB,EAChB,sBAA2B,EAC3B,UAAoB,EACpB,UAAqC,EACrC,gBAA0B;QAE1B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,CAAC,YAAY,EAAE,OAAO,KAAK,kBAAkB,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjB,MAAM,OAAO,GAA6C;YACtD,GAAG,YAAY;YACf,sBAAsB;YACtB,UAAU;YACV,gBAAgB;YAChB,QAAQ;YACR,UAAU;SACb,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,OAAO,KAAK,kBAAkB,CAAC,CAAC;QACpD,OAAO,2BAA2B,CAAC,MAAM,CAAM,OAAO,CAAC,CAAC;IAC5D,CAAC;CACJ"}
@@ -5,7 +5,7 @@ import { type CompatibleEngine } from './compatible-engine.ts';
5
5
  /**
6
6
  * @param session mutable
7
7
  */
8
- export declare function agentloop<fdm extends Function.Declaration.Map>(ctx: InferenceContext, session: Session<Function.Declaration.From<fdm>>, engine: CompatibleEngine<Function.Declaration.From<fdm>>, fnm: Function.Map<fdm>, limit?: number): AsyncGenerator<string, string, void>;
8
+ export declare function agentloop<fdm extends Function.Declaration.Map>(ctx: InferenceContext, session: Session<Function.Declaration.From<fdm>>, engine: CompatibleEngine<fdm>, fnm: Function.Map<fdm>, limit?: number): AsyncGenerator<string, string, void>;
9
9
  export declare namespace agentloop {
10
10
  class FunctionCallLimitExceeded extends Error {
11
11
  }
@@ -14,7 +14,7 @@ export async function* agentloop(ctx, session, engine, fnm, limit = Number.POSIT
14
14
  return response.getOnlyText();
15
15
  const pfrs = [];
16
16
  for (const part of response.getParts()) {
17
- if (part instanceof RoleMessage.Part.Text.Constructor) {
17
+ if (part instanceof RoleMessage.Part.Text.Instance) {
18
18
  yield part.text;
19
19
  }
20
20
  else if (part instanceof Function.Call) {
@@ -1 +1 @@
1
- {"version":3,"file":"agentloop.js","sourceRoot":"","sources":["../src/agentloop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAyB,MAAM,wBAAwB,CAAC;AAC/D,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC;;GAEG;AACH,MAAM,CAAC,KAAK,SAAU,CAAC,CAAA,SAAS,CAC5B,GAAqB,EACrB,OAAgD,EAChD,MAAwD,EACxD,GAAsB,EACtB,KAAK,GAAG,MAAM,CAAC,iBAAiB;IAGhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAmD,EAAE,CAAC;QAChE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;YACrC,IAAI,IAAI,YAAY,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpD,MAAM,IAAI,CAAC,IAAI,CAAC;YACpB,CAAC;iBAAM,IAAI,IAAI,YAAY,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,EAAE,GAAG,IAAuC,CAAC;gBACnD,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACvB,MAAM,CAAC,CAAC,CAAC,CAAC;gBACV,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE;oBAClB,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAM;wBACjC,EAAE,EAAE,EAAE,CAAC,EAAE;wBACT,IAAI,EAAE,EAAE,CAAC,IAAI;wBACb,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;qBACM,CAAC,CAAC;gBAChD,CAAC,CAAC,EAAE,CAAC,CAAC;YACV,CAAC;;gBAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QAC7B,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAM,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,+BAA+B,CAAC,CAAC;AACnF,CAAC;AAED,WAAiB,SAAS;IACtB,MAAa,yBAA0B,SAAQ,KAAK;KAAG;IAA1C,mCAAyB,4BAAiB,CAAA;AAC3D,CAAC,EAFgB,SAAS,KAAT,SAAS,QAEzB"}
1
+ {"version":3,"file":"agentloop.js","sourceRoot":"","sources":["../src/agentloop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAyB,MAAM,wBAAwB,CAAC;AAC/D,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC;;GAEG;AACH,MAAM,CAAC,KAAK,SAAU,CAAC,CAAA,SAAS,CAC5B,GAAqB,EACrB,OAAgD,EAChD,MAA6B,EAC7B,GAAsB,EACtB,KAAK,GAAG,MAAM,CAAC,iBAAiB;IAGhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAmD,EAAE,CAAC;QAChE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;YACrC,IAAI,IAAI,YAAY,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACjD,MAAM,IAAI,CAAC,IAAI,CAAC;YACpB,CAAC;iBAAM,IAAI,IAAI,YAAY,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,EAAE,GAAG,IAAuC,CAAC;gBACnD,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACvB,MAAM,CAAC,CAAC,CAAC,CAAC;gBACV,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE;oBAClB,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAM;wBACjC,EAAE,EAAE,EAAE,CAAC,EAAE;wBACT,IAAI,EAAE,EAAE,CAAC,IAAI;wBACb,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;qBACM,CAAC,CAAC;gBAChD,CAAC,CAAC,EAAE,CAAC,CAAC;YACV,CAAC;;gBAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QAC7B,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAM,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,+BAA+B,CAAC,CAAC;AACnF,CAAC;AAED,WAAiB,SAAS;IACtB,MAAa,yBAA0B,SAAQ,KAAK;KAAG;IAA1C,mCAAyB,4BAAiB,CAAA;AAC3D,CAAC,EAFgB,SAAS,KAAT,SAAS,QAEzB"}
@@ -0,0 +1,33 @@
1
+ import { Function } from '../function.ts';
2
+ import { Engine } from '../engine.ts';
3
+ import Anthropic from '@anthropic-ai/sdk';
4
+ export declare namespace AnthropicEngine {
5
+ interface Base<fdm extends Function.Declaration.Map> {
6
+ anthropic: Anthropic;
7
+ parallel: boolean;
8
+ convertFromFunctionCall(fc: Function.Call.Distributive<Function.Declaration.From<fdm>>): Anthropic.ToolUseBlock;
9
+ convertToFunctionCall(apifc: Anthropic.ToolUseBlock): Function.Call.Distributive<Function.Declaration.From<fdm>>;
10
+ convertFromFunctionResponse(fr: Function.Response.Distributive<Function.Declaration.From<fdm>>): Anthropic.ToolResultBlockParam;
11
+ convertFromFunctionDeclarationEntry(fdentry: Function.Declaration.Entry.From<fdm>): Anthropic.Tool;
12
+ convertFromToolChoice(toolChoice: Function.ToolChoice<fdm>, parallel: boolean): Anthropic.ToolChoice;
13
+ calcCost(usage: Anthropic.Usage): number;
14
+ }
15
+ interface Instance<fdm extends Function.Declaration.Map> extends Engine.Instance<fdm>, AnthropicEngine.Base<fdm> {
16
+ }
17
+ namespace Base {
18
+ class Instance<in out fdm extends Function.Declaration.Map> implements AnthropicEngine.Base<fdm> {
19
+ protected instance: AnthropicEngine.Instance<fdm>;
20
+ anthropic: Anthropic;
21
+ parallel: boolean;
22
+ constructor(instance: AnthropicEngine.Instance<fdm>, options: AnthropicEngine.Options<fdm>);
23
+ convertFromFunctionCall(fc: Function.Call.Distributive<Function.Declaration.From<fdm>>): Anthropic.ToolUseBlock;
24
+ convertToFunctionCall(apifc: Anthropic.ToolUseBlock): Function.Call.Distributive<Function.Declaration.From<fdm>>;
25
+ convertFromFunctionResponse(fr: Function.Response.Distributive<Function.Declaration.From<fdm>>): Anthropic.ToolResultBlockParam;
26
+ convertFromFunctionDeclarationEntry(fdentry: Function.Declaration.Entry.From<fdm>): Anthropic.Tool;
27
+ convertFromToolChoice(toolChoice: Function.ToolChoice<fdm>, parallel: boolean): Anthropic.ToolChoice;
28
+ calcCost(usage: Anthropic.Usage): number;
29
+ }
30
+ }
31
+ interface Options<fdm extends Function.Declaration.Map> extends Engine.Options<fdm> {
32
+ }
33
+ }
@@ -0,0 +1,90 @@
1
+ import { Function } from "../function.js";
2
+ import { Engine, ResponseInvalid } from "../engine.js";
3
+ import Anthropic from '@anthropic-ai/sdk';
4
+ import assert from 'node:assert';
5
+ import Ajv from 'ajv';
6
+ import {} from '@sinclair/typebox';
7
+ const ajv = new Ajv();
8
+ export var AnthropicEngine;
9
+ (function (AnthropicEngine) {
10
+ let Base;
11
+ (function (Base) {
12
+ class Instance {
13
+ instance;
14
+ anthropic;
15
+ parallel;
16
+ constructor(instance, options) {
17
+ this.instance = instance;
18
+ this.parallel = options.parallelToolCall ?? false;
19
+ this.anthropic = new Anthropic({
20
+ baseURL: this.instance.baseUrl,
21
+ apiKey: this.instance.apiKey,
22
+ fetchOptions: { dispatcher: this.instance.proxyAgent },
23
+ });
24
+ }
25
+ convertFromFunctionCall(fc) {
26
+ assert(fc.id);
27
+ return {
28
+ type: 'tool_use',
29
+ id: fc.id,
30
+ name: fc.name,
31
+ input: fc.args,
32
+ };
33
+ }
34
+ convertToFunctionCall(apifc) {
35
+ const fditem = this.instance.fdm[apifc.name];
36
+ assert(fditem, new ResponseInvalid('Unknown function call', { cause: apifc }));
37
+ const args = (() => {
38
+ try {
39
+ return JSON.parse(apifc.input);
40
+ }
41
+ catch (e) {
42
+ return new ResponseInvalid('Invalid JSON of function call', { cause: apifc });
43
+ }
44
+ })();
45
+ assert(ajv.validate(fditem.paraschema, args), new ResponseInvalid('Function call not conforming to schema', { cause: apifc }));
46
+ return Function.Call.create({
47
+ id: apifc.id,
48
+ name: apifc.name,
49
+ args,
50
+ });
51
+ }
52
+ convertFromFunctionResponse(fr) {
53
+ assert(fr.id);
54
+ return {
55
+ type: 'tool_result',
56
+ tool_use_id: fr.id,
57
+ content: fr.text,
58
+ };
59
+ }
60
+ convertFromFunctionDeclarationEntry(fdentry) {
61
+ return {
62
+ name: fdentry[0],
63
+ description: fdentry[1].description,
64
+ input_schema: fdentry[1].paraschema,
65
+ };
66
+ }
67
+ convertFromToolChoice(toolChoice, parallel) {
68
+ if (toolChoice === Function.ToolChoice.NONE)
69
+ return { type: 'none' };
70
+ else if (toolChoice === Function.ToolChoice.REQUIRED)
71
+ return { type: 'any', disable_parallel_tool_use: !parallel };
72
+ else if (toolChoice === Function.ToolChoice.AUTO)
73
+ return { type: 'auto', disable_parallel_tool_use: !parallel };
74
+ else {
75
+ assert(toolChoice.length === 1);
76
+ return { type: 'tool', name: toolChoice[0], disable_parallel_tool_use: !parallel };
77
+ }
78
+ }
79
+ calcCost(usage) {
80
+ const cacheHitTokenCount = usage.cache_read_input_tokens || 0;
81
+ const cacheMissTokenCount = usage.input_tokens - cacheHitTokenCount;
82
+ return this.instance.inputPrice * cacheMissTokenCount / 1e6 +
83
+ this.instance.cachedPrice * cacheHitTokenCount / 1e6 +
84
+ this.instance.outputPrice * usage.output_tokens / 1e6;
85
+ }
86
+ }
87
+ Base.Instance = Instance;
88
+ })(Base = AnthropicEngine.Base || (AnthropicEngine.Base = {}));
89
+ })(AnthropicEngine || (AnthropicEngine = {}));
90
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/api-types/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { Engine } from '../engine.ts';
2
+ import { Function } from '../function.ts';
3
+ import * as Google from '@google/genai';
4
+ import { CompatibleEngine } from '../compatible-engine.ts';
5
+ export declare namespace GoogleEngine {
6
+ interface Base<in out fdm extends Function.Declaration.Map> {
7
+ parallel: boolean;
8
+ convertFromFunctionCall(fc: Function.Call.Distributive<Function.Declaration.From<fdm>>): Google.FunctionCall;
9
+ convertToFunctionCall(googlefc: Google.FunctionCall): Function.Call.Distributive<Function.Declaration.From<fdm>>;
10
+ convertFromFunctionDeclarationEntry(fdentry: Function.Declaration.Entry.From<fdm>): Google.FunctionDeclaration;
11
+ }
12
+ interface Instance<in out fdm extends Function.Declaration.Map> extends Engine.Instance<fdm>, GoogleEngine.Base<fdm> {
13
+ }
14
+ namespace Base {
15
+ class Instance<in out fdm extends Function.Declaration.Map> implements GoogleEngine.Base<fdm> {
16
+ protected instance: GoogleEngine.Instance<fdm>;
17
+ parallel: boolean;
18
+ constructor(instance: GoogleEngine.Instance<fdm>, options: CompatibleEngine.Options<fdm>);
19
+ convertFromFunctionCall(fc: Function.Call.Distributive<Function.Declaration.From<fdm>>): Google.FunctionCall;
20
+ convertToFunctionCall(googlefc: Google.FunctionCall): Function.Call.Distributive<Function.Declaration.From<fdm>>;
21
+ convertFromFunctionDeclarationEntry(fdentry: Function.Declaration.Entry.From<fdm>): Google.FunctionDeclaration;
22
+ }
23
+ }
24
+ function convertToFunctionCall<fdm extends Function.Declaration.Map>(googlefc: Google.FunctionCall, fdm: fdm): Function.Call.Distributive<Function.Declaration.From<fdm>>;
25
+ }
@@ -0,0 +1,74 @@
1
+ import { Engine, ResponseInvalid } from "../engine.js";
2
+ import { Function } from "../function.js";
3
+ import * as Google from '@google/genai';
4
+ import assert from 'node:assert';
5
+ import { CompatibleEngine } from "../compatible-engine.js";
6
+ import Ajv from 'ajv';
7
+ const ajv = new Ajv();
8
+ export var GoogleEngine;
9
+ (function (GoogleEngine) {
10
+ let Base;
11
+ (function (Base) {
12
+ class Instance {
13
+ instance;
14
+ parallel;
15
+ constructor(instance, options) {
16
+ this.instance = instance;
17
+ this.parallel = options.parallelToolCall ?? true;
18
+ assert(this.parallel, new Error('Google API requires parallel tool calls.'));
19
+ }
20
+ convertFromFunctionCall(fc) {
21
+ return {
22
+ id: fc.id,
23
+ name: fc.name,
24
+ args: fc.args,
25
+ };
26
+ }
27
+ convertToFunctionCall(googlefc) {
28
+ return GoogleEngine.convertToFunctionCall(googlefc, this.instance.fdm);
29
+ }
30
+ convertFromFunctionDeclarationEntry(fdentry) {
31
+ const json = JSON.stringify(fdentry[1].paraschema);
32
+ const parsed = JSON.parse(json, (key, value) => {
33
+ if (key === 'type' && typeof value === 'string') {
34
+ if (value === 'string')
35
+ return Google.Type.STRING;
36
+ else if (value === 'number')
37
+ return Google.Type.NUMBER;
38
+ else if (value === 'boolean')
39
+ return Google.Type.BOOLEAN;
40
+ else if (value === 'object')
41
+ return Google.Type.OBJECT;
42
+ else if (value === 'array')
43
+ return Google.Type.ARRAY;
44
+ else
45
+ throw new Error();
46
+ }
47
+ else if (key === 'additionalProperties' && typeof value === 'boolean')
48
+ return;
49
+ else
50
+ return value;
51
+ });
52
+ return {
53
+ name: fdentry[0],
54
+ description: fdentry[1].description,
55
+ parameters: parsed,
56
+ };
57
+ }
58
+ }
59
+ Base.Instance = Instance;
60
+ })(Base = GoogleEngine.Base || (GoogleEngine.Base = {}));
61
+ function convertToFunctionCall(googlefc, fdm) {
62
+ assert(googlefc.name);
63
+ const fditem = fdm[googlefc.name];
64
+ assert(fditem, new ResponseInvalid('Unknown function call', { cause: googlefc }));
65
+ assert(ajv.validate(fditem.paraschema, googlefc.args), new ResponseInvalid('Function call not conforming to schema', { cause: googlefc }));
66
+ return Function.Call.create({
67
+ id: googlefc.id,
68
+ name: googlefc.name,
69
+ args: googlefc.args,
70
+ });
71
+ }
72
+ GoogleEngine.convertToFunctionCall = convertToFunctionCall;
73
+ })(GoogleEngine || (GoogleEngine = {}));
74
+ //# sourceMappingURL=google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/api-types/google.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type Engine } from '../engine.ts';
2
+ import { Function } from '../function.ts';
3
+ import OpenAI from 'openai';
4
+ export declare namespace OpenAIChatCompletionsEngine {
5
+ interface Base<in out fdm extends Function.Declaration.Map> {
6
+ parallel: boolean;
7
+ convertFromFunctionCall(fc: Function.Call.Distributive<Function.Declaration.From<fdm>>): OpenAI.ChatCompletionMessageToolCall;
8
+ convertToFunctionCall(apifc: OpenAI.ChatCompletionMessageFunctionToolCall): Function.Call.Distributive<Function.Declaration.From<fdm>>;
9
+ convertFromFunctionResponse(fr: Function.Response.Distributive<Function.Declaration.From<fdm>>): OpenAI.ChatCompletionToolMessageParam;
10
+ convertFromFunctionDeclarationEntry(fdentry: Function.Declaration.Entry.From<fdm>): OpenAI.ChatCompletionTool;
11
+ convertFromToolChoice(mode: Function.ToolChoice<fdm>): OpenAI.ChatCompletionToolChoiceOption;
12
+ calcCost(usage: OpenAI.CompletionUsage): number;
13
+ extractContent(completionContent: string): string;
14
+ handleFinishReason(completion: OpenAI.ChatCompletion, finishReason: OpenAI.ChatCompletion.Choice['finish_reason']): void;
15
+ }
16
+ interface Instance<in out fdm extends Function.Declaration.Map> extends Engine.Instance<fdm>, OpenAIChatCompletionsEngine.Base<fdm> {
17
+ }
18
+ namespace Base {
19
+ class Instance<in out fdm extends Function.Declaration.Map> implements OpenAIChatCompletionsEngine.Base<fdm> {
20
+ protected instance: Engine.Instance<fdm>;
21
+ parallel: boolean;
22
+ constructor(instance: Engine.Instance<fdm>, options: Engine.Options<fdm>);
23
+ convertFromFunctionCall(fc: Function.Call.Distributive<Function.Declaration.From<fdm>>): OpenAI.ChatCompletionMessageToolCall;
24
+ convertToFunctionCall(apifc: OpenAI.ChatCompletionMessageFunctionToolCall): Function.Call.Distributive<Function.Declaration.From<fdm>>;
25
+ convertFromFunctionResponse(fr: Function.Response.Distributive<Function.Declaration.From<fdm>>): OpenAI.ChatCompletionToolMessageParam;
26
+ convertFromFunctionDeclarationEntry(fdentry: Function.Declaration.Entry.From<fdm>): OpenAI.ChatCompletionTool;
27
+ convertFromToolChoice(mode: Function.ToolChoice<fdm>): OpenAI.ChatCompletionToolChoiceOption;
28
+ calcCost(usage: OpenAI.CompletionUsage): number;
29
+ extractContent(completionContent: string): string;
30
+ handleFinishReason(completion: OpenAI.ChatCompletion, finishReason: OpenAI.ChatCompletion.Choice['finish_reason']): void;
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,97 @@
1
+ import { ResponseInvalid } from "../engine.js";
2
+ import { Function } from "../function.js";
3
+ import OpenAI from 'openai';
4
+ import assert from 'node:assert';
5
+ import { Ajv } from 'ajv';
6
+ const ajv = new Ajv();
7
+ export var OpenAIChatCompletionsEngine;
8
+ (function (OpenAIChatCompletionsEngine) {
9
+ let Base;
10
+ (function (Base) {
11
+ class Instance {
12
+ instance;
13
+ parallel;
14
+ constructor(instance, options) {
15
+ this.instance = instance;
16
+ this.parallel = options.parallelToolCall ?? false;
17
+ }
18
+ convertFromFunctionCall(fc) {
19
+ assert(fc.id);
20
+ return {
21
+ id: fc.id,
22
+ type: 'function',
23
+ function: {
24
+ name: fc.name,
25
+ arguments: JSON.stringify(fc.args),
26
+ },
27
+ };
28
+ }
29
+ convertToFunctionCall(apifc) {
30
+ const fditem = this.instance.fdm[apifc.function.name];
31
+ assert(fditem, new ResponseInvalid('Unknown function call', { cause: apifc }));
32
+ const args = (() => {
33
+ try {
34
+ return JSON.parse(apifc.function.arguments);
35
+ }
36
+ catch (e) {
37
+ return new ResponseInvalid('Invalid JSON of function call', { cause: apifc });
38
+ }
39
+ })();
40
+ assert(ajv.validate(fditem.paraschema, args), new ResponseInvalid('Invalid function arguments', { cause: apifc }));
41
+ return Function.Call.create({
42
+ id: apifc.id,
43
+ name: apifc.function.name,
44
+ args,
45
+ });
46
+ }
47
+ convertFromFunctionResponse(fr) {
48
+ assert(fr.id);
49
+ return {
50
+ role: 'tool',
51
+ tool_call_id: fr.id,
52
+ content: fr.text,
53
+ };
54
+ }
55
+ convertFromFunctionDeclarationEntry(fdentry) {
56
+ return {
57
+ type: 'function',
58
+ function: {
59
+ name: fdentry[0],
60
+ description: fdentry[1].description,
61
+ strict: true,
62
+ parameters: fdentry[1].paraschema,
63
+ },
64
+ };
65
+ }
66
+ convertFromToolChoice(mode) {
67
+ if (mode === Function.ToolChoice.NONE)
68
+ return 'none';
69
+ else if (mode === Function.ToolChoice.REQUIRED)
70
+ return 'required';
71
+ else if (mode === Function.ToolChoice.AUTO)
72
+ return 'auto';
73
+ else {
74
+ assert(mode.length === 1);
75
+ return { type: 'function', function: { name: mode[0] } };
76
+ }
77
+ }
78
+ calcCost(usage) {
79
+ const cacheHitTokenCount = usage.prompt_tokens_details?.cached_tokens ?? 0;
80
+ const cacheMissTokenCount = usage.prompt_tokens - cacheHitTokenCount;
81
+ return this.instance.inputPrice * cacheMissTokenCount / 1e6 +
82
+ this.instance.cachedPrice * cacheHitTokenCount / 1e6 +
83
+ this.instance.outputPrice * usage.completion_tokens / 1e6;
84
+ }
85
+ extractContent(completionContent) {
86
+ return completionContent;
87
+ }
88
+ handleFinishReason(completion, finishReason) {
89
+ if (finishReason === 'length')
90
+ throw new ResponseInvalid('Token limit exceeded.', { cause: completion });
91
+ assert(['stop', 'tool_calls'].includes(finishReason), new ResponseInvalid('Abnormal finish reason', { cause: finishReason }));
92
+ }
93
+ }
94
+ Base.Instance = Instance;
95
+ })(Base = OpenAIChatCompletionsEngine.Base || (OpenAIChatCompletionsEngine.Base = {}));
96
+ })(OpenAIChatCompletionsEngine || (OpenAIChatCompletionsEngine = {}));
97
+ //# sourceMappingURL=openai-chat-completions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-chat-completions.js","sourceRoot":"","sources":["../../src/api-types/openai-chat-completions.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,23 @@
1
1
  import OpenAI from 'openai';
2
2
  import { Function } from '../function.ts';
3
3
  import { type Engine } from '../engine.ts';
4
- export declare class OpenAIResponsesUtilities<fdm extends Function.Declaration.Map> {
5
- protected inputPrice: number;
6
- protected cachedPrice: number;
7
- protected outputPrice: number;
8
- protected fdm: fdm;
9
- constructor(options: Engine.Options<fdm>);
10
- convertFromFunctionResponse(fr: Function.Response.Distributive<Function.Declaration.From<fdm>>): OpenAI.Responses.ResponseInputItem.FunctionCallOutput;
11
- calcCost(usage: OpenAI.Responses.ResponseUsage): number;
12
- convertFromFunctionDeclarationEntry(fdentry: Function.Declaration.Entry.From<fdm>): OpenAI.Responses.FunctionTool;
13
- convertToFunctionCall(apifc: OpenAI.Responses.ResponseFunctionToolCall): Function.Call.Distributive<Function.Declaration.From<fdm>>;
4
+ export declare namespace OpenAIResponsesEngine {
5
+ interface Base<in out fdm extends Function.Declaration.Map> {
6
+ convertFromFunctionResponse(fr: Function.Response.Distributive<Function.Declaration.From<fdm>>): OpenAI.Responses.ResponseInputItem.FunctionCallOutput;
7
+ calcCost(usage: OpenAI.Responses.ResponseUsage): number;
8
+ convertFromFunctionDeclarationEntry(fdentry: Function.Declaration.Entry.From<fdm>): OpenAI.Responses.FunctionTool;
9
+ convertToFunctionCall(apifc: OpenAI.Responses.ResponseFunctionToolCall): Function.Call.Distributive<Function.Declaration.From<fdm>>;
10
+ }
11
+ interface Instance<in out fdm extends Function.Declaration.Map> extends Engine.Instance<fdm>, OpenAIResponsesEngine.Base<fdm> {
12
+ }
13
+ namespace Base {
14
+ class Instance<fdm extends Function.Declaration.Map> {
15
+ protected instance: OpenAIResponsesEngine.Instance<fdm>;
16
+ constructor(instance: OpenAIResponsesEngine.Instance<fdm>);
17
+ convertFromFunctionResponse(fr: Function.Response.Distributive<Function.Declaration.From<fdm>>): OpenAI.Responses.ResponseInputItem.FunctionCallOutput;
18
+ calcCost(usage: OpenAI.Responses.ResponseUsage): number;
19
+ convertFromFunctionDeclarationEntry(fdentry: Function.Declaration.Entry.From<fdm>): OpenAI.Responses.FunctionTool;
20
+ convertToFunctionCall(apifc: OpenAI.Responses.ResponseFunctionToolCall): Function.Call.Distributive<Function.Declaration.From<fdm>>;
21
+ }
22
+ }
14
23
  }