@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 +28 -0
- package/lib/cjs/agents/ai-agent.js +1 -1
- package/lib/cjs/agents/chat-model.d.ts +1 -0
- package/lib/cjs/agents/chat-model.js +9 -0
- package/lib/cjs/loader/agent-yaml.js +1 -0
- package/lib/cjs/loader/index.d.ts +5 -0
- package/lib/cjs/loader/index.js +6 -3
- package/lib/cjs/loader/schema.d.ts +3 -0
- package/lib/cjs/loader/schema.js +13 -1
- package/lib/dts/agents/chat-model.d.ts +1 -0
- package/lib/dts/loader/index.d.ts +5 -0
- package/lib/dts/loader/schema.d.ts +3 -0
- package/lib/esm/agents/ai-agent.js +1 -1
- package/lib/esm/agents/chat-model.d.ts +1 -0
- package/lib/esm/agents/chat-model.js +9 -0
- package/lib/esm/loader/agent-yaml.js +1 -0
- package/lib/esm/loader/index.d.ts +5 -0
- package/lib/esm/loader/index.js +7 -4
- package/lib/esm/loader/schema.d.ts +3 -0
- package/lib/esm/loader/schema.js +13 -1
- package/package.json +2 -2
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 (
|
|
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;
|
package/lib/cjs/loader/index.js
CHANGED
|
@@ -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(
|
|
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<{
|
package/lib/cjs/loader/schema.js
CHANGED
|
@@ -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 {
|
|
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 (
|
|
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;
|
package/lib/esm/loader/index.js
CHANGED
|
@@ -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(
|
|
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<{
|
package/lib/esm/loader/schema.js
CHANGED
|
@@ -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 {
|
|
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.
|
|
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.
|
|
96
|
+
"@aigne/observability-api": "^0.11.4-beta.1"
|
|
97
97
|
},
|
|
98
98
|
"devDependencies": {
|
|
99
99
|
"@types/bun": "^1.2.22",
|