diff --git a/apps/docs/docs/using-rowboat/agents.mdx b/apps/docs/docs/using-rowboat/agents.mdx index 9e0a6576..ceaeccae 100644 --- a/apps/docs/docs/using-rowboat/agents.mdx +++ b/apps/docs/docs/using-rowboat/agents.mdx @@ -83,7 +83,7 @@ Name of the agent #### Behaviour - **Agent Type**: Choose from `conversation`, `internal`, or `pipeline` -- **Model**: Select the LLM model (GPT-4o, GPT-4o-mini, google/gemini-2.5-flash, etc.) +- **Model**: Select the LLM model (GPT-4.1, GPT-4o, google/gemini-2.5-flash, etc.) #### RAG - **Add Source**: Connect data sources to enable RAG capabilities for the agent diff --git a/apps/docs/docs/using-rowboat/customise/custom-llms.mdx b/apps/docs/docs/using-rowboat/customise/custom-llms.mdx index dc87dc2f..64b27ca1 100644 --- a/apps/docs/docs/using-rowboat/customise/custom-llms.mdx +++ b/apps/docs/docs/using-rowboat/customise/custom-llms.mdx @@ -25,7 +25,7 @@ However, you can also configure custom LLM providers (e.g. LiteLLM, OpenRouter) ```bash export PROVIDER_DEFAULT_MODEL=claude-3-7-sonnet-latest - export PROVIDER_COPILOT_MODEL=gpt-4o + export PROVIDER_COPILOT_MODEL=gpt-4.1 ``` **Notes:** diff --git a/apps/experimental/simulation_runner/simulation.py b/apps/experimental/simulation_runner/simulation.py index 39618897..f0a0c4d6 100644 --- a/apps/experimental/simulation_runner/simulation.py +++ b/apps/experimental/simulation_runner/simulation.py @@ -11,7 +11,7 @@ from db import write_test_result, get_scenario_by_id from rowboat import Client, StatefulChat openai_client = OpenAI() -MODEL_NAME = "gpt-4o" +MODEL_NAME = "gpt-4.1" ROWBOAT_API_HOST = os.environ.get("ROWBOAT_API_HOST", "http://127.0.0.1:3000").strip() async def simulate_simulation( diff --git a/apps/rowboat/app/lib/client_utils.ts b/apps/rowboat/app/lib/client_utils.ts index 90997d02..d47545b2 100644 --- a/apps/rowboat/app/lib/client_utils.ts +++ b/apps/rowboat/app/lib/client_utils.ts @@ -29,7 +29,7 @@ export function validateConfigChanges(configType: string, configChanges: Record< instructions: 'test', prompts: [], tools: [], - model: 'gpt-4o', + model: 'gpt-4.1', ragReturnType: 'chunks', ragK: 10, connectedAgents: [], diff --git a/apps/rowboat/app/lib/prebuilt-cards/index.ts b/apps/rowboat/app/lib/prebuilt-cards/index.ts index 1d2e9dd3..17705b9a 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/index.ts +++ b/apps/rowboat/app/lib/prebuilt-cards/index.ts @@ -6,7 +6,7 @@ import interviewScheduler from './interview-scheduler.json'; import meetingPrepAssistant from './meeting-prep-assistant.json'; import redditOnSlack from './reddit-on-slack.json'; import twitterSentiment from './twitter-sentiment.json'; -import tweetWithGeneratedImage from './tweet-with-generated-image.json'; +import tweetAssistant from './tweet-assistant.json'; import customerSupport from './customer-support.json'; import githubIssueToSlack from './github-issue-to-slack.json'; import githubPrToSlack from './github-pr-to-slack.json'; @@ -19,7 +19,7 @@ export const prebuiltTemplates = { 'Meeting Prep Assistant': meetingPrepAssistant, 'Reddit on Slack': redditOnSlack, 'Twitter Sentiment': twitterSentiment, - 'Tweet with generated image': tweetWithGeneratedImage, + 'Tweet Assistant': tweetAssistant, 'Customer Support': customerSupport, 'GitHub Issue to Slack': githubIssueToSlack, 'GitHub PR to Slack': githubPrToSlack, diff --git a/apps/rowboat/app/lib/prebuilt-cards/tweet-with-generated-image.json b/apps/rowboat/app/lib/prebuilt-cards/tweet-assistant.json similarity index 78% rename from apps/rowboat/app/lib/prebuilt-cards/tweet-with-generated-image.json rename to apps/rowboat/app/lib/prebuilt-cards/tweet-assistant.json index 5e39f726..a0ab6359 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/tweet-with-generated-image.json +++ b/apps/rowboat/app/lib/prebuilt-cards/tweet-assistant.json @@ -3,44 +3,23 @@ { "name": "Tweet Assistant", "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", + "description": "Assists users in creating and posting tweets, including crafting tweet text, finding information, and posting to Twitter.", + "instructions": "## šŸ§‘ā€šŸ’¼ Role:\nYou are a helpful assistant that helps users create and post tweets. You can assist with crafting the tweet text, finding information, 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, confirm with the user that they are ready to post it.\n4. Use [@tool:Create a post](#mention) with the tweet text to post the tweet to Twitter.\n5. 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.\n- Offering assistance in crafting tweets and finding information.\n- Posting tweets to Twitter.\n\n---\n## šŸ“‹ Guidelines:\nāœ”ļø Dos:\n- Always confirm the tweet text with the user before posting.\n- Be proactive in offering help and suggestions for tweet content.\n- Ensure the tweet text is correctly posted.\n\n🚫 Don'ts:\n- Do not fabricate information.\n", + "examples": "\n", "model": "", "toggleAble": true, "ragReturnType": "chunks", "ragK": 3, - "controlType": "retain", "outputVisibility": "user_facing", - "examples": "\n" + "controlType": "retain" } ], "prompts": [], "tools": [ - { - "name": "Generate Image", - "description": "Generate an image using Google Gemini given a text prompt. Returns base64-encoded image data and any text parts.", - "isGeminiImage": true, - "parameters": { - "type": "object", - "properties": { - "prompt": { - "type": "string", - "description": "Text prompt describing the image to generate" - }, - "modelName": { - "type": "string", - "description": "Optional Gemini model override" - } - }, - "required": [ - "prompt" - ], - "additionalProperties": true - } - }, { "name": "Create a post", "description": "Creates a tweet on twitter; `text` is required unless `card uri`, `media media ids`, `poll options`, or `quote tweet id` is provided.", + "mockTool": false, "parameters": { "type": "object", "properties": { @@ -221,7 +200,6 @@ }, "required": [] }, - "mockTool": false, "isComposio": true, "composioData": { "slug": "TWITTER_CREATION_OF_A_POST", @@ -234,6 +212,7 @@ { "name": "Exa Answer", "description": "Get answers with citations using the exa api.", + "mockTool": false, "parameters": { "type": "object", "properties": { @@ -250,7 +229,6 @@ "content" ] }, - "mockTool": false, "isComposio": true, "composioData": { "slug": "COMPOSIO_SEARCH_EXA_ANSWER", @@ -263,6 +241,7 @@ { "name": "Composio DuckDuckGo Search", "description": "The duckduckgosearch class utilizes the composio duckduckgo search api to perform searches, focusing on web information and details. it leverages the duckduckgo search engine via the composio duckduckgo search api to retrieve relevant web data based on the provided query.", + "mockTool": false, "parameters": { "type": "object", "properties": { @@ -279,7 +258,6 @@ "query" ] }, - "mockTool": false, "isComposio": true, "composioData": { "slug": "COMPOSIO_SEARCH_DUCK_DUCK_GO_SEARCH", @@ -292,9 +270,9 @@ ], "pipelines": [], "startAgent": "Tweet Assistant", - "lastUpdatedAt": "2025-09-11T18:02:35.880Z", + "lastUpdatedAt": "2025-09-16T09:18:26.925Z", "name": "Tweet Assistant", - "description": "Research topics and create a tweet including generated images.", + "description": "Research topics and creates a tweet.", "category": "News & Social", "copilotPrompt": "Give me a brief explanation of this assistant." -} +} \ No newline at end of file diff --git a/apps/rowboat/app/lib/prebuilt-cards/twitter-sentiment.json b/apps/rowboat/app/lib/prebuilt-cards/twitter-sentiment.json index c421debe..b1f7074d 100644 --- a/apps/rowboat/app/lib/prebuilt-cards/twitter-sentiment.json +++ b/apps/rowboat/app/lib/prebuilt-cards/twitter-sentiment.json @@ -41,8 +41,8 @@ "toggleAble": true, "ragReturnType": "chunks", "ragK": 3, - "controlType": "relinquish_to_parent", "outputVisibility": "internal", + "controlType": "relinquish_to_parent", "maxCallsPerParentAgent": 3 } ], @@ -56,6 +56,11 @@ "name": "LookbackInHours", "type": "base_prompt", "prompt": "" + }, + { + "name": "ResultCount", + "type": "base_prompt", + "prompt": "" } ], "tools": [ @@ -372,9 +377,9 @@ } ], "startAgent": "Twitter Sentiment Pipeline", - "lastUpdatedAt": "2025-09-11T17:26:48.865Z", + "lastUpdatedAt": "2025-09-16T09:24:45.848Z", "name": "Twitter Sentiment", "description": "Searches Twitter for tweets about a company and analyzes their sentiment.", "category": "News & Social", "copilotPrompt": "Give me a brief explanation of this assistant. Also briefly tell me about how to setup a scheduled trigger for this assistant." -} +} \ No newline at end of file diff --git a/apps/rowboat/app/scripts/rag-worker.ts b/apps/rowboat/app/scripts/rag-worker.ts index 3142a652..95f85fa2 100644 --- a/apps/rowboat/app/scripts/rag-worker.ts +++ b/apps/rowboat/app/scripts/rag-worker.ts @@ -22,7 +22,7 @@ import { container } from '@/di/container'; const FILE_PARSING_PROVIDER_API_KEY = process.env.FILE_PARSING_PROVIDER_API_KEY || process.env.OPENAI_API_KEY || ''; const FILE_PARSING_PROVIDER_BASE_URL = process.env.FILE_PARSING_PROVIDER_BASE_URL || undefined; -const FILE_PARSING_MODEL = process.env.FILE_PARSING_MODEL || 'gpt-4o'; +const FILE_PARSING_MODEL = process.env.FILE_PARSING_MODEL || 'gpt-4.1'; const dataSourcesRepository = container.resolve('dataSourcesRepository'); const dataSourceDocsRepository = container.resolve('dataSourceDocsRepository'); diff --git a/apps/rowboat/src/application/lib/agents-runtime/agent-tools.ts b/apps/rowboat/src/application/lib/agents-runtime/agent-tools.ts index cb8e8b74..545ce677 100644 --- a/apps/rowboat/src/application/lib/agents-runtime/agent-tools.ts +++ b/apps/rowboat/src/application/lib/agents-runtime/agent-tools.ts @@ -27,7 +27,7 @@ import { IProjectsRepository } from "@/src/application/repositories/projects.rep // Provider configuration const PROVIDER_API_KEY = process.env.PROVIDER_API_KEY || process.env.OPENAI_API_KEY || ''; const PROVIDER_BASE_URL = process.env.PROVIDER_BASE_URL || undefined; -const MODEL = process.env.PROVIDER_DEFAULT_MODEL || 'gpt-4o'; +const MODEL = process.env.PROVIDER_DEFAULT_MODEL || 'gpt-4.1'; const openai = createOpenAI({ apiKey: PROVIDER_API_KEY, diff --git a/apps/rowboat/src/application/lib/agents-runtime/agents.ts b/apps/rowboat/src/application/lib/agents-runtime/agents.ts index a974dc4f..a0c6bd34 100644 --- a/apps/rowboat/src/application/lib/agents-runtime/agents.ts +++ b/apps/rowboat/src/application/lib/agents-runtime/agents.ts @@ -21,7 +21,7 @@ import { PipelineStateManager } from "./pipeline-state-manager"; // Provider configuration const PROVIDER_API_KEY = process.env.PROVIDER_API_KEY || process.env.OPENAI_API_KEY || ''; const PROVIDER_BASE_URL = process.env.PROVIDER_BASE_URL || undefined; -const MODEL = process.env.PROVIDER_DEFAULT_MODEL || 'gpt-4o'; +const MODEL = process.env.PROVIDER_DEFAULT_MODEL || 'gpt-4.1'; // Feature flags const USE_NATIVE_HANDOFFS = process.env.USE_NATIVE_HANDOFFS === 'true';