diff --git a/README.md b/README.md index 9ab8d36ba..8fbf5141b 100644 --- a/README.md +++ b/README.md @@ -35,23 +35,19 @@ +
+β‘ Build AI agents instantly with natural language | π Connect tools with one-click integrations | π Power with knowledge by adding documents for RAG | π Automate workflows by setting up triggers and actions | π Deploy anywhere via API or SDK
+βοΈ Prefer a hosted version? Use our cloud to starting building agents right away!
+
+
+
+## Obtain API key and Project ID
+
+Generate API keys via the developer configs in your project. Copy the Project ID from the same page.
+
+
+
+
+## API Endpoint
+
+```
+POST
+
+
+---
+
+## How You Can Contribute
+
+
+- **Tackle Open Issues**
+ Browse our [GitHub Issues](https://github.com/rowboatlabs/rowboat/issues) for tags like `good first issue`, `help wanted`, or `bug` to find a spot that fits your skillset.
+
+- **Join the Community**
+ Our [Discord](https://discord.gg/PCkH9TWC) is the go-to hub for brainstorming, feedback, and finding contributors for bigger efforts.
+
+- **Propose Something New**
+ Have a new tool integration idea or found a bug? Open an issue and letβs discuss it!
+
+
+---
+
+## Contribution Workflow & Best Practices
+
+Whether it's your first contribution or your fiftieth, here's what a great contribution looks like:
+
+| Step / Tip | Description |
+|-------------------------------|-----------------------------------------------------------------------------------------------|
+| **1. Fork the Repository** | Create a personal copy of [rowboatlabs/rowboat](https://github.com/rowboatlabs/rowboat) to start contributing. |
+| **2. Create a New Branch** | Use a descriptive name like `fix-tool-crash` or `feature-new-mcp`. Avoid committing to `main`. |
+| **3. Make Your Changes** | Focus your PR on a single issue or feature to keep things clean and reviewable. |
+| **4. Write Tests if Needed** | If you change logic, add relevant tests so your contribution is future-proof. |
+| **5. Run Tests & Lint Locally**| Make sure your branch passes all tests and code quality checks before pushing. |
+| **6. Document or Demo It** | Add helpful context: screenshots, example scripts, or a short video/gif to demonstrate your changes. |
+| **7. Submit a Pull Request** | Open a PR with a clear description of your changes and any context reviewers should know. |
+| **8. Collaborate on Feedback** | Our maintainers may leave comments β itβs all part of the process. Letβs improve it together. |
+| **9. Donβt Be Shy to Follow Up** | Feel free to ping the PR/issue if you're waiting on feedback. We appreciate polite nudges. |
+| **10. Celebrate the Merge!** | You just made Rowboat better. Thanks for contributing π |
+
+
+
+
+## What is RowBoat?
+**RowBoat is a state-of-art platform to build multi-agent AI systems in a visual interface, with the help of a copilot.**
+
+RowBoat enables you to build, manage and deploy user-facing assistants. An assistant is made up of multiple agents, each having access to a set of tools and working together to interact with the user as a single assistant. You can connect any MCP tools to the agents.
+
+For example, you can build a *credit card assistant*, where each agent handles a workflow such as *outstanding payments*, *balance inquiries* and *transaction disputes*. You can equip agents with tools to carry out tasks such as *fetching payment options*, *checking outstanding balance* and *updating user information*. The assistant would help your end-users their credit card-related needs without having to talk to a human agent on your end.
+
+---
+
+## How RowBoat works
+
+### RowBoat Studio
+RowBoat Studio lets you create AI agents in minutes, using a visual interface and plain language.
+There are key components that you will work with:
+- Agents
+- Playground
+- Copilot
+
+
+
+
+
+### Inspect the Output
+
+After applying the suggested agents, take a close look at each one's:
+- **Instructions**: Define how the agent behaves
+- **Examples**: Guide agent responses and tool use
+
+
+
+
+
+---
+
+## Updating Agent Behavior
+
+There are three ways to update an agent:
+
+### 1. With Copilot
+
+Copilot understands the current chat context and can help rewrite or improve an agent's behavior based on how it performed.
+
+
+
+
+
+
+
+### 2. Manual Edits
+
+You can always manually edit the agent's instructions.
+
+
+
+
+
+---
+
+
diff --git a/apps/docs/docs/using-rowboat/conversations.mdx b/apps/docs/docs/using-rowboat/conversations.mdx
new file mode 100644
index 000000000..c755f47d2
--- /dev/null
+++ b/apps/docs/docs/using-rowboat/conversations.mdx
@@ -0,0 +1,52 @@
+---
+title: "Conversations"
+description: "View and manage all conversations with your Rowboat agents"
+icon: "list-check"
+---
+
+## Overview
+
+The Conversations page in Rowboat shows you all the interactions between users and your agents. Here you can monitor conversations, view detailed message exchanges, and understand how your agents are performing.
+
+
+
+
+
+## What You'll See
+
+The Conversations page displays a list of all conversations organized by time:
+
+- **Today**: Recent conversations from today
+- **This week**: Conversations from the current week
+- **This month**: Conversations from the current month
+- **Older**: Conversations from previous months
+
+Each conversation shows:
+- **Conversation ID**: Unique identifier for the conversation
+- **Created time**: When the conversation started
+- **Reason**: What triggered the conversation (chat or job)
+
+## Viewing Conversation Details
+Click on any conversation to see the detailed view with all the message exchanges:
+
+
+
+
+
+**Conversation Metadata**: Shows the Conversation ID, creation time, and last update time.
+
+**Workflow**: Shows the workflow JSON
+
+**Turns**: Each conversation is made up of turns, where:
+- **Turn #1, #2, etc.**: Numbered sequence of interactions
+- **Reason badge**: Shows why each turn happened (chat, API, job, etc.)
+- **Timestamp**: When each turn occurred
+- **Input messages**: What was sent to your agents
+- **Output messages**: What your agents responded with
+
+### Turn Details
+
+Each turn displays:
+- **Input**: The messages sent to your agents (user messages, system messages)
+- **Output**: The responses from your agents
+- **Error information**: Any issues that occurred during processing
diff --git a/apps/docs/docs/using-rowboat/customise/custom-llms.mdx b/apps/docs/docs/using-rowboat/customise/custom-llms.mdx
new file mode 100644
index 000000000..dc87dc2f2
--- /dev/null
+++ b/apps/docs/docs/using-rowboat/customise/custom-llms.mdx
@@ -0,0 +1,53 @@
+---
+title: "Custom LLMs"
+description: "How to use and configure custom LLMs in Rowboat."
+
+---
+
+gpt-4.1 as the default model for agents and copilot. You can override these:
+
+ ```bash
+ export PROVIDER_DEFAULT_MODEL=claude-3-7-sonnet-latest
+ export PROVIDER_COPILOT_MODEL=gpt-4o
+ ```
+
+ **Notes:**
+ - Copilot is optimized for gpt-4o/gpt-4.1. We strongly recommend using these models for best results.
+ - You can use different models for the copilot and each agent, but all must be from the same provider (e.g., LiteLLM).
+ - Rowboat is provider-agnostic β any backend implementing the OpenAI messages format should work.
+ - OpenAI-specific tools (like web_search) will not function with non-OpenAI providers. Remove such tools to avoid errors.
+
+
+
+## What You'll See
+
+The Jobs page displays a list of all job runs from your triggers, including:
+
+- **External trigger executions** from webhook events
+- **One-time trigger runs** from scheduled jobs
+- **Recurring trigger executions** from cron-based schedules
+
+Each job run displays the following key information:
+- **Job ID**: Unique identifier for the job run
+- **Status**: Indicates if the job succeeded, failed, or is in progress
+- **Reason**: The trigger or cause for the job (e.g., external trigger, scheduled, cron)
+- **Created Time**: When the job was executed
+
+## Viewing Job Details
+
+### Expand a Job Run
+
+Click on any job run to expand it and see detailed information about what happened during execution:
+
+
+
+
+
+**Basic job details**: Job ID, Status, creation time, Updated time, Conversation ID and Turn ID. By clicking on the Conversation ID, you can view more in-depth details about the run.
+
+**Job Reason**: Why the job triggered - either external trigger, scheduled, or cron.
+
+**Job Input**: The input data sent to your assistant.
+
+**Job Output**: The final output produced by your agents.
\ No newline at end of file
diff --git a/apps/docs/docs/using-rowboat/rag.mdx b/apps/docs/docs/using-rowboat/rag.mdx
new file mode 100644
index 000000000..772d034d5
--- /dev/null
+++ b/apps/docs/docs/using-rowboat/rag.mdx
@@ -0,0 +1,68 @@
+---
+title: "RAG (Data)"
+description: "How to use our inbuilt RAG"
+icon: "database"
+---
+
+# Using RAG in Rowboat
+
+Rowboat provides multiple ways to enhance your agents' context with Retrieval-Augmented Generation (RAG). This guide will help you set up and use each RAG feature.
+
+
+
+
+
+## RAG Features
+
+### 1. Text RAG
+
+Process and reason over text content directly
+
+
+### 2. File Uploads
+
+- Upload PDF files directly from your device
+- **Open Source Version**: Files are stored locally on your machine
+- **Managed Version**: Files are stored in cloud S3 storage
+- Files are parsed using OpenAI by default
+
+
+
+
+## Tool Types
+
+| Tool Type | Description | Use Case | Availability |
+|-----------|-------------|----------|--------------|
+| **Library Tools** | Pre-built integrations with popular services | Quick setup, no configuration needed | Managed and open source |
+| **MCP Tools** | Custom tools from MCP servers | Custom functionality, specialized APIs | Managed and open source |
+| **Webhook Tools** | HTTP endpoints for custom integrations | Your own systems, custom workflows | Open source only |
+
+
+## Library (Composio Tools)
+
+- Browse a library of 500+ toolkits from popular services
+- With 3000+ tools to choose from!
+- Click on a service to see available tools and add them to your workflow
+- Users must create a Composio account and add their API key
+- Tools require authorization to work properly
+
+
+
+
+### Creating External Triggers
+
+1. **Click New External Trigger**: Start the trigger creation process
+2. **Select a Toolkit**: Browse available toolkits or search for specific services
+3. **Choose Trigger Type**: Select the specific trigger from available options, click configure
+4. **Authenticate**: Complete OAuth2 flow or enter API keys for the selected service (your preferred method)
+5. **Configure**: Set up event filters and data mapping if required
+6. **Deploy**: Activate the trigger to start listening for events
+
+### Local Setup
+
+If you're running the open source version of Rowboat, you'll need to set up external triggers manually. In the managed version, this is all handled automatically for you.
+
+
+
+
+### Creating One-Time Triggers
+1. Set the exact execution time (date and time)
+2. Configure the input messages for your agents
+3. Deploy to schedule the execution
+
+---
+
+## Recurring Triggers (Cron-based Jobs)
+
+Recurring triggers execute your agents on a repeating schedule using cron expressions. They're ideal for daily reports, periodic maintenance, regular data syncs, and continuous monitoring tasks.
+
+
+
+
+
+### Creating Recurring Triggers
+1. Define the cron expression (e.g., `0 9 * * *` for daily at 9 AM)
+2. Configure the recurring message structure
+3. Enable the trigger to start the recurring schedule
+
+### Common Cron Patterns
+```cron
+0 9 * * * # Daily at 9:00 AM
+0 8 * * 1 # Every Monday at 8:00 AM
+*/15 * * * * # Every 15 minutes
+0 0 1 * * # First day of month at midnight
+```
+
diff --git a/apps/docs/docs/using_rag.mdx b/apps/docs/docs/using_rag.mdx
new file mode 100644
index 000000000..52deefadf
--- /dev/null
+++ b/apps/docs/docs/using_rag.mdx
@@ -0,0 +1,103 @@
+# Using RAG in Rowboat
+
+Rowboat provides multiple ways to enhance your agents' context with Retrieval-Augmented Generation (RAG). This guide will help you set up and use each RAG features.
+
+## Quick Start
+
+Text RAG and local file uploads are enabled by default - no configuration needed! Just start using them right away.
+
+## RAG Features
+
+### 1. Text RAG
+β
Enabled by default:
+
+- Process and reason over text content directly
+- No configuration required
+
+### 2. Local File Uploads
+β
Enabled by default:
+
+- Upload PDF files directly from your device
+- Files are stored locally
+- No configuration required
+- Files are parsed using OpenAI by default
+- For larger files, we recommend using Gemini models - see section below.
+
+#### 2.1 Using Gemini for File Parsing
+To use Google's Gemini model for parsing uploaded PDFs, set the following variable:
+
+```bash
+# Enable Gemini for file parsing
+export USE_GEMINI_FILE_PARSING=true
+export GOOGLE_API_KEY=your_google_api_key
+```
+
+### 3. URL Scraping
+Rowboat uses Firecrawl for URL scraping. To enable URL scraping, set the following variables:
+
+```bash
+export USE_RAG_SCRAPING=true
+export FIRECRAWL_API_KEY=your_firecrawl_api_key
+```
+
+## Advanced RAG features
+
+### 1. File Uploads Backed by S3
+To enable S3 file uploads, set the following variables:
+
+```bash
+# Enable S3 uploads
+export USE_RAG_S3_UPLOADS=true
+
+# S3 Configuration
+export AWS_ACCESS_KEY_ID=your_access_key
+export AWS_SECRET_ACCESS_KEY=your_secret_key
+export RAG_UPLOADS_S3_BUCKET=your_bucket_name
+export RAG_UPLOADS_S3_REGION=your_region
+```
+
+### 2. Changing Default Parsing Model
+
+By default, uploaded PDF files are parsed using `gpt-4o`. You can customize this by setting the following:
+
+```bash
+# Override the default parsing model
+export FILE_PARSING_MODEL=your-preferred-model
+```
+
+You can also change the model provider like so:
+```bash
+# Optional: Override the parsing provider settings
+export FILE_PARSING_PROVIDER_BASE_URL=your-provider-base-url
+export FILE_PARSING_PROVIDER_API_KEY=your-provider-api-key
+```
+
+### 3. Embedding Model Options
+
+By default, Rowboat uses OpenAI's `text-embedding-3-small` model for generating embeddings. You can customize this by setting the following:
+
+```bash
+# Override the default embedding model
+export EMBEDDING_MODEL=your-preferred-model
+export EMBEDDING_VECTOR_SIZE=1536
+```
+
+**Important NOTE**
+
+The default size for the vectors index is 1536. If you change this value, then you must delete the index and set it up again:
+```bash
+docker-compose --profile delete_qdrant --profile qdrant up --build delete_qdrant qdrant
+```
+followed by:
+```bash
+./start # this will recreate the index
+```
+
+You can also change the model provider like so:
+```bash
+# Optional: Override the embedding provider settings
+export EMBEDDING_PROVIDER_BASE_URL=your-provider-base-url
+export EMBEDDING_PROVIDER_API_KEY=your-provider-api-key
+```
+
+If you don't specify the provider settings, Rowboat will use OpenAI as the default provider.
diff --git a/apps/docs/docs/videos/Intro-Video.gif b/apps/docs/docs/videos/Intro-Video.gif
new file mode 100644
index 000000000..d4eb387ef
Binary files /dev/null and b/apps/docs/docs/videos/Intro-Video.gif differ
diff --git a/apps/docs/docs/videos/intro.mp4 b/apps/docs/docs/videos/intro.mp4
new file mode 100644
index 000000000..4306a886e
Binary files /dev/null and b/apps/docs/docs/videos/intro.mp4 differ
diff --git a/apps/docs/public/videos/Intro-Video.gif b/apps/docs/public/videos/Intro-Video.gif
new file mode 100644
index 000000000..d4eb387ef
Binary files /dev/null and b/apps/docs/public/videos/Intro-Video.gif differ
diff --git a/apps/rowboat/app/actions/copilot.actions.ts b/apps/rowboat/app/actions/copilot.actions.ts
index 5712e0afe..de9b1baec 100644
--- a/apps/rowboat/app/actions/copilot.actions.ts
+++ b/apps/rowboat/app/actions/copilot.actions.ts
@@ -1,22 +1,25 @@
'use server';
-import {
+import {
CopilotAPIRequest,
CopilotChatContext, CopilotMessage,
DataSourceSchemaForCopilot,
-} from "../../src/application/lib/copilot/types";
+} from "../../src/entities/models/copilot";
import {
Workflow} from "../lib/types/workflow_types";
import { z } from 'zod';
import { projectAuthCheck } from "./project.actions";
-import { redisClient } from "../lib/redis";
import { authorizeUserAction, logUsage } from "./billing.actions";
import { USE_BILLING } from "../lib/feature_flags";
import { getEditAgentInstructionsResponse } from "../../src/application/lib/copilot/copilot";
import { container } from "@/di/container";
import { IUsageQuotaPolicy } from "@/src/application/policies/usage-quota.policy.interface";
import { UsageTracker } from "../lib/billing";
+import { authCheck } from "./auth.actions";
+import { ICreateCopilotCachedTurnController } from "@/src/interface-adapters/controllers/copilot/create-copilot-cached-turn.controller";
+import { BillingError } from "@/src/entities/errors/common";
const usageQuotaPolicy = container.resolve{filterByTriggers - ? 'Loading Composio toolkits with triggers...' + ? 'Loading toolkits with triggers...' : filterByTools - ? 'Loading Composio toolkits with tools...' - : 'Loading Composio toolkits...' + ? 'Loading toolkits with tools...' + : 'Loading toolkits...' }
diff --git a/apps/rowboat/app/projects/components/build-assistant-section.tsx b/apps/rowboat/app/projects/components/build-assistant-section.tsx index 4528917c8..50809578b 100644 --- a/apps/rowboat/app/projects/components/build-assistant-section.tsx +++ b/apps/rowboat/app/projects/components/build-assistant-section.tsx @@ -16,11 +16,35 @@ import { Tabs, Tab } from "@/components/ui/tabs"; import { Project } from "@/src/entities/models/project"; import { z } from "zod"; import Link from 'next/link'; +import { SHOW_PREBUILT_CARDS } from '@/app/lib/feature_flags'; const ITEMS_PER_PAGE = 6; +const copilotPrompts = { + "Blog assistant": { + prompt: "Build an assistant to help with writing a blog post and updating it on google docs", + emoji: "π" + }, + "Meeting prep workflow": { + prompt: "Build a meeting prep pipeline which takes a google calendar invite as input and performs research on the guests using Duckduckgo search and send an email to me", + emoji: "π " + }, + "Scheduling assistant": { + prompt: "Build a scheduling assistant that helps users manage their calendar, book meetings, find available time slots, send reminders, and optimize their daily schedule based on priorities and preferences", + emoji: "β " + }, + "Reddit & HN assistant": { + prompt: "Build an assistant that helps me with browsing Reddit and Hacker News", + emoji: "π" + }, + "CRM assistant": { + prompt: "Build an assistant that helps me with my CRM", + emoji: "π" + } +}; + export function BuildAssistantSection() { const [userPrompt, setUserPrompt] = useState(''); const [isCreating, setIsCreating] = useState(false); @@ -85,6 +109,12 @@ export function BuildAssistantSection() { await createProjectFromTemplate(templateId, router); }; + // Handle prompt card selection + const handlePromptSelect = (promptText: string) => { + setUserPrompt(promptText); + setPromptError(null); + }; + const fetchProjects = async () => { setProjectsLoading(true); try { @@ -310,6 +340,24 @@ export function BuildAssistantSection() { + + {/* Predefined Prompt Cards */} +