knight-agent 1.1.3 → 1.1.5

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 (72) hide show
  1. package/Host.d.ts +7 -1
  2. package/Host.d.ts.map +1 -1
  3. package/Host.js +3 -3
  4. package/Host.js.map +1 -1
  5. package/base/AbstractAgent.d.ts +42 -1
  6. package/base/AbstractAgent.d.ts.map +1 -1
  7. package/base/AbstractAgent.js +73 -94
  8. package/base/AbstractAgent.js.map +1 -1
  9. package/base/AbstractLLM.d.ts +7 -6
  10. package/base/AbstractLLM.d.ts.map +1 -1
  11. package/base/AbstractLLM.js +14 -14
  12. package/base/AbstractLLM.js.map +1 -1
  13. package/module/AgentModule/Agent.d.ts +17 -1
  14. package/module/AgentModule/Agent.d.ts.map +1 -1
  15. package/module/AgentModule/Agent.js +37 -22
  16. package/module/AgentModule/Agent.js.map +1 -1
  17. package/module/AgentModule/AgentModule.d.ts +34 -1
  18. package/module/AgentModule/AgentModule.d.ts.map +1 -1
  19. package/module/AgentModule/AgentModule.js +72 -78
  20. package/module/AgentModule/AgentModule.js.map +1 -1
  21. package/module/AgentModule/index.d.ts +2 -1
  22. package/module/AgentModule/index.d.ts.map +1 -1
  23. package/module/AgentModule/index.js +16 -2
  24. package/module/AgentModule/index.js.map +1 -1
  25. package/module/LLMModule/ClaudeLLM.d.ts +7 -1
  26. package/module/LLMModule/ClaudeLLM.d.ts.map +1 -1
  27. package/module/LLMModule/ClaudeLLM.js +104 -19
  28. package/module/LLMModule/ClaudeLLM.js.map +1 -1
  29. package/module/LLMModule/DeepSeekLLM.d.ts +7 -2
  30. package/module/LLMModule/DeepSeekLLM.d.ts.map +1 -1
  31. package/module/LLMModule/DeepSeekLLM.js +100 -22
  32. package/module/LLMModule/DeepSeekLLM.js.map +1 -1
  33. package/module/LLMModule/GeminiLLM.d.ts +9 -1
  34. package/module/LLMModule/GeminiLLM.d.ts.map +1 -1
  35. package/module/LLMModule/GeminiLLM.js +95 -28
  36. package/module/LLMModule/GeminiLLM.js.map +1 -1
  37. package/module/LLMModule/OpenAILLM.d.ts +7 -1
  38. package/module/LLMModule/OpenAILLM.d.ts.map +1 -1
  39. package/module/LLMModule/OpenAILLM.js +100 -22
  40. package/module/LLMModule/OpenAILLM.js.map +1 -1
  41. package/module/LLMModule/QWenLLM.d.ts +7 -1
  42. package/module/LLMModule/QWenLLM.d.ts.map +1 -1
  43. package/module/LLMModule/QWenLLM.js +96 -22
  44. package/module/LLMModule/QWenLLM.js.map +1 -1
  45. package/module/SkillModule/SkillModule.d.ts +80 -0
  46. package/module/SkillModule/SkillModule.d.ts.map +1 -0
  47. package/module/SkillModule/SkillModule.js +167 -0
  48. package/module/SkillModule/SkillModule.js.map +1 -0
  49. package/module/SkillModule/index.d.ts +2 -0
  50. package/module/SkillModule/index.d.ts.map +1 -0
  51. package/module/SkillModule/index.js +18 -0
  52. package/module/SkillModule/index.js.map +1 -0
  53. package/module/ToolModule/ToolModule.d.ts +49 -0
  54. package/module/ToolModule/ToolModule.d.ts.map +1 -0
  55. package/module/ToolModule/ToolModule.js +117 -0
  56. package/module/ToolModule/ToolModule.js.map +1 -0
  57. package/module/ToolModule/index.d.ts +2 -0
  58. package/module/ToolModule/index.d.ts.map +1 -0
  59. package/module/ToolModule/index.js +18 -0
  60. package/module/ToolModule/index.js.map +1 -0
  61. package/module/index.d.ts +2 -0
  62. package/module/index.d.ts.map +1 -1
  63. package/module/index.js +2 -0
  64. package/module/index.js.map +1 -1
  65. package/package.json +1 -1
  66. package/utility/LLMUtility.d.ts +54 -11
  67. package/utility/LLMUtility.d.ts.map +1 -1
  68. package/utility/LLMUtility.js.map +1 -1
  69. package/utility/NetworkUtility.d.ts +7 -0
  70. package/utility/NetworkUtility.d.ts.map +1 -1
  71. package/utility/NetworkUtility.js +65 -0
  72. package/utility/NetworkUtility.js.map +1 -1
@@ -1,81 +1,75 @@
1
1
  "use strict";
2
- // import { AbstractAgent } from "../../base";
3
- // import { AbstractModule } from "../../base";
4
- // import { AgentUtility, LLMUtility, ObjectUtility } from "../../utility";
5
- // import { Agent } from "./Agent";
6
2
  Object.defineProperty(exports, "__esModule", { value: true });
7
- // /** 智能体管理模块 */
8
- // export class AgentModule extends AbstractModule
9
- // {
10
- // /** 智能体池 */
11
- // private readonly agents: ObjectUtility.MapPool<AbstractAgent>;
12
- // /** 构造函数 */
13
- // public constructor()
14
- // {
15
- // super();
16
- // this.agents = new ObjectUtility.MapPool<AbstractAgent>();
17
- // }
18
- // /**
19
- // * 创建智能体实例
20
- // * @param config 大模型配置
21
- // */
22
- // public create(config: LLMUtility.Config): Agent
23
- // {
24
- // const agent = new Agent(config);
25
- // this.agents.Set(agent.id, agent);
26
- // return agent;
27
- // }
28
- // /**
29
- // * 从快照恢复智能体 — 重建 LLM、恢复消息缓存与对话记录
30
- // * @param data 智能体快照
31
- // */
32
- // public restore(data: AgentUtility.AgentSnapshot): AbstractAgent
33
- // {
34
- // const llm = this.host.llmModule.restore(data.llmSnapshot);
35
- // const agent = new Agent(data.llmSnapshot.config, llm);
36
- // this.agents.Set(agent.id, agent);
37
- // Object.assign(agent, { id: data.id });
38
- // for (const turn of data.turns) { agent.record(turn.input, turn.output, turn.usage); }
39
- // return agent;
40
- // }
41
- // /** 获取智能体实例 */
42
- // public get<T extends AbstractAgent = AbstractAgent>(id: string): T
43
- // {
44
- // return this.agents.Get<T>(id);
45
- // }
46
- // /** 列出全部智能体 */
47
- // public list(): AbstractAgent[]
48
- // {
49
- // return this.agents.ValuesToArray();
50
- // }
51
- // /** 智能体总数 */
52
- // public get count(): number
53
- // {
54
- // return this.agents.Count;
55
- // }
56
- // /**
57
- // * 移除智能体实例
58
- // * @param id 智能体ID
59
- // */
60
- // public remove(id: string): boolean
61
- // {
62
- // const agent = this.agents.Get(id);
63
- // if (!agent) { return false; }
64
- // agent.OnDestroy();
65
- // this.agents.Remove(id);
66
- // return true;
67
- // }
68
- // /** 移除全部智能体实例 */
69
- // public removeAll(): void
70
- // {
71
- // const agents = this.agents.ValuesToArray();
72
- // for (const agent of agents) { agent.OnDestroy(); }
73
- // this.agents.RemoveAll();
74
- // }
75
- // public OnDestroy(): boolean
76
- // {
77
- // this.removeAll();
78
- // return super.OnDestroy();
79
- // }
80
- // }
3
+ exports.AgentModule = void 0;
4
+ const base_1 = require("../../base");
5
+ const utility_1 = require("../../utility");
6
+ const Agent_1 = require("./Agent");
7
+ /** 智能体管理模块 Agent 实例的创建、恢复、销毁 */
8
+ class AgentModule extends base_1.AbstractModule {
9
+ constructor() {
10
+ super();
11
+ this.agents = new utility_1.ObjectUtility.MapPool();
12
+ }
13
+ /**
14
+ * 创建智能体实例(内部创建 LLM)
15
+ * @param config 大模型配置
16
+ */
17
+ create(config) {
18
+ const agent = new Agent_1.Agent(config);
19
+ this.agents.Set(agent.id, agent);
20
+ return agent;
21
+ }
22
+ /**
23
+ * 从快照恢复智能体 — 恢复 LLM 消息缓存 + 对话记录
24
+ * @param data 智能体快照
25
+ */
26
+ restore(data) {
27
+ const llm = this.host.llmModule.restore(data.llmSnapshot);
28
+ const agent = new Agent_1.Agent(data.llmSnapshot.config, llm);
29
+ agent.setId(data.id);
30
+ this.agents.Set(agent.id, agent);
31
+ for (const turn of data.turns) {
32
+ agent.record(turn.input, turn.output, turn.usage);
33
+ }
34
+ return agent;
35
+ }
36
+ /** 获取智能体实例 */
37
+ get(id) {
38
+ return this.agents.Get(id);
39
+ }
40
+ /** 列出全部智能体 */
41
+ list() {
42
+ return this.agents.ValuesToArray();
43
+ }
44
+ /** 智能体总数 */
45
+ get count() {
46
+ return this.agents.Count;
47
+ }
48
+ /**
49
+ * 移除智能体实例(内部销毁 LLM)
50
+ * @param id 智能体ID
51
+ */
52
+ remove(id) {
53
+ const agent = this.agents.Get(id);
54
+ if (!agent) {
55
+ return false;
56
+ }
57
+ agent.OnDestroy();
58
+ this.agents.Remove(id);
59
+ return true;
60
+ }
61
+ /** 移除全部智能体实例 */
62
+ removeAll() {
63
+ const agents = this.agents.ValuesToArray();
64
+ for (const agent of agents) {
65
+ agent.OnDestroy();
66
+ }
67
+ this.agents.RemoveAll();
68
+ }
69
+ OnDestroy() {
70
+ this.removeAll();
71
+ return super.OnDestroy();
72
+ }
73
+ }
74
+ exports.AgentModule = AgentModule;
81
75
  //# sourceMappingURL=AgentModule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentModule.js","sourceRoot":"","sources":["../../../src/module/AgentModule/AgentModule.ts"],"names":[],"mappings":";AAAA,8CAA8C;AAC9C,+CAA+C;AAC/C,2EAA2E;AAC3E,mCAAmC;;AAEnC,iBAAiB;AACjB,kDAAkD;AAClD,IAAI;AACJ,kBAAkB;AAClB,qEAAqE;AAErE,kBAAkB;AAClB,2BAA2B;AAC3B,QAAQ;AACR,mBAAmB;AACnB,oEAAoE;AACpE,QAAQ;AAER,UAAU;AACV,iBAAiB;AACjB,6BAA6B;AAC7B,UAAU;AACV,sDAAsD;AACtD,QAAQ;AACR,2CAA2C;AAC3C,4CAA4C;AAC5C,wBAAwB;AACxB,QAAQ;AAER,UAAU;AACV,uCAAuC;AACvC,2BAA2B;AAC3B,UAAU;AACV,sEAAsE;AACtE,QAAQ;AACR,qEAAqE;AACrE,iEAAiE;AACjE,4CAA4C;AAC5C,iDAAiD;AACjD,gGAAgG;AAChG,wBAAwB;AACxB,QAAQ;AAER,qBAAqB;AACrB,yEAAyE;AACzE,QAAQ;AACR,yCAAyC;AACzC,QAAQ;AAER,qBAAqB;AACrB,qCAAqC;AACrC,QAAQ;AACR,8CAA8C;AAC9C,QAAQ;AAER,mBAAmB;AACnB,iCAAiC;AACjC,QAAQ;AACR,oCAAoC;AACpC,QAAQ;AAER,UAAU;AACV,iBAAiB;AACjB,yBAAyB;AACzB,UAAU;AACV,yCAAyC;AACzC,QAAQ;AACR,6CAA6C;AAC7C,wCAAwC;AACxC,6BAA6B;AAC7B,kCAAkC;AAClC,uBAAuB;AACvB,QAAQ;AAER,uBAAuB;AACvB,+BAA+B;AAC/B,QAAQ;AACR,sDAAsD;AACtD,6DAA6D;AAC7D,mCAAmC;AACnC,QAAQ;AAER,kCAAkC;AAClC,QAAQ;AACR,4BAA4B;AAC5B,oCAAoC;AACpC,QAAQ;AACR,IAAI"}
1
+ {"version":3,"file":"AgentModule.js","sourceRoot":"","sources":["../../../src/module/AgentModule/AgentModule.ts"],"names":[],"mappings":";;;AACA,qCAA4C;AAC5C,2CAAwE;AACxE,mCAAgC;AAEhC,kCAAkC;AAClC,MAAa,WAAY,SAAQ,qBAAc;IAK3C;QAEI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,uBAAa,CAAC,OAAO,EAAiB,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,MAAyB;QAEnC,MAAM,KAAK,GAAG,IAAI,aAAK,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,IAAgC;QAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QACrF,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,cAAc;IACP,GAAG,CAA0C,EAAU;QAE1D,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,cAAc;IACP,IAAI;QAEP,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED,YAAY;IACZ,IAAW,KAAK;QAEZ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,EAAU;QAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;QAC7B,KAAK,CAAC,SAAS,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,gBAAgB;IACT,SAAS;QAEZ,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IAEM,SAAS;QAEZ,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;IAC7B,CAAC;CACJ;AAhFD,kCAgFC"}
@@ -1,2 +1,3 @@
1
- export {};
1
+ export * from "./Agent";
2
+ export * from "./AgentModule";
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/module/AgentModule/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/module/AgentModule/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC"}
@@ -1,5 +1,19 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- // export * from "./Agent";
4
- // export * from "./AgentModule";
17
+ __exportStar(require("./Agent"), exports);
18
+ __exportStar(require("./AgentModule"), exports);
5
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/module/AgentModule/index.ts"],"names":[],"mappings":";;AAAA,2BAA2B;AAC3B,iCAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/module/AgentModule/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,gDAA8B"}
@@ -17,7 +17,13 @@ export declare class ClaudeLLM extends AbstractLLM<LLMUtility.Claude.Config, LLM
17
17
  /** @override — 停止原因 */
18
18
  protected stopReason(reason: string): LLMUtility.FinishReason;
19
19
  /** @override */
20
- protected request(tools: LLMUtility.ToolDefinition[]): Promise<LLMUtility.Response>;
20
+ protected request(tools: LLMUtility.ToolDefinition[], onChunk?: LLMUtility.StreamCallback): Promise<LLMUtility.Response>;
21
+ /** 同步请求 */
22
+ private requestSync;
23
+ /** 流式请求 — Claude SSE 事件类型分发 */
24
+ private requestStream;
25
+ /** 构建请求体 */
26
+ private buildBody;
21
27
  OnDestroy(): boolean;
22
28
  }
23
29
  //# sourceMappingURL=ClaudeLLM.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClaudeLLM.d.ts","sourceRoot":"","sources":["../../../src/module/LLMModule/ClaudeLLM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAkB,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3D,gBAAgB;AAChB,qBAAa,SAAU,SAAQ,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;IAG/F,WAAW;gBACQ,MAAM,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM;IA0BpD,0CAA0C;IAC1C,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAE9C,gBAAgB;IAChB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5C,gBAAgB;IAChB,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI;IAkB5F,gBAAgB;IAChB,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,GAAG,IAAI;IAM7D,uCAAuC;IACvC,SAAS,CAAC,eAAe,IAAI,IAAI;IAsBjC,uBAAuB;IACvB,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,YAAY;IAU7D,gBAAgB;cACA,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;IAqDlF,SAAS,IAAI,OAAO;CAI9B"}
1
+ {"version":3,"file":"ClaudeLLM.d.ts","sourceRoot":"","sources":["../../../src/module/LLMModule/ClaudeLLM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAkB,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3D,gBAAgB;AAChB,qBAAa,SAAU,SAAQ,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;IAG/F,WAAW;gBACQ,MAAM,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM;IA0BpD,0CAA0C;IAC1C,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAE9C,gBAAgB;IAChB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5C,gBAAgB;IAChB,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI;IAkB5F,gBAAgB;IAChB,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,GAAG,IAAI;IAM7D,uCAAuC;IACvC,SAAS,CAAC,eAAe,IAAI,IAAI;IAsBjC,uBAAuB;IACvB,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,YAAY;IAU7D,gBAAgB;cACA,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;IAS9H,WAAW;YACG,WAAW;IAmCzB,+BAA+B;YACjB,aAAa;IAgG3B,YAAY;IACZ,OAAO,CAAC,SAAS;IAmBV,SAAS,IAAI,OAAO;CAI9B"}
@@ -83,29 +83,19 @@ class ClaudeLLM extends base_1.AbstractLLM {
83
83
  }
84
84
  }
85
85
  /** @override */
86
- async request(tools) {
86
+ async request(tools, onChunk) {
87
+ if (this.config.stream && onChunk) {
88
+ return this.requestStream(tools, onChunk);
89
+ }
90
+ return this.requestSync(tools);
91
+ }
92
+ /** 同步请求 */
93
+ async requestSync(tools) {
87
94
  const messages = [...this.messages.All()];
88
- /** JSON 模式:预填 assistant 消息以 { 开头,强制 JSON 输出 */
89
95
  if (this.config.responseFormat === "json_object") {
90
96
  messages.push({ role: "assistant", content: "{" });
91
97
  }
92
- // 构建请求体
93
- const body = {
94
- model: this.config.model,
95
- messages,
96
- system: this.systemPrompt || undefined,
97
- max_tokens: this.config.maxTokens,
98
- temperature: this.config.temperature,
99
- top_p: this.config.topP,
100
- top_k: undefined,
101
- stop_sequences: this.config.stop ? (Array.isArray(this.config.stop) ? this.config.stop : [this.config.stop]) : undefined,
102
- stream: this.config.stream,
103
- thinking: this.config.thinking,
104
- tools: tools.length > 0 ? tools.map(t => ({ name: t.name, description: t.description, input_schema: t.inputSchema })) : undefined,
105
- tool_choice: undefined,
106
- metadata: this.config.userId ? { user_id: this.config.userId } : undefined,
107
- };
108
- // 发送请求
98
+ const body = this.buildBody(tools, messages, false);
109
99
  const response = await utility_1.NetworkUtility.HTTP.OnRequest(this.config.url, {
110
100
  method: "post",
111
101
  data: body,
@@ -130,6 +120,101 @@ class ClaudeLLM extends base_1.AbstractLLM {
130
120
  raw: data,
131
121
  };
132
122
  }
123
+ /** 流式请求 — Claude SSE 事件类型分发 */
124
+ async requestStream(tools, onChunk) {
125
+ const messages = [...this.messages.All()];
126
+ if (this.config.responseFormat === "json_object") {
127
+ messages.push({ role: "assistant", content: "{" });
128
+ }
129
+ const body = this.buildBody(tools, messages, true);
130
+ let id = "";
131
+ let model = "";
132
+ let content = "";
133
+ let finishReason = "unknown";
134
+ let inputTokens = 0;
135
+ let outputTokens = 0;
136
+ const toolCallMap = new Map();
137
+ for await (const raw of utility_1.NetworkUtility.HTTP.onStreamRequest(this.config.url, {
138
+ method: "post",
139
+ data: body,
140
+ headers: { "x-api-key": this.config.apiKey, "anthropic-version": "2023-06-01" },
141
+ timeout: this.config.timeout,
142
+ })) {
143
+ const chunk = JSON.parse(raw);
144
+ if (!chunk)
145
+ continue;
146
+ id = chunk.id ?? id;
147
+ model = chunk.model ?? model;
148
+ switch (chunk.type) {
149
+ case "message_start":
150
+ if (chunk.message?.usage?.input_tokens) {
151
+ inputTokens = chunk.message.usage.input_tokens;
152
+ }
153
+ break;
154
+ case "content_block_start":
155
+ if (chunk.content_block?.type === "tool_use") {
156
+ const cb = chunk.content_block;
157
+ toolCallMap.set(chunk.index, { id: cb.id ?? "", name: cb.name ?? "", args: "" });
158
+ }
159
+ break;
160
+ case "content_block_delta":
161
+ if (chunk.delta?.type === "text_delta" && chunk.delta.text) {
162
+ content += chunk.delta.text;
163
+ onChunk({ content: chunk.delta.text });
164
+ }
165
+ else if (chunk.delta?.type === "input_json_delta" && chunk.delta.partial_json) {
166
+ const entry = toolCallMap.get(chunk.index) ?? { id: "", name: "", args: "" };
167
+ entry.args += chunk.delta.partial_json;
168
+ toolCallMap.set(chunk.index, entry);
169
+ }
170
+ break;
171
+ case "message_delta":
172
+ if (chunk.delta?.stop_reason) {
173
+ finishReason = this.stopReason(chunk.delta.stop_reason);
174
+ }
175
+ if (chunk.usage?.output_tokens) {
176
+ outputTokens = chunk.usage.output_tokens;
177
+ }
178
+ onChunk({ content: "", finishReason, usage: { input: inputTokens, output: outputTokens, total: inputTokens + outputTokens } });
179
+ break;
180
+ case "message_stop":
181
+ // 流结束
182
+ break;
183
+ }
184
+ }
185
+ // 组装 toolCalls
186
+ const toolCalls = [];
187
+ for (const [, tc] of toolCallMap) {
188
+ toolCalls.push({
189
+ id: tc.id,
190
+ name: tc.name,
191
+ arguments: JSON.parse(tc.args || "{}"),
192
+ });
193
+ }
194
+ return {
195
+ id, model, content, toolCalls, finishReason,
196
+ usage: { input: inputTokens, output: outputTokens, total: inputTokens + outputTokens },
197
+ raw: null,
198
+ };
199
+ }
200
+ /** 构建请求体 */
201
+ buildBody(tools, messages, stream) {
202
+ return {
203
+ model: this.config.model,
204
+ messages,
205
+ system: this.config.systemPrompt || undefined,
206
+ max_tokens: this.config.maxTokens,
207
+ temperature: this.config.temperature,
208
+ top_p: this.config.topP,
209
+ top_k: undefined,
210
+ stop_sequences: this.config.stop ? (Array.isArray(this.config.stop) ? this.config.stop : [this.config.stop]) : undefined,
211
+ stream,
212
+ thinking: this.config.thinking,
213
+ tools: tools.length > 0 ? tools.map(t => ({ name: t.name, description: t.description, input_schema: t.inputSchema })) : undefined,
214
+ tool_choice: undefined,
215
+ metadata: this.config.userId ? { user_id: this.config.userId } : undefined,
216
+ };
217
+ }
133
218
  OnDestroy() {
134
219
  return super.OnDestroy();
135
220
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ClaudeLLM.js","sourceRoot":"","sources":["../../../src/module/LLMModule/ClaudeLLM.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClaudeLLM.js","sourceRoot":"","sources":["../../../src/module/LLMModule/ClaudeLLM.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,6 @@ import { AbstractLLM } from "../../base";
2
2
  import { LLMUtility } from "../../utility";
3
3
  /** DeepSeek大模型 */
4
4
  export declare class DeepSeekLLM extends AbstractLLM<LLMUtility.DeepSeek.Config, LLMUtility.DeepSeek.MessageData> {
5
- protected readonly path: string;
6
5
  /** 构造函数 */
7
6
  constructor(config?: LLMUtility.DeepSeek.Config);
8
7
  /** @override */
@@ -18,7 +17,13 @@ export declare class DeepSeekLLM extends AbstractLLM<LLMUtility.DeepSeek.Config,
18
17
  /** @override — 停止原因 */
19
18
  protected stopReason(reason: string): LLMUtility.FinishReason;
20
19
  /** @override */
21
- protected request(tools: LLMUtility.ToolDefinition[]): Promise<LLMUtility.Response>;
20
+ protected request(tools: LLMUtility.ToolDefinition[], onChunk?: LLMUtility.StreamCallback): Promise<LLMUtility.Response>;
21
+ /** 同步请求 */
22
+ private requestSync;
23
+ /** 流式请求 — fetch + ReadableStream SSE 解析 */
24
+ private requestStream;
25
+ /** 构建请求体 */
26
+ private buildBody;
22
27
  OnDestroy(): boolean;
23
28
  }
24
29
  //# sourceMappingURL=DeepSeekLLM.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DeepSeekLLM.d.ts","sourceRoot":"","sources":["../../../src/module/LLMModule/DeepSeekLLM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAkB,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3D,kBAAkB;AAClB,qBAAa,WAAY,SAAQ,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;IAErG,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAA+C;IAE9E,WAAW;gBACQ,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM;IAwBtD,gBAAgB;IAChB,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9C,gBAAgB;IAChB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5C,gBAAgB;IAChB,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI;IAkB5F,gBAAgB;IAChB,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,GAAG,IAAI;IAM7D,2BAA2B;IAC3B,SAAS,CAAC,eAAe,IAAI,IAAI;IAYjC,uBAAuB;IACvB,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,YAAY;IAW7D,gBAAgB;cACA,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;IAoDlF,SAAS,IAAI,OAAO;CAI9B"}
1
+ {"version":3,"file":"DeepSeekLLM.d.ts","sourceRoot":"","sources":["../../../src/module/LLMModule/DeepSeekLLM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAkB,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3D,kBAAkB;AAClB,qBAAa,WAAY,SAAQ,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;IAGrG,WAAW;gBACQ,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM;IAyBtD,gBAAgB;IAChB,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9C,gBAAgB;IAChB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5C,gBAAgB;IAChB,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI;IAkB5F,gBAAgB;IAChB,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,GAAG,IAAI;IAM7D,2BAA2B;IAC3B,SAAS,CAAC,eAAe,IAAI,IAAI;IAYjC,uBAAuB;IACvB,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,YAAY;IAW7D,gBAAgB;cACA,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;IAS9H,WAAW;YACG,WAAW;IAiCzB,2CAA2C;YAC7B,aAAa;IA4E3B,YAAY;IACZ,OAAO,CAAC,SAAS;IAuBV,SAAS,IAAI,OAAO;CAI9B"}
@@ -9,6 +9,7 @@ class DeepSeekLLM extends base_1.AbstractLLM {
9
9
  constructor(config) {
10
10
  super({
11
11
  type: "DeepSeek",
12
+ url: "https://api.deepseek.com/chat/completions",
12
13
  apiKey: "",
13
14
  model: "deepseek-chat",
14
15
  timeout: 60000,
@@ -25,7 +26,6 @@ class DeepSeekLLM extends base_1.AbstractLLM {
25
26
  userId: undefined,
26
27
  ...config
27
28
  });
28
- this.path = "https://api.deepseek.com/chat/completions";
29
29
  }
30
30
  // ======================== 受保护实现 ========================
31
31
  /** @override */
@@ -81,27 +81,16 @@ class DeepSeekLLM extends base_1.AbstractLLM {
81
81
  }
82
82
  }
83
83
  /** @override */
84
- async request(tools) {
85
- const messages = this.messages.All();
86
- const body = {
87
- model: this.config.model,
88
- messages,
89
- thinking: this.config.thinking,
90
- response_format: this.config.responseFormat && this.config.responseFormat !== "text" ? { type: this.config.responseFormat } : undefined,
91
- temperature: this.config.temperature,
92
- top_p: this.config.topP,
93
- max_tokens: this.config.maxTokens,
94
- stop: this.config.stop,
95
- stream: this.config.stream,
96
- stream_options: undefined,
97
- frequency_penalty: undefined,
98
- presence_penalty: undefined,
99
- logprobs: undefined,
100
- top_logprobs: undefined,
101
- tools: tools.length > 0 ? tools.map(t => ({ type: "function", function: { name: t.name, description: t.description, parameters: t.inputSchema } })) : undefined,
102
- tool_choice: undefined,
103
- };
104
- const response = await utility_1.NetworkUtility.HTTP.OnRequest(this.path, {
84
+ async request(tools, onChunk) {
85
+ if (this.config.stream && onChunk) {
86
+ return this.requestStream(tools, onChunk);
87
+ }
88
+ return this.requestSync(tools);
89
+ }
90
+ /** 同步请求 */
91
+ async requestSync(tools) {
92
+ const body = this.buildBody(tools, false);
93
+ const response = await utility_1.NetworkUtility.HTTP.OnRequest(this.config.url, {
105
94
  method: "post",
106
95
  data: body,
107
96
  headers: { "Authorization": `Bearer ${this.config.apiKey}`, "Content-Type": "application/json", },
@@ -128,6 +117,95 @@ class DeepSeekLLM extends base_1.AbstractLLM {
128
117
  raw: data,
129
118
  };
130
119
  }
120
+ /** 流式请求 — fetch + ReadableStream SSE 解析 */
121
+ async requestStream(tools, onChunk) {
122
+ const body = this.buildBody(tools, true);
123
+ let id = "";
124
+ let model = "";
125
+ let content = "";
126
+ let finishReason = "unknown";
127
+ let usage = { input: 0, output: 0, total: 0 };
128
+ const toolCallMap = new Map();
129
+ for await (const raw of utility_1.NetworkUtility.HTTP.onStreamRequest(this.config.url, {
130
+ method: "post",
131
+ data: body,
132
+ headers: { "Authorization": `Bearer ${this.config.apiKey}`, },
133
+ timeout: this.config.timeout,
134
+ })) {
135
+ const chunk = JSON.parse(raw);
136
+ if (!chunk)
137
+ continue;
138
+ id = chunk.id ?? id;
139
+ model = chunk.model ?? model;
140
+ const delta = chunk.choices?.[0]?.delta;
141
+ const chunkFinish = chunk.choices?.[0]?.finish_reason;
142
+ // 文本增量
143
+ if (delta?.content) {
144
+ content += delta.content;
145
+ onChunk({ content: delta.content });
146
+ }
147
+ // 工具调用增量(分片合并)
148
+ if (delta?.tool_calls) {
149
+ for (const tc of delta.tool_calls) {
150
+ const entry = toolCallMap.get(tc.index) ?? { id: "", name: "", args: "" };
151
+ if (tc.id) {
152
+ entry.id = tc.id;
153
+ }
154
+ if (tc.function?.name) {
155
+ entry.name = tc.function.name;
156
+ }
157
+ if (tc.function?.arguments) {
158
+ entry.args += tc.function.arguments;
159
+ }
160
+ toolCallMap.set(tc.index, entry);
161
+ }
162
+ }
163
+ // 终止分块
164
+ if (chunkFinish) {
165
+ finishReason = this.stopReason(chunkFinish);
166
+ if (chunk.usage) {
167
+ usage = {
168
+ input: chunk.usage.prompt_tokens ?? 0,
169
+ output: chunk.usage.completion_tokens ?? 0,
170
+ total: chunk.usage.total_tokens ?? 0,
171
+ };
172
+ }
173
+ onChunk({ content: "", finishReason, usage });
174
+ }
175
+ }
176
+ // 组装 toolCalls
177
+ const toolCalls = [];
178
+ for (const [, tc] of toolCallMap) {
179
+ toolCalls.push({
180
+ id: tc.id,
181
+ name: tc.name,
182
+ arguments: JSON.parse(tc.args || "{}"),
183
+ });
184
+ }
185
+ return { id, model, content, toolCalls, finishReason, usage, raw: null };
186
+ }
187
+ /** 构建请求体 */
188
+ buildBody(tools, stream) {
189
+ const messages = this.messages.All();
190
+ return {
191
+ model: this.config.model,
192
+ messages,
193
+ thinking: this.config.thinking,
194
+ response_format: this.config.responseFormat && this.config.responseFormat !== "text" ? { type: this.config.responseFormat } : undefined,
195
+ temperature: this.config.temperature,
196
+ top_p: this.config.topP,
197
+ max_tokens: this.config.maxTokens,
198
+ stop: this.config.stop,
199
+ stream,
200
+ stream_options: undefined,
201
+ frequency_penalty: undefined,
202
+ presence_penalty: undefined,
203
+ logprobs: undefined,
204
+ top_logprobs: undefined,
205
+ tools: tools.length > 0 ? tools.map(t => ({ type: "function", function: { name: t.name, description: t.description, parameters: t.inputSchema } })) : undefined,
206
+ tool_choice: undefined,
207
+ };
208
+ }
131
209
  OnDestroy() {
132
210
  return super.OnDestroy();
133
211
  }