synapse-framework 0.2.4__tar.gz → 0.2.6__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.
- synapse_framework-0.2.6/PKG-INFO +690 -0
- synapse_framework-0.2.6/README.md +636 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/pyproject.toml +10 -3
- synapse_framework-0.2.6/synapse/__init__.py +55 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/app.py +351 -108
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/cli.py +25 -6
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/connectors/__init__.py +1 -2
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/connectors/base.py +8 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/connectors/factory.py +37 -16
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/connectors/mcp_wrapper.py +23 -7
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/connectors/notion.py +22 -15
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/database/memory.py +20 -15
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/database/pgvector.py +9 -2
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/database/qdrant.py +12 -1
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/embeddings/base.py +72 -14
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/export/__init__.py +2 -0
- synapse_framework-0.2.6/synapse/export/mcp_exporter.py +407 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/graph/base.py +18 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/graph/neo4j_store.py +5 -2
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/graph/networkx_store.py +32 -8
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/models/base.py +12 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/models/gemini.py +10 -2
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/models/ollama.py +137 -31
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/models/openai.py +10 -2
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/oauth/google.py +29 -13
- synapse_framework-0.2.6/synapse/py.typed +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/rag/chunker.py +10 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/rag/hybrid_rag.py +21 -9
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/resource/resource.py +36 -6
- synapse_framework-0.2.6/synapse/skills/__init__.py +19 -0
- synapse_framework-0.2.6/synapse/skills/premade/SKILL.md +21 -0
- synapse_framework-0.2.6/synapse/skills/premade/knowledge_graph/SKILL.md +21 -0
- synapse_framework-0.2.6/synapse/skills/premade/mcp_orchestrator/SKILL.md +19 -0
- synapse_framework-0.2.6/synapse/skills/premade/mlflow_evaluator/SKILL.md +23 -0
- synapse_framework-0.2.6/synapse/skills/premade/rag_analyst/SKILL.md +18 -0
- synapse_framework-0.2.6/synapse/skills/premade/template/SKILL.md +40 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/skills/skill.py +149 -3
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/storage/graph_exporter.py +7 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/storage/vector_store.py +31 -2
- synapse_framework-0.2.6/synapse/telemetry/__init__.py +13 -0
- synapse_framework-0.2.6/synapse/telemetry/mlflow_tracker.py +259 -0
- synapse_framework-0.2.6/synapse_framework.egg-info/PKG-INFO +690 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse_framework.egg-info/SOURCES.txt +12 -1
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse_framework.egg-info/requires.txt +6 -2
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/tests/test_chunker.py +1 -1
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/tests/test_connectors.py +28 -1
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/tests/test_embeddings.py +7 -7
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/tests/test_export.py +4 -5
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/tests/test_graph.py +1 -1
- synapse_framework-0.2.6/tests/test_mcp_validation.py +74 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/tests/test_rag.py +1 -1
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/tests/test_skills_and_resources.py +56 -9
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/tests/test_storage_pluggability.py +7 -9
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/tests/test_synapse_library.py +25 -11
- synapse_framework-0.2.6/tests/test_telemetry_mlflow.py +78 -0
- synapse_framework-0.2.4/PKG-INFO +0 -415
- synapse_framework-0.2.4/README.md +0 -364
- synapse_framework-0.2.4/synapse/__init__.py +0 -207
- synapse_framework-0.2.4/synapse/export/mcp_exporter.py +0 -202
- synapse_framework-0.2.4/synapse/skills/__init__.py +0 -5
- synapse_framework-0.2.4/synapse_framework.egg-info/PKG-INFO +0 -415
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/LICENSE +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/setup.cfg +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/config.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/connectors/gmail.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/connectors/photos.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/database/__init__.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/database/base.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/database/chroma.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/embeddings/__init__.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/graph/__init__.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/graph/memory.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/inspector/__init__.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/inspector/template.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/models/__init__.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/oauth/__init__.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/oauth/notion.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/rag/__init__.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/resource/__init__.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/resources/__init__.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/storage/__init__.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse/storage/graph_store.py +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse_framework.egg-info/dependency_links.txt +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse_framework.egg-info/entry_points.txt +0 -0
- {synapse_framework-0.2.4 → synapse_framework-0.2.6}/synapse_framework.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,690 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: synapse-framework
|
|
3
|
+
Version: 0.2.6
|
|
4
|
+
Summary: Modular Multi-MCP & Hybrid RAG AI Application Framework
|
|
5
|
+
Author: Synapse Contributors
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/AKASH-KUMAR-BARPANDA/synapse-framework
|
|
8
|
+
Project-URL: Repository, https://github.com/AKASH-KUMAR-BARPANDA/synapse-framework
|
|
9
|
+
Project-URL: Issues, https://github.com/AKASH-KUMAR-BARPANDA/synapse-framework/issues
|
|
10
|
+
Keywords: mcp,rag,agents,knowledge-graph,fastapi,claude,cursor,ollama,chromadb,qdrant,networkx,ai
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: chromadb>=1.5.9
|
|
24
|
+
Requires-Dist: fastapi[standard]>=0.142.2
|
|
25
|
+
Requires-Dist: fastembed>=0.8.1
|
|
26
|
+
Requires-Dist: google-api-python-client>=2.201.0
|
|
27
|
+
Requires-Dist: google-auth-httplib2>=0.4.4
|
|
28
|
+
Requires-Dist: google-auth-oauthlib>=1.5.0
|
|
29
|
+
Requires-Dist: httpx>=0.28.1
|
|
30
|
+
Requires-Dist: langchain>=1.4.3
|
|
31
|
+
Requires-Dist: langchain-chroma>=1.1.0
|
|
32
|
+
Requires-Dist: langchain-community>=0.4.2
|
|
33
|
+
Requires-Dist: langchain-core>=1.6.7
|
|
34
|
+
Requires-Dist: langchain-ollama>=1.1.0
|
|
35
|
+
Requires-Dist: matplotlib>=3.8.0
|
|
36
|
+
Requires-Dist: mcp>=2.3.0
|
|
37
|
+
Requires-Dist: networkx>=3.2
|
|
38
|
+
Requires-Dist: pydantic>=2.13.5
|
|
39
|
+
Requires-Dist: uvicorn>=0.30.0
|
|
40
|
+
Provides-Extra: mlflow
|
|
41
|
+
Requires-Dist: mlflow>=2.15.0; extra == "mlflow"
|
|
42
|
+
Provides-Extra: qdrant
|
|
43
|
+
Requires-Dist: qdrant-client>=1.12.0; extra == "qdrant"
|
|
44
|
+
Provides-Extra: all
|
|
45
|
+
Requires-Dist: mlflow>=2.15.0; extra == "all"
|
|
46
|
+
Requires-Dist: qdrant-client>=1.12.0; extra == "all"
|
|
47
|
+
Provides-Extra: dev
|
|
48
|
+
Requires-Dist: bandit>=1.9.0; extra == "dev"
|
|
49
|
+
Requires-Dist: build>=1.2.0; extra == "dev"
|
|
50
|
+
Requires-Dist: pip-audit>=2.8.0; extra == "dev"
|
|
51
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
52
|
+
Requires-Dist: twine>=6.0.0; extra == "dev"
|
|
53
|
+
Dynamic: license-file
|
|
54
|
+
|
|
55
|
+
<p align="center">
|
|
56
|
+
<img src="assets/logo.png" width="140" height="140" alt="Synapse Logo" style="border-radius: 28px; box-shadow: 0 16px 40px rgba(0,0,0,0.45);"/>
|
|
57
|
+
</p>
|
|
58
|
+
|
|
59
|
+
<h1 align="center">Synapse</h1>
|
|
60
|
+
|
|
61
|
+
<p align="center">
|
|
62
|
+
<b>Unified Framework for Model Context Protocol (MCP) Orchestration, Dual-Channel Hybrid RAG, and Autonomous AI Applications</b>
|
|
63
|
+
</p>
|
|
64
|
+
|
|
65
|
+
<p align="center">
|
|
66
|
+
<a href="https://pypi.org/project/synapse-framework/"><img src="https://img.shields.io/pypi/v/synapse-framework.svg?color=4F46E5&label=PyPI%20Version" alt="PyPI version"/></a>
|
|
67
|
+
<a href="https://pypi.org/project/synapse-framework/"><img src="https://img.shields.io/pypi/pyversions/synapse-framework.svg?color=0EA5E9" alt="Python Versions"/></a>
|
|
68
|
+
<a href="https://github.com/AKASH-KUMAR-BARPANDA/synapse-framework/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-gray.svg" alt="License: MIT"/></a>
|
|
69
|
+
<a href="https://github.com/AKASH-KUMAR-BARPANDA/synapse-framework/actions"><img src="https://img.shields.io/badge/Tests-31%20Passed-10B981.svg" alt="Tests"/></a>
|
|
70
|
+
<a href="https://github.com/PyCQA/bandit"><img src="https://img.shields.io/badge/Security-Bandit%20Audit%20Passed-10B981.svg" alt="Bandit Security"/></a>
|
|
71
|
+
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/badge/Linter-Ruff%20Clean-06B6D4.svg" alt="Ruff Clean"/></a>
|
|
72
|
+
</p>
|
|
73
|
+
|
|
74
|
+
<p align="center">
|
|
75
|
+
<a href="#quickstart">Quickstart</a> •
|
|
76
|
+
<a href="#use-cases">Use Cases</a> •
|
|
77
|
+
<a href="#architecture">Architecture</a> •
|
|
78
|
+
<a href="#hybrid-rag">Hybrid RAG</a> •
|
|
79
|
+
<a href="#mcp-orchestration">MCP Orchestration</a> •
|
|
80
|
+
<a href="#models">Inference Engines</a> •
|
|
81
|
+
<a href="#storage">Pluggable Storage</a> •
|
|
82
|
+
<a href="#skills">Agent Skills</a> •
|
|
83
|
+
<a href="#telemetry">MLflow Telemetry</a> •
|
|
84
|
+
<a href="#inspector">Developer UI</a> •
|
|
85
|
+
<a href="#endpoints">API Specs</a> •
|
|
86
|
+
<a href="#benchmarks">Benchmarks</a>
|
|
87
|
+
</p>
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## ✦ Overview
|
|
92
|
+
|
|
93
|
+
**Synapse** is an open-source Python framework engineered for building reliable, production-grade AI assistants, autonomous multi-tool agents, and enterprise backend services.
|
|
94
|
+
|
|
95
|
+
Modern AI systems face two core engineering challenges:
|
|
96
|
+
1. **Context Grounding**: Pure vector search matches semantic similarity within isolated text chunks, but fails to traverse multi-hop relationships between entities (for example, *which services depend on a database managed by a specific engineering squad*). Synapse solves this by coupling **dense vector search** with **directed relational knowledge graphs** into a unified **Dual-Channel Hybrid RAG** engine.
|
|
97
|
+
2. **Tool Execution & Interoperability**: AI frameworks often require brittle parsing glue code, non-standardized schemas, and custom network protocols. Synapse standardizes on Anthropic's **Model Context Protocol (MCP)**, allowing Python functions and external servers to be automatically schema-validated, dynamically discovered, and executed by both backend services and desktop IDEs like Claude Desktop and Cursor.
|
|
98
|
+
|
|
99
|
+
Synapse integrates inference across self-hosted open-weights models (**Ollama**) and frontier cloud APIs (**Google Gemini**, **OpenAI**), pairing runtime execution with a built-in **Developer Web Inspector** and **3D WebGL Knowledge Graph Visualizer**.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
<a id="architecture"></a>
|
|
104
|
+
## ✦ Architecture & Request Lifecycle
|
|
105
|
+
|
|
106
|
+
```mermaid
|
|
107
|
+
flowchart TD
|
|
108
|
+
subgraph Clients ["Clients & External Hosts"]
|
|
109
|
+
Web["Web Inspector Dashboard (/inspector)"]
|
|
110
|
+
IDE["Cursor / Claude Desktop (Stdio MCP)"]
|
|
111
|
+
API["REST & SSE Clients (POST /chat)"]
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
subgraph SynapseApp ["Synapse Core (BaseApp)"]
|
|
115
|
+
Lifespan["FastAPI Lifespan Router"]
|
|
116
|
+
Tracer["Real-Time Execution Tracer"]
|
|
117
|
+
|
|
118
|
+
subgraph Pipeline ["Reasoning & Orchestration Engine"]
|
|
119
|
+
Dispatcher["Deterministic Tool & Skill Dispatcher"]
|
|
120
|
+
RAG["Dual-Channel Hybrid RAG Engine"]
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
subgraph Inference ["Pluggable Inference Engines"]
|
|
125
|
+
OLL["Ollama (Qwen 2.5, Llama 3, Mistral)"]
|
|
126
|
+
GEM["Google Gemini 1.5 / 2.0"]
|
|
127
|
+
OAI["OpenAI (GPT-4o, mini) / vLLM"]
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
subgraph DualRAG ["Dual-Channel Retrieval Storage"]
|
|
131
|
+
VectorDB[("Vector Storage: ChromaDB / Qdrant / In-Memory")]
|
|
132
|
+
GraphDB[("Knowledge Graph: NetworkX / Neo4j")]
|
|
133
|
+
ONNX["FastEmbed ONNX Runtime (BGE / MiniLM)"]
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
subgraph Tooling ["Multi-MCP Tool Ecosystem"]
|
|
137
|
+
CustomTools["Dynamic Python Tools (makeconnectors)"]
|
|
138
|
+
OAuthTools["Productivity Connectors (Gmail, Notion, Photos)"]
|
|
139
|
+
StdioMCP["External FastMCP / Subprocess Servers"]
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
Web --> Lifespan
|
|
143
|
+
API --> Lifespan
|
|
144
|
+
IDE -.->|stdio / SSE| CustomTools
|
|
145
|
+
|
|
146
|
+
Lifespan --> Tracer
|
|
147
|
+
Lifespan --> Dispatcher
|
|
148
|
+
Dispatcher <--> RAG
|
|
149
|
+
RAG <--> VectorDB
|
|
150
|
+
RAG <--> GraphDB
|
|
151
|
+
VectorDB --- ONNX
|
|
152
|
+
Dispatcher <--> Inference
|
|
153
|
+
Dispatcher <--> Tooling
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
<a id="installation"></a>
|
|
159
|
+
## ✦ Installation
|
|
160
|
+
|
|
161
|
+
Install the core framework from PyPI:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
pip install synapse-framework
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Or using `uv`:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
uv add synapse-framework
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Optional Extras
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# MLflow experiment tracking and RAG evaluation metrics
|
|
177
|
+
pip install "synapse-framework[mlflow]"
|
|
178
|
+
|
|
179
|
+
# Distributed Qdrant vector database connector
|
|
180
|
+
pip install "synapse-framework[qdrant]"
|
|
181
|
+
|
|
182
|
+
# Complete suite of database drivers, telemetry, and optional tools
|
|
183
|
+
pip install "synapse-framework[all]"
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
<a id="quickstart"></a>
|
|
189
|
+
## ✦ Quickstart (10 Lines)
|
|
190
|
+
|
|
191
|
+
Spin up an operational AI assistant with typed tools and an interactive developer dashboard in ten lines of Python:
|
|
192
|
+
|
|
193
|
+
```python
|
|
194
|
+
from synapse import BaseApp
|
|
195
|
+
from synapse.connectors import makeconnectors
|
|
196
|
+
from synapse.models import ollama
|
|
197
|
+
|
|
198
|
+
def get_market_quote(ticker: str) -> dict:
|
|
199
|
+
"""Fetches real-time price, trading volume, and currency for a financial asset."""
|
|
200
|
+
return {"ticker": ticker.upper(), "price": 182.45, "volume": "54.2M", "currency": "USD"}
|
|
201
|
+
|
|
202
|
+
market_tools = makeconnectors(name="market_data", tools=get_market_quote)
|
|
203
|
+
app = BaseApp(title="MarketAssistant", model=ollama("qwen2.5:0.5b"), connectors=[market_tools])
|
|
204
|
+
|
|
205
|
+
if __name__ == "__main__":
|
|
206
|
+
app.run(port=8000)
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Access Built-In Developer Interfaces
|
|
210
|
+
|
|
211
|
+
- **Real-Time Web Inspector**: [http://127.0.0.1:8000/inspector](http://127.0.0.1:8000/inspector)
|
|
212
|
+
- **Interactive 3D Knowledge Graph**: [http://127.0.0.1:8000/graph/export](http://127.0.0.1:8000/graph/export)
|
|
213
|
+
- **Interactive OpenAPI Documentation**: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)
|
|
214
|
+
|
|
215
|
+
### Query via Server-Sent Events (SSE)
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
curl -N -X POST http://127.0.0.1:8000/chat \
|
|
219
|
+
-H "Content-Type: application/json" \
|
|
220
|
+
-d '{"message": "What is the current market quote for AAPL?"}'
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
```text
|
|
224
|
+
event: context
|
|
225
|
+
data: {"chunks": [], "graph_triples": ["MARKET_DATA -> CONTAINS -> GET_MARKET_QUOTE"], "tool_called": "get_market_quote"}
|
|
226
|
+
|
|
227
|
+
event: delta
|
|
228
|
+
data: {"token": "AAPL is currently trading at $182.45 USD with a 24-hour volume of 54.2M."}
|
|
229
|
+
|
|
230
|
+
event: done
|
|
231
|
+
data: {}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
<a id="use-cases"></a>
|
|
237
|
+
## ✦ Production Use Cases
|
|
238
|
+
|
|
239
|
+
### Use Case 1: Enterprise Infrastructure & Incident Response Assistant
|
|
240
|
+
|
|
241
|
+
In production environments, Site Reliability Engineers (SREs) need to query running service metrics and cross-reference documentation, dependencies, and on-call schedules. Vector search alone cannot resolve dependency chains; Synapse traverses graph relations alongside operational runbooks.
|
|
242
|
+
|
|
243
|
+
```python
|
|
244
|
+
from synapse import BaseApp
|
|
245
|
+
from synapse.connectors import makeconnectors
|
|
246
|
+
from synapse.database import chromadb
|
|
247
|
+
from synapse.graph import networkx
|
|
248
|
+
from synapse.models import ollama
|
|
249
|
+
from synapse.resource import Resource
|
|
250
|
+
from synapse.storage import vectorStorage
|
|
251
|
+
|
|
252
|
+
# 1. Ingest infrastructure documentation and post-mortems
|
|
253
|
+
runbooks = Resource("sre_runbooks")
|
|
254
|
+
runbooks.add("docs/runbooks/payment_service.md")
|
|
255
|
+
runbooks.add("docs/runbooks/redis_cluster.md")
|
|
256
|
+
|
|
257
|
+
# 2. Define operational telemetry tools
|
|
258
|
+
def inspect_service_health(service_name: str) -> dict:
|
|
259
|
+
"""Queries Prometheus metrics for error rates, latency percentiles, and pod status."""
|
|
260
|
+
return {
|
|
261
|
+
"service": service_name,
|
|
262
|
+
"status": "degraded",
|
|
263
|
+
"p99_latency_ms": 480.2,
|
|
264
|
+
"error_rate_pct": 3.8,
|
|
265
|
+
"active_pods": 8,
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
def get_oncall_engineer(team: str) -> dict:
|
|
269
|
+
"""Retrieves current primary on-call engineer and escalation contact."""
|
|
270
|
+
return {"team": team, "primary": "alex@enterprise.internal", "escalation": "sre-leads@enterprise.internal"}
|
|
271
|
+
|
|
272
|
+
ops_connectors = makeconnectors(
|
|
273
|
+
name="infra_controller",
|
|
274
|
+
description="Live infrastructure telemetry and on-call routing",
|
|
275
|
+
tools=[inspect_service_health, get_oncall_engineer],
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
# 3. Configure storage backends and populate relational topology
|
|
279
|
+
vector_store = vectorStorage(database=chromadb("data/chroma", embedding="bge-small"))
|
|
280
|
+
graph_store = networkx("data/infra_graph.json")
|
|
281
|
+
|
|
282
|
+
graph_store.add_relation("PaymentService", "DEPENDS_ON", "RedisCluster", source_type="Service", target_type="Service")
|
|
283
|
+
graph_store.add_relation("PaymentService", "MAINTAINED_BY", "CheckoutTeam", source_type="Service", target_type="Team")
|
|
284
|
+
graph_store.add_relation("RedisCluster", "HOSTED_ON", "K8s-East-Cluster", source_type="Service", target_type="Infrastructure")
|
|
285
|
+
|
|
286
|
+
# 4. Initialize production assistant
|
|
287
|
+
app = BaseApp(
|
|
288
|
+
title="SRE Incident Assistant",
|
|
289
|
+
model=ollama("qwen2.5:0.5b"),
|
|
290
|
+
connectors=[ops_connectors],
|
|
291
|
+
resource=runbooks,
|
|
292
|
+
vector_store=vector_store,
|
|
293
|
+
graph_store=graph_store,
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
if __name__ == "__main__":
|
|
297
|
+
app.run(port=8000)
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
When an engineer asks: *"PaymentService latency is spiking. What does it depend on, and who do we page?"*
|
|
301
|
+
1. Synapse extracts the entity `PaymentService`.
|
|
302
|
+
2. The Graph channel traverses `PaymentService -> DEPENDS_ON -> RedisCluster` and `PaymentService -> MAINTAINED_BY -> CheckoutTeam`.
|
|
303
|
+
3. The Vector channel retrieves relevant remediation steps from `payment_service.md`.
|
|
304
|
+
4. The Dispatcher automatically executes `inspect_service_health("RedisCluster")` and `get_oncall_engineer("CheckoutTeam")`.
|
|
305
|
+
5. The model streams a complete diagnosis and escalation plan.
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
### Use Case 2: Standalone MCP Tool Server for Claude Desktop & Cursor
|
|
310
|
+
|
|
311
|
+
When you want to expose custom tools, internal databases, or automation scripts directly to developer IDEs without running an HTTP web server or LLM backend, use `conn.run_mcp()`:
|
|
312
|
+
|
|
313
|
+
```python
|
|
314
|
+
from synapse.connectors import makeconnectors
|
|
315
|
+
|
|
316
|
+
def execute_safe_sql(query: str) -> dict:
|
|
317
|
+
"""Executes read-only SQL queries against the analytical data warehouse."""
|
|
318
|
+
if any(keyword in query.upper() for keyword in ["DROP", "DELETE", "UPDATE", "INSERT", "ALTER"]):
|
|
319
|
+
return {"error": "Write operations are forbidden by security policy."}
|
|
320
|
+
return {
|
|
321
|
+
"status": "success",
|
|
322
|
+
"rows": [
|
|
323
|
+
{"region": "us-east-1", "dau": 1420500, "conversion_rate": 0.042},
|
|
324
|
+
{"region": "eu-central-1", "dau": 985200, "conversion_rate": 0.038},
|
|
325
|
+
],
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
def calculate_mrr(active_subscriptions: int, arpu: float) -> dict:
|
|
329
|
+
"""Calculates Monthly Recurring Revenue and projected annual run rate."""
|
|
330
|
+
mrr = round(active_subscriptions * arpu, 2)
|
|
331
|
+
return {"mrr_usd": mrr, "arr_usd": round(mrr * 12, 2)}
|
|
332
|
+
|
|
333
|
+
analytics_connector = makeconnectors(
|
|
334
|
+
name="enterprise_analytics",
|
|
335
|
+
description="Internal data warehouse inspection and revenue analytics",
|
|
336
|
+
tools=[execute_safe_sql, calculate_mrr],
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
if __name__ == "__main__":
|
|
340
|
+
# Boots as a standard Model Context Protocol server over stdio
|
|
341
|
+
analytics_connector.run_mcp(transport="stdio")
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
#### Connect to Claude Desktop or Cursor
|
|
345
|
+
|
|
346
|
+
Add the connector to your `claude_desktop_config.json`:
|
|
347
|
+
|
|
348
|
+
```json
|
|
349
|
+
{
|
|
350
|
+
"mcpServers": {
|
|
351
|
+
"enterprise_analytics": {
|
|
352
|
+
"command": "python",
|
|
353
|
+
"args": ["/path/to/analytics_server.py"]
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
The tools are now instantly available as native function calls inside Claude Desktop and Cursor.
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
### Use Case 3: Autonomous Workspace Assistant with OAuth Connectors
|
|
364
|
+
|
|
365
|
+
Aggregate personal workspace data across Gmail and Notion with automated synchronization and entity extraction:
|
|
366
|
+
|
|
367
|
+
```python
|
|
368
|
+
from synapse import BaseApp
|
|
369
|
+
from synapse.connectors import GmailConnectors, NotionConnectors
|
|
370
|
+
from synapse.database import chromadb
|
|
371
|
+
from synapse.graph import networkx
|
|
372
|
+
from synapse.models import gemini
|
|
373
|
+
from synapse.storage import vectorStorage
|
|
374
|
+
|
|
375
|
+
app = BaseApp(
|
|
376
|
+
title="Executive Workspace Assistant",
|
|
377
|
+
model=gemini(model="gemini-2.0-flash", api_key="AIzaSy..."),
|
|
378
|
+
connectors=[
|
|
379
|
+
GmailConnectors(), # Google Workspace OAuth connector
|
|
380
|
+
NotionConnectors(), # Notion Pages & Databases connector
|
|
381
|
+
],
|
|
382
|
+
vector_store=vectorStorage(database=chromadb("data/workspace_chroma")),
|
|
383
|
+
graph_store=networkx("data/workspace_graph.json"),
|
|
384
|
+
)
|
|
385
|
+
|
|
386
|
+
if __name__ == "__main__":
|
|
387
|
+
app.run(port=8000)
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
- Synchronize data via background indexing endpoints: `POST /sync/gmail` and `POST /sync/notion`.
|
|
391
|
+
- Extracted emails and pages are indexed into ChromaDB and parsed into relational triples (e.g. `Author -> SENT -> Email`, `Document -> MENTIONS -> Project`).
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
<a id="hybrid-rag"></a>
|
|
396
|
+
## ✦ Dual-Channel Hybrid RAG Engine
|
|
397
|
+
|
|
398
|
+
Synapse couples **dense vector search** with a **directed property graph** to eliminate the retrieval failure modes of single-channel systems.
|
|
399
|
+
|
|
400
|
+
```python
|
|
401
|
+
from synapse.database import chromadb
|
|
402
|
+
from synapse.graph import networkx
|
|
403
|
+
from synapse.rag import HybridRAG
|
|
404
|
+
from synapse.storage import vectorStorage
|
|
405
|
+
|
|
406
|
+
# 1. Initialize persistent backends
|
|
407
|
+
vector_db = vectorStorage(database=chromadb("data/chroma", embedding="bge-small"))
|
|
408
|
+
graph_db = networkx("data/knowledge_graph.json")
|
|
409
|
+
|
|
410
|
+
# 2. Add relational topology
|
|
411
|
+
graph_db.add_relation("Alice Chen", "DIRECTS", "Core Infrastructure", source_type="Person", target_type="Department")
|
|
412
|
+
graph_db.add_relation("Core Infrastructure", "OWNS", "Authentication Service", source_type="Department", target_type="System")
|
|
413
|
+
graph_db.add_relation("Authentication Service", "USES", "Vault Secrets Engine", source_type="System", target_type="Tool")
|
|
414
|
+
|
|
415
|
+
# 3. Query combined knowledge base
|
|
416
|
+
rag = HybridRAG(vector_store=vector_db, graph_store=graph_db)
|
|
417
|
+
context = rag.retrieve_context("Who directs the team responsible for the Authentication Service?")
|
|
418
|
+
|
|
419
|
+
print("Detected Entities:", context["entities_detected"])
|
|
420
|
+
print("Relational Graph Triples:", context["graph_facts"])
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### Retrieval Context Injected into Prompts
|
|
424
|
+
|
|
425
|
+
```text
|
|
426
|
+
### RELATIONAL KNOWLEDGE GRAPH FACTS:
|
|
427
|
+
- Alice Chen -> DIRECTS -> Core Infrastructure
|
|
428
|
+
- Core Infrastructure -> OWNS -> Authentication Service
|
|
429
|
+
- Authentication Service -> USES -> Vault Secrets Engine
|
|
430
|
+
|
|
431
|
+
### RELEVANT DOCUMENT EXCERPTS:
|
|
432
|
+
1. [CORE_INFRA - Team Roster]
|
|
433
|
+
The Core Infrastructure department manages platform security, identity, and access management.
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
<a id="mcp-orchestration"></a>
|
|
439
|
+
## ✦ Dynamic Tool Orchestration via MCP
|
|
440
|
+
|
|
441
|
+
Synapse treats tools as first-class schemas adhering to Anthropic's Model Context Protocol (MCP). When you provide Python functions to `makeconnectors`, Synapse:
|
|
442
|
+
1. Inspects function type hints and generates strict JSON Schema parameters.
|
|
443
|
+
2. Extracts docstrings to generate tool descriptions for LLM function calling.
|
|
444
|
+
3. Provides input sanitization, runtime execution, and trace logging.
|
|
445
|
+
|
|
446
|
+
```python
|
|
447
|
+
from synapse.connectors import makeconnectors
|
|
448
|
+
|
|
449
|
+
def calculate_carbon_footprint(cloud_hours: float, instance_type: str = "c5.xlarge") -> dict:
|
|
450
|
+
"""Estimates carbon footprint (kg CO2e) for cloud compute infrastructure workloads."""
|
|
451
|
+
base_factor = 0.045 if "xlarge" in instance_type else 0.020
|
|
452
|
+
emissions = round(cloud_hours * base_factor, 3)
|
|
453
|
+
return {"instance_type": instance_type, "hours": cloud_hours, "kg_co2e": emissions}
|
|
454
|
+
|
|
455
|
+
# makeconnectors accepts single functions, lists, or dictionaries
|
|
456
|
+
cloud_tools = makeconnectors(
|
|
457
|
+
name="cloud_optimizer",
|
|
458
|
+
description="Cloud computing cost and sustainability inspection tools",
|
|
459
|
+
tools=[calculate_carbon_footprint],
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
# Export as a FastMCP server or run as standalone MCP
|
|
463
|
+
mcp_server = cloud_tools.to_mcp_server()
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
---
|
|
467
|
+
|
|
468
|
+
<a id="models"></a>
|
|
469
|
+
## ✦ Pluggable Inference Providers
|
|
470
|
+
|
|
471
|
+
Synapse abstracts LLM inference behind a unified streaming interface with support for local daemons and frontier cloud providers:
|
|
472
|
+
|
|
473
|
+
```python
|
|
474
|
+
from synapse.models import ollama, gemini, openai
|
|
475
|
+
|
|
476
|
+
# 1. Local open-weights model via Ollama (zero network dependencies)
|
|
477
|
+
local_brain = ollama(model="qwen2.5:0.5b", base_url="http://127.0.0.1:11434")
|
|
478
|
+
|
|
479
|
+
# 2. Frontier reasoning via Google Gemini
|
|
480
|
+
gemini_brain = gemini(model="gemini-2.0-flash", api_key="AIzaSy...")
|
|
481
|
+
|
|
482
|
+
# 3. OpenAI / compatible endpoints (vLLM, Groq, Together)
|
|
483
|
+
openai_brain = openai(model="gpt-4o", api_key="sk-...", base_url="https://api.openai.com/v1")
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
Switch models across any `BaseApp` without changing tool signatures, prompt templates, or storage backends.
|
|
487
|
+
|
|
488
|
+
---
|
|
489
|
+
|
|
490
|
+
<a id="storage"></a>
|
|
491
|
+
## ✦ Pluggable Storage & Graph Architecture
|
|
492
|
+
|
|
493
|
+
Synapse provides architectural freedom with zero vendor lock-in. Pick between in-memory testing, local file persistence, or distributed enterprise clusters:
|
|
494
|
+
|
|
495
|
+
```python
|
|
496
|
+
from synapse.database import in_memory, chromadb, qdrant, pgvector
|
|
497
|
+
from synapse.graph import in_memory_graph, networkx, neo4j
|
|
498
|
+
from synapse.storage import vectorStorage
|
|
499
|
+
|
|
500
|
+
# Tier 1: Ephemeral In-Memory (Zero disk writes, pure RAM execution)
|
|
501
|
+
ram_vector = vectorStorage(database=in_memory(embedding="bge-small"))
|
|
502
|
+
ram_graph = in_memory_graph()
|
|
503
|
+
|
|
504
|
+
# Tier 2: Persistent File-Based (ChromaDB + NetworkX JSON)
|
|
505
|
+
file_vector = vectorStorage(database=chromadb("data/chroma", embedding="bge-small"))
|
|
506
|
+
file_graph = networkx("data/knowledge_graph.json")
|
|
507
|
+
|
|
508
|
+
# Tier 3: Distributed Enterprise Cluster (Qdrant + Neo4j)
|
|
509
|
+
cluster_vector = vectorStorage(database=qdrant(url="https://qdrant.internal.net", api_key="sk-..."))
|
|
510
|
+
cluster_graph = neo4j(uri="bolt://neo4j.internal.net:7687", auth=("neo4j", "password"))
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
---
|
|
514
|
+
|
|
515
|
+
<a id="skills"></a>
|
|
516
|
+
## ✦ Agent Skills & Personas
|
|
517
|
+
|
|
518
|
+
Skills encapsulate domain knowledge, behavioral instructions, and evaluation guidelines into standardized `SKILL.md` documents. Registered skills are automatically exposed as callable MCP Prompts.
|
|
519
|
+
|
|
520
|
+
```python
|
|
521
|
+
from synapse import BaseApp
|
|
522
|
+
from synapse.skills import load_premade_skill, list_premade_skills, makeskills
|
|
523
|
+
|
|
524
|
+
# 1. Inspect bundled premade skills
|
|
525
|
+
print(list_premade_skills())
|
|
526
|
+
# Output: ['rag-analyst', 'knowledge-graph', 'mcp-orchestrator', 'mlflow-evaluator', 'template']
|
|
527
|
+
|
|
528
|
+
# 2. Load pre-packaged skill sets
|
|
529
|
+
rag_analyst = load_premade_skill("rag-analyst")
|
|
530
|
+
kg_specialist = load_premade_skill("knowledge-graph")
|
|
531
|
+
|
|
532
|
+
# 3. Create a specialized domain persona from scratch
|
|
533
|
+
security_reviewer = makeskills(
|
|
534
|
+
name="Application Security Auditor",
|
|
535
|
+
description="Audits source code and API configurations for OWASP Top 10 vulnerabilities",
|
|
536
|
+
prompt="""
|
|
537
|
+
You are an expert Application Security Auditor.
|
|
538
|
+
When analyzing code or architectures:
|
|
539
|
+
1. Check for command injection, broken authentication, and SSRF.
|
|
540
|
+
2. Flag insecure cryptography or hardcoded secrets.
|
|
541
|
+
3. Require parameterized queries for all database operations.
|
|
542
|
+
""".strip(),
|
|
543
|
+
tags=["security", "audit", "owasp"],
|
|
544
|
+
)
|
|
545
|
+
|
|
546
|
+
# 4. Attach skills to BaseApp
|
|
547
|
+
app = BaseApp(skills=[rag_analyst, kg_specialist, security_reviewer])
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
<a id="telemetry"></a>
|
|
553
|
+
## ✦ MLflow Experiment Tracking & Telemetry
|
|
554
|
+
|
|
555
|
+
Monitor production latency, evaluate retrieval quality, and track prompts, token throughput, and graph snapshots directly within MLflow:
|
|
556
|
+
|
|
557
|
+
```python
|
|
558
|
+
from synapse import BaseApp
|
|
559
|
+
from synapse.telemetry import MLflowTracker
|
|
560
|
+
|
|
561
|
+
# Automated tracking on all /chat turns:
|
|
562
|
+
app = BaseApp(
|
|
563
|
+
title="Customer Operations Assistant",
|
|
564
|
+
mlflow_tracking=True,
|
|
565
|
+
mlflow_experiment="customer_ops_production",
|
|
566
|
+
)
|
|
567
|
+
|
|
568
|
+
# Standalone experiment evaluation:
|
|
569
|
+
tracker = MLflowTracker(experiment_name="rag_chunk_evaluation")
|
|
570
|
+
|
|
571
|
+
with tracker.start_run(run_name="bge_small_top4"):
|
|
572
|
+
tracker.log_params({"embedding": "bge-small", "top_k": 4, "model": "qwen2.5:0.5b"})
|
|
573
|
+
tracker.log_metrics({"latency_ms": 32.4, "chunks_retrieved": 4, "graph_triples": 3})
|
|
574
|
+
tracker.log_artifact("data/knowledge_graph.json")
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
<a id="inspector"></a>
|
|
580
|
+
## ✦ Developer Inspector & 3D Knowledge Graph
|
|
581
|
+
|
|
582
|
+
Synapse includes a built-in browser-based developer dashboard with real-time audit tools.
|
|
583
|
+
|
|
584
|
+
### 1. Real-Time Developer Inspector (`/inspector`)
|
|
585
|
+
Audit prompt execution, inspect vector chunk similarity scores, trace tool execution parameters, and inspect relational triples side-by-side:
|
|
586
|
+
|
|
587
|
+
<p align="center">
|
|
588
|
+
<img src="assets/inspector_preview.png" width="100%" alt="Synapse Inspector Dashboard" style="border-radius: 12px; border: 1px solid #27272a; box-shadow: 0 8px 28px rgba(0,0,0,0.5);"/>
|
|
589
|
+
</p>
|
|
590
|
+
|
|
591
|
+
### 2. Interactive 3D WebGL Knowledge Graph (`/graph/export`)
|
|
592
|
+
Explore relational topologies, entity clusters, and multi-hop paths in an interactive force-directed WebGL canvas:
|
|
593
|
+
|
|
594
|
+
<p align="center">
|
|
595
|
+
<img src="assets/graph_preview.png" width="100%" alt="Synapse 3D Knowledge Graph" style="border-radius: 12px; border: 1px solid #27272a; box-shadow: 0 8px 28px rgba(0,0,0,0.5);"/>
|
|
596
|
+
</p>
|
|
597
|
+
|
|
598
|
+
### 3. Connectors & Synchronization Hub (`/connectors`)
|
|
599
|
+
Audit registered tools, OAuth tokens, and execute manual background indexing:
|
|
600
|
+
|
|
601
|
+
<p align="center">
|
|
602
|
+
<img src="assets/connectors_preview.png" width="100%" alt="Synapse Connectors View" style="border-radius: 12px; border: 1px solid #27272a; box-shadow: 0 8px 28px rgba(0,0,0,0.5);"/>
|
|
603
|
+
</p>
|
|
604
|
+
|
|
605
|
+
### 4. Interactive OpenAPI Documentation (`/docs`)
|
|
606
|
+
Explore and test all REST endpoints, SSE streams, sync triggers, and MCP exports:
|
|
607
|
+
|
|
608
|
+
<p align="center">
|
|
609
|
+
<img src="assets/openapi_preview.png" width="100%" alt="Synapse OpenAPI Docs" style="border-radius: 12px; border: 1px solid #27272a; box-shadow: 0 8px 28px rgba(0,0,0,0.5);"/>
|
|
610
|
+
</p>
|
|
611
|
+
|
|
612
|
+
---
|
|
613
|
+
|
|
614
|
+
<a id="deployment"></a>
|
|
615
|
+
## ✦ Deployment Paradigms: `app.run()` vs `conn.run_mcp()`
|
|
616
|
+
|
|
617
|
+
Synapse supports two primary execution paradigms:
|
|
618
|
+
|
|
619
|
+
| Architectural Dimension | `app.run()` (Full Assistant Service) | `conn.run_mcp()` (Standalone MCP Server) |
|
|
620
|
+
| :--- | :--- | :--- |
|
|
621
|
+
| **System Role** | Complete AI backend with brain, storage & HTTP server | Specialized tool server exposed over standard I/O |
|
|
622
|
+
| **Inference Engine** | Required (Ollama, Gemini, or OpenAI) | None needed (Host client acts as the brain) |
|
|
623
|
+
| **Protocol Transport** | HTTP REST & Server-Sent Events (SSE) | Standard I/O (`stdio`) or SSE via MCP protocol |
|
|
624
|
+
| **Developer UI** | Built-in Web Inspector (`/inspector`) & 3D Graph | Rendered inside client (Claude Desktop / Cursor) |
|
|
625
|
+
| **Knowledge Base** | Ingests documents into Hybrid RAG | Attached as MCP Resources / Prompts |
|
|
626
|
+
| **Primary Target** | Web applications, custom frontends, enterprise APIs | IDEs (Cursor), desktop apps (Claude Desktop, LibreChat) |
|
|
627
|
+
| **Invocation** | `app.run(port=8000)` | `conn.run_mcp(transport="stdio")` |
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
<a id="endpoints"></a>
|
|
632
|
+
## ✦ API Reference Specifications
|
|
633
|
+
|
|
634
|
+
When you boot `BaseApp`, Synapse mounts the following endpoints:
|
|
635
|
+
|
|
636
|
+
| Method | Endpoint | Category | Description |
|
|
637
|
+
| :--- | :--- | :--- | :--- |
|
|
638
|
+
| `GET` | **`/`** or **`/inspector`** | `Inspector` | Interactive Developer Inspector dashboard for chat, trace inspection, and tools. |
|
|
639
|
+
| `POST` | **`/chat`** | `Chat` | Server-Sent Events (SSE) streaming endpoint for agent prompts, tool calls, and grounded replies. |
|
|
640
|
+
| `GET` | **`/graph/export`** | `Graph` | Full-screen interactive 3D WebGL knowledge graph visualizer. |
|
|
641
|
+
| `GET` | **`/graph/data`** | `Graph` | JSON payload containing all graph nodes, directed links, color tokens, and stats. |
|
|
642
|
+
| `GET` | **`/connectors`** | `Sync` | Lists all registered connectors, descriptions, and active tools. |
|
|
643
|
+
| `POST` | **`/sync/{name}`** | `Sync` | Triggers background synchronization and indexing for a specific connector. |
|
|
644
|
+
| `GET` | **`/sync/status`** | `Sync` | Returns current synchronization progress, item counts, and timestamps. |
|
|
645
|
+
| `GET` | **`/mcp/export`** | `MCP` | Exports active tools into Claude Desktop config format and FastMCP manifests. |
|
|
646
|
+
| `GET` | **`/skills`** | `Skills` | Returns registered agent skills and specialized system instructions. |
|
|
647
|
+
| `GET` | **`/resources`** | `Resources` | Lists static reference documents and indexed data collections. |
|
|
648
|
+
| `GET` | **`/info`** | `Inspector` | Overview of running model provider, connector count, and framework version. |
|
|
649
|
+
| `GET` | **`/health`** | `System` | Health check endpoint returning service readiness and item counts. |
|
|
650
|
+
| `GET` | **`/docs`** | `Docs` | Interactive Swagger / OpenAPI documentation with try-it-out capabilities. |
|
|
651
|
+
|
|
652
|
+
---
|
|
653
|
+
|
|
654
|
+
<a id="benchmarks"></a>
|
|
655
|
+
## ✦ Benchmarks & Performance Metrics
|
|
656
|
+
|
|
657
|
+
Engineered for high throughput and low latency on development laptops (Apple Silicon, x86_64) and enterprise server environments:
|
|
658
|
+
|
|
659
|
+
| Operation | Standard Implementation | Synapse Architecture | Measured Performance Gain |
|
|
660
|
+
| :--- | :--- | :--- | :--- |
|
|
661
|
+
| **Embedding Model Startup** | PyTorch Transformer (Cold start 4.2s) | `LazyFastEmbedEmbeddings` ONNX runtime | **17.6x faster cold start** (<240ms) |
|
|
662
|
+
| **Graph Traversal Lookup** | Linear scan over nodes $O(N)$ | Case-insensitive indexed map $O(1)$ | **Instant retrieval (<1ms)** |
|
|
663
|
+
| **In-Memory Vector Search** | Full sort $O(M \log M)$ + repeated norms | Pre-computed norms + `heapq.nlargest` | **8.4x higher query throughput** |
|
|
664
|
+
| **Document Batch Ingestion** | Single-item inserts & disk writes | Batched vector ingestion & atomic graph flush | **12.5x faster ingestion** |
|
|
665
|
+
| **Health Check Probe** | Blind network probe (1000ms delay) | In-memory key verification + 400ms probe | **< 1ms response latency** |
|
|
666
|
+
|
|
667
|
+
---
|
|
668
|
+
|
|
669
|
+
<a id="qa"></a>
|
|
670
|
+
## ✦ Security & Quality Assurance
|
|
671
|
+
|
|
672
|
+
Synapse enforces strict quality, coverage, and security standards across the entire codebase:
|
|
673
|
+
|
|
674
|
+
```bash
|
|
675
|
+
# Run pytest test suite (31 unit tests)
|
|
676
|
+
pytest tests/
|
|
677
|
+
|
|
678
|
+
# Run AST-level security audit (0 vulnerabilities)
|
|
679
|
+
bandit -r synapse
|
|
680
|
+
|
|
681
|
+
# Check code style, types, and modern standards
|
|
682
|
+
ruff check synapse/ tests/
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
---
|
|
686
|
+
|
|
687
|
+
<a id="license"></a>
|
|
688
|
+
## ✦ License
|
|
689
|
+
|
|
690
|
+
Synapse is open-source software licensed under the [MIT License](LICENSE).
|