mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-04-26 08:56:22 +02:00
Replace db storage with api calls to klavis for list servers and add filters to hosted tool views Add logging and simplify oauth Refactor klavis API calls to go via a proxy Add projectAuthCheck() to klavis actions Fix build error in stream-response route.ts PARTIAL: Revamp tools modal PARTIAL: Manage mcp servers at project level document PARTIAL: Fetch tools from MCP servers upon toggle ON PARTIAL: Propogate hosted MCP tools to entity_list in build view Show tool toggle banner Add sync explicitly to prevent long page load time for MCP server's tools PARTIAL: Fix auth flow DB writes PARTIAL: Add tools with isready flag for auth-related server handling PARTIAL: Bring back sync tools CTA Fix tool selection issues PARTIAL: Fix sync issues with enriched and available tools and log unenriched tool names Remove buggy log statement Refactor common components and refactor HostedServer PARTIAL: Add custom servers and standardize the UI PARTIAL: Add modal and small UI improvements to custom servers page Show clubbed MCP tools in entity_list Add tool filters in tools section of entity_list Revert text in add tool CTA Make entity_list sections collapsed when one is expanded Merge project level tools to workflow level tools when sending requests to agent service Restore original panel-common variants Reduce agentic workflow request by removing tools from mcp servers Merge project level tools to workflow level tools when sending requests to copilot service Fix padding issues in entity_list headers Update package-lock.json Revert package* files to devg Revert tsconfig to dev PARTIAL: Change tabs and switch to heroui pending switch issues Fix switch issues with heroui Pass projectTools via workflow/app to entity_list and do not write to DB Fix issue with tool_config rendering and @ mentions for project tools Include @ mentioned project tools in agent request Update copilot usage of project tools Read mcp server url directly from tool config in agents service Make entity_list panels resizable Update resize handlers across the board Change Hosted MCP servers ---> Tools Library Remove tools filter Remove filter tabs in hosted tools Move tools selected / tools available labels below card titles Remove tools from config / settings page Bring back old mcp servers handling in agents service for backward compatibility as fallback Remove web_search from project template Add icons for agents, tools and prompts in entity_list Enable agents reordering in entity_list Fix build errors Make entity_list icons more transparent Add logos for hosted tools and fix importsg Fix server card component sizes and overflow Add error handling in hosted servers pageg Add node_modules to gitignore remove root package json add project auth checks revert to project mcpServers being optional refactor tool merging and conversion revert stream route change Move authURL klavis logic to klavis_actions Fix tool enrichment for post-auth tools and make logging less verbose Expand tool schema to include comprehensive json schema fields Add enabled and ready filters to hosted tools Add needs auth warning above auth button Update tools icon Add github and google client ids to docker-compose Clean up MCP servers upon project deletion Remove klavis ai label Improve server loading on and off UX Fix bug that was not enriching un-auth servers Add tool testing capabilities Fix un-blurred strip in tool testing modal view Disable server card CTAs during toggling on or off transition Add beta tag to tools Add tool and server counts Truncate long tool descriptions Add separators between filters in servers view Support multiple format types in tool testing fields Fix menu position issue for @ mentions |
||
|---|---|---|
| .. | ||
| configs | ||
| src | ||
| tests | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| __init__.py | ||
| Dockerfile | ||
| NOTICE.md | ||
| poetry.lock | ||
| pyproject.toml | ||
| README.md | ||
| requirements.txt | ||
🤖 Agents
📝 Overview
- RowBoat Agents is a multi-agent framework that powers conversations using agentic workflows.
- Built on top of OpenAI Swarm with custom enhancements and improvements. Check the NOTICE for attribution and licensing details (MIT license).
🕸️ Graph-based Framework
- Multi-agent systems are represented as graphs, where each agent is a node in the graph.
- RowBoat Agents accepts Directed Acyclic Graph (DAG) workflows, which define agents, tools, and their connections.
- Configure workflows using the RowBoat Studio (UI) with the help of an AI copilot. Setup instructions can be found in the main README.
- The framework is stateless, meaning that it requires the upstream service to pass in the current
stateandmessagesin every turn. - At each conversation turn:
- The agents are initialized using the current
state. - The graph is traversed based on
messages,state, andworkflow - Response
messagesand a newstateare generated. - If
messagescontain tool calls, the upstream service must invoke the necessary tools and send the tool results back to continue the interaction.
- The agents are initialized using the current
🗂️ Key Request and Response Fields
📤 Request
messages: List of user messagesstate: Active agent state and historiesworkflow: Graph of agents, tools, and connections
Example JSON: tests/sample_requests/default_example.json
📥 Response
messages: List of response messages (may contain tool calls)state: Updated state to pass in the next request (since the framework is stateless)
Example JSON: tests/sample_responses/default_example.json
🛠️ Using the Framework
Ensure you are in this directory (cd apps/agents from the root directory of this repo) before running any of the below commands.
⚙️ Set Up Conda Environment
conda create -n myenv python=3.12conda activate myenv- Note: Python >= 3.10 required
📦 Install Dependencies
If using poetry
pip install poetrypoetry install
If using pip
pip install -r requirements.txt
🔑 Set up .env file
Copy .env.example to .env and add your API keys
🧪 Run interactive test
python -m tests.interactive --config default_config.json --sample_request default_example.json --load_messages
--config: Config json filename, underconfigsfolder--sample_request: Path to the sample request file, undertests/sample_requestsfolder--load_messages: If set, it will additionally load the initial set of messages from the sample request file. Else, user input will be required starting from the first message.
🌐 Set up server
- First, add this directory to your PYTHONPATH, using:
export PYTHONPATH=$PYTHONPATH:$(pwd) - For local testing:
flask --app src.app.main run --port=4040 - To set up the server on a remote machine:
gunicorn -b 0.0.0.0:4040 src.app.main:app
🖥️ Run test client
python -m tests.app_client --sample_request default_example.json --api_key test
--sample_request: Path to the sample request file, undertests/sample_requestsfolder--api_key: API key to use for authentication. This is the same key as the one in the.envfile.
📖 More details
🔍 Specifics
- Format: Uses OpenAI's messages format when passing messages.
- LLMs: Currently, only OpenAI LLMs (e.g. gpt-4o, gpt-4o-mini) are supported. Easy to expand to other LLMs like Claude, Gemini or self-hosted models.
- Responses: Here are some examples of responses that the framework can return:
- A list of one user-facing message
- A list of one or more tool calls
- A list of one user-facing message and one or more tool calls
- ⚠️ Errors: Errors are thrown as a tool call
raise_errorwith the error message as the argument. Real-time error handling will be managed by the upstream service.
🗂️ Important directories and files
src/: Contains all source code for the agents appsrc/app/: Contains Flask app which exposes the framework as a servicesrc/graph/: Contains logic to run every turn of the conversationsrc/graph/core.py: Core graph implementation which parses the workflow config, creates agents from it and runs the turn of conversation (through therun_turnfunction)
src/swarm/: RowBoat's custom implementation of OpenAI Swarm, which is used bysrc/graph/core.py
tests/: Contains sample requests, an interactive client and a test client which mocks an upstream serviceconfigs/: Contains graph configurations (changed infrequently)tests/sample_requests/: Contains sample request files for the agents app
🔄 High-level flow
app/main.pyreceives the request JSON from an upstream service, parses it and sends it tosrc/graph/core.pysrc/graph/core.pycreates the agent graph object from scratch and usessrc/swarm/core.pyto run the turnsrc/swarm/core.pyruns the turn by performing actual LLM calls and internal tool invocations to transitiion between agentssrc/graph/core.pyreturns the response messages and the new state toapp/main.py, which relays it back to the upstream service- The upstream services appends any new user messages to the history of messages and sends the messages back along with the new state to
app/main.pyas part of the next request. The process repeats until the upstream service completes its conversation with the user.
🚫 Limitations
- Does not support streaming currently.
- Cannot respond with multiple user-facing messages in the same turn.
RowBoat Labs
🌐 Visit RowBoat Labs to learn more!