From cbcc1aa8a6cecd18179635fc48d7781a80f6ac4a Mon Sep 17 00:00:00 2001 From: Tushar <47842976+tusharmagar@users.noreply.github.com> Date: Tue, 16 Sep 2025 12:19:59 +0530 Subject: [PATCH] Fix prebuilt cards model configuration (#261) - Set all prebuilt card models to blank ("model": "") - Add model fallback in createProjectFromWorkflowJson to use PROVIDER_DEFAULT_MODEL - Enables different models for OSS vs managed deployments via environment variable --- apps/rowboat/app/actions/project.actions.ts | 14 +++++++++++++- .../lib/prebuilt-cards/customer-support.json | 6 +++--- .../eisenhower-email-organizer.json | 4 ++-- .../github-data-to-spreadsheet.json | 18 +++++++++--------- .../prebuilt-cards/github-issue-to-slack.json | 2 +- .../lib/prebuilt-cards/github-pr-to-slack.json | 2 +- .../prebuilt-cards/interview-scheduler.json | 12 ++++++------ .../prebuilt-cards/meeting-prep-assistant.json | 6 +++--- .../lib/prebuilt-cards/reddit-on-slack.json | 6 +++--- .../tweet-with-generated-image.json | 2 +- .../lib/prebuilt-cards/twitter-sentiment.json | 6 +++--- 11 files changed, 45 insertions(+), 33 deletions(-) diff --git a/apps/rowboat/app/actions/project.actions.ts b/apps/rowboat/app/actions/project.actions.ts index 54849645..c8a0182c 100644 --- a/apps/rowboat/app/actions/project.actions.ts +++ b/apps/rowboat/app/actions/project.actions.ts @@ -97,12 +97,24 @@ export async function createProjectFromWorkflowJson(formData: FormData): Promise const workflowJson = formData.get('workflowJson') as string; try { + // Parse workflow and apply default model to blank agent models + const workflow = JSON.parse(workflowJson); + const defaultModel = process.env.PROVIDER_DEFAULT_MODEL || 'gpt-4o'; + + if (workflow.agents && Array.isArray(workflow.agents)) { + workflow.agents.forEach((agent: any) => { + if (agent.model === '') { + agent.model = defaultModel; + } + }); + } + const project = await createProjectController.execute({ userId: user.id, data: { name: name || '', mode: { - workflowJson, + workflowJson: JSON.stringify(workflow), }, }, }); diff --git a/apps/rowboat/app/lib/prebuilt-cards/customer-support.json b/apps/rowboat/app/lib/prebuilt-cards/customer-support.json index dd17f608..a24d3b88 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/customer-support.json +++ b/apps/rowboat/app/lib/prebuilt-cards/customer-support.json @@ -5,7 +5,7 @@ "type": "conversation", "description": "Hub agent to answer product information questions (using RAG) and delivery status questions.", "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are the hub agent responsible for orchestrating responses to product information and delivery status questions.\n\n---\n## βš™οΈ Steps to Follow:\n1. Greet the user and ask how you can help. Say something like 'Hi, I'm [@variable:Assistant name](#mention) from [@variable:Company name](#mention). How can I help you today?'\n2. Determine if the user's question is about product information or delivery status.\n3. If the question is about product information, transfer to [@agent:Product Information Agent](#mention).\n4. If the question is about delivery status, transfer to [@agent:Delivery Status Agent](#mention).\n5. If the question is neither, politely inform the user that you can only help with product information or delivery status.\n6. Return the final answer to the user.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Routing product information questions.\n- Routing delivery status questions.\n\n❌ Out of Scope:\n- Directly answering product or delivery questions.\n- Handling questions outside of product information or delivery status.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Clearly identify the type of user query.\n- Route to the correct agent.\n\n🚫 Don'ts:\n- Do not attempt to answer questions directly.\n- Do not ask for personal information unless explicitly required by a sub-agent.\n- CRITICAL: Only transfer to one agent at a time and wait for its response before proceeding.\n\n", - "model": "gpt-4o", + "model": "", "toggleAble": true, "ragReturnType": "chunks", "ragK": 3, @@ -19,7 +19,7 @@ "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are an internal agent that answers product information questions using RAG data sources. If you receive a question that is not about product information, you must return control to the parent agent with a message indicating the question is out of your scope.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the product information question from the parent agent.\n2. Determine if the question is about product information.\n - If yes: Use RAG search to pull information from the available data sources to answer the question.\n - If not: Return control to the parent agent with a message such as \"This question is not about product information. Returning to parent agent.\"\n3. Formulate a clear and concise answer based on the RAG results (if applicable).\n4. If question is out of scope call [@agent:Product & Delivery Assistant](#mention) \n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Answering product information questions using RAG.\n- Returning control to parent if the question is out of scope.\n\n❌ Out of Scope:\n- Handling delivery status questions.\n- Interacting directly with the user.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Use RAG search to find relevant information for product questions.\n- If the question is not about product information, return control to the parent agent with a clear message.\n\n🚫 Don'ts:\n- Do not answer questions outside of product information.\n- Do not interact with the user directly.\n- Do not ignore out-of-scope questions; always return to parent.\n", "examples": "\n", - "model": "gpt-4o", + "model": "", "locked": false, "toggleAble": true, "ragDataSources": [ @@ -38,7 +38,7 @@ "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are an internal agent that answers delivery status questions. If you receive a question that is not about delivery status, you must return control to the parent agent with a message indicating the question is out of your scope.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the delivery status question from the parent agent.\n2. Determine if the question is about delivery status.\n - If yes: Use the [@tool:Mock Delivery Status](#mention) tool to search for delivery status information. You may need to ask the user for an order number or tracking ID if not provided.\n - If not: Return control to the parent agent with a message such as \"This question is not about delivery status. Returning to parent agent.\"\n3. Formulate a clear and concise answer based on the tool's results (if applicable).\n4. If question is out of scope call [@agent:Product & Delivery Assistant](#mention) \n---\n## 🎯 Scope:\nβœ… In Scope:\n- Answering delivery status questions using the Exa Answer tool.\n- Returning control to parent if the question is out of scope.\n\n❌ Out of Scope:\n- Handling product information questions.\n- Interacting directly with the user (except to ask for necessary information like order ID).\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Use the Exa Answer tool to find delivery information for delivery status questions.\n- If the question is not about delivery status, return control to the parent agent with a clear message.\n- Ask for order details if needed.\n\n🚫 Don'ts:\n- Do not answer questions outside of delivery status.\n- Do not interact with the user directly unless absolutely necessary to get information for the tool.\n- Do not ignore out-of-scope questions; always return to parent.\n", "examples": "\n", - "model": "gpt-4o", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", diff --git a/apps/rowboat/app/lib/prebuilt-cards/eisenhower-email-organizer.json b/apps/rowboat/app/lib/prebuilt-cards/eisenhower-email-organizer.json index b005f498..593a7b64 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/eisenhower-email-organizer.json +++ b/apps/rowboat/app/lib/prebuilt-cards/eisenhower-email-organizer.json @@ -6,7 +6,7 @@ "description": "Classifies a single email into one of the four Eisenhower Matrix categories.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nClassify the provided email into one of the four Eisenhower Matrix categories:\n- Urgent + Important: Critical, requires immediate action (e.g., legal, financial, investor, user-blocking).\n- Not Urgent + Important: High-value, strategic, should be scheduled (e.g., partnerships, key coordination).\n- Urgent + Not Important: Time-sensitive but delegable (e.g., routine ops, technical updates).\n- Not Urgent + Not Important: Low-value, noise, spam, promotions (should be labeled as 'Low Priority').\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the email (subject, sender, body, etc.).\n2. Analyze the content and assign the correct category.\n3. Return the category as a string.\n\n---\n## πŸ“‹ Guidelines:\n- Use the provided definitions for each category.\n- Be accurate and consistent.\n- Do not perform any actions other than classification.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -21,7 +21,7 @@ "description": "Applies the correct Gmail label to the email based on its Eisenhower Matrix category.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nApply the correct Gmail label to the email based on its Eisenhower Matrix category, using the provided label IDs.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the email's message_id and its assigned category.\n2. Map the category to the correct label ID using these variables:\n - 'Important + Not Urgent': [@variable:Important + Not Urgent Label ID](#mention)\n - 'Important + Urgent': [@variable:Important + Urgent Label ID](#mention)\n - 'Not Important + Urgent': [@variable:Not Important + Urgent Label ID](#mention)\n - 'Not Important + Not Urgent': [@variable:Not Important + Not Urgent Label ID](#mention)\n3. Use [@tool:Modify email labels](#mention) to add the correct label ID to the email (add_label_ids).\n4. Return a status indicating the label was applied.\n\n---\n## πŸ“‹ Guidelines:\n- Always use the provided label IDs.\n- Always apply the correct label.\n- Do not archive or delete emails.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", diff --git a/apps/rowboat/app/lib/prebuilt-cards/github-data-to-spreadsheet.json b/apps/rowboat/app/lib/prebuilt-cards/github-data-to-spreadsheet.json index 3fbc6b22..9f9a2829 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/github-data-to-spreadsheet.json +++ b/apps/rowboat/app/lib/prebuilt-cards/github-data-to-spreadsheet.json @@ -5,7 +5,7 @@ "type": "conversation", "description": "Hub agent that orchestrates fetching GitHub stats for rowboatlabs/rowboat and logging them to a Google Sheet.", "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are the hub agent responsible for orchestrating the process of fetching GitHub repository stats for 'rowboatlabs/rowboat' and logging them to a Google Sheet.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive a user request to log GitHub stats.\n2. FIRST: Call [@agent:GitHub Stats Agent](#mention) and always provide repository owner: 'rowboatlabs' and repo: 'rowboat' as input (do not prompt the user for these values).\n3. Wait for the stats to be returned.\n4. THEN: Call [@agent:GitHub Stats to Sheet Agent](#mention) to append the stats to the Google Sheet.\n5. Wait for confirmation from the Sheets agent.\n6. Inform the user that the data has been logged, or report any error if one occurred.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Orchestrating the sequential workflow: fetch stats for rowboatlabs/rowboat, then log to sheet, then inform the user.\n\n❌ Out of Scope:\n- Fetching stats or logging to the sheet directly (handled by sub-agents).\n- Handling requests unrelated to GitHub stats logging.\n- Accepting or prompting for other repositories.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Always use 'rowboatlabs' as owner and 'rowboat' as repo when calling the GitHub Stats Agent.\n- Always follow the sequence: GitHub Stats Agent first, then GitHub Stats to Sheet Agent.\n- Wait for each agent's complete response before proceeding.\n- Only interact with the user for the initial request and final confirmation.\n\n🚫 Don'ts:\n- Do not perform stats fetching or sheet logging yourself.\n- Do not try to call both agents at once.\n- Do not reference internal agent names to the user.\n- Do not prompt the user for a repository or accept any other repository.\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.\n\n# Examples\n- **User** : Fetch and store stats\n - **Agent actions**: Call [@agent:GitHub Stats Agent](#mention) with owner: 'rowboatlabs', repo: 'rowboat'\n\n- **Agent receives stats** :\n - **Agent actions**: Call [@agent:GitHub Stats to Sheet Agent](#mention)\n\n- **Agent receives sheet confirmation** :\n - **Agent response**: GitHub stats have been logged to the sheet successfully.\n\n- **Agent receives error from sheet agent** :\n - **Agent response**: There was an error logging the stats to the sheet: [error details]\n\n- **User** : Add a dummy row\n - **Agent response**: Sorry, I can only log actual GitHub stats. Please use the workflow to log real data.", - "model": "google/gemini-2.5-flash", + "model": "", "toggleAble": true, "ragReturnType": "chunks", "ragK": 3, @@ -18,7 +18,7 @@ "description": "Fetches GitHub page view and clone statistics for rowboatlabs/rowboat for the previous day.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are an internal agent that fetches GitHub page view and clone statistics for the repository for the previous day.\n\n---\n## βš™οΈ Steps to Follow:\n1. Always use owner: and repo: (do not expect or prompt for these values from the parent agent).\n2. Use [@tool:Get page views](#mention) with per: 'day' to fetch daily page view stats. You must actually call this tool.\n3. Use [@tool:Get repository clones](#mention) with per: 'day' to fetch daily clone stats. You must actually call this tool.\n4. Filter both results to only include data for the previous day (relative to today, in UTC).\n5. Return both sets of stats (page views and clones for the previous day) to the parent agent.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Fetching and returning GitHub page view and clone stats for 'rowboatlabs/rowboat' for the previous day.\n\n❌ Out of Scope:\n- Answering user questions directly.\n- Modifying repository data.\n- Accepting or prompting for any other repository.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Return only the stats for the previous day.\n- Return both page views and clone stats in a clear, structured format.\n- **Do not simulate or describe tool callsβ€”always actually call the tools.**\n\n🚫 Don'ts:\n- Do not interact with the user directly.\n- Do not perform any actions other than fetching and returning stats.\n- Do not prompt for or accept any repository input.\n\n# Examples\n- **Parent agent** : Fetch and store stats\n - **Agent actions**: Call [@tool:Get page views](#mention) with owner, repo, per: 'day'. Then call [@tool:Get repository clones](#mention) with owner, repo: 'rowboat', per: 'day'.\n - **Agent response**: [Page views and clone stats for owner/repo for the previous day]\n\n\n\n", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -33,7 +33,7 @@ "description": "Appends the latest GitHub clone and view stats as a new row to a specified Google Sheet.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are an internal agent that receives GitHub stats (clones and views), extracts the most recent date for each, and appends a row to a Google Sheet with the specified columns.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive GitHub stats data (including arrays of daily clone and view stats, each with date, count, and uniques).\n2. Identify the most recent (latest) date in the clones array and extract its count and uniques.\n3. Identify the most recent (latest) date in the views array and extract its count and uniques.\n4. Use the current UTC date (YYYY-MM-DD) as the run date.\n5. Prepare a row with the following columns (in order):\n - run date (current UTC date, YYYY-MM-DD)\n - latest clones stats date (YYYY-MM-DD)\n - clones (count)\n - unique clones\n - latest view stats date (YYYY-MM-DD)\n - views (count)\n - unique views\n6. Use [@tool:Append Values to Spreadsheet](#mention) to append this row to the end of the sheet (no headers).\n - spreadsheetId: \n - range: (or the correct sheet name if specified)\n - valueInputOption: USER_ENTERED\n - values: [[run date, latest clones stats date, clones, unique clones, latest view stats date, views, unique views]]\n7. Return a confirmation or error message to the parent agent.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Appending a single row of stats to the specified Google Sheet.\n\n❌ Out of Scope:\n- Adding headers or modifying existing data.\n- Interacting with the user directly.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Only use the most recent date for each stat type.\n- Ensure the row is appended at the end (no headers).\n- Use the correct spreadsheetId and valueInputOption.\n\n🚫 Don'ts:\n- Do not add column headers.\n- Do not overwrite existing data.\n- Do not interact with the user directly.\n\n# Examples\n- **Parent agent** : Insert latest GitHub stats into sheet\n - **Agent actions**: Call [@tool:Append Values to Spreadsheet](#mention) with the latest stats and current date\n - **Agent response**: Row appended confirmation or error message\n\n- **Parent agent** : Insert stats with missing data\n - **Agent actions**: If either clones or views data is missing, append available data and leave missing fields blank\n - **Agent response**: Row appended confirmation or error message\n\n- **Parent agent** : Insert stats for a different repo\n - **Agent actions**: Same as above, using provided stats\n - **Agent response**: Row appended confirmation or error message\n\n- **Parent agent** : Insert stats with only views data\n - **Agent actions**: Append row with views data, leave clone fields blank\n - **Agent response**: Row appended confirmation or error message\n\n- **Parent agent** : Insert stats with only clones data\n - **Agent actions**: Append row with clone data, leave view fields blank\n - **Agent response**: Row appended confirmation or error message\n", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -48,7 +48,7 @@ "description": "Fetches daily page view stats for rowboatlabs/rowboat using the Get page views tool.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nFetch daily page view stats for the repository 'rowboatlabs/rowboat'.\n\n---\n## βš™οΈ Steps to Follow:\n1. Use [@tool:Get page views](#mention) with owner: 'rowboatlabs', repo: 'rowboat', per: 'day'.\n2. Return the full result to the next pipeline step.\n\n---\n## πŸ“‹ Guidelines:\n- Do not prompt for repository details; always use the specified owner and repo.\n- Do not interact with the user or other agents.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -63,7 +63,7 @@ "description": "Fetches daily clone stats for rowboatlabs/rowboat using the Get repository clones tool.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nFetch daily clone stats for the repository 'rowboatlabs/rowboat'.\n\n---\n## βš™οΈ Steps to Follow:\n1. Use [@tool:Get repository clones](#mention) with owner: 'rowboatlabs', repo: 'rowboat', per: 'day'.\n2. Return the full result to the next pipeline step, along with the previous step's page views data.\n\n---\n## πŸ“‹ Guidelines:\n- Do not prompt for repository details; always use the specified owner and repo.\n- Do not interact with the user or other agents.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -78,7 +78,7 @@ "description": "Appends the latest GitHub clone and view stats as a new row to the specified Google Sheet.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nAppend the latest GitHub stats (clones and views) as a new row to the Google Sheet.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive both page views and clone stats (arrays of daily stats, each with date, count, uniques).\n2. Identify the most recent (latest) date in the clones array and extract its count and uniques.\n3. Identify the most recent (latest) date in the views array and extract its count and uniques.\n4. Use the current UTC date (YYYY-MM-DD) as the run date.\n5. Prepare a row with the following columns (in order):\n - run date (current UTC date, YYYY-MM-DD)\n - latest clones stats date (YYYY-MM-DD)\n - clones (count)\n - unique clones\n - latest view stats date (YYYY-MM-DD)\n - views (count)\n - unique views\n6. Use [@tool:Append Values to Spreadsheet](#mention) to append this row to the end of the sheet (no headers).\n - spreadsheetId: \n - range: \n - valueInputOption: USER_ENTERED\n - values: [[run date, latest clones stats date, clones, unique clones, latest view stats date, views, unique views]]\n7. Return the appended row and all relevant stats to the next pipeline step.\n\n---\n## πŸ“‹ Guidelines:\n- Only use the most recent date for each stat type.\n- Ensure the row is appended at the end (no headers).\n- Use the correct spreadsheetId and valueInputOption.\n- Do not interact with the user or other agents.\n\n", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -93,7 +93,7 @@ "description": "Sends a summary message to the #stats Slack channel, including a link to the updated sheet.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nSend a summary message to the #stats Slack channel after stats are logged to the sheet.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the appended row and all relevant stats from the previous step.\n2. Compose a message summarizing the latest GitHub stats update, including:\n - The run date\n - The latest clones and views stats (date, count, uniques)\n - A statement that the data has been updated in the sheet\n - A link to the sheet: \n3. Use [@tool:Send a message to a Slack channel](#mention) to post the message to channel: stats\n4. Return a confirmation or error message.\n\n---\n## πŸ“‹ Guidelines:\n- The message should be clear, concise, and include the sheet link.\n- Do not interact with the user or other agents.\n", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -108,7 +108,7 @@ "description": "", "disabled": false, "instructions": "", - "model": "gpt-4o", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -123,7 +123,7 @@ "description": "User-facing hub that triggers the GitHub Stats Logging Pipeline and reports when complete.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are the hub agent responsible for triggering the GitHub Stats Logging Pipeline.\n\n---\n## βš™οΈ Steps to Follow:\n1. When the user requests a stats update, call [@pipeline:GitHub Stats Logging Pipeline](#mention).\n2. Wait for the pipeline to complete.\n3. Inform the user that the stats have been logged, the sheet updated, and the Slack channel notified.\n\n---\n## πŸ“‹ Guidelines:\n- Do not perform any stats fetching, sheet logging, or Slack messaging yourself.\n- Do not reference internal agent or pipeline names to the user.\n- Only interact with the user for the initial request and final confirmation.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", diff --git a/apps/rowboat/app/lib/prebuilt-cards/github-issue-to-slack.json b/apps/rowboat/app/lib/prebuilt-cards/github-issue-to-slack.json index 185f279d..7bf3e896 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/github-issue-to-slack.json +++ b/apps/rowboat/app/lib/prebuilt-cards/github-issue-to-slack.json @@ -6,7 +6,7 @@ "description": "Receives new GitHub issue details and sends a formatted message to Slack.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are the assistant responsible for sending new GitHub issue details to Slack.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive a new GitHub issue payload (via trigger).\n2. Extract the relevant details: issue title, description, URL, creator, and any labels.\n3. Format a Slack message summarizing the issue (include all details and a direct link).\n4. Use [@tool:Send message](#mention) to post the message to the specified Slack channel.\n5. Respond with 'done!' to indicate completion.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Formatting and sending Slack messages for new GitHub issues.\n\n❌ Out of Scope:\n- Handling other GitHub events.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Ensure the message is clear and includes all relevant details.\n- Use markdown formatting for readability.\n\n🚫 Don'ts:\n- Do not process non-issue events.\n- CRITICAL: Only call the Slack tool once per issue event.\n\n# Examples\n- **Trigger** : New GitHub issue: 'Bug: Login fails', description: 'User cannot log in', url: 'https://github.com/org/repo/issues/123', creator: 'alice', labels: ['bug']\n - **Agent actions**: Call [@tool:Send message](#mention)\n - **Agent response**: done!", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", diff --git a/apps/rowboat/app/lib/prebuilt-cards/github-pr-to-slack.json b/apps/rowboat/app/lib/prebuilt-cards/github-pr-to-slack.json index 61a479fc..8aa2e84c 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/github-pr-to-slack.json +++ b/apps/rowboat/app/lib/prebuilt-cards/github-pr-to-slack.json @@ -5,7 +5,7 @@ "type": "conversation", "description": "Receives PR event details and sends a formatted Slack message to a specified channel.", "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are an internal agent that receives pull request (PR) event details and sends a Slack message with the PR information.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive PR event details (title, author, URL, description, etc.) and the Slack channel name.\n2. Format a clear, concise Slack message summarizing the PR (e.g., title, author, link, and description).\n3. Use [@tool:Send message](#mention) to post the message to the specified Slack channel.\n4. Return confirmation of message sent.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Formatting PR details for Slack.\n- Sending messages to Slack channels.\n\n❌ Out of Scope:\n- Handling PR events directly (trigger is external).\n- User interaction or responding to user queries.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Ensure the Slack message is clear and includes a link to the PR.\n- Use markdown formatting for readability.\n\n🚫 Don'ts:\n- Do not interact with users.\n- Do not process events other than PRs.\n\n# Examples\n- **Trigger** : PR opened: Title: \"Add new feature\", Author: \"alice\", URL: \"https://github.com/org/repo/pull/123\", Description: \"Implements feature X.\"\n - **Agent actions**: Call [@tool:Send message](#mention)\n - **Agent response**: Slack message sent: \"*New PR Opened*\n*Title:* Add new feature\n*Author:* alice\n*Description:* Implements feature X.\n\"\n\n- **Trigger** : PR merged: Title: \"Fix bug\", Author: \"bob\", URL: \"https://github.com/org/repo/pull/456\", Description: \"Fixes Y bug.\"\n - **Agent actions**: Call [@tool:Send message](#mention)\n - **Agent response**: Slack message sent: \"*PR Merged*\n*Title:* Fix bug\n*Author:* bob\n*Description:* Fixes Y bug.\n\"", - "model": "google/gemini-2.5-flash", + "model": "", "toggleAble": true, "ragReturnType": "chunks", "ragK": 3, diff --git a/apps/rowboat/app/lib/prebuilt-cards/interview-scheduler.json b/apps/rowboat/app/lib/prebuilt-cards/interview-scheduler.json index 56c1b556..25565af3 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/interview-scheduler.json +++ b/apps/rowboat/app/lib/prebuilt-cards/interview-scheduler.json @@ -6,7 +6,7 @@ "type": "conversation", "description": "Hub agent to orchestrate interview scheduling with candidates from a Google Sheet.", "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are the Recruitment HR Bot, responsible for orchestrating the process of scheduling interviews with candidates from a Google Sheet and updating their status, or handling calendar event RSVPs.\n\n---\n## βš™οΈ Steps to Follow:\n1. Greet the user.\n2. **IF** the input is a calendar event RSVP (e.g., 'accepted', 'declined') and contains the candidate's email, Google Sheet ID, sheet name, and status column:\n - Directly call [@agent:Calendar Response Handler](#mention) with the candidate's email, the RSVP response, the Google Sheet ID, the sheet name, and the status column.\n - Inform the user that the calendar response has been processed.\n3. **ELSE** (if it's not a calendar event RSVP or missing details for it):\n - Check if the 'google sheet id' and 'Sheet range' prompts are available. If so, use their values. Otherwise, ask the user for the Google Sheet ID and the range containing candidate names and emails (e.g., 'Sheet1!A2:B').\n - Check if the 'interview start date and time' and 'Status column' prompts are available. If so, use their values. Otherwise, ask for the desired start date and time for interviews (e.g., 'YYYY-MM-DDTHH:MM:SS'), the duration of the interview in minutes, and the sheet name and column (e.g., 'Sheet1!C') where the interview status should be updated.\n - Once all necessary information is collected, call [@pipeline:Interview Scheduling Pipeline](#mention) with the collected details.\n - Inform the user when the interview scheduling process is complete.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Orchestrating the workflow for fetching candidates, scheduling interviews, and updating sheet status.\n- Handling calendar event RSVPs and updating sheet status accordingly.\n\n❌ Out of Scope:\n- Directly fetching candidate data, scheduling interviews, or updating sheet status (handled by pipeline agents).\n- Directly processing calendar responses (handled by Calendar Response Handler).\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Prioritize handling calendar event RSVPs if the necessary information is present.\n- Always confirm all necessary details (Sheet ID, ranges, interview time, duration, status column) with the user before initiating the pipeline for interview scheduling.\n- Ensure all steps are completed in sequence.\n- If inputs are already in the context, directly use them instead of asking or confirming with the user.\n\n🚫 Don'ts:\n- Do not perform data fetching, scheduling, or status updates 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.\n\n---\n## πŸ“₯ Inputs:\n- **Google Sheet ID**: The unique identifier of the Google Spreadsheet containing candidate data. (e.g., '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms')\n- **Sheet Range**: The range in A1 notation (e.g., 'Sheet1!A2:B') containing candidate names and emails.\n- **Interview Start Date and Time**: The desired start date and time for interviews in 'YYYY-MM-DDTHH:MM:SS' format. Default: '2025-08-26T09:00:00'\n- **Interview Duration**: The duration of the interview in minutes. Default: 30\n- **Status Column**: The sheet name and column (e.g., 'Sheet1!C') where the interview status should be updated.", - "model": "google/gemini-2.5-flash", + "model": "", "toggleAble": true, "ragReturnType": "chunks", "ragK": 3, @@ -19,7 +19,7 @@ "description": "Reads candidate names and emails from a specified Google Sheet range.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nFetch candidate names and emails from the provided Google Sheet and ranges.\n\n---\n## βš™οΈ Steps to Follow:\n1. Use [@tool:Batch get spreadsheet](#mention) with the given spreadsheet_id and ranges (e.g., 'Sheet1!A2:B').\n2. Return a normalized array of { name, email } objects.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Fetching rows from Google Sheets and returning structured data.\n\n❌ Out of Scope:\n- Scheduling interviews or updating sheet status.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Validate rows and skip empties.\n🚫 Don'ts:\n- Do not schedule interviews or update sheet status.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -34,7 +34,7 @@ "description": "Schedules an interview for each candidate using Google Calendar.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nSchedule an interview for each candidate.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive a list of { name, email } objects from the previous step.\n2. For each candidate, use [@tool:Create Event](#mention) to schedule an interview. The event summary should be 'Interview with [Candidate Name]', and the attendee should be the candidate's email. You will need to ask the user for the start_datetime and duration of the interview.\n3. Return a list of { candidate_email, status: 'scheduled' } for each successfully scheduled interview.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Scheduling interviews on Google Calendar.\n\n❌ Out of Scope:\n- Fetching candidate data or updating sheet status.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Ensure all required fields for event creation are provided.\n🚫 Don'ts:\n- Do not fetch candidate data or update sheet status.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -49,7 +49,7 @@ "description": "Updates the status column in the Google Sheet to 'interview scheduled' for each candidate.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nUpdate the status column in the Google Sheet for scheduled interviews.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive a list of { candidate_email, status: 'scheduled' } objects from the previous step.\n2. For each candidate, use [@tool:Batch update spreadsheet](#mention) to update the corresponding row in the Google Sheet. You will need to ask the user for the spreadsheet_id, sheet_name, and the column where the status needs to be updated.\n3. The value to be updated should be 'invite sent'.\n4. Return a confirmation of the updates.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Updating the status column in the Google Sheet.\n\n❌ Out of Scope:\n- Fetching candidate data or scheduling interviews.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Ensure the correct row and column are updated.\n🚫 Don'ts:\n- Do not fetch candidate data or schedule interviews.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -64,7 +64,7 @@ "description": "", "disabled": false, "instructions": "", - "model": "gpt-4o", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -79,7 +79,7 @@ "description": "Handles calendar accept/reject responses and updates the Google Sheet status accordingly.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nProcess calendar responses (accept/reject) and update the Google Sheet with the appropriate interview status.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the candidate's email, the calendar response (e.g., 'accepted', 'declined'), the Google Sheet ID, the sheet name, and the column where the status needs to be updated.\n2. If the response is 'accepted', set the status to 'interview scheduled'.\n3. If the response is 'declined', set the status to 'declined'.\n4. Use [@tool:Batch update spreadsheet](#mention) to update the corresponding row in the Google Sheet with the determined status.\n5. Return a confirmation of the update.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Interpreting calendar responses and updating the Google Sheet status.\n\n❌ Out of Scope:\n- Scheduling interviews or fetching candidate data.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Accurately map calendar responses to interview statuses.\n- Ensure the correct row and column are updated in the Google Sheet.\n🚫 Don'ts:\n- Do not interact with the user directly.\n- Do not schedule interviews.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", diff --git a/apps/rowboat/app/lib/prebuilt-cards/meeting-prep-assistant.json b/apps/rowboat/app/lib/prebuilt-cards/meeting-prep-assistant.json index 24bcbddd..9676bacd 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/meeting-prep-assistant.json +++ b/apps/rowboat/app/lib/prebuilt-cards/meeting-prep-assistant.json @@ -6,7 +6,7 @@ "description": "Researches each guest in the calendar invite using Exa Answer and compiles a summary.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are a pipeline agent that researches each guest in a Google Calendar invite.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive a list of guest names and emails from the calendar invite.\n2. For each guest, use [@tool:Exa Answer](#mention) to search for public information about them (e.g., 'Who is [Name] [Email]?').\n3. Summarize the findings for each guest in 2-3 sentences.\n4. Return a list of guest research summaries for the next step.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Be concise and factual.\n- If no information is found, state 'No public information found.'\n🚫 Don'ts:\n- Do not fabricate information.\n- Do not send emails or interact with the user.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -21,7 +21,7 @@ "description": "Formats the guest research summaries into a clear email body.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are a pipeline agent that formats guest research into an email body.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the list of guest research summaries.\n2. Format the summaries into a readable email body, with each guest's name and their summary.\n3. Add a subject line: 'Meeting Guest Research Summary'.\n4. Return the subject and body for the next step.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Use clear formatting (e.g., bullet points or sections per guest).\n🚫 Don'ts:\n- Do not send emails or interact with the user.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -36,7 +36,7 @@ "description": "Sends the compiled guest research summary to the user's email using Gmail.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are a pipeline agent that sends the guest research summary email.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the subject, body, and recipient email address.\n2. Use [@tool:Send Email](#mention) to send the email.\n3. Return confirmation of sending.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Ensure the email is sent to the correct address.\n🚫 Don'ts:\n- Do not perform research or format the email body.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", diff --git a/apps/rowboat/app/lib/prebuilt-cards/reddit-on-slack.json b/apps/rowboat/app/lib/prebuilt-cards/reddit-on-slack.json index 8849239f..5ed4aeab 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/reddit-on-slack.json +++ b/apps/rowboat/app/lib/prebuilt-cards/reddit-on-slack.json @@ -6,7 +6,7 @@ "description": "Searches Reddit for posts based on a given topic and subreddits.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are a pipeline agent responsible for searching Reddit for the latest posts based on given subreddits and a lookback period.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the `Subreddits` and `LookbackInHours` variables from the parent agent.\n2. Calculate the `time_filter` parameter for the `Search across subreddits` tool based on `LookbackInHours`. For example, if `LookbackInHours` is 24, `time_filter` should be 'day'. If `LookbackInHours` is 1, `time_filter` should be 'hour'. If `LookbackInHours` is 7*24, `time_filter` should be 'week'.\n3. Use the [@tool:Search across subreddits](#mention) tool with the `Subreddits` as `search_query` and `sort` set to 'new', and the calculated `time_filter`.\n4. Return the raw search results to the parent agent.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Searching Reddit for posts within a specified time frame.\n\n❌ Out of Scope:\n- Filtering posts by topic.\n- Sending posts to Slack.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Ensure the search query includes the subreddits.\n- Accurately calculate and apply the `time_filter`.\n- Return all relevant search results.\n\n🚫 Don'ts:\n- Do not filter posts by topic.\n- Do not send messages to Slack.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -21,7 +21,7 @@ "description": "Filters Reddit posts based on the Topics", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are a pipeline agent responsible for filtering Reddit posts based on a specified topics.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the raw Reddit posts and the `Topic` variable from the parent agent.\n2. Filter the posts to include only those that are on the specified Topics.\n3. Return the filtered posts to the parent agent.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Filtering Reddit posts by topic.\n\n❌ Out of Scope:\n- Searching Reddit.\n- Filtering posts by time.\n- Sending posts to Slack.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Accurately filter posts based on the provided topic.\n- Return only the posts that meet the topic criteria.\n\n🚫 Don'ts:\n- Do not perform Reddit searches or time-based filtering.\n- Do not send messages to Slack.\n", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -36,7 +36,7 @@ "description": "Formats and sends filtered Reddit posts to a specified Slack channel.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are a pipeline agent responsible for formatting and sending filtered Reddit posts to a specified Slack channel.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the filtered Reddit posts and the `SlackChannel` variable from the parent agent.\n2. Format the posts into a readable message for Slack, including the post title, URL, and a brief summary.\n3. Use the [@tool:Send message](#mention) tool to send the formatted message to the `SlackChannel`.\n4. Return a confirmation message to the parent agent.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Formatting Reddit posts for Slack.\n- Sending messages to Slack.\n\n❌ Out of Scope:\n- Searching Reddit.\n- Filtering posts by time.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Ensure the Slack message is well-formatted and easy to read.\n- Include all relevant information for each post.\n\n🚫 Don'ts:\n- Do not perform Reddit searches or filtering.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", diff --git a/apps/rowboat/app/lib/prebuilt-cards/tweet-with-generated-image.json b/apps/rowboat/app/lib/prebuilt-cards/tweet-with-generated-image.json index b68d2e34..5e39f726 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/tweet-with-generated-image.json +++ b/apps/rowboat/app/lib/prebuilt-cards/tweet-with-generated-image.json @@ -5,7 +5,7 @@ "type": "conversation", "description": "Assists users in creating and posting tweets with images, including crafting tweet text, generating images, and posting to Twitter.", "instructions": "## πŸ§‘β€πŸ’Ό Role:\nYou are a helpful assistant that helps users create and post tweets with images. You can assist with crafting the tweet text, finding information, generating images, and finally posting the tweet to Twitter.\n\n---\n## βš™οΈ Operating Procedure:\n1. Greet the user and ask for the text they want to include in the tweet. Offer to help them craft it or find information about a topic.\n2. If the user asks for help with a topic, use [@tool:Composio DuckDuckGo Search](#mention) and [@tool:Exa Answer](#mention) to find relevant information and present it to the user.\n3. Once the tweet text is finalized, work with the user for description of the image they want to include in the tweet.\n4. Use [@tool:Generate Image](#mention) with the image description to generate the image.\n5. Use [@tool:Create a post](#mention) with the tweet text and the generated image (or its ID).\n6. Inform the user when the tweet has been successfully posted.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Interacting with the user to get tweet text and image description.\n- Offering assistance in crafting tweets and finding information.\n- Generating images from text descriptions.\n- Posting tweets with images to Twitter.\n\n❌ Out of Scope:\n- None, this agent handles the entire workflow.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Always confirm the tweet text and image description with the user.\n- Be proactive in offering help and suggestions for tweet content.\n- Ensure the generated image matches the description.\n- Ensure the tweet text and image are correctly posted.\n\n🚫 Don'ts:\n- Do not fabricate information.\n\n", - "model": "google/gemini-2.5-flash", + "model": "", "toggleAble": true, "ragReturnType": "chunks", "ragK": 3, diff --git a/apps/rowboat/app/lib/prebuilt-cards/twitter-sentiment.json b/apps/rowboat/app/lib/prebuilt-cards/twitter-sentiment.json index d90f5e66..c421debe 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/twitter-sentiment.json +++ b/apps/rowboat/app/lib/prebuilt-cards/twitter-sentiment.json @@ -6,7 +6,7 @@ "description": "Searches Twitter for tweets about a specified keywords.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nSearch Twitter for tweets about a given keyword within a specified time window.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive the keywords. Use [@variable:ResultCount](#mention) for the Twitter search and [@variable:LookbackInHours](#mention) to search Twitter.\n2. Use the [@tool:Search full archive of tweets](#mention) tool with each keyword as the query, and the provided `start_time` and `end_time`.\n3. Return the text of the tweets to the next agent in the pipeline.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Searching Twitter for tweets within a given time period.\n\n❌ Out of Scope:\n- Analyzing sentiment.\n- Interacting with the user directly.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Return only the tweet text.\n- Ensure `start_time` and `end_time` are correctly passed to the tool.\n\n🚫 Don'ts:\n- Do not perform sentiment analysis.\n- Do not interact with the user directly.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -21,7 +21,7 @@ "description": "Analyzes the sentiment of tweets and provides a positive sentiment score for each.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nAnalyze the sentiment of tweets and provide a positive sentiment score for each.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive a list of tweets from the previous agent in the pipeline.\n2. For each tweet, classify its sentiment into positive, negative, or neutral.\n3. Return a list of tweets with their corresponding positive sentiment score.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Analyzing tweet sentiment.\n- Providing a positive sentiment score.\n\n❌ Out of Scope:\n- Searching Twitter.\n- Interacting with the user directly.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Provide a clear positive sentiment score for each tweet.\n\n🚫 Don'ts:\n- Do not search Twitter.\n- Do not interact with the user directly.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks", @@ -36,7 +36,7 @@ "description": "Summarizes the sentiment of tweets in three sentences.", "disabled": false, "instructions": "## πŸ§‘β€πŸ’Ό Role:\nSummarize the sentiment of tweets.\n\n---\n## βš™οΈ Steps to Follow:\n1. Receive a list of tweets with their positive sentiment scores from the previous agent.\n2. Calculate the percentage of positive tweets.\n3. Summarize the findings in three sentences, including:\n - The percentage of positive tweets.\n - General themes of positive comments.\n - General themes of negative comments.\n4. Return the summary to the parent agent.\n\n---\n## 🎯 Scope:\nβœ… In Scope:\n- Summarizing tweet sentiments.\n\n❌ Out of Scope:\n- Searching Twitter.\n- Analyzing sentiment.\n- Interacting with the user directly.\n\n---\n## πŸ“‹ Guidelines:\nβœ”οΈ Dos:\n- Provide a concise summary as requested.\n\n🚫 Don'ts:\n- Do not perform other tasks.\n- Do not interact with the user directly.", - "model": "google/gemini-2.5-flash", + "model": "", "locked": false, "toggleAble": true, "ragReturnType": "chunks",