diff --git a/apps/rowboat/app/lib/client_utils.ts b/apps/rowboat/app/lib/client_utils.ts index 14e43ce7..eea2bffb 100644 --- a/apps/rowboat/app/lib/client_utils.ts +++ b/apps/rowboat/app/lib/client_utils.ts @@ -27,7 +27,7 @@ export function validateConfigChanges(configType: string, configChanges: Record< instructions: 'test', prompts: [], tools: [], - model: 'google/gemini-2.5-flash', + model: 'gpt-4o', ragReturnType: 'chunks', ragK: 10, connectedAgents: [], diff --git a/apps/rowboat/app/lib/project_templates.ts b/apps/rowboat/app/lib/project_templates.ts index 0cb18e46..b28f91f2 100644 --- a/apps/rowboat/app/lib/project_templates.ts +++ b/apps/rowboat/app/lib/project_templates.ts @@ -1,7 +1,7 @@ import { WorkflowTemplate } from "./types/workflow_types"; import { z } from 'zod'; -const DEFAULT_MODEL = process.env.PROVIDER_DEFAULT_MODEL || "google/gemini-2.5-flash"; +const DEFAULT_MODEL = process.env.PROVIDER_DEFAULT_MODEL || "gpt-4.1"; export const templates: { [key: string]: z.infer } = { // Default template @@ -36,7 +36,7 @@ export const templates: { [key: string]: z.infer } = { "type": "conversation", "description": "Hub agent to orchestrate fetching attendee details and preparing a meeting brief.", "instructions": "## šŸ§‘ā€šŸ’¼ Role:\nYou orchestrate the workflow to fetch attendee details for a calendar event and prepare a meeting brief by researching attendees and their companies.\n\n---\n## āš™ļø Steps to Follow:\n1. Greet the user and ask which event they want to prepare for (ask for event title and, if needed, time).\n2. FIRST: Send the event details to [@agent:Attendee Fetch Agent] to get attendee details.\n3. Wait for the complete attendee list from Attendee Fetch Agent.\n4. THEN: Send the attendee list to [@agent:Attendee Research Agent] to research and prepare the meeting brief.\n5. Return the meeting brief to the user.\n\n---\n## šŸŽÆ Scope:\nāœ… In Scope:\n- Orchestrating the workflow for meeting preparation.\n\nāŒ Out of Scope:\n- Directly fetching attendee details or researching attendees.\n- Handling unrelated user queries.\n\n---\n## šŸ“‹ Guidelines:\nāœ”ļø Dos:\n- Follow the strict sequence: fetch attendees, then research, then respond.\n- Only interact with the user for event details and final meeting brief.\n\n🚫 Don'ts:\n- Do not attempt to fetch or research directly.\n- Do not try to get both steps done simultaneously.\n- Do not reference the individual agents in user-facing messages.\n- CRITICAL: The system does not support more than 1 tool call in a single output when the tool call is about transferring to another agent (a handoff). You must only put out 1 transfer related tool call in one output.", - "model": "google/gemini-2.5-flash", + "model": "gpt-4.1", "toggleAble": true, "ragReturnType": "chunks", "ragK": 3, @@ -50,7 +50,7 @@ export const templates: { [key: string]: z.infer } = { "description": "Fetches attendee details for a specified event from the user's primary calendar.", "disabled": false, "instructions": "## šŸ§‘ā€šŸ’¼ Role:\nYou fetch attendee details (name, email, company if available) for a specified event from the user's primary calendar by searching through events using the List Events tool.\n\n---\n## āš™ļø Steps to Follow:\n1. Receive the event title (and optionally time) from the parent agent.\n2. Call [@tool:List Events](#mention) with calendarId='primary' and the event title (and optionally time) as search parameters.\n3. Search through the returned events to find the event(s) that best match the provided title (and time, if given).\n4. Extract the attendee details (name, email, company if available) from the matching event.\n5. Return the list of attendees (name, email, company if available) to the parent agent.\n\n---\n## šŸŽÆ Scope:\nāœ… In Scope:\n- Fetching attendee details for a specified event by searching the user's primary calendar.\n\nāŒ Out of Scope:\n- Researching attendees or companies.\n- Interacting directly with the user.\n\n---\n## šŸ“‹ Guidelines:\nāœ”ļø Dos:\n- Return all available attendee details from the best-matching event.\n- If multiple events match, use the event time (if provided) to disambiguate.\n- If no matching event is found, return an empty list or a clear indication to the parent agent.\n\n🚫 Don'ts:\n- Do not attempt to research or summarize attendee info.\n- Do not interact with the user directly.", - "model": "google/gemini-2.5-flash", + "model": "gpt-4.1", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -66,7 +66,7 @@ export const templates: { [key: string]: z.infer } = { "description": "Researches each attendee and their company using Google search, then summarizes findings for meeting preparation.", "disabled": false, "instructions": "## šŸ§‘ā€šŸ’¼ Role:\nYou research each attendee and their company using Google search, then summarize findings to prepare the user for a meeting.\n\n---\n## āš™ļø Steps to Follow:\n1. Receive a list of attendees (name, email, company if available) from the parent agent.\n2. For each attendee:\n a. Search for the attendee's name and company using [@tool:Composio Google Search](#mention).\n b. Summarize key information about the attendee (role, background, recent news, etc.).\n c. Search for the company (if available) and summarize key facts (industry, size, recent news, etc.).\n3. Compile a concise meeting brief with all findings.\n4. Return the meeting brief to the parent agent.\n\n---\n## šŸŽÆ Scope:\nāœ… In Scope:\n- Researching attendees and their companies.\n- Summarizing findings for meeting prep.\n\nāŒ Out of Scope:\n- Fetching attendee details from the calendar.\n- Interacting with the calendar directly.\n\n---\n## šŸ“‹ Guidelines:\nāœ”ļø Dos:\n- Be concise and actionable in your summaries.\n- Highlight anything notable or recent.\n\n🚫 Don'ts:\n- Do not fabricate information.\n- Do not include irrelevant details.", - "model": "google/gemini-2.5-flash", + "model": "gpt-4.1", "locked": false, "toggleAble": true, "ragReturnType": "chunks", diff --git a/apps/rowboat/src/application/lib/copilot/example_multi_agent_1.ts b/apps/rowboat/src/application/lib/copilot/example_multi_agent_1.ts index 47f4539d..5aef81e3 100644 --- a/apps/rowboat/src/application/lib/copilot/example_multi_agent_1.ts +++ b/apps/rowboat/src/application/lib/copilot/example_multi_agent_1.ts @@ -130,7 +130,7 @@ I'll edit the Example Agent to become the hub agent: "description": "Hub agent to orchestrate meeting retrieval, participant research, summary generation, and email delivery.", "instructions": "## šŸ§‘ā€šŸ’¼ Role:\\nYou are the hub agent responsible for orchestrating the process of viewing meetings, researching participants, summarizing meetings, and sending summaries via email.\\n\\n---\\n## āš™ļø Steps to Follow:\\n1. Greet the user and ask for the time period for which they want to view meetings.\\n2. Ask for the user's email address to send the summary.\\n3. Call [@agent:Meeting Fetch Agent](#mention) with the specified time period.\\n4. For each meeting returned, call [@agent:Participant Research Agent](#mention) to research all participants.\\n5. For each meeting, call [@agent:Meeting Summary Agent](#mention) to generate a summary using meeting details and participant research.\\n6. For each summary, call [@agent:Email Agent](#mention) to send the summary to the user's email.\\n7. Inform the user when all summaries have been sent.\\n\\n---\\n## šŸŽÆ Scope:\\nāœ… In Scope:\\n- Orchestrating the workflow for meeting retrieval, research, summary, and email delivery.\\n\\nāŒ Out of Scope:\\n- Directly fetching meetings, researching, summarizing, or sending emails (handled by sub-agents).\\n\\n---\\n## šŸ“‹ Guidelines:\\nāœ”ļø Dos:\\n- Always confirm the time period and email address with the user.\\n- Ensure all steps are completed in sequence for each meeting.\\n\\n🚫 Don'ts:\\n- Do not perform research, summary, or email sending directly.\\n- Do not skip any step in the workflow.\\n- Do not mention internal agent names to the user.\\n- Do not say 'connecting you to another agent'.\\n- CRITICAL: Only transfer to one agent at a time and wait for its response before proceeding.", "examples": "- **User** : I want to see my meetings for next week and get summaries.\\n - **Agent response**: Sure! Please provide the start and end dates for the period you'd like to review.\\n\\n- **User** : From 2024-08-01 to 2024-08-07. My email is [USER_EMAIL]\\n - **Agent actions**: Call [@agent:Meeting Fetch Agent](#mention)\\n\\n- **Agent receives meetings** :\\n - **Agent actions**: For each meeting, call [@agent:Participant Research Agent](#mention)\\n\\n- **Agent receives participant research** :\\n - **Agent actions**: For each meeting, call [@agent:Meeting Summary Agent](#mention)\\n\\n- **Agent receives summary** :\\n - **Agent actions**: For each summary, call [@agent:Email Agent](#mention)\\n\\n- **Agent receives email confirmation** :\\n - **Agent response**: All meeting summaries have been sent to your email.", - "model": "google/gemini-2.5-flash", + "model": "gpt-4.1", "outputVisibility": "user_facing", "controlType": "retain" } @@ -151,7 +151,7 @@ I'll edit the Example Agent to become the hub agent: "description": "Fetches meetings from Google Calendar for a specified time period.", "instructions": "## šŸ§‘ā€šŸ’¼ Role:\\nFetch meetings from the user's Google Calendar for the specified time period.\\n\\n---\\n## āš™ļø Steps to Follow:\\n1. Receive the time period (start and end date/time) from the parent agent.\\n2. Use [@tool:Find event](#mention) to fetch all meetings in that period.\\n3. Return the list of meetings (with details: title, time, participants, description, etc.) to the parent agent.\\n\\n---\\n## šŸŽÆ Scope:\\nāœ… In Scope:\\n- Fetching meetings for a given time period.\\n\\nāŒ Out of Scope:\\n- Researching participants.\\n- Summarizing meetings.\\n- Sending emails.\\n\\n---\\n## šŸ“‹ Guidelines:\\nāœ”ļø Dos:\\n- Return all relevant meeting details.\\n\\n🚫 Don'ts:\\n- Do not perform research or summaries.\\n- Do not interact with the user directly.", "examples": "- **Parent agent** : Fetch meetings from 2024-08-01 to 2024-08-07.\\n - **Agent actions**: Call [@tool:Find event](#mention)\\n - **Agent response**: [List of meetings with details]", - "model": "google/gemini-2.5-flash", + "model": "gpt-4.1", "outputVisibility": "internal", "controlType": "relinquish_to_parent" } @@ -172,7 +172,7 @@ I'll edit the Example Agent to become the hub agent: "description": "Researches each meeting participant using web search.", "instructions": "## šŸ§‘ā€šŸ’¼ Role:\\nResearch each participant in the meeting using web search and return a brief profile for each.\\n\\n---\\n## āš™ļø Steps to Follow:\\n1. Receive a list of participant names and emails from the parent agent.\\n2. For each participant, use [@tool:Tavily search](#mention) to find relevant information.\\n3. Summarize the findings for each participant (role, company, notable info).\\n4. Return the research summaries to the parent agent.\\n\\n---\\n## šŸŽÆ Scope:\\nāœ… In Scope:\\n- Researching participants using web search.\\n\\nāŒ Out of Scope:\\n- Fetching meetings.\\n- Summarizing meetings.\\n- Sending emails.\\n\\n---\\n## šŸ“‹ Guidelines:\\nāœ”ļø Dos:\\n- Provide concise, relevant participant profiles.\\n\\n🚫 Don'ts:\\n- Do not fabricate information.\\n- Do not interact with the user directly.", "examples": "- **Parent agent** : Research participants: [ATTENDEE_1_NAME] ([ATTENDEE_1_EMAIL]), [ATTENDEE_2_NAME] ([ATTENDEE_2_EMAIL])\\n - **Agent actions**: Call [@tool:Tavily search](#mention) for each participant\\n - **Agent response**: [ATTENDEE_1_NAME]: [summary], [ATTENDEE_2_NAME]: [summary]", - "model": "google/gemini-2.5-flash", + "model": "gpt-4.1", "outputVisibility": "internal", "controlType": "relinquish_to_parent" } @@ -193,7 +193,7 @@ I'll edit the Example Agent to become the hub agent: "description": "Generates a summary of the meeting using meeting details and participant research.", "instructions": "## šŸ§‘ā€šŸ’¼ Role:\\nGenerate a concise summary of the meeting, incorporating meeting details and participant research.\\n\\n---\\n## āš™ļø Steps to Follow:\\n1. Receive meeting details and participant research from the parent agent.\\n2. Write a summary including:\\n - Meeting title, date, and time\\n - Purpose/agenda (if available)\\n - Key participants and their profiles\\n - Any notable context\\n3. Return the summary to the parent agent.\\n\\n---\\n## šŸŽÆ Scope:\\nāœ… In Scope:\\n- Summarizing meetings using provided details and research.\\n\\nāŒ Out of Scope:\\n- Fetching meetings.\\n- Researching participants.\\n- Sending emails.\\n\\n---\\n## šŸ“‹ Guidelines:\\nāœ”ļø Dos:\\n- Be clear and concise.\\n- Highlight important details.\\n\\n🚫 Don'ts:\\n- Do not add information not provided.\\n- Do not interact with the user directly.", "examples": "- **Parent agent** : Summarize meeting: 'Q3 Planning', 2024-08-02 10:00, participants: [Alice summary, Bob summary]\\n - **Agent response**: Meeting: Q3 Planning (2024-08-02 10:00)\\nParticipants: [ATTENDEE_1_NAME] ([ATTENDEE_1_ROLE] at [COMPANY_1]), [ATTENDEE_2_NAME] ([ATTENDEE_2_ROLE] at [COMPANY_2])\\nSummary: The meeting will focus on Q3 product roadmap and resource allocation.", - "model": "google/gemini-2.5-flash", + "model": "gpt-4.1", "outputVisibility": "internal", "controlType": "relinquish_to_parent" } @@ -214,7 +214,7 @@ I'll edit the Example Agent to become the hub agent: "description": "Sends the meeting summary to the user's email address.", "instructions": "## šŸ§‘ā€šŸ’¼ Role:\\nSend the provided meeting summary to the user's email address.\\n\\n---\\n## āš™ļø Steps to Follow:\\n1. Receive the meeting summary and recipient email from the parent agent.\\n2. Use [@tool:Send Email](#mention) to send the summary.\\n3. Confirm delivery to the parent agent.\\n\\n---\\n## šŸŽÆ Scope:\\nāœ… In Scope:\\n- Sending meeting summaries via email.\\n\\nāŒ Out of Scope:\\n- Fetching meetings.\\n- Researching participants.\\n- Summarizing meetings.\\n\\n---\\n## šŸ“‹ Guidelines:\\nāœ”ļø Dos:\\n- Ensure the summary is sent to the correct email.\\n\\n🚫 Don'ts:\\n- Do not interact with the user directly.", "examples": "- **Parent agent** : Send summary to [USER_EMAIL]: [summary text]\\n - **Agent actions**: Call [@tool:Send Email](#mention)\\n - **Agent response**: Email sent confirmation.", - "model": "google/gemini-2.5-flash", + "model": "gpt-4.1", "outputVisibility": "internal", "controlType": "relinquish_to_parent" } @@ -290,7 +290,7 @@ I'm replacing the Example Agent with a user-facing agent that fetches a Google D "type": "conversation", "description": "Answers user questions based solely on the content of a specified Google Doc.", "instructions": "## šŸ§‘ā€šŸ’¼ Role:\\nYou are an assistant that answers user questions using only the content of a specified Google Doc.\\n\\n---\\n## āš™ļø Steps to Follow:\\n1. Ask the user for the Google Doc ID and their question.\\n2. Use the [@tool:Get document by id](#mention) tool to fetch the document content.\\n3. Read the content of the document.\\n4. Answer the user's question using only the information found in the document. If the answer is not present in the document, politely inform the user that the information is not available.\\n\\n---\\n## šŸŽÆ Scope:\\nāœ… In Scope:\\n- Answering questions strictly based on the content of the provided Google Doc.\\n\\nāŒ Out of Scope:\\n- Answering questions not related to the content of the provided Google Doc.\\n- Using external sources or prior knowledge.\\n\\n---\\n## šŸ“‹ Guidelines:\\nāœ”ļø Dos:\\n- Always fetch the document before answering.\\n- Be concise and accurate.\\n- If the answer is not in the document, say so politely.\\n\\n🚫 Don'ts:\\n- Do not use information outside the document.\\n- Do not attempt to answer unrelated questions.\\n- Do not use RAG or external search.\\n\\n# Examples\\n- **User** : What is the project deadline? The doc ID is 1A2B3C4D5E6F7G8H9I0J\\n - **Agent actions**: Call [@tool:Get document by id](#mention)\\n - **Agent response**: The project deadline is June 30, 2024. (if found in doc)\\n\\n- **User** : Who is the project manager? The doc ID is 1A2B3C4D5E6F7G8H9I0J\\n - **Agent actions**: Call [@tool:Get document by id](#mention)\\n - **Agent response**: The project manager is [PROJECT_MANAGER_NAME]. (if found in doc)\\n\\n- **User** : What is the weather today? The doc ID is 1A2B3C4D5E6F7G8H9I0J\\n - **Agent actions**: Call [@tool:Get document by id](#mention)\\n - **Agent response**: Sorry, I can only answer questions based on the content of the provided Google Doc.\\n\\n- **User** : Tell me about the budget. The doc ID is 1A2B3C4D5E6F7G8H9I0J\\n - **Agent actions**: Call [@tool:Get document by id](#mention)\\n - **Agent response**: The budget for the project is $50,000. (if found in doc)\\n\\n- **User** : Can you summarize the document? The doc ID is 1A2B3C4D5E6F7G8H9I0J\\n - **Agent actions**: Call [@tool:Get document by id](#mention)\\n - **Agent response**: [Provides a brief summary of the document's main points]", - "model": "google/gemini-2.5-flash", + "model": "gpt-4.1", "outputVisibility": "user_facing", "controlType": "retain" }