@caretakerai/agent 0.0.18 → 0.0.20
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/agent.d.ts +6 -2
- package/dist/agent.js +49 -26
- package/dist/agent.js.map +1 -1
- package/package.json +1 -1
package/dist/agent.d.ts
CHANGED
|
@@ -2,10 +2,10 @@ import { Logger } from 'pino';
|
|
|
2
2
|
import { PromptTemplate } from '@langchain/core/prompts';
|
|
3
3
|
import { BaseLanguageModel } from '@langchain/core/language_models/base';
|
|
4
4
|
import type { TypeSource, IResolvers } from '@graphql-tools/utils';
|
|
5
|
-
import { GraphQLSchema } from 'graphql';
|
|
5
|
+
import { ExecutionResult, GraphQLSchema } from 'graphql';
|
|
6
6
|
import { Activity } from './activity';
|
|
7
7
|
import { Optimizer } from './types';
|
|
8
|
-
type GraphQLExecutor = (query: string) => Promise<
|
|
8
|
+
type GraphQLExecutor = (query: string) => Promise<ExecutionResult>;
|
|
9
9
|
interface AgentPrams {
|
|
10
10
|
name: string;
|
|
11
11
|
description: string;
|
|
@@ -26,6 +26,10 @@ interface AgentPrams {
|
|
|
26
26
|
stop?: string[];
|
|
27
27
|
logger?: Logger;
|
|
28
28
|
}
|
|
29
|
+
export declare class AgentRetryError extends Error {
|
|
30
|
+
errors: Error[];
|
|
31
|
+
constructor(message: string, errors: Error[]);
|
|
32
|
+
}
|
|
29
33
|
export declare class Agent implements AgentPrams {
|
|
30
34
|
name: string;
|
|
31
35
|
description: string;
|
package/dist/agent.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Agent = void 0;
|
|
6
|
+
exports.Agent = exports.AgentRetryError = void 0;
|
|
7
7
|
const dedent_1 = __importDefault(require("dedent"));
|
|
8
8
|
const yaml_1 = require("yaml");
|
|
9
9
|
const pino_1 = __importDefault(require("pino"));
|
|
@@ -13,6 +13,14 @@ const graphql_1 = require("graphql");
|
|
|
13
13
|
const constants_1 = require("./constants");
|
|
14
14
|
const activity_1 = require("./activity");
|
|
15
15
|
const messages_1 = require("@langchain/core/messages");
|
|
16
|
+
class AgentRetryError extends Error {
|
|
17
|
+
errors;
|
|
18
|
+
constructor(message, errors) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.errors = errors;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.AgentRetryError = AgentRetryError;
|
|
16
24
|
class Agent {
|
|
17
25
|
name;
|
|
18
26
|
description;
|
|
@@ -98,36 +106,43 @@ class Agent {
|
|
|
98
106
|
}
|
|
99
107
|
async prompt(params) {
|
|
100
108
|
let activities = [];
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
109
|
+
const retryErrors = [];
|
|
110
|
+
for (let i = 0; i < this.maxRetries; ++i) {
|
|
111
|
+
const history = await this.optimizer.optimize(this.history);
|
|
112
|
+
const messages = [];
|
|
113
|
+
let aiActivities = [];
|
|
114
|
+
history.forEach(activity => {
|
|
115
|
+
if (activity.kind === activity_1.ActivityKind.Observation) {
|
|
116
|
+
aiActivities.length && messages.push(new messages_1.AIMessage(aiActivities.map(a => a.prompt()).join(constants_1.ACTIVITY_SEP)));
|
|
117
|
+
aiActivities = [];
|
|
118
|
+
messages.push(new messages_1.HumanMessage(activity.prompt()));
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
aiActivities.push(activity);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
if (aiActivities.length) {
|
|
106
125
|
messages.push(new messages_1.AIMessage(aiActivities.map(a => a.prompt()).join(constants_1.ACTIVITY_SEP)));
|
|
107
|
-
aiActivities = [];
|
|
108
|
-
messages.push(new messages_1.HumanMessage(activity.prompt()));
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
aiActivities.push(activity);
|
|
112
126
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
examples: async () => this.examples.map(h => h.prompt()).join(constants_1.ACTIVITY_SEP),
|
|
122
|
-
});
|
|
123
|
-
const { value: systemPromptValue } = await systemPrompt.invoke(params ?? {});
|
|
124
|
-
for (let i = 0; i < this.maxRetries; ++i) {
|
|
125
|
-
let { content } = await this.llm
|
|
127
|
+
const systemPrompt = await this.template.partial({
|
|
128
|
+
objective: this.objective,
|
|
129
|
+
schema: this.typeDefs.toString(),
|
|
130
|
+
instruction: this.instruction,
|
|
131
|
+
examples: async () => this.examples.map(h => h.prompt()).join(constants_1.ACTIVITY_SEP),
|
|
132
|
+
});
|
|
133
|
+
const { value: systemPromptValue } = await systemPrompt.invoke(params ?? {});
|
|
134
|
+
const res = await this.llm
|
|
126
135
|
.bind({ stop: [`<${activity_1.ActivityKind.Observation}>`] })
|
|
127
136
|
.invoke([
|
|
128
137
|
new messages_1.SystemMessage(systemPromptValue),
|
|
129
138
|
...messages
|
|
130
139
|
]);
|
|
140
|
+
let { content } = res;
|
|
141
|
+
const { response_metadata } = res;
|
|
142
|
+
if (response_metadata?.finish_reason == 'length') {
|
|
143
|
+
retryErrors.push(new Error('Generation finished due to length reason.'));
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
131
146
|
[, content] = content.split(`<${activity_1.ActivityKind.Thought}>`);
|
|
132
147
|
content = `<${activity_1.ActivityKind.Thought}>` + content;
|
|
133
148
|
[content] = content.split(`</${activity_1.ActivityKind.Action}>`);
|
|
@@ -147,12 +162,14 @@ class Agent {
|
|
|
147
162
|
catch (e) {
|
|
148
163
|
const err = e;
|
|
149
164
|
this.logger.warn(err.message);
|
|
165
|
+
retryErrors.push(err);
|
|
150
166
|
this.logger.debug(`Retry ${i + 1} due to malformed output: ${err.message}`);
|
|
151
167
|
continue;
|
|
152
168
|
}
|
|
153
169
|
const activity = activities.at(-1);
|
|
154
170
|
if (activity.kind === activity_1.ActivityKind.Thought) {
|
|
155
171
|
this.logger.debug(`Retry ${i + 1} due to missing action`);
|
|
172
|
+
retryErrors.push(new Error('Missing action'));
|
|
156
173
|
continue;
|
|
157
174
|
}
|
|
158
175
|
try {
|
|
@@ -164,6 +181,10 @@ class Agent {
|
|
|
164
181
|
kind: activity_1.ActivityKind.Observation,
|
|
165
182
|
input: (0, yaml_1.stringify)(result),
|
|
166
183
|
}));
|
|
184
|
+
if (result.errors) {
|
|
185
|
+
retryErrors.push(...result.errors);
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
167
188
|
return;
|
|
168
189
|
}
|
|
169
190
|
catch (e) {
|
|
@@ -174,11 +195,13 @@ class Agent {
|
|
|
174
195
|
}));
|
|
175
196
|
this.addActivities(...activities);
|
|
176
197
|
activities = [];
|
|
177
|
-
|
|
198
|
+
const message = `Retry ${i + 1} due to action error: ${err}`;
|
|
199
|
+
this.logger.debug(message);
|
|
200
|
+
retryErrors.push(err);
|
|
178
201
|
continue;
|
|
179
202
|
}
|
|
180
203
|
}
|
|
181
|
-
throw new
|
|
204
|
+
throw new AgentRetryError('Max number of retries reached.', retryErrors);
|
|
182
205
|
}
|
|
183
206
|
async invoke(params) {
|
|
184
207
|
if (!this.history.length) {
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,+BAAiC;AACjC,gDAAoC;AAEpC,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|