rossum-agent 1.0.0rc0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rossum_agent-1.0.0rc0/LICENSE +21 -0
- rossum_agent-1.0.0rc0/PKG-INFO +311 -0
- rossum_agent-1.0.0rc0/README.md +230 -0
- rossum_agent-1.0.0rc0/pyproject.toml +116 -0
- rossum_agent-1.0.0rc0/rossum_agent/__init__.py +9 -0
- rossum_agent-1.0.0rc0/rossum_agent/agent/__init__.py +32 -0
- rossum_agent-1.0.0rc0/rossum_agent/agent/core.py +932 -0
- rossum_agent-1.0.0rc0/rossum_agent/agent/memory.py +176 -0
- rossum_agent-1.0.0rc0/rossum_agent/agent/models.py +160 -0
- rossum_agent-1.0.0rc0/rossum_agent/agent/request_classifier.py +152 -0
- rossum_agent-1.0.0rc0/rossum_agent/agent/skills.py +132 -0
- rossum_agent-1.0.0rc0/rossum_agent/agent/types.py +5 -0
- rossum_agent-1.0.0rc0/rossum_agent/agent_logging.py +56 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/__init__.py +1 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/cli.py +51 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/dependencies.py +190 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/main.py +180 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/models/__init__.py +1 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/models/schemas.py +301 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/routes/__init__.py +1 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/routes/chats.py +95 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/routes/files.py +113 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/routes/health.py +44 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/routes/messages.py +218 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/services/__init__.py +1 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/services/agent_service.py +451 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/services/chat_service.py +197 -0
- rossum_agent-1.0.0rc0/rossum_agent/api/services/file_service.py +65 -0
- rossum_agent-1.0.0rc0/rossum_agent/assets/Primary_light_logo.png +0 -0
- rossum_agent-1.0.0rc0/rossum_agent/bedrock_client.py +64 -0
- rossum_agent-1.0.0rc0/rossum_agent/prompts/__init__.py +27 -0
- rossum_agent-1.0.0rc0/rossum_agent/prompts/base_prompt.py +80 -0
- rossum_agent-1.0.0rc0/rossum_agent/prompts/system_prompt.py +24 -0
- rossum_agent-1.0.0rc0/rossum_agent/py.typed +0 -0
- rossum_agent-1.0.0rc0/rossum_agent/redis_storage.py +482 -0
- rossum_agent-1.0.0rc0/rossum_agent/rossum_mcp_integration.py +123 -0
- rossum_agent-1.0.0rc0/rossum_agent/skills/hook-debugging.md +31 -0
- rossum_agent-1.0.0rc0/rossum_agent/skills/organization-setup.md +60 -0
- rossum_agent-1.0.0rc0/rossum_agent/skills/rossum-deployment.md +102 -0
- rossum_agent-1.0.0rc0/rossum_agent/skills/schema-patching.md +61 -0
- rossum_agent-1.0.0rc0/rossum_agent/skills/schema-pruning.md +23 -0
- rossum_agent-1.0.0rc0/rossum_agent/skills/ui-settings.md +45 -0
- rossum_agent-1.0.0rc0/rossum_agent/streamlit_app/__init__.py +1 -0
- rossum_agent-1.0.0rc0/rossum_agent/streamlit_app/app.py +646 -0
- rossum_agent-1.0.0rc0/rossum_agent/streamlit_app/beep_sound.py +36 -0
- rossum_agent-1.0.0rc0/rossum_agent/streamlit_app/cli.py +17 -0
- rossum_agent-1.0.0rc0/rossum_agent/streamlit_app/render_modules.py +123 -0
- rossum_agent-1.0.0rc0/rossum_agent/streamlit_app/response_formatting.py +305 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/__init__.py +214 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/core.py +173 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/deploy.py +404 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/dynamic_tools.py +365 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/file_tools.py +62 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/formula.py +187 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/skills.py +31 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/spawn_mcp.py +227 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/subagents/__init__.py +31 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/subagents/base.py +303 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/subagents/hook_debug.py +591 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/subagents/knowledge_base.py +305 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/subagents/mcp_helpers.py +47 -0
- rossum_agent-1.0.0rc0/rossum_agent/tools/subagents/schema_patching.py +471 -0
- rossum_agent-1.0.0rc0/rossum_agent/url_context.py +167 -0
- rossum_agent-1.0.0rc0/rossum_agent/user_detection.py +100 -0
- rossum_agent-1.0.0rc0/rossum_agent/utils.py +128 -0
- rossum_agent-1.0.0rc0/rossum_agent.egg-info/PKG-INFO +311 -0
- rossum_agent-1.0.0rc0/rossum_agent.egg-info/SOURCES.txt +81 -0
- rossum_agent-1.0.0rc0/rossum_agent.egg-info/dependency_links.txt +1 -0
- rossum_agent-1.0.0rc0/rossum_agent.egg-info/entry_points.txt +3 -0
- rossum_agent-1.0.0rc0/rossum_agent.egg-info/requires.txt +65 -0
- rossum_agent-1.0.0rc0/rossum_agent.egg-info/top_level.txt +1 -0
- rossum_agent-1.0.0rc0/setup.cfg +4 -0
- rossum_agent-1.0.0rc0/tests/test_agent_logging.py +204 -0
- rossum_agent-1.0.0rc0/tests/test_app_llm_response_formatting.py +492 -0
- rossum_agent-1.0.0rc0/tests/test_bedrock_client.py +191 -0
- rossum_agent-1.0.0rc0/tests/test_beep_sound.py +112 -0
- rossum_agent-1.0.0rc0/tests/test_dynamic_tools.py +825 -0
- rossum_agent-1.0.0rc0/tests/test_redis_storage.py +1105 -0
- rossum_agent-1.0.0rc0/tests/test_rossum_mcp_integration.py +261 -0
- rossum_agent-1.0.0rc0/tests/test_smoke.py +86 -0
- rossum_agent-1.0.0rc0/tests/test_url_context.py +245 -0
- rossum_agent-1.0.0rc0/tests/test_user_detection.py +191 -0
- rossum_agent-1.0.0rc0/tests/test_utils.py +371 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Rossum MCP Server Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: rossum-agent
|
|
3
|
+
Version: 1.0.0rc0
|
|
4
|
+
Summary: AI agent toolkit for Rossum: document workflows conversationally, debug pipelines automatically, and enable agentic configuration of intelligent document processing.
|
|
5
|
+
Author-email: "Dan Stancl (Rossum AI)" <daniel.stancl@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Keywords: agent,rossum,document-processing,ai
|
|
8
|
+
Classifier: Development Status :: 4 - Beta
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
16
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
17
|
+
Requires-Python: >=3.12
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: anthropic>=0.75.0
|
|
21
|
+
Requires-Dist: boto3>=1.0
|
|
22
|
+
Requires-Dist: cryptography>=41.0
|
|
23
|
+
Requires-Dist: ddgs>=9.9.0
|
|
24
|
+
Requires-Dist: fastmcp>=2.13.0
|
|
25
|
+
Requires-Dist: httpx>=0.27.0
|
|
26
|
+
Requires-Dist: jinja2>=3.0
|
|
27
|
+
Requires-Dist: PyJWT>=2.8
|
|
28
|
+
Requires-Dist: pyyaml>=6.0
|
|
29
|
+
Requires-Dist: python-dotenv
|
|
30
|
+
Requires-Dist: requests>=2.32
|
|
31
|
+
Requires-Dist: rossum-api>=3.8.0
|
|
32
|
+
Requires-Dist: rossum-deploy>=0.1.0
|
|
33
|
+
Requires-Dist: rossum-mcp>=1.0.0
|
|
34
|
+
Provides-Extra: api
|
|
35
|
+
Requires-Dist: fastapi>=0.115.0; extra == "api"
|
|
36
|
+
Requires-Dist: pydantic>2.0.0; extra == "api"
|
|
37
|
+
Requires-Dist: python-multipart>=0.0.22; extra == "api"
|
|
38
|
+
Requires-Dist: redis>=7.0.0; extra == "api"
|
|
39
|
+
Requires-Dist: slowapi>=0.1.9; extra == "api"
|
|
40
|
+
Requires-Dist: sse-starlette>=2.0.0; extra == "api"
|
|
41
|
+
Requires-Dist: uvicorn[standard]>=0.32.0; extra == "api"
|
|
42
|
+
Provides-Extra: docs
|
|
43
|
+
Requires-Dist: myst-parser>=2.0.0; extra == "docs"
|
|
44
|
+
Requires-Dist: sphinx>=7.0.0; extra == "docs"
|
|
45
|
+
Requires-Dist: sphinx-autodoc-typehints>=1.25.0; extra == "docs"
|
|
46
|
+
Requires-Dist: sphinx-copybutton>=0.5.2; extra == "docs"
|
|
47
|
+
Requires-Dist: sphinx-rtd-theme>=2.0.0; extra == "docs"
|
|
48
|
+
Provides-Extra: streamlit
|
|
49
|
+
Requires-Dist: pyperclip>=1.0; extra == "streamlit"
|
|
50
|
+
Requires-Dist: redis>=7.0.0; extra == "streamlit"
|
|
51
|
+
Requires-Dist: streamlit>=1.28.0; extra == "streamlit"
|
|
52
|
+
Provides-Extra: tests
|
|
53
|
+
Requires-Dist: coverage>=7.0.0; extra == "tests"
|
|
54
|
+
Requires-Dist: httpx>=0.27.0; extra == "tests"
|
|
55
|
+
Requires-Dist: pytest>=7.0.0; extra == "tests"
|
|
56
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "tests"
|
|
57
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "tests"
|
|
58
|
+
Requires-Dist: redis>=7.0.0; extra == "tests"
|
|
59
|
+
Requires-Dist: streamlit>=1.28.0; extra == "tests"
|
|
60
|
+
Provides-Extra: all
|
|
61
|
+
Requires-Dist: coverage>=7.0.0; extra == "all"
|
|
62
|
+
Requires-Dist: fastapi>=0.115.0; extra == "all"
|
|
63
|
+
Requires-Dist: httpx>=0.27.0; extra == "all"
|
|
64
|
+
Requires-Dist: myst-parser>=2.0.0; extra == "all"
|
|
65
|
+
Requires-Dist: pydantic>2.0.0; extra == "all"
|
|
66
|
+
Requires-Dist: pyperclip>=1.0; extra == "all"
|
|
67
|
+
Requires-Dist: pytest>=7.0.0; extra == "all"
|
|
68
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "all"
|
|
69
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "all"
|
|
70
|
+
Requires-Dist: python-multipart>=0.0.22; extra == "all"
|
|
71
|
+
Requires-Dist: redis>=7.0.0; extra == "all"
|
|
72
|
+
Requires-Dist: slowapi>=0.1.9; extra == "all"
|
|
73
|
+
Requires-Dist: sphinx>=7.0.0; extra == "all"
|
|
74
|
+
Requires-Dist: sphinx-autodoc-typehints>=1.25.0; extra == "all"
|
|
75
|
+
Requires-Dist: sphinx-copybutton>=0.5.2; extra == "all"
|
|
76
|
+
Requires-Dist: sphinx-rtd-theme>=2.0.0; extra == "all"
|
|
77
|
+
Requires-Dist: sse-starlette>=2.0.0; extra == "all"
|
|
78
|
+
Requires-Dist: streamlit>=1.28.0; extra == "all"
|
|
79
|
+
Requires-Dist: uvicorn[standard]>=0.32.0; extra == "all"
|
|
80
|
+
Dynamic: license-file
|
|
81
|
+
|
|
82
|
+
# Rossum Agent
|
|
83
|
+
|
|
84
|
+
<div align="center">
|
|
85
|
+
|
|
86
|
+
**AI agent for Rossum document processing. Debug hooks, deploy configs, and automate workflows conversationally.**
|
|
87
|
+
|
|
88
|
+
[](https://stancld.github.io/rossum-agents/)
|
|
89
|
+
[](https://www.python.org/downloads/)
|
|
90
|
+
[](https://opensource.org/licenses/MIT)
|
|
91
|
+
[](https://pypi.org/project/rossum-agent/)
|
|
92
|
+
[](https://codecov.io/gh/stancld/rossum-agents)
|
|
93
|
+
|
|
94
|
+
[](https://github.com/rossumai/rossum-api)
|
|
95
|
+
[](https://modelcontextprotocol.io/)
|
|
96
|
+
[](https://www.anthropic.com/claude/opus)
|
|
97
|
+
[](https://github.com/astral-sh/ruff)
|
|
98
|
+
[](https://github.com/astral-sh/ty)
|
|
99
|
+
[](https://github.com/astral-sh/uv)
|
|
100
|
+
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
> [!NOTE]
|
|
104
|
+
> Community-developed integration (not official Rossum). Early stage - breaking changes expected.
|
|
105
|
+
|
|
106
|
+
## Features
|
|
107
|
+
|
|
108
|
+
| Capability | Description |
|
|
109
|
+
|------------|-------------|
|
|
110
|
+
| **Rossum MCP Integration** | Full access to 50 MCP tools for document processing |
|
|
111
|
+
| **Hook Debugging** | Sandboxed execution with Opus sub-agent analysis |
|
|
112
|
+
| **Deployment Tools** | Pull, push, diff, copy configs across environments |
|
|
113
|
+
| **Knowledge Base Search** | AI-powered Rossum documentation search |
|
|
114
|
+
| **Multi-Environment** | Spawn connections to different Rossum environments |
|
|
115
|
+
| **Skills System** | Load domain-specific workflows on demand |
|
|
116
|
+
|
|
117
|
+
**Interfaces:** Streamlit UI, REST API, Python SDK
|
|
118
|
+
|
|
119
|
+
## Quick Start
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Set environment variables
|
|
123
|
+
export ROSSUM_API_TOKEN="your-api-token"
|
|
124
|
+
export ROSSUM_API_BASE_URL="https://api.elis.rossum.ai/v1"
|
|
125
|
+
export AWS_PROFILE="default" # For Bedrock
|
|
126
|
+
|
|
127
|
+
# Run the agent
|
|
128
|
+
uv pip install rossum-agent
|
|
129
|
+
rossum-agent
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Or with Docker:
|
|
133
|
+
```bash
|
|
134
|
+
docker-compose up rossum-agent
|
|
135
|
+
# Open http://localhost:8501
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Installation
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
git clone https://github.com/stancld/rossum-agents.git
|
|
142
|
+
cd rossum-mcp/rossum-agent
|
|
143
|
+
uv sync
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**With extras:**
|
|
147
|
+
```bash
|
|
148
|
+
uv sync --extra all # All extras (api, streamlit, docs, tests)
|
|
149
|
+
uv sync --extra api # REST API (FastAPI, Redis)
|
|
150
|
+
uv sync --extra streamlit # Streamlit UI only
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Environment Variables
|
|
154
|
+
|
|
155
|
+
| Variable | Required | Description |
|
|
156
|
+
|----------|----------|-------------|
|
|
157
|
+
| `ROSSUM_API_TOKEN` | Yes | Rossum API authentication token |
|
|
158
|
+
| `ROSSUM_API_BASE_URL` | Yes | Base URL (e.g., `https://api.elis.rossum.ai/v1`) |
|
|
159
|
+
| `AWS_PROFILE` | Yes | AWS profile for Bedrock access |
|
|
160
|
+
| `AWS_DEFAULT_REGION` | No | AWS region (default: `us-east-1`) |
|
|
161
|
+
| `REDIS_HOST` | No | Redis host for chat persistence |
|
|
162
|
+
| `REDIS_PORT` | No | Redis port (default: `6379`) |
|
|
163
|
+
|
|
164
|
+
## Usage
|
|
165
|
+
|
|
166
|
+
### Streamlit UI
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
rossum-agent
|
|
170
|
+
# Or: streamlit run rossum_agent/streamlit_app/app.py
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### REST API
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
rossum-agent-api --host 0.0.0.0 --port 8000
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Python SDK
|
|
180
|
+
|
|
181
|
+
```python
|
|
182
|
+
import asyncio
|
|
183
|
+
from rossum_agent.agent import create_agent
|
|
184
|
+
from rossum_agent.rossum_mcp_integration import create_mcp_connection
|
|
185
|
+
|
|
186
|
+
async def main():
|
|
187
|
+
mcp_connection = await create_mcp_connection()
|
|
188
|
+
agent = await create_agent(mcp_connection=mcp_connection)
|
|
189
|
+
|
|
190
|
+
async for step in agent.run("List all queues"):
|
|
191
|
+
if step.final_answer:
|
|
192
|
+
print(step.final_answer)
|
|
193
|
+
|
|
194
|
+
asyncio.run(main())
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Available Tools
|
|
198
|
+
|
|
199
|
+
The agent provides internal tools and access to 50+ MCP tools via dynamic loading.
|
|
200
|
+
|
|
201
|
+
<details>
|
|
202
|
+
<summary><strong>Internal Tools</strong></summary>
|
|
203
|
+
|
|
204
|
+
**File & Knowledge:**
|
|
205
|
+
- `write_file` - Save reports, documentation, analysis results
|
|
206
|
+
- `search_knowledge_base` - Search Rossum docs with AI analysis
|
|
207
|
+
|
|
208
|
+
**Hook Analysis:**
|
|
209
|
+
- `evaluate_python_hook` - Execute hooks in sandboxed environment
|
|
210
|
+
- `debug_hook` - Expert debugging with Opus sub-agent
|
|
211
|
+
|
|
212
|
+
**Schema:**
|
|
213
|
+
- `patch_schema_with_subagent` - Safe schema modifications via Opus
|
|
214
|
+
|
|
215
|
+
**Deployment:**
|
|
216
|
+
- `deploy_pull` - Pull configs from organization
|
|
217
|
+
- `deploy_diff` - Compare local vs remote
|
|
218
|
+
- `deploy_push` - Push local changes
|
|
219
|
+
- `deploy_copy_org` - Copy entire organization
|
|
220
|
+
- `deploy_copy_workspace` - Copy single workspace
|
|
221
|
+
- `deploy_compare_workspaces` - Compare two workspaces
|
|
222
|
+
- `deploy_to_org` - Deploy to target organization
|
|
223
|
+
|
|
224
|
+
**Multi-Environment:**
|
|
225
|
+
- `spawn_mcp_connection` - Connect to different Rossum environment
|
|
226
|
+
- `call_on_connection` - Call tools on spawned connection
|
|
227
|
+
- `close_connection` - Close spawned connection
|
|
228
|
+
|
|
229
|
+
**Skills:**
|
|
230
|
+
- `load_skill` - Load domain-specific workflows (`rossum-deployment`, `hook-debugging`)
|
|
231
|
+
|
|
232
|
+
</details>
|
|
233
|
+
|
|
234
|
+
<details>
|
|
235
|
+
<summary><strong>Dynamic MCP Tool Loading</strong></summary>
|
|
236
|
+
|
|
237
|
+
Tools are loaded on-demand to reduce context usage. Use `load_tool_category` to load tools by category:
|
|
238
|
+
|
|
239
|
+
| Category | Description |
|
|
240
|
+
|----------|-------------|
|
|
241
|
+
| `annotations` | Upload, retrieve, update, confirm documents |
|
|
242
|
+
| `queues` | Create, configure, list queues |
|
|
243
|
+
| `schemas` | Define, modify field structures |
|
|
244
|
+
| `engines` | Extraction and splitting engines |
|
|
245
|
+
| `hooks` | Extensions and webhooks |
|
|
246
|
+
| `email_templates` | Automated email responses |
|
|
247
|
+
| `document_relations` | Export/einvoice links |
|
|
248
|
+
| `relations` | Annotation relations |
|
|
249
|
+
| `rules` | Schema validation rules |
|
|
250
|
+
| `users` | User and role management |
|
|
251
|
+
| `workspaces` | Workspace management |
|
|
252
|
+
|
|
253
|
+
Categories are auto-loaded based on keywords in the user's message.
|
|
254
|
+
|
|
255
|
+
</details>
|
|
256
|
+
|
|
257
|
+
## Architecture
|
|
258
|
+
|
|
259
|
+
```mermaid
|
|
260
|
+
flowchart TB
|
|
261
|
+
subgraph UI["User Interface"]
|
|
262
|
+
S[Streamlit UI]
|
|
263
|
+
A[REST API]
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
subgraph Agent["Rossum Agent (Claude Bedrock)"]
|
|
267
|
+
IT[Internal Tools]
|
|
268
|
+
DT[Deploy Tools]
|
|
269
|
+
MT[Spawn MCP Tools]
|
|
270
|
+
SK[Skills System]
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
subgraph MCP["Rossum MCP Server"]
|
|
274
|
+
Tools[50 MCP Tools]
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
API[Rossum API]
|
|
278
|
+
|
|
279
|
+
UI --> Agent
|
|
280
|
+
Agent --> MCP
|
|
281
|
+
MCP --> API
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
<details>
|
|
285
|
+
<summary><strong>REST API Endpoints</strong></summary>
|
|
286
|
+
|
|
287
|
+
| Endpoint | Description |
|
|
288
|
+
|----------|-------------|
|
|
289
|
+
| `GET /api/v1/health` | Health check |
|
|
290
|
+
| `GET /api/v1/chats` | List all chats |
|
|
291
|
+
| `POST /api/v1/chats` | Create new chat |
|
|
292
|
+
| `GET /api/v1/chats/{id}` | Get chat details |
|
|
293
|
+
| `DELETE /api/v1/chats/{id}` | Delete chat |
|
|
294
|
+
| `POST /api/v1/chats/{id}/messages` | Send message (SSE) |
|
|
295
|
+
| `GET /api/v1/chats/{id}/files` | List files |
|
|
296
|
+
| `GET /api/v1/chats/{id}/files/{name}` | Download file |
|
|
297
|
+
|
|
298
|
+
API docs: `/api/docs` (Swagger) or `/api/redoc`
|
|
299
|
+
|
|
300
|
+
</details>
|
|
301
|
+
|
|
302
|
+
## License
|
|
303
|
+
|
|
304
|
+
MIT License - see [LICENSE](../LICENSE) for details.
|
|
305
|
+
|
|
306
|
+
## Resources
|
|
307
|
+
|
|
308
|
+
- [Full Documentation](https://stancld.github.io/rossum-agents/)
|
|
309
|
+
- [MCP Server README](../rossum-mcp/README.md)
|
|
310
|
+
- [Rossum API Documentation](https://rossum.app/api/docs/)
|
|
311
|
+
- [Main Repository](https://github.com/stancld/rossum-agents)
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# Rossum Agent
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
**AI agent for Rossum document processing. Debug hooks, deploy configs, and automate workflows conversationally.**
|
|
6
|
+
|
|
7
|
+
[](https://stancld.github.io/rossum-agents/)
|
|
8
|
+
[](https://www.python.org/downloads/)
|
|
9
|
+
[](https://opensource.org/licenses/MIT)
|
|
10
|
+
[](https://pypi.org/project/rossum-agent/)
|
|
11
|
+
[](https://codecov.io/gh/stancld/rossum-agents)
|
|
12
|
+
|
|
13
|
+
[](https://github.com/rossumai/rossum-api)
|
|
14
|
+
[](https://modelcontextprotocol.io/)
|
|
15
|
+
[](https://www.anthropic.com/claude/opus)
|
|
16
|
+
[](https://github.com/astral-sh/ruff)
|
|
17
|
+
[](https://github.com/astral-sh/ty)
|
|
18
|
+
[](https://github.com/astral-sh/uv)
|
|
19
|
+
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
> [!NOTE]
|
|
23
|
+
> Community-developed integration (not official Rossum). Early stage - breaking changes expected.
|
|
24
|
+
|
|
25
|
+
## Features
|
|
26
|
+
|
|
27
|
+
| Capability | Description |
|
|
28
|
+
|------------|-------------|
|
|
29
|
+
| **Rossum MCP Integration** | Full access to 50 MCP tools for document processing |
|
|
30
|
+
| **Hook Debugging** | Sandboxed execution with Opus sub-agent analysis |
|
|
31
|
+
| **Deployment Tools** | Pull, push, diff, copy configs across environments |
|
|
32
|
+
| **Knowledge Base Search** | AI-powered Rossum documentation search |
|
|
33
|
+
| **Multi-Environment** | Spawn connections to different Rossum environments |
|
|
34
|
+
| **Skills System** | Load domain-specific workflows on demand |
|
|
35
|
+
|
|
36
|
+
**Interfaces:** Streamlit UI, REST API, Python SDK
|
|
37
|
+
|
|
38
|
+
## Quick Start
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Set environment variables
|
|
42
|
+
export ROSSUM_API_TOKEN="your-api-token"
|
|
43
|
+
export ROSSUM_API_BASE_URL="https://api.elis.rossum.ai/v1"
|
|
44
|
+
export AWS_PROFILE="default" # For Bedrock
|
|
45
|
+
|
|
46
|
+
# Run the agent
|
|
47
|
+
uv pip install rossum-agent
|
|
48
|
+
rossum-agent
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Or with Docker:
|
|
52
|
+
```bash
|
|
53
|
+
docker-compose up rossum-agent
|
|
54
|
+
# Open http://localhost:8501
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Installation
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
git clone https://github.com/stancld/rossum-agents.git
|
|
61
|
+
cd rossum-mcp/rossum-agent
|
|
62
|
+
uv sync
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**With extras:**
|
|
66
|
+
```bash
|
|
67
|
+
uv sync --extra all # All extras (api, streamlit, docs, tests)
|
|
68
|
+
uv sync --extra api # REST API (FastAPI, Redis)
|
|
69
|
+
uv sync --extra streamlit # Streamlit UI only
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Environment Variables
|
|
73
|
+
|
|
74
|
+
| Variable | Required | Description |
|
|
75
|
+
|----------|----------|-------------|
|
|
76
|
+
| `ROSSUM_API_TOKEN` | Yes | Rossum API authentication token |
|
|
77
|
+
| `ROSSUM_API_BASE_URL` | Yes | Base URL (e.g., `https://api.elis.rossum.ai/v1`) |
|
|
78
|
+
| `AWS_PROFILE` | Yes | AWS profile for Bedrock access |
|
|
79
|
+
| `AWS_DEFAULT_REGION` | No | AWS region (default: `us-east-1`) |
|
|
80
|
+
| `REDIS_HOST` | No | Redis host for chat persistence |
|
|
81
|
+
| `REDIS_PORT` | No | Redis port (default: `6379`) |
|
|
82
|
+
|
|
83
|
+
## Usage
|
|
84
|
+
|
|
85
|
+
### Streamlit UI
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
rossum-agent
|
|
89
|
+
# Or: streamlit run rossum_agent/streamlit_app/app.py
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### REST API
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
rossum-agent-api --host 0.0.0.0 --port 8000
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Python SDK
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
import asyncio
|
|
102
|
+
from rossum_agent.agent import create_agent
|
|
103
|
+
from rossum_agent.rossum_mcp_integration import create_mcp_connection
|
|
104
|
+
|
|
105
|
+
async def main():
|
|
106
|
+
mcp_connection = await create_mcp_connection()
|
|
107
|
+
agent = await create_agent(mcp_connection=mcp_connection)
|
|
108
|
+
|
|
109
|
+
async for step in agent.run("List all queues"):
|
|
110
|
+
if step.final_answer:
|
|
111
|
+
print(step.final_answer)
|
|
112
|
+
|
|
113
|
+
asyncio.run(main())
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Available Tools
|
|
117
|
+
|
|
118
|
+
The agent provides internal tools and access to 50+ MCP tools via dynamic loading.
|
|
119
|
+
|
|
120
|
+
<details>
|
|
121
|
+
<summary><strong>Internal Tools</strong></summary>
|
|
122
|
+
|
|
123
|
+
**File & Knowledge:**
|
|
124
|
+
- `write_file` - Save reports, documentation, analysis results
|
|
125
|
+
- `search_knowledge_base` - Search Rossum docs with AI analysis
|
|
126
|
+
|
|
127
|
+
**Hook Analysis:**
|
|
128
|
+
- `evaluate_python_hook` - Execute hooks in sandboxed environment
|
|
129
|
+
- `debug_hook` - Expert debugging with Opus sub-agent
|
|
130
|
+
|
|
131
|
+
**Schema:**
|
|
132
|
+
- `patch_schema_with_subagent` - Safe schema modifications via Opus
|
|
133
|
+
|
|
134
|
+
**Deployment:**
|
|
135
|
+
- `deploy_pull` - Pull configs from organization
|
|
136
|
+
- `deploy_diff` - Compare local vs remote
|
|
137
|
+
- `deploy_push` - Push local changes
|
|
138
|
+
- `deploy_copy_org` - Copy entire organization
|
|
139
|
+
- `deploy_copy_workspace` - Copy single workspace
|
|
140
|
+
- `deploy_compare_workspaces` - Compare two workspaces
|
|
141
|
+
- `deploy_to_org` - Deploy to target organization
|
|
142
|
+
|
|
143
|
+
**Multi-Environment:**
|
|
144
|
+
- `spawn_mcp_connection` - Connect to different Rossum environment
|
|
145
|
+
- `call_on_connection` - Call tools on spawned connection
|
|
146
|
+
- `close_connection` - Close spawned connection
|
|
147
|
+
|
|
148
|
+
**Skills:**
|
|
149
|
+
- `load_skill` - Load domain-specific workflows (`rossum-deployment`, `hook-debugging`)
|
|
150
|
+
|
|
151
|
+
</details>
|
|
152
|
+
|
|
153
|
+
<details>
|
|
154
|
+
<summary><strong>Dynamic MCP Tool Loading</strong></summary>
|
|
155
|
+
|
|
156
|
+
Tools are loaded on-demand to reduce context usage. Use `load_tool_category` to load tools by category:
|
|
157
|
+
|
|
158
|
+
| Category | Description |
|
|
159
|
+
|----------|-------------|
|
|
160
|
+
| `annotations` | Upload, retrieve, update, confirm documents |
|
|
161
|
+
| `queues` | Create, configure, list queues |
|
|
162
|
+
| `schemas` | Define, modify field structures |
|
|
163
|
+
| `engines` | Extraction and splitting engines |
|
|
164
|
+
| `hooks` | Extensions and webhooks |
|
|
165
|
+
| `email_templates` | Automated email responses |
|
|
166
|
+
| `document_relations` | Export/einvoice links |
|
|
167
|
+
| `relations` | Annotation relations |
|
|
168
|
+
| `rules` | Schema validation rules |
|
|
169
|
+
| `users` | User and role management |
|
|
170
|
+
| `workspaces` | Workspace management |
|
|
171
|
+
|
|
172
|
+
Categories are auto-loaded based on keywords in the user's message.
|
|
173
|
+
|
|
174
|
+
</details>
|
|
175
|
+
|
|
176
|
+
## Architecture
|
|
177
|
+
|
|
178
|
+
```mermaid
|
|
179
|
+
flowchart TB
|
|
180
|
+
subgraph UI["User Interface"]
|
|
181
|
+
S[Streamlit UI]
|
|
182
|
+
A[REST API]
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
subgraph Agent["Rossum Agent (Claude Bedrock)"]
|
|
186
|
+
IT[Internal Tools]
|
|
187
|
+
DT[Deploy Tools]
|
|
188
|
+
MT[Spawn MCP Tools]
|
|
189
|
+
SK[Skills System]
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
subgraph MCP["Rossum MCP Server"]
|
|
193
|
+
Tools[50 MCP Tools]
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
API[Rossum API]
|
|
197
|
+
|
|
198
|
+
UI --> Agent
|
|
199
|
+
Agent --> MCP
|
|
200
|
+
MCP --> API
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
<details>
|
|
204
|
+
<summary><strong>REST API Endpoints</strong></summary>
|
|
205
|
+
|
|
206
|
+
| Endpoint | Description |
|
|
207
|
+
|----------|-------------|
|
|
208
|
+
| `GET /api/v1/health` | Health check |
|
|
209
|
+
| `GET /api/v1/chats` | List all chats |
|
|
210
|
+
| `POST /api/v1/chats` | Create new chat |
|
|
211
|
+
| `GET /api/v1/chats/{id}` | Get chat details |
|
|
212
|
+
| `DELETE /api/v1/chats/{id}` | Delete chat |
|
|
213
|
+
| `POST /api/v1/chats/{id}/messages` | Send message (SSE) |
|
|
214
|
+
| `GET /api/v1/chats/{id}/files` | List files |
|
|
215
|
+
| `GET /api/v1/chats/{id}/files/{name}` | Download file |
|
|
216
|
+
|
|
217
|
+
API docs: `/api/docs` (Swagger) or `/api/redoc`
|
|
218
|
+
|
|
219
|
+
</details>
|
|
220
|
+
|
|
221
|
+
## License
|
|
222
|
+
|
|
223
|
+
MIT License - see [LICENSE](../LICENSE) for details.
|
|
224
|
+
|
|
225
|
+
## Resources
|
|
226
|
+
|
|
227
|
+
- [Full Documentation](https://stancld.github.io/rossum-agents/)
|
|
228
|
+
- [MCP Server README](../rossum-mcp/README.md)
|
|
229
|
+
- [Rossum API Documentation](https://rossum.app/api/docs/)
|
|
230
|
+
- [Main Repository](https://github.com/stancld/rossum-agents)
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "rossum-agent"
|
|
7
|
+
version = "1.0.0rc0"
|
|
8
|
+
description = "AI agent toolkit for Rossum: document workflows conversationally, debug pipelines automatically, and enable agentic configuration of intelligent document processing."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "Dan Stancl (Rossum AI)", email = "daniel.stancl@gmail.com"}
|
|
14
|
+
]
|
|
15
|
+
keywords = ["agent", "rossum", "document-processing", "ai"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 4 - Beta",
|
|
18
|
+
"License :: OSI Approved :: MIT License",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Programming Language :: Python :: 3.12",
|
|
21
|
+
"Programming Language :: Python :: 3.13",
|
|
22
|
+
"Programming Language :: Python :: 3.14",
|
|
23
|
+
"Intended Audience :: Developers",
|
|
24
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
25
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
26
|
+
]
|
|
27
|
+
dependencies = [
|
|
28
|
+
"anthropic>=0.75.0",
|
|
29
|
+
"boto3>=1.0",
|
|
30
|
+
"cryptography>=41.0",
|
|
31
|
+
"ddgs>=9.9.0",
|
|
32
|
+
"fastmcp>=2.13.0",
|
|
33
|
+
"httpx>=0.27.0",
|
|
34
|
+
"jinja2>=3.0",
|
|
35
|
+
"PyJWT>=2.8",
|
|
36
|
+
"pyyaml>=6.0",
|
|
37
|
+
"python-dotenv",
|
|
38
|
+
"requests>=2.32",
|
|
39
|
+
"rossum-api>=3.8.0",
|
|
40
|
+
"rossum-deploy>=0.1.0",
|
|
41
|
+
"rossum-mcp>=1.0.0",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
[project.scripts]
|
|
45
|
+
rossum-agent = "rossum_agent.streamlit_app.cli:main"
|
|
46
|
+
rossum-agent-api = "rossum_agent.api.main:main"
|
|
47
|
+
|
|
48
|
+
[project.optional-dependencies]
|
|
49
|
+
api = [
|
|
50
|
+
"fastapi>=0.115.0",
|
|
51
|
+
"pydantic>2.0.0",
|
|
52
|
+
"python-multipart>=0.0.22",
|
|
53
|
+
"redis>=7.0.0",
|
|
54
|
+
"slowapi>=0.1.9",
|
|
55
|
+
"sse-starlette>=2.0.0",
|
|
56
|
+
"uvicorn[standard]>=0.32.0",
|
|
57
|
+
]
|
|
58
|
+
docs = [
|
|
59
|
+
"myst-parser>=2.0.0",
|
|
60
|
+
"sphinx>=7.0.0",
|
|
61
|
+
"sphinx-autodoc-typehints>=1.25.0",
|
|
62
|
+
"sphinx-copybutton>=0.5.2",
|
|
63
|
+
"sphinx-rtd-theme>=2.0.0",
|
|
64
|
+
]
|
|
65
|
+
streamlit = [
|
|
66
|
+
"pyperclip>=1.0",
|
|
67
|
+
"redis>=7.0.0",
|
|
68
|
+
"streamlit>=1.28.0",
|
|
69
|
+
]
|
|
70
|
+
tests = [
|
|
71
|
+
"coverage>=7.0.0",
|
|
72
|
+
"httpx>=0.27.0",
|
|
73
|
+
"pytest>=7.0.0",
|
|
74
|
+
"pytest-asyncio>=0.21.0",
|
|
75
|
+
"pytest-cov>=4.0.0",
|
|
76
|
+
"redis>=7.0.0",
|
|
77
|
+
"streamlit>=1.28.0",
|
|
78
|
+
]
|
|
79
|
+
all = [
|
|
80
|
+
"coverage>=7.0.0",
|
|
81
|
+
"fastapi>=0.115.0",
|
|
82
|
+
"httpx>=0.27.0",
|
|
83
|
+
"myst-parser>=2.0.0",
|
|
84
|
+
"pydantic>2.0.0",
|
|
85
|
+
"pyperclip>=1.0",
|
|
86
|
+
"pytest>=7.0.0",
|
|
87
|
+
"pytest-asyncio>=0.21.0",
|
|
88
|
+
"pytest-cov>=4.0.0",
|
|
89
|
+
"python-multipart>=0.0.22",
|
|
90
|
+
"redis>=7.0.0",
|
|
91
|
+
"slowapi>=0.1.9",
|
|
92
|
+
"sphinx>=7.0.0",
|
|
93
|
+
"sphinx-autodoc-typehints>=1.25.0",
|
|
94
|
+
"sphinx-copybutton>=0.5.2",
|
|
95
|
+
"sphinx-rtd-theme>=2.0.0",
|
|
96
|
+
"sse-starlette>=2.0.0",
|
|
97
|
+
"streamlit>=1.28.0",
|
|
98
|
+
"uvicorn[standard]>=0.32.0",
|
|
99
|
+
]
|
|
100
|
+
|
|
101
|
+
[tool.pytest.ini_options]
|
|
102
|
+
markers = [
|
|
103
|
+
"smoke: smoke tests requiring real API credentials (ROSSUM_API_TOKEN, ROSSUM_API_BASE_URL)"
|
|
104
|
+
]
|
|
105
|
+
asyncio_mode = "auto"
|
|
106
|
+
|
|
107
|
+
[tool.setuptools.packages.find]
|
|
108
|
+
include = ["rossum_mcp*", "rossum_agent*", "rossum_deploy*"]
|
|
109
|
+
|
|
110
|
+
[tool.setuptools.package-data]
|
|
111
|
+
rossum_agent = ["assets/*.png", "skills/*.md"]
|
|
112
|
+
|
|
113
|
+
[dependency-groups]
|
|
114
|
+
dev = [
|
|
115
|
+
"pytest>=9.0.2",
|
|
116
|
+
]
|