From 635e77dd85aa45e0e925876a27ecd66cef75e2f4 Mon Sep 17 00:00:00 2001 From: Raj Sharma Date: Thu, 31 Oct 2024 12:42:08 +0530 Subject: [PATCH] feat: rely more on notes for more dynamic prompts --- assistant/system-prompts.ts | 355 ++++++++++++++--------- bun.lockb | Bin 280162 -> 462616 bytes exp.ts | 3 + interfaces/discord.ts | 135 +++++++-- interfaces/events.ts | 3 + package.json | 12 +- tools/actions.ts | 2 +- tools/ask.ts | 22 +- tools/communication.ts | 2 +- tools/events.ts | 55 +++- tools/index.ts | 12 +- tools/memory-manager.ts | 2 +- tools/notes-executer.ts | 191 +++++++++++++ tools/notes-vectors.ts | 150 ++++++++++ tools/notes.ts | 544 ++++++++++++++++++++---------------- tools/resend.ts | 35 ++- 16 files changed, 1106 insertions(+), 417 deletions(-) create mode 100644 tools/notes-executer.ts create mode 100644 tools/notes-vectors.ts diff --git a/assistant/system-prompts.ts b/assistant/system-prompts.ts index c5ab058..c36d3a3 100644 --- a/assistant/system-prompts.ts +++ b/assistant/system-prompts.ts @@ -1,33 +1,53 @@ import { Message } from "../interfaces/message"; import { format } from "date-fns"; import { OpenAI } from "openai"; -import { getNotesSystemPrompt } from "../tools/notes"; -import { getReminderSystemPrompt } from "../tools/reminders"; -import { getCalendarSystemPrompt } from "../tools/calender"; import { return_current_events } from "../tools/events"; import { memory_manager_guide } from "../tools/memory-manager"; +import { searchFilesByTagWithCache } from "../tools/notes"; + +const replaceTemplateStrings = ( + template: string, + data: Record +): string => { + return template.replace(/{{(\w+)}}/g, (match, key) => { + if (key in data) { + const value = data[key]; + return typeof value === "string" ? value : JSON.stringify(value); + } + return match; + }); +}; export async function buildSystemPrompts( context_message: Message ): Promise { const userRoles = context_message.getUserRoles(); const model = "gpt-4o-mini"; + const isCreator = userRoles.includes("creator"); - const general_tools_notes: OpenAI.ChatCompletionSystemMessageParam[] = [ - // { - // role: "system", - // content: `**Tool Notes:** - // 1. For scraping direct download links from non-YouTube sites in \`code_interpreter\`, include these dependencies: - // \`\`\` - // [packages] - // aiohttp = "*" - // python-socketio = "~=5.0" - // yt-dlp = "*" - // \`\`\` - // 2. Use \`actions_manager\` to schedule actions for the user, like sending a message at a specific time or after a duration. - // `, - // }, - ]; + const events = return_current_events().map((event) => ({ + id: event.eventId, + desc: event.description, + })); + + const data = { + memory_guide: memory_manager_guide("self", context_message.author.id), + events, + user_id: context_message.author.id, + model, + }; + + const obsidianPromptFiles = isCreator + ? await searchFilesByTagWithCache({ + tag: "#anya-prompt", + }) + : []; + + const obsidianSystemPrompts: OpenAI.ChatCompletionSystemMessageParam[] = + obsidianPromptFiles.map((file) => ({ + role: "system", + content: replaceTemplateStrings(file.content, data), + })); const admin_system_messages: OpenAI.ChatCompletionSystemMessageParam[] = [ { @@ -39,7 +59,7 @@ Users interact with you via text or transcribed voice messages. Your current memories saved by Memory Manager: --- -${memory_manager_guide("self", context_message.author.id)} +${data.memory_guide} --- When context is provided inside a JSON message, it indicates a reply to the mentioned context. @@ -52,7 +72,7 @@ Ensure responses do not exceed 1500 characters. role: "system", content: `Current model being used: ${model}`, }, - ...general_tools_notes, + { role: "system", content: `**Context for Casual Conversation:** @@ -62,104 +82,6 @@ Ensure responses do not exceed 1500 characters. }, ]; - const events = return_current_events().map((event) => ({ - id: event.eventId, - desc: event.description, - })); - const creator_system_messages: OpenAI.ChatCompletionSystemMessageParam[] = [ - { - role: "system", - content: `You have access to **tool managers**. - -When using tool managers: - -- Validate the manager's response to ensure it meets the user's needs. If not, refine your prompt and try again. -- Ensure your prompts to managers are clear and concise for desired outputs. -- You can go back and forth betwee multiple managers to get the job done. - -**Important:** - -- Managers often maintain state across multiple calls, allowing for follow-up questions or additional information. -- Managers are specialized LLMs for specific tasks; they perform better with detailed prompts. -- Provide managers with as much detail as possible, e.g., user details when messaging someone specific. -- Managers cannot talk to each other so make sure when you need to pass information between managers, you do so explicitly. - Example: - User: Send my gym notes to Dad. - Your Action: The above user request requires help of 'notes_manager' and 'communication_manager', where you need to ask 'notes_manager' for the gym notes and then format the data from notes_manager and ask 'communication_manager' (make sure to add the full gym notes in the request) to send it to Dad. -- Managers can save their own memories. - Example: - User: Remember when try to send message short indian im actually telling you to message the user 'pooja'. - Your Action: The above user request requires help of 'communication_manager' to remember that 'short indian' actually refers to the user 'pooja', so you can ask 'communication_manager' to remember this for you, so next time you tell 'communication_manager' to message 'short indian', it will message 'pooja'. -- You can same memories that are relavent to multiple managers or something thats required for you to even route to the correct manager. - Example: - User: When i say the magic word of 'holy moly' i want you to send a message to pooja that im leaving from home and when i reach work send a message to dad that im at work. - Your Actions: - 1. Ask 'memory_manager' to remember that 'holy moly' means to send a message to pooja that you are leaving from home, and also setup an event listener to send a message to her that you are at work when you reach work. - 2. The user only told you to remember this, and not actually execute the instrcution right now so you do only the call to 'memory_manager' and not the other managers. - Simple Usecases you can remember it yourself too, Example: - User: Remember when i say stand up i want all my latest standup notes. - Your Action: The above may sound like it needs to be remembered by notes_manager but you can remember this yourself as this is required for you to route to the correctly to notes_manager. -`, - }, - { - role: "system", - content: `# **events_manager** -Use the event manager to listen to external events. - -- Each event can have multiple listeners, and each listener will have an instruction. -- Use this manager when the user wants something to happen based on an event. - -**User's Request Examples and what you should do in similar situations:** -- When I get an email, send it to dad on whatsapp. -You: Request 'event_manager' the following: 'When an email is received, ask 'communication_manager' to send the email to dad on WhatsApp.' - -- When I get home, turn on my room lights. -You: Request 'event_manager' the following: 'When i reach home, ask 'home_assistant_manager' to turn on the room lights.' - -- When im not at home turn off all the lights every day. -You: Request 'event_manager' the following: 'I leave home, ask 'home_assistant_manager' to turn off all the lights. Make this listener a recurring one, also as this is recurring and mundane it doesnt make sense to notify the user every time, so notify can be false.' - -- When I get a message on WhatsApp from Pooja, reply that I'm driving. -You: Request 'event_manager' the following: 'When a whatsapp message is received AND its from Pooja, ask 'communication_manager' to message Pooja the following message: "Raj is driving right now.".' - -You can send these request directly to the event manager, you can add any more details if needed as you have more context about the user and conversation. - -**Available Events:** -${JSON.stringify(events)} -`, - }, - { - role: "system", - content: `# **actions_manager** -Use the actions manager to execute actions in a specific schedule or after a duration. - -- An action is a single instruction to execute at a specified time or after a duration. -- Use this manager when the user wants something to happen at a specific time or after a duration. -- When including tool names that are required for the action, ensure that you describe the tool's role in the action in detail. - -**Examples:** -- User: Send me a message at 6 PM. - Action Instruction: Notify user with some text at 6 PM. - Tool Names: none (no need to use any tool to notify the creator of the action) - Suggested time to run: 6:00 PM - -- User: Turn my Fan off every morning. - Request: Ask 'home_assistant_manager' to turn off the fan every morning. - Tool Names: ["home_assistant_manager"] - Suggested time to run: 8:00 AM Every day - -- Every Evening, show me yesterday's gym stats. - Request: Fetch yesterday's gym stats by asking 'notes_manager' and send it to the user every evening. - Tool Names: ["notes_manager"] - Suggested time to run: 6:00 PM Every day - -- Tomorrow morning ping pooja that its an important day. - Action Instruction: Tomorrow morning 8am ask 'communication_manager' to send a message to Pooja that it's an important day. - Tool Names: ["communication_manager"] - Suggested time to run: 8:00 AM Tomorrow`, - }, - ]; - const regular_system_messages: OpenAI.ChatCompletionSystemMessageParam[] = [ { role: "system", @@ -178,7 +100,6 @@ Always reply in plain text or markdown unless running a tool. Ensure responses do not exceed 1500 characters. `, }, - ...general_tools_notes, { role: "system", content: `Current model being used: ${model}`, @@ -227,12 +148,6 @@ Your task is to help them track and manage their menstrual cycle. ); } - if (userRoles.includes("creator")) { - final_system_messages = final_system_messages.concat( - creator_system_messages - ); - } - const memory_prompt: OpenAI.ChatCompletionSystemMessageParam[] = [ { role: "system", @@ -247,7 +162,197 @@ Make sure to route memories to the appropriate managers by requesting the respec }, ]; + const filteredObsidianPrompts = obsidianSystemPrompts.filter((p) => + p.content.toString().trim() + ); + final_system_messages = final_system_messages.concat(memory_prompt); + if (filteredObsidianPrompts.length) + final_system_messages = final_system_messages.concat( + filteredObsidianPrompts + ); return final_system_messages; } + +// const creator_system_messages: OpenAI.ChatCompletionSystemMessageParam[] = [ +// { +// role: "system", +// content: `You have access to **tool managers**. + +// When using tool managers: + +// - Validate the manager's response to ensure it meets the user's needs. If not, refine your prompt and try again. +// - Ensure your prompts to managers are clear and concise for desired outputs. +// - You can go back and forth betwee multiple managers to get the job done. + +// **Important:** + +// - Managers often maintain state across multiple calls, allowing for follow-up questions or additional information. +// - Managers are specialized LLMs for specific tasks; they perform better with detailed prompts. +// - Provide managers with as much detail as possible, e.g., user details when messaging someone specific. +// - Managers cannot talk to each other so make sure when you need to pass information between managers, you do so explicitly. +// Example: +// User: Send my gym notes to Dad. +// Your Action: The above user request requires help of 'notes_manager' and 'communication_manager', where you need to ask 'notes_manager' for the gym notes and then format the data from notes_manager and ask 'communication_manager' (make sure to add the full gym notes in the request) to send it to Dad. +// - Managers can save their own memories. +// Example: +// User: Remember when try to send message short indian im actually telling you to message the user 'pooja'. +// Your Action: The above user request requires help of 'communication_manager' to remember that 'short indian' actually refers to the user 'pooja', so you can ask 'communication_manager' to remember this for you, so next time you tell 'communication_manager' to message 'short indian', it will message 'pooja'. +// - You can same memories that are relavent to multiple managers or something thats required for you to even route to the correct manager. +// Example: +// User: When i say the magic word of 'holy moly' i want you to send a message to pooja that im leaving from home and when i reach work send a message to dad that im at work. +// Your Actions: +// 1. Ask 'memory_manager' to remember that 'holy moly' means to send a message to pooja that you are leaving from home, and also setup an event listener to send a message to her that you are at work when you reach work. +// 2. The user only told you to remember this, and not actually execute the instrcution right now so you do only the call to 'memory_manager' and not the other managers. +// Simple Usecases you can remember it yourself too, Example: +// User: Remember when i say stand up i want all my latest standup notes. +// Your Action: The above may sound like it needs to be remembered by notes_manager but you can remember this yourself as this is required for you to route to the correctly to notes_manager. +// `, +// }, +// { +// role: "system", +// content: `# **events_manager** +// Use the event manager to listen to external events. + +// - Each event can have multiple listeners, and each listener will have an instruction. +// - Use this manager when the user wants something to happen based on an event. + +// **User's Request Examples and what you should do in similar situations:** +// - When I get an email, send it to dad on whatsapp. +// You: Request 'event_manager' the following: 'When an email is received, ask 'communication_manager' to send the email to dad on WhatsApp.' + +// - When I get home, turn on my room lights. +// You: Request 'event_manager' the following: 'When i reach home, ask 'home_assistant_manager' to turn on the room lights.' + +// - When im not at home turn off all the lights every day. +// You: Request 'event_manager' the following: 'I leave home, ask 'home_assistant_manager' to turn off all the lights. Make this listener a recurring one, also as this is recurring and mundane it doesnt make sense to notify the user every time, so notify can be false.' + +// - When I get a message on WhatsApp from Pooja, reply that I'm driving. +// You: Request 'event_manager' the following: 'When a whatsapp message is received AND its from Pooja, ask 'communication_manager' to message Pooja the following message: "Raj is driving right now.".' + +// You can send these request directly to the event manager, you can add any more details if needed as you have more context about the user and conversation. + +// **Available Events:** +// ${JSON.stringify(events)} +// `, +// }, +// { +// role: "system", +// content: `# **actions_manager** +// Use the actions manager to execute actions in a specific schedule or after a duration. + +// - An action is a single instruction to execute at a specified time or after a duration. +// - Use this manager when the user wants something to happen at a specific time or after a duration. +// - When including tool names that are required for the action, ensure that you describe the tool's role in the action in detail. + +// **Examples:** +// - User: Send me a message at 6 PM. +// Action Instruction: Notify user with some text at 6 PM. +// Tool Names: none (no need to use any tool to notify the creator of the action) +// Suggested time to run: 6:00 PM + +// - User: Turn my Fan off every morning. +// Request: Ask 'home_assistant_manager' to turn off the fan every morning. +// Tool Names: ["home_assistant_manager"] +// Suggested time to run: 8:00 AM Every day + +// - Every Evening, show me yesterday's gym stats. +// Request: Fetch yesterday's gym stats by asking 'notes_manager' and send it to the user every evening. +// Tool Names: ["notes_manager"] +// Suggested time to run: 6:00 PM Every day + +// - Tomorrow morning ping pooja that its an important day. +// Action Instruction: Tomorrow morning 8am ask 'communication_manager' to send a message to Pooja that it's an important day. +// Tool Names: ["communication_manager"] +// Suggested time to run: 8:00 AM Tomorrow`, +// }, +// ]; + +// const creator_system_messages: OpenAI.ChatCompletionSystemMessageParam[] = [ +// { +// role: "system", +// content: ` +// ## General Guidelines for Using Tool Managers + +// ### Introduction +// Tool managers are specialized systems designed to handle distinct tasks with precision. Each manager can maintain context across interactions, which makes them highly efficient for managing state and providing relevant follow-up actions. Your goal is to make efficient use of these tools by providing the right amount of detail and ensuring each prompt is tailored to the specific task. + +// - **Validate Responses**: Always validate the output from the manager. If the response does not fully meet the user's needs, refine the prompt and request again. +// - **Detailed Prompts**: Managers work best with detailed, clear prompts. Include user details and all pertinent information when applicable. +// - **Multi-Manager Coordination**: When multiple managers are needed, explicitly pass the necessary context and data between them. + +// ### Important Guidelines +// - **State Maintenance**: Each manager retains context across calls, allowing follow-up questions or requests. +// - **Memory Usage**: Determine whether a memory is better saved within a manager or by the system itself. +// - Use **memory_manager** for persistent user-defined rules or instructions across interactions. +// - Remember simple routing instructions internally when appropriate. +// - **Explicit Information Sharing**: Managers cannot communicate directly. If you need information from one manager to use in another, make sure to explicitly request and pass it. + +// #### Example Scenarios +// - **User Request**: "Send my gym notes to Dad." +// - **Your Actions**: First, use \`notes_manager\` to fetch the gym notes, then use \`communication_manager\` to send those notes to Dad. + +// - **User Request**: "When I say 'holy moly,' send a message to Pooja." +// - **Your Actions**: Use \`memory_manager\` to remember that "holy moly" means sending a specific message to Pooja. + +// ## Events Manager + +// ### Purpose +// The **events_manager** is used to listen for and act on external events. It allows you to create event listeners that can trigger actions when specific conditions are met. + +// ### How to Use +// - Each event can have multiple listeners, and each listener must have an instruction defining the action to take. +// - Use this manager whenever a user wants an action based on an external trigger, such as receiving an email or arriving at a specific location. + +// ### Common Use Cases +// 1. **Email Forwarding**: "When I get an email, send it to Dad on WhatsApp." +// - **Your Action**: Set up an event listener to trigger \`communication_manager\` when an email is received, sending it to Dad on WhatsApp. + +// 2. **Home Automation**: "When I get home, turn on my room lights." +// - **Your Action**: Set up an event listener to trigger \`home_assistant_manager\` to turn on the lights when the user arrives home. + +// 3. **Recurring Actions**: "When I leave home, turn off all the lights every day." +// - **Your Action**: Set up a recurring listener that triggers \`home_assistant_manager\` to turn off all lights when the user leaves home. Set \`notify\` to false for mundane recurring events. + +// ### Available Events +// ${JSON.stringify(data.events)} + +// ## Actions Manager + +// ### Purpose +// The **actions_manager** handles scheduled actions, executing specific tasks either at a particular time or after a given duration. + +// ### How to Use +// - **Single Instruction**: An action is a single instruction to be executed at a set time or after a defined delay. +// - **Tool Specification**: When specifying an action, include which tools are required and describe their role clearly. + +// ### Common Use Cases +// 1. **Reminder Notification**: "Send me a reminder at 6 PM." +// - **Your Action**: Notify the user at 6 PM. No tools are required. + +// 2. **Home Automation**: "Turn my fan off every morning." +// - **Your Action**: Use \`home_assistant_manager\` to turn off the fan at 8 AM daily. + +// 3. **Daily Updates**: "Every evening, show me yesterday's gym stats." +// - **Your Action**: Use \`notes_manager\` to fetch yesterday's gym stats and send them to the user at 6 PM daily. + +// ### Formatting Tips +// - **Time-Based Requests**: Use standard time formats to specify when an action should occur. +// - **Include Tool Names**: Explicitly state which managers are involved in the action and describe their roles. + +// ## Best Practices for Prompting Managers +// - **Formatting**: Use bullet points or numbered steps for clarity. +// - **Detail Level**: Provide all relevant information—names, tasks, specific times, etc.—to ensure the manager has the right context. +// - **Avoid Redundancy**: Be concise and avoid repeating details unless necessary for clarity. + +// ### Example Scenario for Multi-Step Interaction +// - **User Request**: "Send Pooja my location when I reach work." +// - **Your Actions**: +// 1. Use \`events_manager\` to listen for the "reaching work" event. +// 2. When the event occurs, use \`communication_manager\` to send the user's location to Pooja. + +// This approach ensures the prompt is organized, easy to navigate, and contains all the relevant information needed for efficient interactions with the different managers. It balances detail with readability and provides concrete examples to guide usage. Let me know if you'd like further adjustments or specific sections expanded! +// `, +// }, +// ]; diff --git a/bun.lockb b/bun.lockb index f1f554253756174591fa2e375d8b852166835a2e..aa4fca5b5005be7edd8b2bee086725473b22e1ba 100755 GIT binary patch literal 462616 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

ZD2! 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%0AA= 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 delta 54350 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 b3M|(84WyD<%NuIDAcn_=;+n9XV)6d~amj&( diff --git a/exp.ts b/exp.ts index e69de29..db7e77f 100644 --- a/exp.ts +++ b/exp.ts @@ -0,0 +1,3 @@ +import { initVectorStoreSync } from "./tools/notes-vectors"; + +initVectorStoreSync(); diff --git a/interfaces/discord.ts b/interfaces/discord.ts index 9849384..2595a9e 100644 --- a/interfaces/discord.ts +++ b/interfaces/discord.ts @@ -4,7 +4,7 @@ import { SentMessage, User as StdUser, Attachment, - User, + User as StdMessageUser, } from "./message"; import { Client, @@ -14,6 +14,8 @@ import { Partials, ChannelType, ActivityType, + User as DiscordUser, + DMChannel, } from "discord.js"; import { UserConfig, userConfigs } from "../config"; @@ -21,6 +23,9 @@ export class DiscordAdapter implements PlatformAdapter { private client: Client; private botUserId: string = ""; + private readonly MAX_MESSAGE_LENGTH = 2000; + private readonly TRUNCATED_MESSAGE_LENGTH = 1500; + public config = { indicators: { typing: true, @@ -92,8 +97,9 @@ export class DiscordAdapter implements PlatformAdapter { console.error("Invalid channel type", channel?.type, channelId); return; } - await (channel as TextChannel).send(content); + await this.safeSend(channel as TextChannel, content); } + public async fetchMessageById( channelId: string, messageId: string @@ -157,7 +163,7 @@ export class DiscordAdapter implements PlatformAdapter { ); } - public async searchUser(query: string): Promise { + public async searchUser(query: string): Promise { const users = this.client.users.cache; return users .filter((user) => @@ -193,11 +199,11 @@ export class DiscordAdapter implements PlatformAdapter { threadId: undefined, isDirectMessage: async () => true, send: async (messageData) => { - const sentMessage = await user.send(messageData); + const sentMessage = await this.safeSend(user, messageData); return this.convertSentMessage(sentMessage); }, reply: async (messageData) => { - const sentMessage = await user.send(messageData); + const sentMessage = await this.safeSend(user, messageData); return this.convertSentMessage(sentMessage); }, getUserRoles: () => { @@ -212,12 +218,12 @@ export class DiscordAdapter implements PlatformAdapter { sendDirectMessage: async (userId, messageData) => { const user = await this.client.users.fetch(userId); console.log("sending message to: ", userId); - await user.send(messageData); + await this.safeSend(user, messageData); }, sendMessageToChannel: async (channelId, messageData) => { const channel = await this.client.channels.fetch(channelId); if (channel?.isTextBased()) { - await (channel as TextChannel).send(messageData); + await this.safeSend(channel as TextChannel, messageData); } }, fetchChannelMessages: async (limit: number) => { @@ -227,9 +233,10 @@ export class DiscordAdapter implements PlatformAdapter { ); }, sendFile: async (fileUrl, fileName) => { - await user.dmChannel?.send({ + const messageData = { files: [{ attachment: fileUrl, name: fileName }], - }); + }; + await this.safeSend(user, messageData); }, sendTyping: async () => { await user.dmChannel?.sendTyping(); @@ -244,7 +251,7 @@ export class DiscordAdapter implements PlatformAdapter { } } - // You may also need to expose this method so it can be accessed elsewhere + // Expose getMessageInterface method public getMessageInterface = this.createMessageInterface; private async convertMessage( @@ -277,13 +284,14 @@ export class DiscordAdapter implements PlatformAdapter { isDirectMessage: async () => discordMessage.channel.type === ChannelType.DM, send: async (messageData) => { - const sentMessage = await (discordMessage.channel as TextChannel).send( + const sentMessage = await this.safeSend( + discordMessage.channel as TextChannel, messageData ); return this.convertSentMessage(sentMessage); }, reply: async (messageData) => { - const sentMessage = await discordMessage.reply(messageData); + const sentMessage = await this.safeReply(discordMessage, messageData); return this.convertSentMessage(sentMessage); }, getUserRoles: () => { @@ -298,12 +306,12 @@ export class DiscordAdapter implements PlatformAdapter { }, sendDirectMessage: async (userId, messageData) => { const user = await this.client.users.fetch(userId); - await user.send(messageData); + await this.safeSend(user, messageData); }, sendMessageToChannel: async (channelId, messageData) => { const channel = await this.client.channels.fetch(channelId); if (channel?.isTextBased()) { - await (channel as TextChannel).send(messageData); + await this.safeSend(channel as TextChannel, messageData); } }, fetchChannelMessages: async (limit: number) => { @@ -311,9 +319,10 @@ export class DiscordAdapter implements PlatformAdapter { return Promise.all(messages.map((msg) => this.convertMessage(msg))); }, sendFile: async (fileUrl, fileName) => { - await (discordMessage.channel as TextChannel).send({ + const messageData = { files: [{ attachment: fileUrl, name: fileName }], - }); + }; + await this.safeSend(discordMessage.channel as TextChannel, messageData); }, sendTyping: async () => { await (discordMessage.channel as TextChannel).sendTyping(); @@ -345,7 +354,7 @@ export class DiscordAdapter implements PlatformAdapter { } }, edit: async (data) => { - await discordMessage.edit(data); + await this.safeEdit(discordMessage, data); }, getUserRoles: () => { // Since this is a message sent by the bot, return bot's roles or empty array @@ -355,12 +364,12 @@ export class DiscordAdapter implements PlatformAdapter { discordMessage.channel.type === ChannelType.DM, sendDirectMessage: async (userId, messageData) => { const user = await this.client.users.fetch(userId); - await user.send(messageData); + await this.safeSend(user, messageData); }, sendMessageToChannel: async (channelId, messageData) => { const channel = await this.client.channels.fetch(channelId); if (channel?.isTextBased()) { - await (channel as TextChannel).send(messageData); + await this.safeSend(channel as TextChannel, messageData); } }, fetchChannelMessages: async (limit: number) => { @@ -368,23 +377,103 @@ export class DiscordAdapter implements PlatformAdapter { return Promise.all(messages.map((msg) => this.convertMessage(msg))); }, sendFile: async (fileUrl, fileName) => { - await (discordMessage.channel as TextChannel).send({ + const messageData = { files: [{ attachment: fileUrl, name: fileName }], - }); + }; + await this.safeSend(discordMessage.channel as TextChannel, messageData); }, sendTyping: async () => { await (discordMessage.channel as TextChannel).sendTyping(); }, reply: async (messageData) => { - const sentMessage = await discordMessage.reply(messageData); + const sentMessage = await this.safeReply(discordMessage, messageData); return this.convertSentMessage(sentMessage); }, send: async (messageData) => { - const sentMessage = await (discordMessage.channel as TextChannel).send( + const sentMessage = await this.safeSend( + discordMessage.channel as TextChannel, messageData ); return this.convertSentMessage(sentMessage); }, }; } + + // Helper method to safely send messages with length checks + private async safeSend( + target: TextChannel | DiscordUser, + messageData: string | { content?: string; [key: string]: any } + ): Promise { + let content: string | undefined; + if (typeof messageData === "string") { + content = messageData; + } else if (messageData.content) { + content = messageData.content; + } + + if (content && content.length > this.MAX_MESSAGE_LENGTH) { + content = content.slice(0, this.TRUNCATED_MESSAGE_LENGTH); + if (typeof messageData === "string") { + messageData = content; + } else { + messageData.content = content; + } + } + + if (target instanceof DiscordUser) { + // Ensure the DM channel is created before sending + const dmChannel = await target.createDM(); + return await dmChannel.send(messageData); + } else { + return await target.send(messageData); + } + } + + // Helper method to safely reply with length checks + private async safeReply( + message: DiscordMessage, + messageData: string | { content?: string; [key: string]: any } + ): Promise { + let content: string | undefined; + if (typeof messageData === "string") { + content = messageData; + } else if (messageData.content) { + content = messageData.content; + } + + if (content && content.length > this.MAX_MESSAGE_LENGTH) { + content = content.slice(0, this.TRUNCATED_MESSAGE_LENGTH); + if (typeof messageData === "string") { + messageData = content; + } else { + messageData.content = content; + } + } + + return await message.reply(messageData); + } + + // Helper method to safely edit messages with length checks + private async safeEdit( + message: DiscordMessage, + data: string | { content?: string; [key: string]: any } + ): Promise { + let content: string | undefined; + if (typeof data === "string") { + content = data; + } else if (data.content) { + content = data.content; + } + + if (content && content.length > this.MAX_MESSAGE_LENGTH) { + content = content.slice(0, this.TRUNCATED_MESSAGE_LENGTH); + if (typeof data === "string") { + data = content; + } else { + data.content = content; + } + } + + return await message.edit(data); + } } diff --git a/interfaces/events.ts b/interfaces/events.ts index 7c92b90..89db4cb 100644 --- a/interfaces/events.ts +++ b/interfaces/events.ts @@ -205,6 +205,7 @@ export const events = new Elysia() } if (!headers.token) { + console.log("Unauthorized"); return { error: "Unauthorized" }; } @@ -212,6 +213,7 @@ export const events = new Elysia() const user = userConfigs.find((config) => config.name === username); if (!user) { + console.log("Unauthorized"); return { error: "Unauthorized" }; } @@ -220,6 +222,7 @@ export const events = new Elysia() ); if (!found) { + console.log("Unauthorized"); return { error: "Unauthorized" }; } diff --git a/package.json b/package.json index 76700b6..a4d1d18 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,9 @@ }, "dependencies": { "@dqbd/tiktoken": "^1.0.15", + "@langchain/community": "^0.3.11", + "@langchain/core": "^0.3.16", + "@langchain/openai": "^0.3.11", "@nextcloud/files": "^3.8.0", "@solyarisoftware/voskjs": "^1.2.8", "@types/node-cron": "^3.0.11", @@ -30,6 +33,7 @@ "fuzzysort": "^3.0.2", "i": "^0.3.7", "langchain": "^0.0.212", + "llamaindex": "^0.8.0", "mathjs": "^12.2.1", "meta-fetcher": "^3.1.1", "minio": "^8.0.1", @@ -38,12 +42,14 @@ "node-cron": "^3.0.3", "npm": "^10.2.5", "openai": "^4.67.1", + "pg": "^8.13.1", "pyodide": "^0.24.1", "qrcode-terminal": "^0.12.0", "quickchart-js": "^3.1.3", "resend": "^4.0.0", "serpapi": "^2.0.0", "turndown": "^7.2.0", + "uuid": "^11.0.2", "whatsapp-web.js": "^1.26.0", "whisper-node": "^1.1.1", "xml2js": "^0.6.2", @@ -53,5 +59,9 @@ "zod": "^3.22.4", "zod-to-json-schema": "^3.23.0", "zx": "^7.2.3" - } + }, + "trustedDependencies": [ + "core-js", + "protobufjs" + ] } diff --git a/tools/actions.ts b/tools/actions.ts index 5912f3a..a09dfc3 100644 --- a/tools/actions.ts +++ b/tools/actions.ts @@ -270,7 +270,7 @@ async function executeAction(action: Action) { tools = tools?.length ? tools : undefined; const response = await ask({ - model: "gpt-4o", + model: "gpt-4o-mini", prompt: `You are an Action Executor. You are called to execute an action based on the provided instruction. diff --git a/tools/ask.ts b/tools/ask.ts index 8fef093..75ef4fe 100644 --- a/tools/ask.ts +++ b/tools/ask.ts @@ -193,7 +193,7 @@ export async function ask({ name, }, ]; - console.log("got image:", image_url?.slice(0, 20)); + image_url && console.log("got image:", image_url?.slice(0, 20)); } else if (seed && !message) { // If seed is provided but no new message, just retrieve history const history = getMessageHistory(seed); @@ -382,12 +382,12 @@ export async function get_transcription( fs.writeFileSync(filePath, new Uint8Array(binaryData)); } else { // Treat input as a file URL and extract the file extension - fileExtension = path.extname(input).slice(1).toLowerCase(); - if (!["mp3", "ogg", "wav", "m4a"].includes(fileExtension)) { - throw new Error( - "The provided URL does not point to a valid audio file." - ); - } + fileExtension = "ogg"; + // if (!["mp3", "ogg", "wav", "m4a"].includes(fileExtension)) { + // throw new Error( + // "The provided URL does not point to a valid audio file." + // ); + // } isAudio = true; // Step 2: Download the file from the URL @@ -418,10 +418,12 @@ export async function get_transcription( // Step 3: Send the file to OpenAI's Whisper model for transcription const transcription = await openai.audio.transcriptions.create({ // model: "whisper-1", - model: "distil-whisper-large-v3-en", + model: "whisper-large-v3-turbo", file: fs.createReadStream(filePath), - language: "en", // Optional - temperature: 0.0, // Optional + prompt: + "The audio may have email addresses or phonenumbers, please transcribe them in their respective formats.", + language: "en", + temperature: 0.1, }); // Delete the temp file diff --git a/tools/communication.ts b/tools/communication.ts index 863932d..cc7ebab 100644 --- a/tools/communication.ts +++ b/tools/communication.ts @@ -103,7 +103,7 @@ You can use the \`memory_manager\` tool to remember user preferences, such as wh const response = await ask({ prompt, - model: "gpt-4o", + model: "gpt-4o-mini", message: `request: ${request} prefered_platform: ${prefered_platform} diff --git a/tools/events.ts b/tools/events.ts index 0cbcf85..6ebc185 100644 --- a/tools/events.ts +++ b/tools/events.ts @@ -397,15 +397,17 @@ function registerListener(listener: EventListener) { tools = tools?.length ? tools : undefined; const is_voice = listener.eventId === "on_voice_message"; + const is_new_todo_note = listener.eventId === "new_todo_for_anya"; let attached_image: string | undefined = undefined; - if (is_voice) { + if (is_voice || is_new_todo_note) { tools = getTools( contextMessage.author.username, contextMessage ) as RunnableToolFunctionWithParse[]; - + } + if (is_voice) { const audio = ((payload as any) ?? {}).transcription; if (audio && audio instanceof File) { if (audio.type.includes("audio")) { @@ -416,10 +418,12 @@ function registerListener(listener: EventListener) { } } - const otherContextData = (payload as any)?.other_context_data; + console.log("Payload for voice event listener: ", payload); + const otherContextData = (payload as any)?.other_reference_data; if (otherContextData instanceof File) { if (otherContextData.type.includes("image")) { + console.log("Got image"); // Read the file as a buffer const buffer = await otherContextData.arrayBuffer(); @@ -434,15 +438,20 @@ function registerListener(listener: EventListener) { console.log("The provided file is not an image."); } } else { - console.log("No valid file provided in other_context_data."); + console.log( + "No valid file provided in other_context_data.", + otherContextData?.name, + otherContextData?.type + ); } } console.log("Running ASK for event listener: ", listener.description); - const system_prompts = is_voice - ? await buildSystemPrompts(contextMessage) - : undefined; + const system_prompts = + is_voice || is_new_todo_note + ? await buildSystemPrompts(contextMessage) + : undefined; const prompt_heading = system_prompts ? "" @@ -507,22 +516,42 @@ function registerListener(listener: EventListener) { Your response must be in plain text without markdown or any other formatting. `; + const new_todo_note_prompt = `You are in new todo note trigger mode. + + The user added a new todo note for you in your todos file which triggered this event. + + Do not remove the to anya tag from the note if its present, unless explicitly asked to do so as part of the instruction. + + Make sure to think about your process and how you want to step by step go about executing the todos. + + You can mark a todo as failed by adding "[FAILED]" at the start of end of the todo line. + + - Event ID: ${eventId} + - Payload: ${JSON.stringify(payload)} + + IMPORTANT: + PLEASE ask notes manager to mark the note as done if you have completed the task, plz send the manager the todo note and the actual path of the note. + Whatever you reply with will be sent to the user as a notification automatically. Do not use communication_manager to notify the same user. + `; + if (system_prompts) { prompt = `${system_prompts.map((p) => p.content).join("\n\n")}`; } - const response = !is_voice + const response = !(is_voice || is_new_todo_note) ? await ask({ model: "gpt-4o-mini", prompt, tools, }) : await ask({ - model: attached_image ? "gpt-4o" : "gpt-4o", + model: attached_image ? "gpt-4o" : "gpt-4o-mini", prompt, - message: voice_prompt, - image_url: attached_image, - seed: `voice-anya-${listener.id}-${eventId}`, + message: is_voice ? voice_prompt : new_todo_note_prompt, + image_url: attached_image ?? undefined, + seed: `${is_voice ? "voice-anya" : "todos-from-user"}-${ + listener.id + }-${eventId}`, tools, }); @@ -539,7 +568,7 @@ function registerListener(listener: EventListener) { if (notify) { await contextMessage.send({ content, - flags: is_voice ? [4096] : undefined, + flags: is_voice && !is_new_todo_note ? [4096] : undefined, }); } else { console.log("Silenced Notification: ", content); diff --git a/tools/index.ts b/tools/index.ts index a5141f7..2d5eb78 100644 --- a/tools/index.ts +++ b/tools/index.ts @@ -58,6 +58,8 @@ import { search_whatsapp_contacts, SearchContactsParams } from "./whatsapp"; import { memory_manager_init } from "./memory-manager"; import { communication_manager_tool } from "./communication"; import { send_sys_log } from "../interfaces/log"; +import { init_anya_todos_watcher, init_notes_watcher } from "./notes-executer"; +import { initVectorStoreSync } from "./notes-vectors"; // get time function const GetTimeParams = z.object({}); @@ -130,6 +132,10 @@ async function get_total_tokens({ model, from, to }: GetTotalTokensParams) { }; } +init_notes_watcher(); +init_anya_todos_watcher(); +initVectorStoreSync(); + export function getTools( username: string, context_message: Message, @@ -382,7 +388,10 @@ Try to fix any errors that are returned at least once before sending to the user name: "reminders_manager", schema: RemindersManagerParams, description: `Manage reminders using user's reminders. - You can just forward the user's request to this tool and it will handle the rest.`, + You can just forward the user's request to this tool and it will handle the rest. + + More detailed todos that dont need user notification will be managed by the notes manager tool instead. + `, }), }, { @@ -409,6 +418,7 @@ Try to fix any errors that are returned at least once before sending to the user When to use: if user talks about any notes, lists, journal, gym entry, standup, personal journal, etc. + You can also use this for advanced todos that are more planning related. (these are not reminders, and will not notify the user) `, }), }, diff --git a/tools/memory-manager.ts b/tools/memory-manager.ts index b0605e7..8704801 100644 --- a/tools/memory-manager.ts +++ b/tools/memory-manager.ts @@ -167,7 +167,7 @@ async function memoryManager( const tools = memory_tools(manager_id, user_id); const response = await ask({ - model: "gpt-4o", + model: "gpt-4o-mini", prompt: `You are a Memories Manager. You manage memories for other managers. diff --git a/tools/notes-executer.ts b/tools/notes-executer.ts new file mode 100644 index 0000000..593a58f --- /dev/null +++ b/tools/notes-executer.ts @@ -0,0 +1,191 @@ +import path from "path"; +import { notesManager } from "./notes"; +import { getNotesList, fetchFileContents } from "./notes"; +import { discordAdapter } from "../interfaces"; +import { userConfigs } from "../config"; +import { eventManager } from "../interfaces/events"; + +// Watcher interval in milliseconds (2 minutes) +const WATCH_INTERVAL = 1 * 60 * 1000; + +// Function to check the notes for changes +async function watchNotes() { + console.log("Watching notes for changes..."); + try { + const notesListResult = await getNotesList(); + if (!notesListResult.success) { + console.error("Failed to fetch notes list: ", notesListResult.message); + return; + } + + const notesList = JSON.parse(String(notesListResult.message)); + const flatFileList = flattenNotesTree(notesList); + + for (const filePath of flatFileList) { + const fileContentResult = await fetchFileContents({ path: filePath }); + if (!fileContentResult.success) { + console.error("Failed to fetch file contents for ", filePath); + continue; + } + + const fileContent = fileContentResult.message.toString(); + const lines = fileContent.split("\n"); + + for (const line of lines) { + if (line.startsWith("!!")) { + console.log("Found instruction in file: ", filePath); + const instruction = line.substring(2).trim(); + await handleNoteInstruction(filePath, fileContent, instruction); + break; // Only process the first !! line per file + } + } + } + } catch (error) { + console.error("Error watching notes: ", error); + } +} + +// Helper function to flatten the notes tree structure into a list of file paths +function flattenNotesTree(tree: any, currentPath: string = ""): string[] { + let fileList: string[] = []; + for (const key in tree) { + if (tree[key] === null) { + fileList.push(path.join(currentPath, key)); + } else { + fileList = fileList.concat( + flattenNotesTree(tree[key], path.join(currentPath, key)) + ); + } + } + return fileList; +} + +// Function to handle the note instruction +async function handleNoteInstruction( + filePath: string, + fileContent: string, + instruction: string +) { + try { + const creator = userConfigs.find((u) => u.roles.includes("creator")); + const creator_discord_id = creator?.identities.find( + (i) => i.platform === "discord" + )?.id; + if (!creator_discord_id) { + console.error("Creator discord id not found in user configs"); + return; + } + const context_message = await discordAdapter.createMessageInterface( + creator_discord_id + ); + const response = await notesManager( + { + request: `The following is a note that the user left a message for you in. + The file path is: ${filePath} + The user's instruction for you is in the file content and starts with '!!' followed by the message or a attached audio message that you can Transcribe to get the actual instructions. + file content: + --- + ${fileContent} + --- + + Make sure to remove the user's instruction line (line that starts with '!!') and the respective audio message if there is one after you have read it and done the necessary action. + `, + }, + context_message + ); + + console.log( + `Handled instruction for file: ${filePath}. Response:`, + response.response + ); + response.response.choices[0].message.content?.toString() && + (await context_message.send({ + content: response.response.choices[0].message.content?.toString(), + })); + } catch (error) { + console.error( + `Failed to handle note instruction for file: ${filePath}`, + error + ); + } +} + +// Start the watcher +export function init_notes_watcher() { + setInterval(async () => { + console.time("watchNotes"); + await watchNotes(); + console.timeEnd("watchNotes"); + }, WATCH_INTERVAL); +} + +console.log("Started watching notes for changes every 2 minutes..."); + +// Watcher for notes with "to anya" in the last non-empty line +async function watchAnyaTodos() { + console.log("Watching notes for 'to anya' instructions..."); + try { + const notesListResult = await getNotesList(); + + if (!notesListResult.success) { + console.error("Failed to fetch notes list: ", notesListResult.message); + return; + } + + const notesList = JSON.parse(String(notesListResult.message)); + const flatFileList = flattenNotesTree(notesList); + + for (const filePath of flatFileList) { + const fileContentResult = await fetchFileContents({ path: filePath }); + if (!fileContentResult.success) { + console.error("Failed to fetch file contents for ", filePath); + continue; + } + + const fileContent = fileContentResult.message.toString(); + const lines = fileContent + .split("\n") + .filter((line) => line.trim() !== ""); + if (lines.length === 0) { + continue; + } + + // check if the obsidian note has a tag called "to-anya" + const is_tagged = lines.some((line) => line.includes("#to-anya")); + // check if any of the lines contains the string "[ ]" in the 1st 50% of the line. If it does, then return true, else return false + const has_undone_todos = lines.some((line) => { + const half_line = line.slice(0, Math.floor(line.length / 2)); + return half_line.includes("[ ]"); + }); + + if (is_tagged && has_undone_todos) { + console.log("Found 'to anya' instruction in file: ", filePath); + if (!fileContent.includes("[FAILED]")) { + await eventManager.emitWithResponse("new_todo_for_anya", { + note_path: filePath, + note_content: fileContent, + }); + } + } + } + } catch (error) { + console.error("Error watching notes for 'to anya': ", error); + } +} + +// Start the watcher for notes with "to anya" instructions +export function init_anya_todos_watcher() { + let isRunning = false; + + setInterval(async () => { + if (!isRunning) { + isRunning = true; + console.time("watchAnyaTodos"); + await watchAnyaTodos(); + console.timeEnd("watchAnyaTodos"); + isRunning = false; + } + }, WATCH_INTERVAL); +} + +console.log("Started watching notes for 'to anya' instructions..."); diff --git a/tools/notes-vectors.ts b/tools/notes-vectors.ts new file mode 100644 index 0000000..5575638 --- /dev/null +++ b/tools/notes-vectors.ts @@ -0,0 +1,150 @@ +import { createClient } from "webdav"; +import { + PGVectorStore, + DistanceStrategy, +} from "@langchain/community/vectorstores/pgvector"; +import { OpenAIEmbeddings } from "@langchain/openai"; +import { v4 as uuidv4 } from "uuid"; +import * as crypto from "crypto"; + +let isSyncing = false; + +// Initialize WebDAV client +const webdavClient = createClient( + "http://192.168.29.85/remote.php/dav/files/raj/", + { + username: process.env.NEXTCLOUD_USERNAME!, + password: process.env.NEXTCLOUD_PASSWORD!, + } +); + +// Helper function to calculate checksum of content +function calculateChecksum(content: string): string { + return crypto.createHash("md5").update(content, "utf8").digest("hex"); +} + +// Function to get all files from 'notes' directory via WebDAV +async function getAllFiles( + path: string +): Promise<{ filename: string; content: string }[]> { + const contents = await webdavClient.getDirectoryContents(path, { + deep: true, + }); + + const files = Array.isArray(contents) ? contents : contents.data; + + const fileContents: { filename: string; content: string }[] = []; + + for (const file of files) { + if ( + file.type === "file" && + !file.basename.startsWith(".") && + !file.filename.includes("/.obsidian/") && + (file.filename.endsWith(".txt") || file.filename.endsWith(".md")) + ) { + const content = await webdavClient.getFileContents(file.filename, { + format: "text", + }); + if (typeof content === "string") { + fileContents.push({ filename: file.filename, content }); + } + } + } + + return fileContents; +} + +// Setup PGVectorStore +const embeddings = new OpenAIEmbeddings({ + model: "text-embedding-ada-002", +}); + +const config = { + postgresConnectionOptions: { + type: "postgres", + host: "127.0.0.1", + port: 5432, + user: "postgres", + password: "defaultpwd", + database: "postgres", + }, + tableName: "anya", + columns: { + idColumnName: "id", + vectorColumnName: "vector", + contentColumnName: "content", + metadataColumnName: "metadata", + }, + distanceStrategy: "cosine" as DistanceStrategy, +}; + +const vectorStore = await PGVectorStore.initialize(embeddings, config); +// Main function to sync vector store +export async function syncVectorStore() { + if (isSyncing) { + console.log("syncVectorStore is already running. Skipping this run."); + return; + } + + isSyncing = true; + try { + console.log("Starting vector store sync..."); + const files = await getAllFiles("notes"); + + for (const file of files) { + const content = `filename: ${file.filename}\n${file.content}`; + // Calculate checksum + const checksum = calculateChecksum(content); + + // Check if the document already exists using direct SQL query + const queryResult = await vectorStore.client?.query( + `SELECT * FROM ${config.tableName} WHERE metadata->>'filename' = $1`, + [file.filename] + ); + + if (queryResult && queryResult.rows.length > 0) { + const existingDocument = queryResult.rows[0]; + const existingChecksum = existingDocument.metadata?.checksum; + + // If the checksum matches, skip updating + if (existingChecksum === checksum) { + // console.log(`Skipping ${file.filename}, checksum unchanged.`); + continue; + } + + // If the content is different, delete the old version + await vectorStore.delete({ ids: [existingDocument.id] }); + console.log(`Deleted old version of ${file.filename}`); + } + + // Load the document + const document = { + pageContent: content, + metadata: { checksum, filename: file.filename, id: uuidv4() }, + }; + + // Add or update the document in the vector store + await vectorStore.addDocuments([document], { + ids: [document.metadata.id], + }); + + console.log(`Indexed ${file.filename}`); + } + + console.log("Vector store sync completed."); + } catch (error) { + console.error("Error during vector store sync:", error); + } finally { + isSyncing = false; + } +} + +export async function initVectorStoreSync() { + console.log("Starting vector store sync..."); + await syncVectorStore(); + setInterval(syncVectorStore, 1000 * 60 * 2); // Every 2 minutes +} + +export function semantic_search_notes(query: string, limit: number) { + return vectorStore.similaritySearch(query, limit); +} diff --git a/tools/notes.ts b/tools/notes.ts index a073b4d..46c9919 100644 --- a/tools/notes.ts +++ b/tools/notes.ts @@ -1,11 +1,15 @@ -import { createClient, ResponseDataDetailed } from "webdav"; +import { createClient, FileStat, ResponseDataDetailed } from "webdav"; import { z } from "zod"; import { zodFunction } from "."; import { RunnableToolFunction } from "openai/lib/RunnableFunction.mjs"; import Fuse from "fuse.js"; -import { ask } from "./ask"; +import { ask, get_transcription } from "./ask"; import { Message } from "../interfaces/message"; import { memory_manager_guide, memory_manager_init } from "./memory-manager"; +import { semantic_search_notes, syncVectorStore } from "./notes-vectors"; +import { readFileSync, writeFileSync } from "fs"; +import { join } from "path"; +import { tmpdir } from "os"; // Initialize WebDAV client const client = createClient("http://192.168.29.85/remote.php/dav/files/raj/", { @@ -15,6 +19,7 @@ const client = createClient("http://192.168.29.85/remote.php/dav/files/raj/", { // Types export type OperationResult = { success: boolean; message: string | object }; + // Schemas for function parameters export const CreateFileParams = z.object({ path: z.string().describe("The path for the new file."), @@ -50,54 +55,100 @@ export const SearchFilesParams = z.object({ export type SearchFilesParams = z.infer; export const TagParams = z.object({ - path: z.string().describe("The path to the file to tag."), tag: z.string().describe("The tag to add to the file."), }); export type TagParams = z.infer; -// Helper function to remove the "notes/" prefix -function normalizePath(path: string): string { - return path.startsWith("notes/") ? path.substring(6) : path; +export const FetchFileContentsParams = z.object({ + path: z + .string() + .describe("The path to the file whose content is to be fetched."), +}); +export type FetchFileContentsParams = z.infer; + +export const UpdateFileParams = z.object({ + path: z.string().describe("The path to the note file to be updated."), + new_content: z + .string() + .describe("The new content to replace the existing content."), +}); +export type UpdateFileParams = z.infer; + +export const NotesManagerParams = z.object({ + request: z.string().describe("User's request regarding notes."), +}); +export type NotesManagerParams = z.infer; + +export const SemanticSearchNotesParams = z.object({ + query: z + .string() + .describe( + "The query to search for semantically similar notes, this can be something some content or even file name." + ), +}); + +type SemanticSearchNotesParams = z.infer; + +async function semanticSearchNotes({ + query, +}: SemanticSearchNotesParams): Promise { + try { + const results = await semantic_search_notes(query, 4); + return { + success: true, + message: results.map((r) => r.pageContent), + }; + } catch (error: any) { + return { success: false, message: error.message }; + } } -// Function to create a file +// Helper function to normalize paths +function normalizePath(path: string): string { + if (path.startsWith("/notes/")) return path.substring(7); + if (path.startsWith("notes/")) return path.substring(6); + if (path === "/notes" || path === "notes") return ""; + return path; +} + +// File and directory operations export async function createFile({ path, content, }: CreateFileParams): Promise { try { await client.putFileContents(`/notes/${normalizePath(path)}`, content); + await syncVectorStore(); return { success: true, message: "File created successfully" }; } catch (error: any) { return { success: false, message: error.message }; } } -// Function to create a directory export async function createDirectory({ path, }: CreateDirectoryParams): Promise { try { await client.createDirectory(`/notes/${normalizePath(path)}`); + await syncVectorStore(); return { success: true, message: "Directory created successfully" }; } catch (error: any) { return { success: false, message: error.message }; } } -// Function to delete a file or directory export async function deleteItem({ path, }: DeleteItemParams): Promise { try { await client.deleteFile(`/notes/${normalizePath(path)}`); + await syncVectorStore(); return { success: true, message: "Deleted successfully" }; } catch (error: any) { return { success: false, message: error.message }; } } -// Function to move a file or directory export async function moveItem({ source_path, destination_path, @@ -107,46 +158,14 @@ export async function moveItem({ `/notes/${normalizePath(source_path)}`, `/notes/${normalizePath(destination_path)}` ); + await syncVectorStore(); return { success: true, message: "Moved successfully" }; } catch (error: any) { return { success: false, message: error.message }; } } -// Function to search for files by name -export async function searchFilesByName({ - query, -}: SearchFilesParams): Promise { - try { - const files = await client.getDirectoryContents("notes", { - details: true, - deep: true, - }); - - // If `files` is of type `ResponseDataDetailed`, you need to access the data property - const fileList = Array.isArray(files) ? files : files.data; - - // Setup fuse.js with the filenames - const fuse = new Fuse(fileList, { - keys: ["filename"], // Search within filenames - threshold: 0.3, // Adjust this to control the fuzziness (0 = exact match, 1 = very fuzzy) - }); - - const matchingFiles = fuse.search(query).map((result) => result.item); - - return { - success: true, - message: - matchingFiles.length > 0 - ? matchingFiles.map((file) => file.filename).join(", ") - : "No matching files found", - }; - } catch (error: any) { - return { success: false, message: error.message }; - } -} - -// Function to search for files by content +// Search functions export async function searchFilesByContent({ query, }: SearchFilesParams): Promise { @@ -156,42 +175,33 @@ export async function searchFilesByContent({ deep: true, }); - // If `files` is of type `ResponseDataDetailed`, you need to access the data property const fileList = Array.isArray(files) ? files : files.data; + const matchingFiles: string[] = []; - // First, filter files by filename using fuse.js + // Search by filename using Fuse.js const fuseFilename = new Fuse(fileList, { - keys: ["basename"], // Search within filenames - threshold: 0.3, // Adjust this to control the fuzziness + keys: ["basename"], + threshold: 0.3, }); const matchingFilesByName = fuseFilename .search(query) - .map((result) => result.item); + .map((result) => result.item.filename); - const matchingFilesByContent = []; - - // Then, check file content + // Search by file content for (const file of fileList) { if (file.type === "file") { const content = await client.getFileContents(file.filename, { format: "text", }); - const fuseContent = new Fuse([String(content)], { - threshold: 0.3, // Adjust for content search - }); - const contentMatch = fuseContent.search(query); - if (contentMatch.length > 0) { - matchingFilesByContent.push(normalizePath(file.filename)); + if (typeof content === "string" && content.includes(query)) { + matchingFiles.push(normalizePath(file.filename)); } } } - // Combine results from filename and content search + // Combine and deduplicate results const combinedResults = [ - ...new Set([ - ...matchingFilesByName.map((f) => f.filename), - ...matchingFilesByContent, - ]), + ...new Set([...matchingFilesByName, ...matchingFiles]), ]; return { @@ -206,41 +216,56 @@ export async function searchFilesByContent({ } } -// Placeholder for tagging functionality -export async function tagFile({ - path, - tag, -}: TagParams): Promise { - return { success: false, message: "Tagging not supported with WebDAV." }; +export async function searchFilesByTag({ tag }: TagParams) { + const files = await client.getDirectoryContents("notes", { + details: true, + deep: true, + }); + + const fileList = Array.isArray(files) ? files : files.data; + const matchingFiles: Array<{ filename: string; content: string }> = []; + + for (const file of fileList) { + if (file.type === "file") { + const fileContent = await client.getFileContents(file.filename, { + format: "text", + }); + if (typeof fileContent === "string" && fileContent.includes(tag)) { + matchingFiles.push({ filename: file.filename, content: fileContent }); + } + } + } + + return matchingFiles; } -// Placeholder for searching files by tag -export async function searchFilesByTag({ - tag, -}: TagParams): Promise { - return { success: false, message: "Tagging not supported with WebDAV." }; -} +// Notes list caching +let cachedNotesList: string | null = null; +let lastFetchTime: number | null = null; export async function getNotesList(): Promise { try { - const directoryContents = await fetchDirectoryContents("notes"); + const currentTime = Date.now(); + if ( + cachedNotesList && + lastFetchTime && + currentTime - lastFetchTime < 5000 + ) { + return { success: true, message: cachedNotesList }; + } - const treeStructure = buildTree(directoryContents as any); - return { - success: true, - message: JSON.stringify(treeStructure, null, 2), - }; + const directoryContents = await fetchDirectoryContents("notes"); + const treeStructure = buildTree(directoryContents); + cachedNotesList = JSON.stringify(treeStructure, null, 2); + lastFetchTime = currentTime; + + return { success: true, message: cachedNotesList }; } catch (error: any) { - return { - success: false, - message: error.message, - }; + return { success: false, message: error.message }; } } -async function fetchDirectoryContents( - path: string -): Promise> { +async function fetchDirectoryContents(path: string): Promise { let contents = await client.getDirectoryContents(path); // Normalize contents to always be an array of FileStat @@ -252,7 +277,7 @@ async function fetchDirectoryContents( for (const item of contents) { if (item.type === "directory") { const subdirectoryContents = await fetchDirectoryContents(item.filename); - contents = contents.concat(subdirectoryContents as any); + contents = contents.concat(subdirectoryContents); } } @@ -264,11 +289,17 @@ function buildTree(files: any[]): any { files.forEach((file) => { const parts: string[] = file.filename.replace(/^\/notes\//, "").split("/"); + + // Ignore files inside dot folders + if (parts.some((part) => part.startsWith(".obsidian"))) { + return; + } + let current = tree; parts.forEach((part, index) => { if (!current[part]) { - current[part] = index === parts.length - 1 ? null : {}; // Leaf nodes are set to null + current[part] = index === parts.length - 1 ? null : {}; } current = current[part]; }); @@ -277,62 +308,194 @@ function buildTree(files: any[]): any { return tree; } -export const FetchFileContentsParams = z.object({ - path: z - .string() - .describe("The path to the file whose content is to be fetched."), -}); -export type FetchFileContentsParams = z.infer; - -// The fetchFileContents function +// File content operations export async function fetchFileContents({ path, }: FetchFileContentsParams): Promise { try { - // Fetch the file content from the WebDAV server - const fileContent: ResponseDataDetailed = - (await client.getFileContents(`/notes/${normalizePath(path)}`, { - format: "text", - details: true, - })) as ResponseDataDetailed; + const fileContent = await client.getFileContents( + `/notes/${normalizePath(path)}`, + { format: "text", details: true } + ); - return { - success: true, - message: fileContent, - }; + if (typeof fileContent === "string") { + // Should not happen when details is true + return { success: true, message: fileContent }; + } else if ("data" in fileContent) { + return { success: true, message: fileContent.data }; + } else { + return { + success: false, + message: "Unexpected response format from getFileContents.", + }; + } } catch (error: any) { - return { - success: false, - message: error.message, - }; + return { success: false, message: error.message }; } } -export const UpdateFileParams = z.object({ - path: z.string().describe("The path to the note file to be updated."), - new_content: z - .string() - .describe("The new content to replace the existing content."), -}); -export type UpdateFileParams = z.infer; - export async function updateNote({ path, new_content, }: UpdateFileParams): Promise { try { - // Fetch the existing content to ensure the file exists and to avoid overwriting unintentionally - const existingContent = await client.getFileContents( - `/notes/${normalizePath(path)}`, - { + await client.putFileContents(`/notes/${normalizePath(path)}`, new_content); + await syncVectorStore(); + return { success: true, message: "Note updated successfully" }; + } catch (error: any) { + return { success: false, message: error.message }; + } +} + +// Caching for tag-based searches +let cachedFiles: Array<{ filename: string; content: string }> | null = null; +let isUpdatingCache = false; + +export async function searchFilesByTagWithCache({ tag }: TagParams) { + if (cachedFiles) { + if (!isUpdatingCache) { + console.log("Updating cache"); + setTimeout(() => updateCache(tag), 0); + } + return cachedFiles; + } + + cachedFiles = await updateCache(tag); + return cachedFiles; +} + +async function updateCache( + tag: string +): Promise> { + if (isUpdatingCache) { + return cachedFiles || []; + } + + isUpdatingCache = true; + const files = await client.getDirectoryContents("notes", { + details: true, + deep: true, + }); + + const fileList = Array.isArray(files) ? files : files.data; + const matchingFiles: Array<{ filename: string; content: string }> = []; + + for (const file of fileList) { + if ( + file.type === "file" && + (file.filename.endsWith(".md") || file.filename.endsWith(".txt")) + ) { + const fileContent = await client.getFileContents(file.filename, { format: "text", + }); + if (typeof fileContent === "string" && fileContent.includes(tag)) { + matchingFiles.push({ filename: file.filename, content: fileContent }); + } + } + } + + cachedFiles = matchingFiles; + isUpdatingCache = false; + return matchingFiles; +} + +// Notes manager integration +export async function notesManager( + { request }: NotesManagerParams, + context_message: Message +) { + const notesManagerPromptFiles = await searchFilesByTagWithCache({ + tag: "#notes-manager", + }); + + const tools = webdav_tools.concat( + memory_manager_init(context_message, "notes_manager") + ); + + const potentially_relavent_files = await semantic_search_notes(request, 4); + const potentially_relavent_files_paths = potentially_relavent_files.map( + (f) => f.metadata.filename + ); + + const response = await ask({ + model: "gpt-4o", + prompt: `You are an Obsidian vault manager. + +Ensure the vault remains organized, filenames and paths are correct, and relavent files are linked to each other. +You can try creating canvas files that use the open json canvas format + +- **Today's Date:** ${new Date().toDateString()} + +- **ALL Vault's File structure for context:** +--- +${(await getNotesList()).message} +--- +${ + potentially_relavent_files_paths.length > 0 + ? ` +- **Potentially relevant files:** + +You can use these files to get more context or to link to the notes you are creating/updating. + +--- +${potentially_relavent_files_paths.join("\n")} +---` + : "" +} + +- **User Notes/Instructions for you:** +--- +${notesManagerPromptFiles.map((f) => f.content).join("\n")} +--- + +Note: When the user is trying to create/add a note, check the templates directory for any relevant templates if available. If available, fetch the relevant template and create the note based on the template. + `, + message: request, + seed: `notes-${context_message.channelId}`, + tools: tools as any, + }); + + return { response }; +} + +// Schema for the transcription function parameters +export const TranscriptionParams = z.object({ + file_path: z + .string() + .describe("The path to the audio file to be transcribed."), +}); +export type TranscriptionParams = z.infer; + +// Tool for handling transcription requests +export async function transcribeAudioFile({ + file_path, +}: TranscriptionParams): Promise { + try { + // Download the audio file from WebDAV + const audioFileBuffer = await client.getFileContents( + `/notes/${normalizePath(file_path)}`, + { + format: "binary", } ); - // Update the file with the new content - await client.putFileContents(`/notes/${normalizePath(path)}`, new_content); + if (!Buffer.isBuffer(audioFileBuffer)) { + throw new Error("Failed to download audio file as Buffer."); + } - return { success: true, message: "Note updated successfully" }; + // Convert the Buffer to a base64 string + const audioFileBase64 = audioFileBuffer.toString("base64"); + + // Transcribe the audio file + const transcription = await get_transcription( + audioFileBase64, + true, + file_path + ); + return { + success: true, + message: transcription, + }; } catch (error: any) { return { success: false, message: error.message }; } @@ -346,6 +509,13 @@ export let webdav_tools: RunnableToolFunction[] = [ schema: z.object({}), description: "Get the list of note files and directories.", }), + zodFunction({ + function: transcribeAudioFile, + name: "transcribeAudioFile", + schema: TranscriptionParams, + description: + "Transcribe an audio file specified by the provided file path.", + }), zodFunction({ function: fetchFileContents, name: "fetchNoteFileContents", @@ -382,115 +552,17 @@ export let webdav_tools: RunnableToolFunction[] = [ schema: MoveItemParams, description: "Move a note file or directory.", }), - // zodFunction({ - // function: searchFilesByName, - // name: "searchNotesFilesByName", - // schema: SearchFilesParams, - // description: "Search notes by filename.", - // }), zodFunction({ - function: searchFilesByContent, - name: "searchNotesFilesByContent", - schema: SearchFilesParams, - description: "Search notes by content.", + function: semanticSearchNotes, + name: "semanticSearchNotes", + schema: SemanticSearchNotesParams, + description: `Search notes by their semantically. + +You can use this to search by: +1. Topic +2. Content +3. File Name +4. Tags +`, }), - zodFunction({ - function: tagFile, - name: "tagNoteFile", - schema: TagParams, - description: "Add a tag to a note file.", - }), - // zodFunction({ - // function: searchFilesByTag, - // name: "searchNotesFilesByTag", - // schema: TagParams, - // description: "Search notes by tag.", - // }), ]; - -export function getNotesSystemPrompt() { - return `The notes system manages a structured file system for organizing and retrieving notes using Nextcloud via WebDAV. All notes are stored in the 'notes' directory, with subdirectories for different content types. - -**Key Directories:** - -- **Root**: Contains a 'readme' summarizing the structure. -- **Journal**: Logs daily events and activities. Subdirectories include: - - **general**: General daily events or notes. - - **standup**: Work-related standup notes. Filenames should be dates in YYYY-MM-DD format. - - **personal**: Personal life events, same format as standup notes. - - **gym**: Gym or workout activities. - -- **Lists**: Contains lists of items or tasks. Subdirectories can organize different list types. - -**Standup and Personal Note Template:** - -- **Filename**: Date in YYYY-MM-DD format. -- **Title**: Human-readable date (e.g., "Thursday 15th of July"), year not necessary. -- **Updates Section**: List of updates describing the day's events. -- **Summary Section**: A summary of the main points. - -**Gym Note Template:** - -- **Filename**: Date in YYYY-MM-DD format. -- **Title**: Gym day and date (e.g., "Pull Day - Thursday 15th of July"). -- **Activity**: Exercises performed, sets, reps, weights. -- **Progress Report**: Progress updates, achievements, challenges, comparisons with previous workouts, suggestions for improvement. - -**Lists Template:** - -- **Directory Structure**: Create subdirectories within 'lists' for different types (e.g., 'shows', 'movies', 'shopping'). -- **Filename**: Each file represents a list item with context. For 'shopping', use a single file like 'shopping.md'. - -**Functionality:** - -- Create, update, delete and move notes by filename or content. -- The \`updateNote\` function modifies existing notes. - -This system ensures efficient note management, avoiding duplication, maintaining organization, and following structured templates for work and personal notes.`; -} - -export const NotesManagerParams = z.object({ - request: z.string().describe("User's request regarding notes."), -}); -export type NotesManagerParams = z.infer; - -export async function notesManager( - { request }: NotesManagerParams, - context_message: Message -) { - const tools = webdav_tools.concat( - memory_manager_init(context_message, "notes_manager") - ); - const response = await ask({ - model: "gpt-4o", - prompt: `You are a notes manager for the 'notes' directory in Nextcloud. - -Your job is to understand the user's request (e.g., create, update, delete, move, list) and handle it using the available tools. Ensure the 'notes' directory remains organized, filenames and paths are correct, and duplication is prevented. - -Avoid running \`fetchNoteFileContents\` unnecessarily, as it fetches the entire file content and is resource-intensive. - -**More about the Notes System:** - -${getNotesSystemPrompt()} - -Follow the above guidelines to manage notes efficiently. - ----- - -${memory_manager_guide("notes_manager", context_message.author.id)} - ----- - -**Live Values:** - -- **Today's Date:** ${new Date().toDateString()} -- **Current Notes List:** -${(await getNotesList()).message} - `, - message: request, - seed: `notes-${context_message.channelId}`, - tools: tools as any, - }); - - return { response }; -} diff --git a/tools/resend.ts b/tools/resend.ts index c13032d..3f31d62 100644 --- a/tools/resend.ts +++ b/tools/resend.ts @@ -13,12 +13,12 @@ const resend = new Resend(resend_key); export const ResendParams = z.object({ to: z.string().email(), subject: z.string(), - html: z.string(), + text: z.string(), }); export type ResendParams = z.infer; -export async function send_email({ to, subject, html }: ResendParams) { +export async function send_email({ to, subject, text }: ResendParams) { if (to.includes("example.com")) { return { error: @@ -36,8 +36,8 @@ export async function send_email({ to, subject, html }: ResendParams) { (await formatToHtml({ to, subject, - html, - })) ?? html, + html: text, + })) ?? text, }); return { response: "Email sent", @@ -190,6 +190,20 @@ const linear_login_code_template = ``; +const default_message_template = `

Logo

Discover Maily

Are you ready to transform your email communication? Introducing Maily, the powerful email editor that enables you to craft captivating emails effortlessly.

Elevate your email communication with Maily! Click below to try it out:

Try Maily Now →

Join our vibrant community of users and developers on GitHub, where Maily is an open-source project. Together, we'll shape the future of email editing.

Regards,
Arikko

`; + // use ask function to take some data and pick a relavent template and put the data in it and return the final html string async function formatToHtml({ to, @@ -208,15 +222,26 @@ async function formatToHtml({ Subject: ${subject} HTML: ${html} - Example Templates to Pick from: + Default Template: + --- + ${default_message_template} + --- + + Other Templates to Pick from: 1. Vercel Invite Template: + --- ${vercel_invite_template} + --- 2. Stripe Welcome Template (use this for most simple messages): + --- ${stripe_welcome_template} + --- 3. Linear Login Code Template: + --- ${linear_login_code_template} + --- Pick a template and put the data in it to create the final HTML string. Do not Make up false data, use only the given data.