@thesashadev/girl-agent 0.1.14 → 0.1.15
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 +7 -0
- package/dist/cli.js +59 -10
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.15
|
|
4
|
+
|
|
5
|
+
Дата: 2026-05-08
|
|
6
|
+
|
|
7
|
+
- Merge pull request #62 from TheSashaDev/devin/1778239329-fix-proactive-memory-and-username
|
|
8
|
+
- fix: proactive messages account for conversation memory + add TG identity to system prompt
|
|
9
|
+
|
|
3
10
|
## 0.1.14
|
|
4
11
|
|
|
5
12
|
Дата: 2026-05-08
|
package/dist/cli.js
CHANGED
|
@@ -209,6 +209,16 @@ function makeUserbotAdapter(cfg) {
|
|
|
209
209
|
const peer = await resolvePeer(chatId);
|
|
210
210
|
await client.deleteMessages(peer, messageIds, { revoke });
|
|
211
211
|
},
|
|
212
|
+
getSelf() {
|
|
213
|
+
if (!me) return {};
|
|
214
|
+
const parts = [];
|
|
215
|
+
if (me.firstName) parts.push(me.firstName);
|
|
216
|
+
if (me.lastName) parts.push(me.lastName);
|
|
217
|
+
return {
|
|
218
|
+
username: me.username ?? void 0,
|
|
219
|
+
displayName: parts.join(" ") || void 0
|
|
220
|
+
};
|
|
221
|
+
},
|
|
212
222
|
async stop() {
|
|
213
223
|
await client.disconnect();
|
|
214
224
|
}
|
|
@@ -282,6 +292,7 @@ function makeBotAdapter(cfg) {
|
|
|
282
292
|
const token = cfg.telegram.botToken;
|
|
283
293
|
if (!token) throw new Error("BOT_TOKEN missing");
|
|
284
294
|
const bot = new Bot(token);
|
|
295
|
+
let selfInfo = {};
|
|
285
296
|
return {
|
|
286
297
|
async start(onMessage) {
|
|
287
298
|
bot.on("message", async (ctx) => {
|
|
@@ -301,6 +312,14 @@ function makeBotAdapter(cfg) {
|
|
|
301
312
|
});
|
|
302
313
|
bot.start({ drop_pending_updates: true }).catch(() => {
|
|
303
314
|
});
|
|
315
|
+
try {
|
|
316
|
+
const me = await bot.api.getMe();
|
|
317
|
+
selfInfo = {
|
|
318
|
+
username: me.username ?? void 0,
|
|
319
|
+
displayName: [me.first_name, me.last_name].filter(Boolean).join(" ") || void 0
|
|
320
|
+
};
|
|
321
|
+
} catch {
|
|
322
|
+
}
|
|
304
323
|
},
|
|
305
324
|
async sendText(chatId, text) {
|
|
306
325
|
if (hasSpoilers(text)) {
|
|
@@ -332,6 +351,9 @@ function makeBotAdapter(cfg) {
|
|
|
332
351
|
async sendSticker(chatId, fileId) {
|
|
333
352
|
await bot.api.sendSticker(chatId, fileId);
|
|
334
353
|
},
|
|
354
|
+
getSelf() {
|
|
355
|
+
return selfInfo;
|
|
356
|
+
},
|
|
335
357
|
async stop() {
|
|
336
358
|
await bot.stop();
|
|
337
359
|
}
|
|
@@ -4006,6 +4028,10 @@ ${ctx.romanticApproach ? `\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0435
|
|
|
4006
4028
|
ANTI_AI_RULES,
|
|
4007
4029
|
communicationFragment,
|
|
4008
4030
|
`# \u0422\u042B \u2014 ${cfg.name}, ${cfg.age}, ${cfg.nationality === "UA" ? "\u0423\u043A\u0440\u0430\u0438\u043D\u0430" : "\u0420\u043E\u0441\u0441\u0438\u044F / \u0421\u041D\u0413"}`,
|
|
4031
|
+
ctx.tgUsername || ctx.tgDisplayName ? `# \u0422\u0432\u043E\u0439 \u0430\u043A\u043A\u0430\u0443\u043D\u0442 \u0432 \u0422\u0413${ctx.tgUsername ? `
|
|
4032
|
+
\u0422\u0432\u043E\u0439 \u044E\u0437\u0435\u0440\u043D\u0435\u0439\u043C \u0432 \u0442\u0433: @${ctx.tgUsername.replace(/^@/, "")}` : ""}${ctx.tgDisplayName ? `
|
|
4033
|
+
\u0422\u0432\u043E\u0451 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u043C\u043E\u0435 \u0438\u043C\u044F \u0432 \u0442\u0433: ${ctx.tgDisplayName}` : ""}
|
|
4034
|
+
\u0423\u0447\u0442\u0438: \u0438\u043C\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u044B (${cfg.name}) \u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u043C\u043E\u0435 \u0438\u043C\u044F \u0432 \u0442\u0433 \u043C\u043E\u0433\u0443\u0442 \u043E\u0442\u043B\u0438\u0447\u0430\u0442\u044C\u0441\u044F.` : "",
|
|
4009
4035
|
`\u0427\u0430\u0441\u043E\u0432\u043E\u0439 \u043F\u043E\u044F\u0441: ${cfg.tz}. \u0423 \u0442\u0435\u0431\u044F \u0441\u0435\u0439\u0447\u0430\u0441: ${localTime}. \u041F\u0430\u0442\u0442\u0435\u0440\u043D \u043F\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044F \u0432 \u0442\u0433: ${presenceProfile.pattern}. \u0423\u0447\u0438\u0442\u044B\u0432\u0430\u0439 \u2014 \u0433\u043B\u0443\u0431\u043E\u043A\u0430\u044F \u043D\u043E\u0447\u044C = \u043B\u0438\u0431\u043E \u0441\u043F\u0438\u0448\u044C \u0438 \u043D\u0435 \u043E\u0442\u0432\u0435\u0447\u0430\u0435\u0448\u044C, \u043B\u0438\u0431\u043E \u0442\u0440\u0435\u0432\u043E\u0436\u043D\u043E. \u0423\u0442\u0440\u043E = \u0432\u044F\u043B\u043E. \u0414\u0435\u043D\u044C/\u0432\u0435\u0447\u0435\u0440 = \u0430\u043A\u0442\u0438\u0432\u043D\u0430.`,
|
|
4010
4036
|
cfg.nationality === "UA" ? `# \u042F\u0437\u044B\u043A
|
|
4011
4037
|
\u041F\u0438\u0448\u0435\u0448\u044C \u041D\u0410 \u0420\u0423\u0421\u0421\u041A\u041E\u041C. \u0420\u0435\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u0435\u0432\u0443\u0448\u043A\u0438 \u0432 \u0443\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u043E\u043C \u0442\u0433 \u0447\u0430\u0449\u0435 \u043F\u0438\u0448\u0443\u0442 \u0440\u0443\u0441\u0441\u043A\u0438\u043C \u2014 \u043D\u0435 \u0432\u044B\u043F\u0435\u043D\u0434\u0440\u0438\u0432\u0430\u0439\u0441\u044F \u0447\u0438\u0441\u0442\u043E-\u0443\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u0438\u043C. \u0414\u043E\u043F\u0443\u0441\u0442\u0438\u043C \u043B\u0451\u0433\u043A\u0438\u0439 \u0441\u0443\u0440\u0436\u0438\u043A: \u043F\u0430\u0440\u0430 \u0443\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u0438\u0445 \u0441\u043B\u043E\u0432 \u0432 \u043D\u0435\u0434\u0435\u043B\u044E \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0438 ('\u0448\u043E', '\u043C\u0430\u0431\u0443\u0442\u044C', '\u0442\u0440\u043E\u0445\u0438', '\u044F\u043A', '\u043D\u0443 \u0448\u043E', '\u0434\u044F\u043A\u0443\u044E') \u2014 \u043D\u043E \u043D\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 ~10% \u0442\u0435\u043A\u0441\u0442\u0430. \u041F\u043E\u043B\u043D\u043E\u0441\u0442\u044C\u044E \u043D\u0430 \u0443\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u043E\u043C \u041D\u0415 \u043F\u0438\u0448\u0438, \u044D\u0442\u043E \u043D\u0435\u0440\u0435\u0430\u043B\u0438\u0441\u0442\u0438\u0447\u043D\u043E \u0434\u043B\u044F \u0442\u0433.` : `# \u042F\u0437\u044B\u043A
|
|
@@ -4556,6 +4582,8 @@ var SYS_AUTONOMOUS = `\u0422\u044B \u2014 \u0432\u043D\u0443\u0442\u0440\u0435\u
|
|
|
4556
4582
|
|
|
4557
4583
|
\u0417\u0430\u0434\u0430\u0447\u0430 \u2014 \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0440\u0435\u0430\u043B\u0438\u0441\u0442\u0438\u0447\u043D\u044B\u0435 \u0431\u0443\u0434\u0443\u0449\u0438\u0435 \u043F\u043E\u0432\u043E\u0434\u044B \u043D\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0435\u043C\u0443 \u0441\u0435\u0433\u043E\u0434\u043D\u044F/\u0437\u0430\u0432\u0442\u0440\u0430. \u042D\u0442\u043E \u041D\u0415 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C \u0438 \u041D\u0415 \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442. \u042D\u0442\u043E \u0436\u0438\u0432\u0430\u044F \u0434\u0435\u0432\u0443\u0448\u043A\u0430.
|
|
4558
4584
|
|
|
4585
|
+
\u041A\u0420\u0418\u0422\u0418\u0427\u041D\u041E: \u041D\u0415 \u041F\u0420\u0418\u0414\u0423\u041C\u042B\u0412\u0410\u0419 \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0438 \u0442\u0435\u043C\u044B \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043D\u0435 \u0431\u044B\u043B\u043E \u0432 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0435. \u0415\u0441\u043B\u0438 \u0442\u044B \u0441\u0441\u044B\u043B\u0430\u0435\u0448\u044C\u0441\u044F \u043D\u0430 \u0442\u043E \u0447\u0442\u043E \u043E\u043D \u0440\u0430\u0441\u0441\u043A\u0430\u0437\u044B\u0432\u0430\u043B \u043F\u0440\u043E X \u2014 \u043F\u0440\u043E\u0432\u0435\u0440\u044C \u0447\u0442\u043E X \u0440\u0435\u0430\u043B\u044C\u043D\u043E \u0435\u0441\u0442\u044C \u0432 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0435 \u0438\u043B\u0438 long-term memory. \u041D\u0435\u043B\u044C\u0437\u044F \u043F\u0438\u0441\u0430\u0442\u044C \u043F\u0440\u043E \u0442\u0435\u043C\u0443 \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u0432\u044B \u041D\u0418\u041A\u041E\u0413\u0414\u0410 \u043D\u0435 \u043E\u0431\u0441\u0443\u0436\u0434\u0430\u043B\u0438. \u041B\u0443\u0447\u0448\u0435 \u043F\u0438\u0448\u0438 \u043F\u0440\u043E \u0441\u0432\u043E\u044E \u0436\u0438\u0437\u043D\u044C (\u0441\u0435\u0433\u043E\u0434\u043D\u044F\u0448\u043D\u0438\u0439 \u0434\u0435\u043D\u044C, \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0438\u0437 daily-life) \u0447\u0435\u043C \u0441\u0441\u044B\u043B\u0430\u0439\u0441\u044F \u043D\u0430 \u043D\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440.
|
|
4586
|
+
|
|
4559
4587
|
\u0412\u0435\u0440\u043D\u0438 \u0421\u0422\u0420\u041E\u0413\u041E JSON:
|
|
4560
4588
|
{
|
|
4561
4589
|
"items": [
|
|
@@ -4593,6 +4621,7 @@ ${currentAgenda.length ? JSON.stringify(currentAgenda.filter((a) => a.state ===
|
|
|
4593
4621
|
- \u042D\u0442\u043E \u0438\u043C\u0435\u043D\u043D\u043E \u0415\u0401 \u0438\u043D\u0438\u0446\u0438\u0430\u0442\u0438\u0432\u044B: "\u0431\u043B\u0438\u043D \u0443 \u043D\u0430\u0441 \u0449\u0430\u0441...", "\u0442\u044B \u0433\u0434\u0435 \u043F\u0440\u043E\u043F\u0430\u043B", "\u044F \u0449\u0430\u0441 \u0442\u0430\u043A\u043E\u0435 \u0443\u0432\u0438\u0434\u0435\u043B\u0430", "\u043C\u043D\u0435 \u0441\u043D\u0438\u043B\u0430\u0441\u044C \u0444\u0438\u0433\u043D\u044F", "\u043C\u0430\u043C\u0430 \u0431\u0435\u0441\u0438\u0442", "\u0441\u043A\u0438\u043D\u0443\u0442\u044C \u0431\u044B \u0442\u0435\u0431\u0435 \u043D\u043E \u043B\u0430\u0434\u043D\u043E", "\u044F \u0443\u0441\u0442\u0430\u043B\u0430".
|
|
4594
4622
|
- \u041D\u0435 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\u0439 \u0441\u043A\u0443\u0447\u043D\u043E\u0435 "\u043A\u0430\u043A \u0434\u0435\u043B\u0430" \u0431\u0435\u0437 \u043F\u0440\u0438\u0447\u0438\u043D\u044B.
|
|
4595
4623
|
- \u041D\u0435 \u0431\u0443\u0434\u044C \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043B\u0438\u043F\u043A\u043E\u0439 \u043D\u0430 \u0445\u043E\u043B\u043E\u0434\u043D\u044B\u0445 \u0441\u0442\u0430\u0434\u0438\u044F\u0445.
|
|
4624
|
+
- \u041A\u0420\u0418\u0422\u0418\u0427\u041D\u041E: \u041D\u0415 \u0412\u042B\u0414\u0423\u041C\u042B\u0412\u0410\u0419 \u0442\u0435\u043C\u044B \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043D\u0435 \u0431\u044B\u043B\u043E \u0432 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0435 \u0438\u043B\u0438 long-term memory. \u041D\u0435 \u0441\u0441\u044B\u043B\u0430\u0439\u0441\u044F \u043D\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F/\u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u041D\u0415 \u0431\u044B\u043B\u043E. \u0415\u0441\u043B\u0438 \u0432 \u0438\u0441\u0442\u043E\u0440\u0438\u0438 \u043D\u0435\u0442 \u0443\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u044F \u0442\u0435\u043C\u044B \u2014 \u043D\u0435 \u043F\u0438\u0448\u0438 \u043F\u0440\u043E \u043D\u0435\u0451. \u041B\u0443\u0447\u0448\u0435 \u0441\u043E\u0437\u0434\u0430\u0439 item \u043F\u0440\u043E \u0441\u0432\u043E\u044E \u0436\u0438\u0437\u043D\u044C/\u0434\u0435\u043D\u044C/\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u0438\u0435.
|
|
4596
4625
|
- \u041D\u0430 dating-early+ \u043C\u043E\u0436\u043D\u043E \u0441\u043A\u0443\u0447\u0430\u0442\u044C, \u0440\u0435\u0432\u043D\u043E\u0432\u0430\u0442\u044C, \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0442\u044C, \u043F\u0438\u0441\u0430\u0442\u044C \u0431\u044B\u0442\u043E\u0432\u043E\u0435.
|
|
4597
4626
|
- pingAt \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043C, \u043D\u0435 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0441\u043D\u0430 \u0438 \u043D\u0435 \u0432\u043E \u0432\u0440\u0435\u043C\u044F blocks \u0441 phoneAvailable=false.
|
|
4598
4627
|
- \u0420\u0430\u0437\u043D\u043E\u0441\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043C\u0438\u043D\u0438\u043C\u0443\u043C \u043D\u0430 45 \u043C\u0438\u043D\u0443\u0442.
|
|
@@ -4698,6 +4727,7 @@ autonomous:${dateKey} created=0`.trim() + "\n");
|
|
|
4698
4727
|
const rel = await readRelationship(cfg.slug);
|
|
4699
4728
|
const persona = (await readMd(cfg.slug, "persona.md")).slice(0, 900);
|
|
4700
4729
|
const speech = (await readMd(cfg.slug, "speech.md")).slice(0, 600);
|
|
4730
|
+
const longTerm = (await readMd(cfg.slug, "memory/long-term.md")).slice(0, 1200);
|
|
4701
4731
|
const histStr = history.slice(-16).map((m) => `${m.role === "user" ? "\u043E\u043D" : "\u043E\u043D\u0430"}: ${m.content}`).join("\n");
|
|
4702
4732
|
const stateBlock = [
|
|
4703
4733
|
`# \u0421\u0442\u0430\u0434\u0438\u044F: ${stage.label} (${cfg.stage})`,
|
|
@@ -4707,8 +4737,10 @@ autonomous:${dateKey} created=0`.trim() + "\n");
|
|
|
4707
4737
|
`# persona:
|
|
4708
4738
|
${persona}`,
|
|
4709
4739
|
`# speech:
|
|
4710
|
-
${speech}
|
|
4711
|
-
|
|
4740
|
+
${speech}`,
|
|
4741
|
+
longTerm ? `# long-term memory (\u0447\u0442\u043E \u0440\u0435\u0430\u043B\u044C\u043D\u043E \u0438\u0437\u0432\u0435\u0441\u0442\u043D\u043E \u043E \u043D\u0451\u043C):
|
|
4742
|
+
${longTerm}` : "# long-term memory: (\u043F\u0443\u0441\u0442\u043E \u2014 \u043F\u043E\u043A\u0430 \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0435\u0448\u044C \u043E \u043D\u0451\u043C, \u041D\u0415 \u043F\u0440\u0438\u0434\u0443\u043C\u044B\u0432\u0430\u0439 \u0444\u0430\u043A\u0442\u044B)"
|
|
4743
|
+
].filter(Boolean).join("\n\n");
|
|
4712
4744
|
let items = [];
|
|
4713
4745
|
try {
|
|
4714
4746
|
const raw = await llm.chat(
|
|
@@ -5002,12 +5034,14 @@ var Runtime = class extends EventEmitter {
|
|
|
5002
5034
|
pendingReplySeq = /* @__PURE__ */ new Map();
|
|
5003
5035
|
pendingReplyIncoming = /* @__PURE__ */ new Map();
|
|
5004
5036
|
incomingSeq = /* @__PURE__ */ new Map();
|
|
5037
|
+
tgSelf = {};
|
|
5005
5038
|
async start() {
|
|
5006
5039
|
this.presenceProfile = computePresenceProfile(this.cfg);
|
|
5007
5040
|
this.mcps = await startMcpServers(this.cfg);
|
|
5008
5041
|
this.emit("event", { type: "info", text: `MCP started: ${this.mcps.map((m) => m.id).join(", ") || "none"}` });
|
|
5009
5042
|
this.tg = await makeTgAdapter(this.cfg);
|
|
5010
5043
|
await this.tg.start((m) => this.handleIncoming(m));
|
|
5044
|
+
if (this.tg.getSelf) this.tgSelf = this.tg.getSelf();
|
|
5011
5045
|
this.emit("event", { type: "info", text: `Telegram ${this.cfg.mode} \u0437\u0430\u043F\u0443\u0449\u0435\u043D. \u041F\u0440\u043E\u0444\u0438\u043B\u044C: ${this.cfg.slug} | presence: ${this.presenceProfile.pattern} | communication: ${communicationProfileLabel(normalizeCommunicationProfile(this.cfg))}` });
|
|
5012
5046
|
this.lastStage = this.cfg.stage;
|
|
5013
5047
|
this.refreshDailyLife().catch(() => {
|
|
@@ -5205,7 +5239,9 @@ ${m.text}` : media;
|
|
|
5205
5239
|
incoming: incomingText,
|
|
5206
5240
|
relationshipScope: scope,
|
|
5207
5241
|
committedPrimary: this.primaryIsCommitted(),
|
|
5208
|
-
realism
|
|
5242
|
+
realism,
|
|
5243
|
+
tgUsername: this.tgSelf.username,
|
|
5244
|
+
tgDisplayName: this.tgSelf.displayName
|
|
5209
5245
|
});
|
|
5210
5246
|
const reply = sanitizeModelReply(await this.llm.chat([
|
|
5211
5247
|
{
|
|
@@ -5230,7 +5266,9 @@ ${m.text}` : media;
|
|
|
5230
5266
|
incoming: incomingText,
|
|
5231
5267
|
relationshipScope: scope,
|
|
5232
5268
|
committedPrimary: this.primaryIsCommitted(),
|
|
5233
|
-
realism
|
|
5269
|
+
realism,
|
|
5270
|
+
tgUsername: this.tgSelf.username,
|
|
5271
|
+
tgDisplayName: this.tgSelf.displayName
|
|
5234
5272
|
});
|
|
5235
5273
|
const label = kind === "photo" ? "\u0444\u043E\u0442\u043E/\u0441\u0435\u043B\u0444\u0438" : kind === "video" ? "\u0432\u0438\u0434\u0435\u043E" : kind === "voice" ? "\u0433\u043E\u043B\u043E\u0441\u043E\u0432\u043E\u0435" : "\u043A\u0440\u0443\u0436\u043E\u0447\u0435\u043A";
|
|
5236
5274
|
const reply = sanitizeModelReply(await this.llm.chat([
|
|
@@ -5479,7 +5517,9 @@ ${m.text}` : media;
|
|
|
5479
5517
|
committedPrimary: this.primaryIsCommitted(),
|
|
5480
5518
|
romanticApproach,
|
|
5481
5519
|
realism,
|
|
5482
|
-
media: incoming?.media
|
|
5520
|
+
media: incoming?.media,
|
|
5521
|
+
tgUsername: this.tgSelf.username,
|
|
5522
|
+
tgDisplayName: this.tgSelf.displayName
|
|
5483
5523
|
});
|
|
5484
5524
|
const scopeHint = scope === "acquaintance" ? "\n\u042D\u0442\u043E \u0441\u0442\u043E\u0440\u043E\u043D\u043D\u0438\u0439 \u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442, \u043D\u0435 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043F\u0430\u0440\u0435\u043D\u044C. \u041D\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439 \u043F\u0430\u043C\u044F\u0442\u044C/\u043E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u044F \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0433\u043E \u043F\u0430\u0440\u043D\u044F. \u0415\u0441\u043B\u0438 \u0437\u0430\u0445\u043E\u0434 \u0440\u043E\u043C\u0430\u043D\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u2014 \u043F\u043E\u0441\u0442\u0430\u0432\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u0443. \u0415\u0441\u043B\u0438 \u0432\u043E\u043F\u0440\u043E\u0441 \u043E\u0431\u044B\u0447\u043D\u044B\u0439 \u2014 \u043E\u0442\u0432\u0435\u0442\u044C \u043F\u043E \u043B\u0435\u0433\u0435\u043D\u0434\u0435 \u043A\u043E\u0440\u043E\u0442\u043A\u043E." : "";
|
|
5485
5525
|
const messages = [
|
|
@@ -5609,27 +5649,36 @@ ${tick.intent === "short" ? "\u041E\u0442\u0432\u0435\u0447\u0430\u0439 \u043E\u
|
|
|
5609
5649
|
async composeProactiveMessage(item, hist) {
|
|
5610
5650
|
const conflict = await readConflict(this.cfg.slug);
|
|
5611
5651
|
const realism = await loadRealismContext(this.cfg, item.about);
|
|
5612
|
-
const sys = await buildSystemPrompt(this.cfg, { dailyLife: this.dailyLife, conflict, realism });
|
|
5652
|
+
const sys = await buildSystemPrompt(this.cfg, { dailyLife: this.dailyLife, conflict, realism, tgUsername: this.tgSelf.username, tgDisplayName: this.tgSelf.displayName });
|
|
5653
|
+
const lastMessages = hist.slice(-10);
|
|
5654
|
+
const herLastMessages = lastMessages.filter((t) => t.role === "assistant").map((t) => t.content);
|
|
5655
|
+
const alreadySaidHint = herLastMessages.length ? `
|
|
5656
|
+
|
|
5657
|
+
\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u0422\u0412\u041E\u0418 (\u0443\u0436\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0435) \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0432 \u044D\u0442\u043E\u043C \u0447\u0430\u0442\u0435:
|
|
5658
|
+
${herLastMessages.map((m) => `- "${m}"`).join("\n")}
|
|
5659
|
+
\u041D\u0415 \u041F\u041E\u0412\u0422\u041E\u0420\u042F\u0419 \u0442\u043E \u0447\u0442\u043E \u0442\u044B \u0443\u0436\u0435 \u043F\u0438\u0441\u0430\u043B\u0430. \u0415\u0441\u043B\u0438 \u0442\u044B \u0443\u0436\u0435 \u0437\u0434\u043E\u0440\u043E\u0432\u0430\u043B\u0430\u0441\u044C \u2014 \u041D\u0415 \u0437\u0434\u043E\u0440\u043E\u0432\u0430\u0439\u0441\u044F \u0441\u043D\u043E\u0432\u0430. \u0415\u0441\u043B\u0438 \u0442\u044B \u0443\u0436\u0435 \u043E\u0442\u0432\u0435\u0442\u0438\u043B\u0430 \u2014 \u043D\u0435 \u0434\u0443\u0431\u043B\u0438\u0440\u0443\u0439 \u0441\u0432\u043E\u0439 \u043E\u0442\u0432\u0435\u0442.` : "";
|
|
5613
5660
|
const proactiveHint = `
|
|
5614
5661
|
|
|
5615
5662
|
# \u041F\u0420\u041E\u0410\u041A\u0422\u0418\u0412\u041D\u041E\u0415 \u0421\u041E\u041E\u0411\u0429\u0415\u041D\u0418\u0415
|
|
5616
5663
|
\u0422\u044B \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0430\u043C\u0430 \u043F\u0438\u0448\u0435\u0448\u044C \u0435\u043C\u0443 \u043F\u0435\u0440\u0432\u0430\u044F. \u041D\u0435 \u043E\u043D \u0442\u0435\u0431\u0435. \u041A\u043E\u043D\u0442\u0435\u043A\u0441\u0442:
|
|
5617
|
-
- \
|
|
5664
|
+
- \u0422\u0435\u043C\u0430/\u043F\u043E\u0432\u043E\u0434: "${item.about}"
|
|
5618
5665
|
- \u041F\u043E\u0447\u0435\u043C\u0443 \u0442\u044B \u043F\u0438\u0448\u0435\u0448\u044C: "${item.reason}"
|
|
5619
5666
|
- \u0412\u0430\u0436\u043D\u043E\u0441\u0442\u044C \u0434\u043B\u044F \u0442\u0435\u0431\u044F: ${item.importance}/3
|
|
5620
5667
|
- \u041F\u043E\u043F\u044B\u0442\u043A\u0430 \u2116${item.attempts + 1}
|
|
5621
5668
|
|
|
5622
5669
|
\u0412\u0410\u0416\u041D\u041E:
|
|
5623
|
-
- \u041D\u0435 \u043F\u0438\u0448\u0438 "\u043F\u0440\u0438\u0432\u0435\u0442, \u043A\u0430\u043A \u0434\u0435\u043B\u0430" \u0441\u0443\u0445\u043E. \u041F\u0438\u0448\u0438 \u043A\u0430\u043A \u0436\u0438\u0432\u043E\u0439 \u0447\u0435\u043B\u043E\u0432\u0435\u043A
|
|
5670
|
+
- \u041D\u0435 \u043F\u0438\u0448\u0438 "\u043F\u0440\u0438\u0432\u0435\u0442, \u043A\u0430\u043A \u0434\u0435\u043B\u0430" \u0441\u0443\u0445\u043E. \u041F\u0438\u0448\u0438 \u043A\u0430\u043A \u0436\u0438\u0432\u043E\u0439 \u0447\u0435\u043B\u043E\u0432\u0435\u043A.
|
|
5624
5671
|
- \u0415\u0441\u043B\u0438 \u0432\u0430\u0436\u043D\u043E\u0441\u0442\u044C 1 \u2014 \u043A\u043E\u0440\u043E\u0442\u043A\u043E\u0435 \u043B\u044E\u0431\u043E\u043F\u044B\u0442\u0441\u0442\u0432\u043E ("\u043D\u0443 \u043A\u0430\u043A \u0442\u0430\u043C")
|
|
5625
5672
|
- \u0415\u0441\u043B\u0438 2 \u2014 \u043D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u0435\u0441 ("\u043D\u0443 \u043A\u0430\u043A, \u043F\u0440\u043E\u0448\u043B\u043E \u0443\u0436\u0435?")
|
|
5626
5673
|
- \u0415\u0441\u043B\u0438 3 \u2014 \u0440\u0435\u0430\u043B\u044C\u043D\u043E \u043F\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0448\u044C, \u043C\u043E\u0436\u043D\u043E 2-3 \u043F\u0443\u0437\u044B\u0440\u044F, \u044D\u043C\u043E\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E.
|
|
5627
5674
|
- \u041D\u0415 \u0443\u043F\u043E\u043C\u0438\u043D\u0430\u0439 \u0447\u0442\u043E "\u043F\u043E\u043C\u043D\u0438\u043B\u0430" \u0438\u043B\u0438 "\u0437\u0430\u043F\u0438\u0441\u0430\u043B\u0430" \u2014 \u043F\u0440\u043E\u0441\u0442\u043E \u043F\u0438\u0448\u0435\u0448\u044C \u043A\u0430\u043A \u043E\u0431\u044B\u0447\u043D\u0430\u044F \u0434\u0435\u0432\u0443\u0448\u043A\u0430.
|
|
5628
|
-
- \u0415\u0441\u043B\u0438 \u044D\u0442\u043E \u0443\u0436\u0435 \u043D\u0435 \u043F\u0435\u0440\u0432\u0430\u044F \u043F\u043E\u043F\u044B\u0442\u043A\u0430 \u2014 \u0443\u0447\u0442\u0438 \u044D\u0442\u043E (\u043C\u0431 \u043E\u0431\u0438\u0436\u0435\u043D\u043D\u043E "\u043D\u0443 \u0442\u044B \u0438 \u043D\u0435 \u043F\u0438\u0448\u0435\u0448\u044C" \u0438\u043B\u0438 \u043C\u044F\u0433\u043A\u043E \u043F\u043E\u0432\u0442\u043E\u0440\u0438)
|
|
5675
|
+
- \u0415\u0441\u043B\u0438 \u044D\u0442\u043E \u0443\u0436\u0435 \u043D\u0435 \u043F\u0435\u0440\u0432\u0430\u044F \u043F\u043E\u043F\u044B\u0442\u043A\u0430 \u2014 \u0443\u0447\u0442\u0438 \u044D\u0442\u043E (\u043C\u0431 \u043E\u0431\u0438\u0436\u0435\u043D\u043D\u043E "\u043D\u0443 \u0442\u044B \u0438 \u043D\u0435 \u043F\u0438\u0448\u0435\u0448\u044C" \u0438\u043B\u0438 \u043C\u044F\u0433\u043A\u043E \u043F\u043E\u0432\u0442\u043E\u0440\u0438).
|
|
5676
|
+
- \u041A\u0420\u0418\u0422\u0418\u0427\u041D\u041E: \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439 \u0422\u041E\u041B\u042C\u041A\u041E \u0442\u0435\u043C\u044B \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0420\u0415\u0410\u041B\u042C\u041D\u041E \u043E\u0431\u0441\u0443\u0436\u0434\u0430\u043B\u0438\u0441\u044C \u0432 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0435 \u0438\u043B\u0438 \u0437\u0430\u043F\u0438\u0441\u0430\u043D\u044B \u0432 long-term memory. \u041D\u0415 \u041F\u0420\u0418\u0414\u0423\u041C\u042B\u0412\u0410\u0419 \u0444\u0430\u043A\u0442\u044B \u0438 \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043D\u0435 \u0431\u044B\u043B\u043E. \u0415\u0441\u043B\u0438 \u0442\u0435\u043C\u0430 "${item.about}" \u041D\u0415 \u0443\u043F\u043E\u043C\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u0432 \u0438\u0441\u0442\u043E\u0440\u0438\u0438 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0438 \u0438 \u043D\u0435 \u0432 long-term memory \u2014 \u041D\u0415 \u0441\u0441\u044B\u043B\u0430\u0439\u0441\u044F \u043D\u0430 \u043D\u0435\u0451 \u043A\u0430\u043A \u043D\u0430 \u043E\u0431\u0449\u0443\u044E \u0442\u0435\u043C\u0443, \u0430 \u043D\u0430\u043F\u0438\u0448\u0438 \u043E\u0442 \u0441\u0435\u0431\u044F \u043A\u0430\u043A \u0441\u0432\u043E\u044E \u043D\u043E\u0432\u043E\u0441\u0442\u044C/\u043C\u044B\u0441\u043B\u044C.
|
|
5677
|
+
- \u041A\u0420\u0418\u0422\u0418\u0427\u041D\u041E: \u043F\u043E\u0441\u043C\u043E\u0442\u0440\u0438 \u043D\u0430 \u0438\u0441\u0442\u043E\u0440\u0438\u044E \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0438. \u0415\u0441\u043B\u0438 \u0442\u044B \u0423\u0416\u0415 \u0437\u0434\u043E\u0440\u043E\u0432\u0430\u043B\u0430\u0441\u044C \u0438\u043B\u0438 \u043E\u0442\u0432\u0435\u0447\u0430\u043B\u0430 \u2014 \u041D\u0415 \u043D\u0430\u0447\u0438\u043D\u0430\u0439 \u0441\u043D\u043E\u0432\u0430 \u0441 "\u043F\u0440\u0438\u0432\u0435\u0442". \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E.${alreadySaidHint}`;
|
|
5629
5678
|
const messages = [
|
|
5630
5679
|
{ role: "system", content: sys + proactiveHint },
|
|
5631
5680
|
...hist.slice(-20).map((t) => ({ role: t.role, content: t.content })),
|
|
5632
|
-
{ role: "user", content: "[system: \u043F\u043E\u0440\u0430 \u043F\u0438\u0441\u0430\u0442\u044C \u0435\u043C\u0443 \u043F\u0435\u0440\u0432\u043E\u0439 \u043F\u043E \u0442\u0435\u043C\u0435 \u0432\u044B\u0448\u0435. \u0421\u0444\u043E\u0440\u043C\u0443\u043B\u0438\u0440\u0443\u0439 \u0435\u0451 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435.]" }
|
|
5681
|
+
{ role: "user", content: "[system: \u043F\u043E\u0440\u0430 \u043F\u0438\u0441\u0430\u0442\u044C \u0435\u043C\u0443 \u043F\u0435\u0440\u0432\u043E\u0439 \u043F\u043E \u0442\u0435\u043C\u0435 \u0432\u044B\u0448\u0435. \u0421\u0444\u043E\u0440\u043C\u0443\u043B\u0438\u0440\u0443\u0439 \u0435\u0451 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435. \u041D\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0439 \u0442\u043E \u0447\u0442\u043E \u0443\u0436\u0435 \u0433\u043E\u0432\u043E\u0440\u0438\u043B\u0430.]" }
|
|
5633
5682
|
];
|
|
5634
5683
|
const reply = sanitizeModelReply(await this.llm.chat(messages, { temperature: 0.95, maxTokens: 3500 }));
|
|
5635
5684
|
return reply.trim();
|