feat: LLM-based schedule generation
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
import { InMemoryMemoryStore } from './memory';
|
||||
import {
|
||||
addUtcDays,
|
||||
blocksToDailySchedule,
|
||||
blocksToMonthlySchedule,
|
||||
buildAvailabilitySnapshot,
|
||||
createMonthlyScheduleEntries,
|
||||
createTenMinuteDailySchedule,
|
||||
daysInMonth,
|
||||
scheduleInstruction,
|
||||
scheduleTargetDay,
|
||||
startOfUtcDay,
|
||||
toIso,
|
||||
@@ -84,8 +86,17 @@ export class Persona {
|
||||
|
||||
async createDailySchedule(datetime: DateTimeInput, message: string): Promise<ScheduleEntry[]> {
|
||||
const persona = await this.ready();
|
||||
if (!this.options.models?.schedule) {
|
||||
throw new Error('createDailySchedule requires options.models.schedule.');
|
||||
}
|
||||
const targetDay = scheduleTargetDay(datetime);
|
||||
const entries = createTenMinuteDailySchedule({ persona, targetDay, message });
|
||||
const blocks = await this.options.models.schedule.generateDailySchedule({
|
||||
persona,
|
||||
targetDay,
|
||||
message,
|
||||
instruction: scheduleInstruction(),
|
||||
});
|
||||
const entries = blocksToDailySchedule({ persona, targetDay, message, blocks });
|
||||
await this.emit('persona.schedule.daily.generated', { targetDay: targetDay.toISOString(), count: entries.length, message });
|
||||
await this.memory.saveScheduleEntries(persona.id, entries);
|
||||
await this.refreshAvailability(datetime);
|
||||
@@ -94,7 +105,19 @@ export class Persona {
|
||||
|
||||
async createMonthlySchedule(datetime: DateTimeInput, message: string): Promise<ScheduleEntry[]> {
|
||||
const persona = await this.ready();
|
||||
const entries = createMonthlyScheduleEntries({ persona, fromDay: datetime, message });
|
||||
if (!this.options.models?.schedule) {
|
||||
throw new Error('createMonthlySchedule requires options.models.schedule.');
|
||||
}
|
||||
const fromDay = scheduleTargetDay(datetime);
|
||||
const days = daysInMonth(fromDay);
|
||||
const blocks = await this.options.models.schedule.generateMonthlySchedule({
|
||||
persona,
|
||||
fromDay,
|
||||
message,
|
||||
days,
|
||||
instruction: scheduleInstruction(),
|
||||
});
|
||||
const entries = blocksToMonthlySchedule({ persona, fromDay, message, blocks });
|
||||
await this.emit('persona.schedule.monthly.generated', { count: entries.length, message });
|
||||
await this.memory.saveScheduleEntries(persona.id, entries);
|
||||
await this.refreshAvailability(datetime);
|
||||
|
||||
Reference in New Issue
Block a user