cantian-ai 0.0.28 → 0.0.30

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.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- export * from './Agent.js';
2
1
  export * from './mcp.js';
3
2
  export * from './message.js';
4
3
  export * from './models/index.js';
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
- export * from './Agent.js';
2
1
  export * from './mcp.js';
3
2
  export * from './message.js';
4
3
  export * from './models/index.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC"}
package/dist/mcp.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Client } from '@modelcontextprotocol/sdk/client';
2
- import { AgentTool } from './Agent.js';
2
+ import { Tool } from './type.js';
3
3
  export declare const createMcpClient: (options: {
4
4
  url: string;
5
5
  authorization: string;
@@ -62,7 +62,7 @@ export declare const listTools: (client: Client) => Promise<{
62
62
  openWorldHint?: boolean | undefined;
63
63
  } | undefined;
64
64
  execution?: {
65
- taskSupport?: "required" | "optional" | "forbidden" | undefined;
65
+ taskSupport?: "optional" | "required" | "forbidden" | undefined;
66
66
  } | undefined;
67
67
  _meta?: Record<string, unknown> | undefined;
68
68
  icons?: {
@@ -167,4 +167,4 @@ export declare const callTool: (client: Client, name: string, args: any) => Prom
167
167
  export declare const listAgentTools: (options: {
168
168
  url: string;
169
169
  authorization: string;
170
- }) => Promise<AgentTool[]>;
170
+ }) => Promise<Tool[]>;
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAGjG,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,OAA+C,EAAE,EAAE;IACvF,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,YAAY;KACnB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;QAChE,WAAW,EAAE;YACX,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,aAAa,EAAE;aACzC;SACF;KACF,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;IAChD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC;QACE,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,EAAE;KACX,EACD,qBAAqB,CACtB,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,IAAY,EAAE,IAAS,EAAE,EAAE;IACxE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC;QACE,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE;YACN,IAAI;YACJ,SAAS,EAAE,IAAI;SAChB;KACF,EACD,oBAAoB,CACrB,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,OAA+C,EAAE,EAAE;IACtF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;IAChC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,MAAM,KAAK,GAAgB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,UAAU,EAAE,CAAC,CAAC,WAAW;QACzB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;YACzB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;YAChC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxC,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClC,CAAC;YACD,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC1B,CAAC;KACF,CAAC,CAAC,CAAC;IACJ,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAGjG,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,OAA+C,EAAE,EAAE;IACvF,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,YAAY;KACnB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;QAChE,WAAW,EAAE;YACX,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,aAAa,EAAE;aACzC;SACF;KACF,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;IAChD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC;QACE,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,EAAE;KACX,EACD,qBAAqB,CACtB,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,IAAY,EAAE,IAAS,EAAE,EAAE;IACxE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC;QACE,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE;YACN,IAAI;YACJ,SAAS,EAAE,IAAI;SAChB;KACF,EACD,oBAAoB,CACrB,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,OAA+C,EAAE,EAAE;IACtF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;IAChC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,MAAM,KAAK,GAAW,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,UAAU,EAAE,CAAC,CAAC,WAAW;QACzB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;YACzB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;YAChC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxC,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClC,CAAC;YACD,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC1B,CAAC;KACF,CAAC,CAAC,CAAC;IACJ,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -1,28 +1,26 @@
1
1
  import { Semaphore } from 'async-mutex';
2
- import { JSONSchema } from 'json-schema-to-ts';
3
- import { InputItem, ModelChunk, ToolDefinition } from '../type.js';
2
+ import { AgentChunk, InputItem, ModelChunk, Tool, UsageChunk } from '../type.js';
4
3
  export type Options = {
5
- thinking?: {
6
- type: 'enabled' | 'disabled' | 'auto';
7
- };
8
- reasoning?: {
9
- effort: 'minimal' | 'low' | 'medium' | 'high';
10
- };
11
- temperature?: number;
12
- tools?: ToolDefinition[];
4
+ tools?: Record<string, Tool>;
13
5
  signal?: AbortSignal;
14
- textSchema?: JSONSchema;
6
+ finalRound?: boolean;
7
+ logMeta?: any;
15
8
  };
16
- export declare class BaseModel {
9
+ export declare class BaseModel<T extends Options = Options> {
17
10
  url: string;
18
11
  apiKey: string;
19
12
  model: string;
20
- options?: Options | undefined;
21
13
  semaphore: Semaphore;
22
- constructor(url: string, apiKey: string, model: string, options?: Options | undefined);
23
- stream(messages: InputItem[], options?: Options): AsyncGenerator<ModelChunk>;
24
- invoke(messages: InputItem[], options?: Omit<Options, 'tools'>): Promise<{
14
+ constructor(url: string, apiKey: string, model: string);
15
+ stream(messages: InputItem[], options?: T): AsyncGenerator<ModelChunk>;
16
+ invoke(messages: InputItem[], options?: T): Promise<{
25
17
  message: string;
26
- usage: any;
18
+ usage?: UsageChunk;
27
19
  }>;
20
+ agenticStream(messages: any[], modelOptions: Omit<T, 'signal' | 'logMeta'>, options?: {
21
+ signal?: AbortSignal;
22
+ maxRounds?: number;
23
+ context?: any;
24
+ logMeta?: any;
25
+ }): AsyncGenerator<AgentChunk>;
28
26
  }
@@ -1,15 +1,16 @@
1
1
  import { Semaphore } from 'async-mutex';
2
+ import { saveAgentUsage } from '../tokenUsage.js';
3
+ import { executeTool, isAsyncGenerator } from '../util.js';
4
+ const DEFAULT_MAX_ROUNDS = 10;
2
5
  export class BaseModel {
3
6
  url;
4
7
  apiKey;
5
8
  model;
6
- options;
7
9
  semaphore;
8
- constructor(url, apiKey, model, options) {
10
+ constructor(url, apiKey, model) {
9
11
  this.url = url;
10
12
  this.apiKey = apiKey;
11
13
  this.model = model;
12
- this.options = options;
13
14
  this.semaphore = new Semaphore(10);
14
15
  }
15
16
  async *stream(messages, options) {
@@ -18,5 +19,99 @@ export class BaseModel {
18
19
  async invoke(messages, options) {
19
20
  throw new Error('Method not implemented.');
20
21
  }
22
+ async *agenticStream(messages, modelOptions, options) {
23
+ const input = [...messages];
24
+ let roundIndex = 0;
25
+ let toolCalls;
26
+ const maxRounds = options?.maxRounds || DEFAULT_MAX_ROUNDS;
27
+ const agentUsage = {
28
+ type: 'AGENT_USAGE',
29
+ model: this.model,
30
+ totalTokens: 0,
31
+ inputUsage: {
32
+ inputTokens: 0,
33
+ cachedTokens: 0,
34
+ },
35
+ outputUsage: {
36
+ outputTokens: 0,
37
+ reasoningTokens: 0,
38
+ },
39
+ firstTokenCostMs: 0,
40
+ totalCostMs: 0,
41
+ estimatedCost: 0,
42
+ rounds: [],
43
+ };
44
+ const startedTimestamp = Date.now();
45
+ do {
46
+ const response = this.stream(input, {
47
+ ...modelOptions,
48
+ finalRound: roundIndex === maxRounds - 1,
49
+ signal: options?.signal,
50
+ });
51
+ toolCalls = [];
52
+ for await (const chunk of response) {
53
+ switch (chunk.type) {
54
+ case 'TOKEN':
55
+ case 'MESSAGE':
56
+ case 'MODEL_CALLING':
57
+ yield chunk;
58
+ break;
59
+ case 'USAGE':
60
+ agentUsage.totalTokens += chunk.totalTokens || 0;
61
+ agentUsage.inputUsage.inputTokens += chunk.inputUsage.inputTokens || 0;
62
+ agentUsage.inputUsage.cachedTokens += chunk.inputUsage.cachedTokens || 0;
63
+ agentUsage.outputUsage.outputTokens += chunk.outputUsage.outputTokens || 0;
64
+ agentUsage.outputUsage.reasoningTokens += chunk.outputUsage.reasoningTokens || 0;
65
+ agentUsage.firstTokenCostMs = agentUsage.firstTokenCostMs || chunk.firstTokenCostMs;
66
+ agentUsage.estimatedCost += chunk.estimatedCost;
67
+ agentUsage.rounds.push({ input: chunk.input, output: chunk.output });
68
+ yield chunk;
69
+ break;
70
+ case 'TOOL_CALL':
71
+ toolCalls.push(chunk);
72
+ input.push(chunk);
73
+ yield chunk;
74
+ break;
75
+ default:
76
+ break;
77
+ }
78
+ }
79
+ let hasStreaming = false;
80
+ if (toolCalls.length) {
81
+ for (const toolCall of toolCalls) {
82
+ yield { ...toolCall, type: 'TOOL_CALLING' };
83
+ const { error, result, aiText } = await executeTool(toolCall, modelOptions.tools, options?.context);
84
+ if (isAsyncGenerator(result)) {
85
+ for await (const chunk of result) {
86
+ yield { type: 'AGENTIC_TOOL_TOKEN', data: chunk };
87
+ }
88
+ hasStreaming = true;
89
+ }
90
+ else {
91
+ const toolCallOutputChunk = {
92
+ type: 'TOOL_CALL_OUTPUT',
93
+ name: toolCall.name,
94
+ callId: toolCall.callId,
95
+ error,
96
+ result: result,
97
+ aiText,
98
+ };
99
+ input.push(toolCallOutputChunk);
100
+ yield toolCallOutputChunk;
101
+ }
102
+ }
103
+ }
104
+ roundIndex++;
105
+ // streaming的时候会正常推AI token给客户端展示,不应该再把结果返回给agent,会导致消息错乱
106
+ if (hasStreaming) {
107
+ break;
108
+ }
109
+ } while (toolCalls.length && roundIndex < maxRounds && !options?.signal?.aborted);
110
+ agentUsage.totalCostMs = Date.now() - startedTimestamp;
111
+ if (options?.logMeta) {
112
+ saveAgentUsage(agentUsage, options.logMeta);
113
+ }
114
+ yield agentUsage;
115
+ }
21
116
  }
22
117
  //# sourceMappingURL=BaseModel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseModel.js","sourceRoot":"","sources":["../../src/models/BaseModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAexC,MAAM,OAAO,SAAS;IAGD;IAAoB;IAAuB;IAAsB;IAF7E,SAAS,CAAY;IAE5B,YAAmB,GAAW,EAAS,MAAc,EAAS,KAAa,EAAS,OAAiB;QAAlF,QAAG,GAAH,GAAG,CAAQ;QAAS,WAAM,GAAN,MAAM,CAAQ;QAAS,UAAK,GAAL,KAAK,CAAQ;QAAS,YAAO,GAAP,OAAO,CAAU;QACnG,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,QAAqB,EAAE,OAAiB;QACpD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAqB,EAAE,OAAgC;QAClE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF"}
1
+ {"version":3,"file":"BaseModel.js","sourceRoot":"","sources":["../../src/models/BaseModel.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,23 @@
1
+ import { JSONSchema } from 'json-schema-to-ts';
1
2
  import { InputItem, MessageChunk, ModelChunk, UsageChunk } from '../type.js';
2
3
  import { BaseModel, Options } from './BaseModel.js';
3
- export declare class DeepseekModel extends BaseModel {
4
- stream(messages: InputItem[], options?: Options): AsyncGenerator<ModelChunk>;
5
- invoke(input: MessageChunk[], options?: Omit<Options, 'tools'>): Promise<{
4
+ type DeepseekModelOptions = {
5
+ thinking?: {
6
+ type: 'enabled' | 'disabled' | 'auto';
7
+ };
8
+ reasoning?: {
9
+ effort: 'minimal' | 'low' | 'medium' | 'high';
10
+ };
11
+ temperature?: number;
12
+ textSchema?: JSONSchema;
13
+ } & Options;
14
+ export declare class DeepseekModel extends BaseModel<DeepseekModelOptions> {
15
+ stream(messages: InputItem[], options?: DeepseekModelOptions): AsyncGenerator<ModelChunk>;
16
+ invoke(input: MessageChunk[], options?: DeepseekModelOptions): Promise<{
6
17
  message: string;
7
18
  usage: UsageChunk | undefined;
8
19
  }>;
9
- protected buildResponseRequestParams(messages: InputItem[], options?: Options): [string, RequestInit];
20
+ protected buildResponseRequestParams(messages: InputItem[], options?: DeepseekModelOptions): [string, RequestInit];
10
21
  parseInputMessage: (message: InputItem) => MessageChunk | {
11
22
  type: string;
12
23
  call_id: string;
@@ -23,3 +34,4 @@ export declare class DeepseekModel extends BaseModel {
23
34
  output: any;
24
35
  };
25
36
  }
37
+ export {};
@@ -1,4 +1,5 @@
1
1
  import { sse } from 'cantian-request';
2
+ import { saveModelUsage } from '../tokenUsage.js';
2
3
  import { BaseModel } from './BaseModel.js';
3
4
  const COST_DOLLAR_PER_M = 0.6;
4
5
  export class DeepseekModel extends BaseModel {
@@ -65,6 +66,9 @@ export class DeepseekModel extends BaseModel {
65
66
  }
66
67
  usageContent.totalCostMs = Date.now() - startedAt;
67
68
  usageContent.estimatedCost = (COST_DOLLAR_PER_M * (usageContent.totalTokens || 0)) / 1000000;
69
+ if (options?.logMeta) {
70
+ saveModelUsage(usageContent, options.logMeta);
71
+ }
68
72
  yield usageContent;
69
73
  }
70
74
  finally {
@@ -88,8 +92,8 @@ export class DeepseekModel extends BaseModel {
88
92
  return { message, usage };
89
93
  }
90
94
  buildResponseRequestParams(messages, options) {
91
- let tools = options?.tools || this.options?.tools;
92
- if (!tools?.length) {
95
+ let tools = options?.tools;
96
+ if (!tools || !Object.keys(tools).length || options?.finalRound) {
93
97
  tools = undefined;
94
98
  }
95
99
  return [
@@ -105,15 +109,17 @@ export class DeepseekModel extends BaseModel {
105
109
  model: this.model,
106
110
  input: messages.map(this.parseInputMessage),
107
111
  stream: true,
108
- thinking: options?.thinking || this.options?.thinking,
109
- reasoning: options?.reasoning || this.options?.reasoning,
110
- temperature: options?.temperature || this.options?.temperature,
111
- tools: tools?.map((tool) => ({
112
- type: 'function',
113
- name: tool.name,
114
- description: tool.description,
115
- parameters: tool.parameters,
116
- })),
112
+ thinking: options?.thinking,
113
+ reasoning: options?.reasoning,
114
+ temperature: options?.temperature,
115
+ tools: tools
116
+ ? Object.values(tools).map((tool) => ({
117
+ type: 'function',
118
+ name: tool.name,
119
+ description: tool.description,
120
+ parameters: tool.parameters,
121
+ }))
122
+ : undefined,
117
123
  text: options?.textSchema && {
118
124
  format: {
119
125
  type: 'json_schema',
@@ -1 +1 @@
1
- {"version":3,"file":"DeepseekModel.js","sourceRoot":"","sources":["../../src/models/DeepseekModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAW,MAAM,gBAAgB,CAAC;AAEpD,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,MAAM,OAAO,aAAc,SAAQ,SAAS;IAC1C,KAAK,CAAC,CAAC,MAAM,CAAC,QAAqB,EAAE,OAAiB;QACpD,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAChC,IAAI,YAAY,GAAwB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAc,CAAC,EAAE,CAAC;YAClG,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAA8B,CAAC;YACvE,MAAM,IAAI,GAAU,EAAE,CAAC;YACvB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;gBACnC,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC5B,MAAM;oBACR,CAAC;oBAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACpC,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;wBACpB,KAAK,4BAA4B;4BAC/B,IAAI,YAAY,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gCAChD,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;4BACzD,CAAC;4BACD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAuB,CAAC;4BAChE,MAAM;wBACR,KAAK,2BAA2B;4BAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;4BAChC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gCAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oCACzB,MAAM;wCACJ,IAAI,EAAE,SAAS;wCACf,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;wCACpB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;qCACZ,CAAC;gCAC3B,CAAC;4BACH,CAAC;iCAAM,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;gCACxC,MAAM;oCACJ,IAAI,EAAE,WAAW;oCACjB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;oCACzB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;oCAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;iCACG,CAAC;4BAC5B,CAAC;4BACD,MAAM;wBACR,KAAK,oBAAoB;4BACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;4BAClC,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;4BAC9C,YAAY,CAAC,UAAU,GAAG;gCACxB,WAAW,EAAE,KAAK,CAAC,YAAY;gCAC/B,YAAY,EAAE,KAAK,CAAC,oBAAoB,CAAC,aAAa;6BACvD,CAAC;4BACF,YAAY,CAAC,WAAW,GAAG;gCACzB,YAAY,EAAE,KAAK,CAAC,aAAa;gCACjC,eAAe,EAAE,KAAK,CAAC,qBAAqB,CAAC,gBAAgB;6BAC9D,CAAC;4BACF,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;4BAC3C,MAAM;wBACR;4BACE,MAAM;oBACV,CAAC;gBACH,CAAC;YACH,CAAC;YACD,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAClD,YAAY,CAAC,aAAa,GAAG,CAAC,iBAAiB,GAAG,CAAC,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;YAC7F,MAAM,YAA0B,CAAC;QACnC,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,KAAK,CAAC,MAAM,CAAC,KAAqB,EAAE,OAAgC;QAClE,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,KAA6B,CAAC;QAClC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YACtD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,SAAS;oBACZ,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;oBACzB,MAAM;gBACR,KAAK,OAAO;oBACV,KAAK,GAAG,KAAK,CAAC;oBACd,MAAM;YACV,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAES,0BAA0B,CAAC,QAAqB,EAAE,OAAiB;QAC3E,IAAI,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACnB,KAAK,GAAG,SAAS,CAAC;QACpB,CAAC;QACD,OAAO;YACL,IAAI,CAAC,GAAG;YACR;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACtC,cAAc,EAAE,kBAAkB;iBACnC;gBACD,MAAM,EAAE,OAAO,EAAE,MAAM;gBACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;oBAC3C,MAAM,EAAE,IAAI;oBACZ,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ;oBACrD,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS;oBACxD,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,WAAW;oBAC9D,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBAC3B,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;qBAC5B,CAAC,CAAC;oBACH,IAAI,EAAE,OAAO,EAAE,UAAU,IAAI;wBAC3B,MAAM,EAAE;4BACN,IAAI,EAAE,aAAa;4BACnB,IAAI,EAAE,QAAQ;4BACd,MAAM,EAAE,OAAO,CAAC,UAAU;yBAC3B;qBACF;iBACF,CAAC;aACH;SACuB,CAAC;IAC7B,CAAC;IAED,iBAAiB,GAAG,CAAC,OAAkB,EAAE,EAAE;QACzC,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YACtB,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrB,KAAK,SAAS;oBACZ,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1D,KAAK,WAAW;oBACd,OAAO;wBACL,IAAI,EAAE,eAAe;wBACrB,OAAO,EAAE,OAAO,CAAC,MAAM;wBACvB,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;qBACnB,CAAC;gBACJ,KAAK,kBAAkB;oBACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;gBACtG;oBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,oBAAoB,GAAG,CAAC,MAAc,EAAE,MAAW,EAAE,EAAE;QACrD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,YAAY,MAAM,CAAC,EAAE,CAAC;YAC9D,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;gBAC5B,MAAM,GAAG,UAAU,MAAM,CAAC,OAAO,EAAE,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACnE,CAAC,CAAC;CACH"}
1
+ {"version":3,"file":"DeepseekModel.js","sourceRoot":"","sources":["../../src/models/DeepseekModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { AgentUsageChunk, UsageChunk } from './type.js';
2
+ export declare const saveModelUsage: (usageChunk: UsageChunk, meta: any) => Promise<void>;
3
+ export declare const saveAgentUsage: (agentUsageChunk: AgentUsageChunk, meta: any) => Promise<void>;
@@ -0,0 +1,36 @@
1
+ import { mongoClient } from 'cantian-mongodb';
2
+ const db = mongoClient.db('agent-service');
3
+ const collection = db.collection('tokenUsages');
4
+ export const saveModelUsage = async (usageChunk, meta) => {
5
+ const now = new Date().toISOString();
6
+ const tokenUsage = {
7
+ ...meta,
8
+ model: usageChunk.model,
9
+ totalTokens: usageChunk.totalTokens,
10
+ totalCostMs: usageChunk.totalCostMs,
11
+ rounds: [{ input: usageChunk.input, output: usageChunk.output }],
12
+ estimatedCost: usageChunk.estimatedCost,
13
+ inputUsage: usageChunk.inputUsage,
14
+ outputUsage: usageChunk.outputUsage,
15
+ createdAt: now,
16
+ updatedAt: now,
17
+ };
18
+ await collection.insertOne(tokenUsage);
19
+ };
20
+ export const saveAgentUsage = async (agentUsageChunk, meta) => {
21
+ const now = new Date().toISOString();
22
+ const tokenUsage = {
23
+ ...meta,
24
+ model: agentUsageChunk.model,
25
+ totalTokens: agentUsageChunk.totalTokens,
26
+ totalCostMs: agentUsageChunk.totalCostMs,
27
+ rounds: agentUsageChunk.rounds,
28
+ estimatedCost: agentUsageChunk.estimatedCost,
29
+ inputUsage: agentUsageChunk.inputUsage,
30
+ outputUsage: agentUsageChunk.outputUsage,
31
+ createdAt: now,
32
+ updatedAt: now,
33
+ };
34
+ await collection.insertOne(tokenUsage);
35
+ };
36
+ //# sourceMappingURL=tokenUsage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenUsage.js","sourceRoot":"","sources":["../src/tokenUsage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAwB9C,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;AAC3C,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAa,aAAa,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,UAAsB,EAAE,IAAS,EAAE,EAAE;IACxE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,UAAU,GAAe;QAC7B,GAAG,IAAI;QACP,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;QAChE,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;IACF,MAAM,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,eAAgC,EAAE,IAAS,EAAE,EAAE;IAClF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,UAAU,GAAe;QAC7B,GAAG,IAAI;QACP,KAAK,EAAE,eAAe,CAAC,KAAK;QAC5B,WAAW,EAAE,eAAe,CAAC,WAAW;QACxC,WAAW,EAAE,eAAe,CAAC,WAAW;QACxC,MAAM,EAAE,eAAe,CAAC,MAAM;QAC9B,aAAa,EAAE,eAAe,CAAC,aAAa;QAC5C,UAAU,EAAE,eAAe,CAAC,UAAU;QACtC,WAAW,EAAE,eAAe,CAAC,WAAW;QACxC,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;IACF,MAAM,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC,CAAC"}
package/dist/type.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { ValidateFunction } from 'ajv';
1
2
  import { JSONSchema } from 'json-schema-to-ts';
2
3
  export type Role = 'user' | 'assistant' | 'system' | 'developer';
3
4
  export type MessageChunk = {
@@ -41,6 +42,7 @@ export type AgenticToolToken = {
41
42
  };
42
43
  export type UsageChunk = {
43
44
  type: 'USAGE';
45
+ model: string;
44
46
  totalTokens: number;
45
47
  inputUsage: {
46
48
  inputTokens: number;
@@ -59,6 +61,7 @@ export type UsageChunk = {
59
61
  export type AgentUsageChunk = {
60
62
  type: 'AGENT_USAGE';
61
63
  totalTokens: number;
64
+ model: string;
62
65
  inputUsage: {
63
66
  inputTokens: number;
64
67
  cachedTokens: number;
@@ -75,10 +78,13 @@ export type AgentUsageChunk = {
75
78
  output: any;
76
79
  }[];
77
80
  };
78
- export type ToolDefinition = {
81
+ export type Tool<Context = any, Result = any> = {
79
82
  name: string;
80
83
  description?: string;
81
84
  parameters: JSONSchema;
85
+ handler: (args: any, context: Context) => Result | Promise<Result> | AsyncGenerator<AgenticToolToken>;
86
+ validate?: ValidateFunction;
87
+ toAiText?: (result: any, context: Context, args: any) => string | Promise<string>;
82
88
  };
83
89
  export type ModelChunk = ModelCallingChunk | TokenChunk | MessageChunk | ToolCallChunk | UsageChunk;
84
90
  export type AgentChunk = ModelChunk | AgenticToolToken | ToolCallingChunk | ToolCallOutputChunk | AgentUsageChunk;
package/dist/util.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { Tool, ToolCallChunk } from './type.js';
2
+ export declare const executeTool: (toolCall: ToolCallChunk, tools: Record<string, Tool>, context: any) => Promise<{
3
+ error?: any;
4
+ result?: any;
5
+ aiText?: string;
6
+ }>;
7
+ export declare function isAsyncGenerator(value: any): any;
package/dist/util.js ADDED
@@ -0,0 +1,36 @@
1
+ export const executeTool = async (toolCall, tools, context) => {
2
+ const tool = tools[toolCall.name];
3
+ if (!tool) {
4
+ return { error: new Error('The tool name does not exist.') };
5
+ }
6
+ let json;
7
+ try {
8
+ json = JSON.parse(toolCall.arguments);
9
+ }
10
+ catch (error) {
11
+ return { error: new Error('The given <arguments> is an invalid JSON string.') };
12
+ }
13
+ try {
14
+ if (tool.validate) {
15
+ const valid = tool.validate(json);
16
+ if (!valid) {
17
+ return { error: new Error(`Invalid arguments: ${tool.validate.errors?.[0].message}`) };
18
+ }
19
+ }
20
+ const handlerResult = tool.handler(json, context);
21
+ const isAsyncGen = isAsyncGenerator(handlerResult);
22
+ if (isAsyncGen) {
23
+ return { result: handlerResult };
24
+ }
25
+ const result = await handlerResult;
26
+ const aiText = tool.toAiText ? await tool.toAiText(result, context, json) : undefined;
27
+ return { result, aiText };
28
+ }
29
+ catch (error) {
30
+ return { error };
31
+ }
32
+ };
33
+ export function isAsyncGenerator(value) {
34
+ return value && typeof value[Symbol.asyncIterator] === 'function';
35
+ }
36
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,QAAuB,EACvB,KAA2B,EAC3B,OAAY,EAC6C,EAAE;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,+BAA+B,CAAC,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,kDAAkD,CAAC,EAAE,CAAC;IAClF,CAAC;IAED,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACzF,CAAC;QACH,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QACnC,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,KAAK;IACpC,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,UAAU,CAAC;AACpE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cantian-ai",
3
- "version": "0.0.28",
3
+ "version": "0.0.30",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dist/index.js"
@@ -15,6 +15,8 @@
15
15
  "@modelcontextprotocol/sdk": "^1.25.1",
16
16
  "ajv": "^8.17.1",
17
17
  "async-mutex": "^0.5.0",
18
+ "cantian-als": "*",
19
+ "cantian-mongodb": "*",
18
20
  "cantian-request": "*"
19
21
  },
20
22
  "devDependencies": {
package/dist/Agent.d.ts DELETED
@@ -1,42 +0,0 @@
1
- import { ValidateFunction } from 'ajv';
2
- import { JSONSchema } from 'json-schema-to-ts';
3
- import { BaseModel } from './models/BaseModel.js';
4
- import { AgentChunk, AgenticToolToken, ToolCallChunk } from './type.js';
5
- export type GeneralAgentTool<Context = any, Result = any> = {
6
- name: string;
7
- description?: string;
8
- parameters: JSONSchema;
9
- handler: (args: any, context: Context) => Result | Promise<Result>;
10
- toAiText?: (result: any, context: Context, args: any) => string | Promise<string>;
11
- };
12
- export type AgentAgenticTool<Context = any, Result = any> = {
13
- agentic: true;
14
- name: string;
15
- description?: string;
16
- parameters: JSONSchema;
17
- handler: (args: any, context: Context) => AsyncGenerator<AgenticToolToken>;
18
- toAiText?: (result: any, context: Context, args: any) => string | Promise<string>;
19
- };
20
- export type AgentTool<Context = any, Result = any> = GeneralAgentTool<Context, Result> | AgentAgenticTool<Context, Result>;
21
- export declare class Agent {
22
- toolMap: Record<string, AgentTool & {
23
- validate: ValidateFunction;
24
- }>;
25
- model: BaseModel;
26
- constructor(options: {
27
- model: BaseModel;
28
- tools: AgentTool[];
29
- });
30
- stream(messages: any[], options?: {
31
- signal?: AbortSignal;
32
- maxRounds?: number;
33
- context?: any;
34
- temperature?: number;
35
- }): AsyncGenerator<AgentChunk>;
36
- executeAgenticTool(toolCall: ToolCallChunk, context: any): AsyncGenerator<AgenticToolToken>;
37
- executeTool(toolCall: ToolCallChunk, context: any): Promise<{
38
- error?: any;
39
- result?: any;
40
- aiText?: string;
41
- }>;
42
- }
package/dist/Agent.js DELETED
@@ -1,152 +0,0 @@
1
- import Ajv from 'ajv';
2
- const ajv = new Ajv.default({ removeAdditional: true, useDefaults: true });
3
- const DEFAULT_MAX_ROUNDS = 5;
4
- export class Agent {
5
- toolMap = {};
6
- model;
7
- constructor(options) {
8
- this.model = options.model;
9
- for (const tool of options.tools) {
10
- this.toolMap[tool.name] = {
11
- ...tool,
12
- validate: ajv.compile(tool.parameters),
13
- };
14
- }
15
- }
16
- async *stream(messages, options) {
17
- const input = [...messages];
18
- let roundIndex = 0;
19
- let toolCalls;
20
- const toolDefinitions = Object.values(this.toolMap).map((t) => ({
21
- name: t.name,
22
- description: t.description,
23
- parameters: t.parameters,
24
- }));
25
- const maxRounds = options?.maxRounds || DEFAULT_MAX_ROUNDS;
26
- const agentUsage = {
27
- type: 'AGENT_USAGE',
28
- totalTokens: 0,
29
- inputUsage: {
30
- inputTokens: 0,
31
- cachedTokens: 0,
32
- },
33
- outputUsage: {
34
- outputTokens: 0,
35
- reasoningTokens: 0,
36
- },
37
- firstTokenCostMs: 0,
38
- totalCostMs: 0,
39
- estimatedCost: 0,
40
- rounds: [],
41
- };
42
- const startedTimestamp = Date.now();
43
- do {
44
- const response = this.model.stream(input, {
45
- tools: roundIndex < maxRounds - 1 ? toolDefinitions : undefined,
46
- signal: options?.signal,
47
- temperature: options?.temperature,
48
- });
49
- toolCalls = [];
50
- for await (const chunk of response) {
51
- switch (chunk.type) {
52
- case 'TOKEN':
53
- case 'MESSAGE':
54
- case 'MODEL_CALLING':
55
- yield chunk;
56
- break;
57
- case 'USAGE':
58
- agentUsage.totalTokens += chunk.totalTokens || 0;
59
- agentUsage.inputUsage.inputTokens += chunk.inputUsage.inputTokens || 0;
60
- agentUsage.inputUsage.cachedTokens += chunk.inputUsage.cachedTokens || 0;
61
- agentUsage.outputUsage.outputTokens += chunk.outputUsage.outputTokens || 0;
62
- agentUsage.outputUsage.reasoningTokens += chunk.outputUsage.reasoningTokens || 0;
63
- agentUsage.firstTokenCostMs = agentUsage.firstTokenCostMs || chunk.firstTokenCostMs;
64
- agentUsage.estimatedCost += chunk.estimatedCost;
65
- agentUsage.rounds.push({ input: chunk.input, output: chunk.output });
66
- yield chunk;
67
- break;
68
- case 'TOOL_CALL':
69
- toolCalls.push(chunk);
70
- input.push(chunk);
71
- yield chunk;
72
- break;
73
- default:
74
- break;
75
- }
76
- }
77
- let hasStreaming = false;
78
- if (toolCalls.length) {
79
- for (const toolCall of toolCalls) {
80
- yield { ...toolCall, type: 'TOOL_CALLING' };
81
- const { error, result, aiText } = await this.executeTool(toolCall, options?.context);
82
- if (isAsyncGenerator(result)) {
83
- for await (const chunk of result) {
84
- yield { type: 'AGENTIC_TOOL_TOKEN', data: chunk };
85
- }
86
- hasStreaming = true;
87
- }
88
- else {
89
- const toolCallOutputChunk = {
90
- type: 'TOOL_CALL_OUTPUT',
91
- name: toolCall.name,
92
- callId: toolCall.callId,
93
- error,
94
- result: result,
95
- aiText,
96
- };
97
- input.push(toolCallOutputChunk);
98
- yield toolCallOutputChunk;
99
- }
100
- }
101
- }
102
- roundIndex++;
103
- // streaming的时候会正常推AI token给客户端展示,不应该再把结果返回给agent,会导致消息错乱
104
- if (hasStreaming) {
105
- break;
106
- }
107
- } while (toolCalls.length && roundIndex < maxRounds && !options?.signal?.aborted);
108
- agentUsage.totalCostMs = Date.now() - startedTimestamp;
109
- yield agentUsage;
110
- }
111
- async *executeAgenticTool(toolCall, context) {
112
- const tool = this.toolMap[toolCall.name];
113
- const json = JSON.parse(toolCall.arguments);
114
- for await (const chunk of tool.handler(json, context)) {
115
- yield { type: 'AGENTIC_TOOL_TOKEN', data: chunk };
116
- }
117
- }
118
- async executeTool(toolCall, context) {
119
- const tool = this.toolMap[toolCall.name];
120
- if (!tool) {
121
- return { error: new Error('The tool name does not exist.') };
122
- }
123
- let json;
124
- try {
125
- json = JSON.parse(toolCall.arguments);
126
- }
127
- catch (error) {
128
- return { error: new Error('The given <arguments> is an invalid JSON string.') };
129
- }
130
- try {
131
- const valid = tool.validate(json);
132
- if (!valid) {
133
- return { error: new Error(`Invalid arguments: ${tool.validate.errors?.[0].message}`) };
134
- }
135
- const handlerResult = tool.handler(json, context);
136
- const isAsyncGen = isAsyncGenerator(handlerResult);
137
- if (isAsyncGen) {
138
- return { result: handlerResult };
139
- }
140
- const result = await handlerResult;
141
- const aiText = tool.toAiText ? await tool.toAiText(result, context, json) : undefined;
142
- return { result, aiText };
143
- }
144
- catch (error) {
145
- return { error };
146
- }
147
- }
148
- }
149
- function isAsyncGenerator(value) {
150
- return value && typeof value[Symbol.asyncIterator] === 'function';
151
- }
152
- //# sourceMappingURL=Agent.js.map
package/dist/Agent.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Agent.js","sourceRoot":"","sources":["../src/Agent.ts"],"names":[],"mappings":"AAAA,OAAO,GAAyB,MAAM,KAAK,CAAC;AA8B5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAE3E,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,OAAO,KAAK;IACT,OAAO,GAA+D,EAAE,CAAC;IACzE,KAAK,CAAY;IAExB,YAAY,OAAiD;QAC3D,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACxB,GAAG,IAAI;gBACP,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;aACvC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CACX,QAAe,EACf,OAA2F;QAE3F,MAAM,KAAK,GAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC;QACzC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,SAA0B,CAAC;QAC/B,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC,CAAC;QACJ,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,kBAAkB,CAAC;QAC3D,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,CAAC;YACd,UAAU,EAAE;gBACV,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;aAChB;YACD,WAAW,EAAE;gBACX,YAAY,EAAE,CAAC;gBACf,eAAe,EAAE,CAAC;aACnB;YACD,gBAAgB,EAAE,CAAC;YACnB,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,EAAE;SACkC,CAAC;QAC/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,GAAG,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;gBACxC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;gBAC/D,MAAM,EAAE,OAAO,EAAE,MAAM;gBACvB,WAAW,EAAE,OAAO,EAAE,WAAW;aAClC,CAAC,CAAC;YACH,SAAS,GAAG,EAAE,CAAC;YACf,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;gBACnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,OAAO,CAAC;oBACb,KAAK,SAAS,CAAC;oBACf,KAAK,eAAe;wBAClB,MAAM,KAAK,CAAC;wBACZ,MAAM;oBACR,KAAK,OAAO;wBACV,UAAU,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;wBACjD,UAAU,CAAC,UAAU,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC;wBACvE,UAAU,CAAC,UAAU,CAAC,YAAY,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,IAAI,CAAC,CAAC;wBACzE,UAAU,CAAC,WAAW,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,IAAI,CAAC,CAAC;wBAC3E,UAAU,CAAC,WAAW,CAAC,eAAe,IAAI,KAAK,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,CAAC;wBACjF,UAAU,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC;wBACpF,UAAU,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC;wBAChD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;wBACrE,MAAM,KAAK,CAAC;wBACZ,MAAM;oBACR,KAAK,WAAW;wBACd,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACtB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAClB,MAAM,KAAK,CAAC;wBACZ,MAAM;oBACR;wBACE,MAAM;gBACV,CAAC;YACH,CAAC;YACD,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACrB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,cAAc,EAA6B,CAAC;oBACvE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBACrF,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC7B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;4BACjC,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,KAAK,EAA6B,CAAC;wBAC/E,CAAC;wBACD,YAAY,GAAG,IAAI,CAAC;oBACtB,CAAC;yBAAM,CAAC;wBACN,MAAM,mBAAmB,GAAwB;4BAC/C,IAAI,EAAE,kBAAkB;4BACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;4BACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,KAAK;4BACL,MAAM,EAAE,MAAM;4BACd,MAAM;yBACP,CAAC;wBACF,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;wBAChC,MAAM,mBAAmB,CAAC;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,UAAU,EAAE,CAAC;YAEb,yDAAyD;YACzD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM;YACR,CAAC;QACH,CAAC,QAAQ,SAAS,CAAC,MAAM,IAAI,UAAU,GAAG,SAAS,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAClF,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;QACvD,MAAM,UAAU,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,CAAC,kBAAkB,CAAC,QAAuB,EAAE,OAAY;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YACtD,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAuB,EAAE,OAAY;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,+BAA+B,CAAC,EAAE,CAAC;QAC/D,CAAC;QACD,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,kDAAkD,CAAC,EAAE,CAAC;QAClF,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACzF,CAAC;YACD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;YACnD,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;YACnC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACtF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;CACF;AAED,SAAS,gBAAgB,CAAC,KAAK;IAC7B,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,UAAU,CAAC;AACpE,CAAC"}