@aigne/core 1.65.0-beta.2 → 1.65.0-beta.4

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/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.65.0-beta.4](https://github.com/AIGNE-io/aigne-framework/compare/core-v1.65.0-beta.3...core-v1.65.0-beta.4) (2025-10-29)
4
+
5
+
6
+ ### Features
7
+
8
+ * add reasoningEffort option for chat model ([#680](https://github.com/AIGNE-io/aigne-framework/issues/680)) ([f69d232](https://github.com/AIGNE-io/aigne-framework/commit/f69d232d714d4a3e4946bdc8c6598747c9bcbd57))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @aigne/observability-api bumped to 0.11.4-beta.1
16
+
17
+ ## [1.65.0-beta.3](https://github.com/AIGNE-io/aigne-framework/compare/core-v1.65.0-beta.2...core-v1.65.0-beta.3) (2025-10-28)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **core:** support custom `catchToolsError` in yaml agent definition ([#676](https://github.com/AIGNE-io/aigne-framework/issues/676)) ([fe43f5f](https://github.com/AIGNE-io/aigne-framework/commit/fe43f5f32d18d2180abb0717287fc680f1444a0d))
23
+
24
+
25
+ ### Dependencies
26
+
27
+ * The following workspace dependencies were updated
28
+ * dependencies
29
+ * @aigne/observability-api bumped to 0.11.4-beta
30
+
3
31
  ## [1.65.0-beta.2](https://github.com/AIGNE-io/aigne-framework/compare/core-v1.65.0-beta.1...core-v1.65.0-beta.2) (2025-10-28)
4
32
 
5
33
 
@@ -341,7 +341,7 @@ class AIAgent extends agent_js_1.Agent {
341
341
  }
342
342
  const { toolCalls, json, text, files } = modelOutput;
343
343
  if (toolCalls?.length) {
344
- if (!this.keepTextInToolUses) {
344
+ if (this.keepTextInToolUses !== true) {
345
345
  yield { delta: { json: { [outputKey]: "" } } };
346
346
  }
347
347
  else {
@@ -388,6 +388,7 @@ export interface ChatModelInputOptions {
388
388
  parallelToolCalls?: boolean;
389
389
  modalities?: Modality[];
390
390
  preferInputFileType?: "file" | "url";
391
+ reasoningEffort?: number | "minimal" | "low" | "medium" | "high";
391
392
  }
392
393
  /**
393
394
  * Output message format for ChatModel
@@ -337,6 +337,15 @@ const modelOptionsSchema = zod_1.z.object({
337
337
  presencePenalty: zod_1.z.number().optional(),
338
338
  parallelToolCalls: zod_1.z.boolean().optional().default(true),
339
339
  modalities: zod_1.z.array(zod_1.z.enum(["text", "image", "audio"])).optional(),
340
+ reasoningEffort: zod_1.z
341
+ .union([
342
+ zod_1.z.number(),
343
+ zod_1.z.literal("minimal"),
344
+ zod_1.z.literal("low"),
345
+ zod_1.z.literal("medium"),
346
+ zod_1.z.literal("high"),
347
+ ])
348
+ .optional(),
340
349
  });
341
350
  const chatModelOptionsSchema = agent_js_1.agentOptionsSchema.extend({
342
351
  model: zod_1.z.string().optional(),
@@ -122,6 +122,7 @@ async function parseAgentFile(path, data) {
122
122
  toolChoice: (0, schema_js_1.optionalize)(zod_1.z.nativeEnum(ai_agent_js_1.AIAgentToolChoice)),
123
123
  toolCallsConcurrency: (0, schema_js_1.optionalize)(zod_1.z.number().int().min(0)),
124
124
  keepTextInToolUses: (0, schema_js_1.optionalize)(zod_1.z.boolean()),
125
+ catchToolsError: (0, schema_js_1.optionalize)(zod_1.z.boolean()),
125
126
  structuredStreamMode: (0, schema_js_1.optionalize)(zod_1.z.boolean()),
126
127
  })
127
128
  .extend(baseAgentSchema.shape),
@@ -18,6 +18,7 @@ export interface LoadOptions {
18
18
  create: (options?: Record<string, any>) => PromiseOrValue<AFSModule>;
19
19
  }[];
20
20
  };
21
+ aigne?: z.infer<typeof aigneFileSchema>;
21
22
  }
22
23
  export declare function load(path: string, options?: LoadOptions): Promise<AIGNEOptions>;
23
24
  export declare function loadAgent(path: string, options?: LoadOptions, agentOptions?: AgentOptions): Promise<Agent>;
@@ -37,12 +38,14 @@ declare const aigneFileSchema: z.ZodObject<{
37
38
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
38
39
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
39
40
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
41
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
40
42
  }, z.ZodTypeAny, "passthrough"> | undefined, z.ZodTypeDef, z.objectInputType<{
41
43
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
42
44
  temperature: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
43
45
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
44
46
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
45
47
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
48
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
46
49
  }, z.ZodTypeAny, "passthrough"> | undefined>;
47
50
  imageModel: ZodType<z.objectInputType<{
48
51
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
@@ -70,6 +73,7 @@ declare const aigneFileSchema: z.ZodObject<{
70
73
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
71
74
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
72
75
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
76
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
73
77
  }, z.ZodTypeAny, "passthrough"> | undefined;
74
78
  name?: string | undefined;
75
79
  description?: string | undefined;
@@ -92,6 +96,7 @@ declare const aigneFileSchema: z.ZodObject<{
92
96
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
93
97
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
94
98
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
99
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
95
100
  }, z.ZodTypeAny, "passthrough"> | undefined;
96
101
  name?: string | undefined;
97
102
  description?: string | undefined;
@@ -30,7 +30,7 @@ async function load(path, options = {}) {
30
30
  const allAgentPaths = new Set((0, type_utils_js_1.flat)(aigne.agents, aigne.skills, aigne.mcpServer?.agents, aigne.cli?.chat, aigne.cli?.agents?.flatMap((i) => (typeof i === "string" ? i : flatCliAgents(i)))).map((i) => index_js_1.nodejs.path.join(rootDir, i)));
31
31
  const allAgents = {};
32
32
  for (const path of allAgentPaths) {
33
- allAgents[path] = await loadAgent(path, options);
33
+ allAgents[path] = await loadAgent(path, { ...options, aigne });
34
34
  }
35
35
  const pickAgent = (path) => allAgents[index_js_1.nodejs.path.join(rootDir, path)];
36
36
  const pickAgents = (paths) => paths.map((filename) => pickAgent(filename)).filter(type_utils_js_1.isNonNullable);
@@ -134,10 +134,13 @@ async function parseAgent(path, agent, options, agentOptions) {
134
134
  });
135
135
  }
136
136
  const model = agent.model && typeof options?.model === "function"
137
- ? await options.model(agent.model)
137
+ ? await options.model({ ...options.aigne?.model, ...(0, type_utils_js_1.omitBy)(agent.model, (v) => (0, type_utils_js_1.isNil)(v)) })
138
138
  : undefined;
139
139
  const imageModel = agent.imageModel && typeof options?.imageModel === "function"
140
- ? await options.imageModel(agent.imageModel)
140
+ ? await options.imageModel({
141
+ ...options.aigne?.imageModel,
142
+ ...(0, type_utils_js_1.omitBy)(agent.imageModel, (v) => (0, type_utils_js_1.isNil)(v)),
143
+ })
141
144
  : undefined;
142
145
  const baseOptions = {
143
146
  ...agentOptions,
@@ -35,18 +35,21 @@ declare const chatModelObjectSchema: z.ZodObject<{
35
35
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
36
36
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
37
37
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
38
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
38
39
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
39
40
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
40
41
  temperature: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
41
42
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
42
43
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
43
44
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
45
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
44
46
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
45
47
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
46
48
  temperature: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
47
49
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
48
50
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
49
51
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
52
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
50
53
  }, z.ZodTypeAny, "passthrough">>;
51
54
  export declare const chatModelSchema: typeof chatModelObjectSchema;
52
55
  declare const imageModelObjectSchema: z.ZodObject<{
@@ -67,13 +67,25 @@ const chatModelObjectSchema = camelizeSchema(zod_1.z
67
67
  topP: optionalize(zod_1.z.number().min(0)),
68
68
  frequencyPenalty: optionalize(zod_1.z.number().min(-2).max(2)),
69
69
  presencePenalty: optionalize(zod_1.z.number().min(-2).max(2)),
70
+ thinkingEffort: optionalize(zod_1.z.union([
71
+ zod_1.z.number().int(),
72
+ zod_1.z.literal("high"),
73
+ zod_1.z.literal("medium"),
74
+ zod_1.z.literal("low"),
75
+ zod_1.z.literal("minimal"),
76
+ ])),
70
77
  })
71
78
  .passthrough());
72
79
  exports.chatModelSchema = zod_1.z
73
80
  .preprocess((v) => {
74
81
  if (!(0, type_utils_js_1.isRecord)(v))
75
82
  return v;
76
- return { ...v, model: v.model || `${v.provider || ""}:${v.name || ""}` };
83
+ return {
84
+ ...v,
85
+ model: v.model ||
86
+ (v.provider && v.name ? `${v.provider || ""}:${v.name || ""}` : undefined) ||
87
+ undefined,
88
+ };
77
89
  }, zod_1.z.union([zod_1.z.string(), chatModelObjectSchema]))
78
90
  .transform((v) => typeof v === "string" ? { model: v } : v);
79
91
  const imageModelObjectSchema = camelizeSchema(zod_1.z
@@ -388,6 +388,7 @@ export interface ChatModelInputOptions {
388
388
  parallelToolCalls?: boolean;
389
389
  modalities?: Modality[];
390
390
  preferInputFileType?: "file" | "url";
391
+ reasoningEffort?: number | "minimal" | "low" | "medium" | "high";
391
392
  }
392
393
  /**
393
394
  * Output message format for ChatModel
@@ -18,6 +18,7 @@ export interface LoadOptions {
18
18
  create: (options?: Record<string, any>) => PromiseOrValue<AFSModule>;
19
19
  }[];
20
20
  };
21
+ aigne?: z.infer<typeof aigneFileSchema>;
21
22
  }
22
23
  export declare function load(path: string, options?: LoadOptions): Promise<AIGNEOptions>;
23
24
  export declare function loadAgent(path: string, options?: LoadOptions, agentOptions?: AgentOptions): Promise<Agent>;
@@ -37,12 +38,14 @@ declare const aigneFileSchema: z.ZodObject<{
37
38
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
38
39
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
39
40
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
41
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
40
42
  }, z.ZodTypeAny, "passthrough"> | undefined, z.ZodTypeDef, z.objectInputType<{
41
43
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
42
44
  temperature: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
43
45
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
44
46
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
45
47
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
48
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
46
49
  }, z.ZodTypeAny, "passthrough"> | undefined>;
47
50
  imageModel: ZodType<z.objectInputType<{
48
51
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
@@ -70,6 +73,7 @@ declare const aigneFileSchema: z.ZodObject<{
70
73
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
71
74
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
72
75
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
76
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
73
77
  }, z.ZodTypeAny, "passthrough"> | undefined;
74
78
  name?: string | undefined;
75
79
  description?: string | undefined;
@@ -92,6 +96,7 @@ declare const aigneFileSchema: z.ZodObject<{
92
96
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
93
97
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
94
98
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
99
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
95
100
  }, z.ZodTypeAny, "passthrough"> | undefined;
96
101
  name?: string | undefined;
97
102
  description?: string | undefined;
@@ -35,18 +35,21 @@ declare const chatModelObjectSchema: z.ZodObject<{
35
35
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
36
36
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
37
37
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
38
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
38
39
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
39
40
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
40
41
  temperature: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
41
42
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
42
43
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
43
44
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
45
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
44
46
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
45
47
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
46
48
  temperature: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
47
49
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
48
50
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
49
51
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
52
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
50
53
  }, z.ZodTypeAny, "passthrough">>;
51
54
  export declare const chatModelSchema: typeof chatModelObjectSchema;
52
55
  declare const imageModelObjectSchema: z.ZodObject<{
@@ -305,7 +305,7 @@ export class AIAgent extends Agent {
305
305
  }
306
306
  const { toolCalls, json, text, files } = modelOutput;
307
307
  if (toolCalls?.length) {
308
- if (!this.keepTextInToolUses) {
308
+ if (this.keepTextInToolUses !== true) {
309
309
  yield { delta: { json: { [outputKey]: "" } } };
310
310
  }
311
311
  else {
@@ -388,6 +388,7 @@ export interface ChatModelInputOptions {
388
388
  parallelToolCalls?: boolean;
389
389
  modalities?: Modality[];
390
390
  preferInputFileType?: "file" | "url";
391
+ reasoningEffort?: number | "minimal" | "low" | "medium" | "high";
391
392
  }
392
393
  /**
393
394
  * Output message format for ChatModel
@@ -299,6 +299,15 @@ const modelOptionsSchema = z.object({
299
299
  presencePenalty: z.number().optional(),
300
300
  parallelToolCalls: z.boolean().optional().default(true),
301
301
  modalities: z.array(z.enum(["text", "image", "audio"])).optional(),
302
+ reasoningEffort: z
303
+ .union([
304
+ z.number(),
305
+ z.literal("minimal"),
306
+ z.literal("low"),
307
+ z.literal("medium"),
308
+ z.literal("high"),
309
+ ])
310
+ .optional(),
302
311
  });
303
312
  const chatModelOptionsSchema = agentOptionsSchema.extend({
304
313
  model: z.string().optional(),
@@ -118,6 +118,7 @@ export async function parseAgentFile(path, data) {
118
118
  toolChoice: optionalize(z.nativeEnum(AIAgentToolChoice)),
119
119
  toolCallsConcurrency: optionalize(z.number().int().min(0)),
120
120
  keepTextInToolUses: optionalize(z.boolean()),
121
+ catchToolsError: optionalize(z.boolean()),
121
122
  structuredStreamMode: optionalize(z.boolean()),
122
123
  })
123
124
  .extend(baseAgentSchema.shape),
@@ -18,6 +18,7 @@ export interface LoadOptions {
18
18
  create: (options?: Record<string, any>) => PromiseOrValue<AFSModule>;
19
19
  }[];
20
20
  };
21
+ aigne?: z.infer<typeof aigneFileSchema>;
21
22
  }
22
23
  export declare function load(path: string, options?: LoadOptions): Promise<AIGNEOptions>;
23
24
  export declare function loadAgent(path: string, options?: LoadOptions, agentOptions?: AgentOptions): Promise<Agent>;
@@ -37,12 +38,14 @@ declare const aigneFileSchema: z.ZodObject<{
37
38
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
38
39
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
39
40
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
41
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
40
42
  }, z.ZodTypeAny, "passthrough"> | undefined, z.ZodTypeDef, z.objectInputType<{
41
43
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
42
44
  temperature: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
43
45
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
44
46
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
45
47
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
48
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
46
49
  }, z.ZodTypeAny, "passthrough"> | undefined>;
47
50
  imageModel: ZodType<z.objectInputType<{
48
51
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
@@ -70,6 +73,7 @@ declare const aigneFileSchema: z.ZodObject<{
70
73
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
71
74
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
72
75
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
76
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
73
77
  }, z.ZodTypeAny, "passthrough"> | undefined;
74
78
  name?: string | undefined;
75
79
  description?: string | undefined;
@@ -92,6 +96,7 @@ declare const aigneFileSchema: z.ZodObject<{
92
96
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
93
97
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
94
98
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
99
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
95
100
  }, z.ZodTypeAny, "passthrough"> | undefined;
96
101
  name?: string | undefined;
97
102
  description?: string | undefined;
@@ -10,7 +10,7 @@ import { TeamAgent } from "../agents/team-agent.js";
10
10
  import { TransformAgent } from "../agents/transform-agent.js";
11
11
  import { PromptBuilder } from "../prompt/prompt-builder.js";
12
12
  import { ChatMessagesTemplate, parseChatMessages } from "../prompt/template.js";
13
- import { flat, isNonNullable, tryOrThrow } from "../utils/type-utils.js";
13
+ import { flat, isNil, isNonNullable, omitBy, tryOrThrow, } from "../utils/type-utils.js";
14
14
  import { loadAgentFromJsFile } from "./agent-js.js";
15
15
  import { loadAgentFromYamlFile } from "./agent-yaml.js";
16
16
  import { camelizeSchema, chatModelSchema, imageModelSchema, optionalize } from "./schema.js";
@@ -25,7 +25,7 @@ export async function load(path, options = {}) {
25
25
  const allAgentPaths = new Set(flat(aigne.agents, aigne.skills, aigne.mcpServer?.agents, aigne.cli?.chat, aigne.cli?.agents?.flatMap((i) => (typeof i === "string" ? i : flatCliAgents(i)))).map((i) => nodejs.path.join(rootDir, i)));
26
26
  const allAgents = {};
27
27
  for (const path of allAgentPaths) {
28
- allAgents[path] = await loadAgent(path, options);
28
+ allAgents[path] = await loadAgent(path, { ...options, aigne });
29
29
  }
30
30
  const pickAgent = (path) => allAgents[nodejs.path.join(rootDir, path)];
31
31
  const pickAgents = (paths) => paths.map((filename) => pickAgent(filename)).filter(isNonNullable);
@@ -129,10 +129,13 @@ async function parseAgent(path, agent, options, agentOptions) {
129
129
  });
130
130
  }
131
131
  const model = agent.model && typeof options?.model === "function"
132
- ? await options.model(agent.model)
132
+ ? await options.model({ ...options.aigne?.model, ...omitBy(agent.model, (v) => isNil(v)) })
133
133
  : undefined;
134
134
  const imageModel = agent.imageModel && typeof options?.imageModel === "function"
135
- ? await options.imageModel(agent.imageModel)
135
+ ? await options.imageModel({
136
+ ...options.aigne?.imageModel,
137
+ ...omitBy(agent.imageModel, (v) => isNil(v)),
138
+ })
136
139
  : undefined;
137
140
  const baseOptions = {
138
141
  ...agentOptions,
@@ -35,18 +35,21 @@ declare const chatModelObjectSchema: z.ZodObject<{
35
35
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
36
36
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
37
37
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
38
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
38
39
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
39
40
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
40
41
  temperature: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
41
42
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
42
43
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
43
44
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
45
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
44
46
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
45
47
  model: ZodType<string | undefined, z.ZodTypeDef, string | undefined>;
46
48
  temperature: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
47
49
  topP: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
48
50
  frequencyPenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
49
51
  presencePenalty: ZodType<number | undefined, z.ZodTypeDef, number | undefined>;
52
+ thinkingEffort: ZodType<number | "high" | "medium" | "low" | "minimal" | undefined, z.ZodTypeDef, number | "high" | "medium" | "low" | "minimal" | undefined>;
50
53
  }, z.ZodTypeAny, "passthrough">>;
51
54
  export declare const chatModelSchema: typeof chatModelObjectSchema;
52
55
  declare const imageModelObjectSchema: z.ZodObject<{
@@ -61,13 +61,25 @@ const chatModelObjectSchema = camelizeSchema(z
61
61
  topP: optionalize(z.number().min(0)),
62
62
  frequencyPenalty: optionalize(z.number().min(-2).max(2)),
63
63
  presencePenalty: optionalize(z.number().min(-2).max(2)),
64
+ thinkingEffort: optionalize(z.union([
65
+ z.number().int(),
66
+ z.literal("high"),
67
+ z.literal("medium"),
68
+ z.literal("low"),
69
+ z.literal("minimal"),
70
+ ])),
64
71
  })
65
72
  .passthrough());
66
73
  export const chatModelSchema = z
67
74
  .preprocess((v) => {
68
75
  if (!isRecord(v))
69
76
  return v;
70
- return { ...v, model: v.model || `${v.provider || ""}:${v.name || ""}` };
77
+ return {
78
+ ...v,
79
+ model: v.model ||
80
+ (v.provider && v.name ? `${v.provider || ""}:${v.name || ""}` : undefined) ||
81
+ undefined,
82
+ };
71
83
  }, z.union([z.string(), chatModelObjectSchema]))
72
84
  .transform((v) => typeof v === "string" ? { model: v } : v);
73
85
  const imageModelObjectSchema = camelizeSchema(z
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aigne/core",
3
- "version": "1.65.0-beta.2",
3
+ "version": "1.65.0-beta.4",
4
4
  "description": "The functional core of agentic AI",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -93,7 +93,7 @@
93
93
  "zod-to-json-schema": "^3.24.6",
94
94
  "@aigne/afs": "^1.1.1-beta",
95
95
  "@aigne/platform-helpers": "^0.6.3",
96
- "@aigne/observability-api": "^0.11.3"
96
+ "@aigne/observability-api": "^0.11.4-beta.1"
97
97
  },
98
98
  "devDependencies": {
99
99
  "@types/bun": "^1.2.22",