vesper-memory 0.3.0
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.
- package/.env.example +28 -0
- package/CHANGELOG.md +137 -0
- package/LICENSE +21 -0
- package/README.md +665 -0
- package/config/sqlite-schema.sql +413 -0
- package/dist/benchmark/index.d.ts +18 -0
- package/dist/benchmark/index.d.ts.map +1 -0
- package/dist/benchmark/index.js +19 -0
- package/dist/benchmark/index.js.map +1 -0
- package/dist/benchmark/metrics-collector.d.ts +90 -0
- package/dist/benchmark/metrics-collector.d.ts.map +1 -0
- package/dist/benchmark/metrics-collector.js +196 -0
- package/dist/benchmark/metrics-collector.js.map +1 -0
- package/dist/benchmark/report-generator.d.ts +35 -0
- package/dist/benchmark/report-generator.d.ts.map +1 -0
- package/dist/benchmark/report-generator.js +221 -0
- package/dist/benchmark/report-generator.js.map +1 -0
- package/dist/benchmark/runner.d.ts +30 -0
- package/dist/benchmark/runner.d.ts.map +1 -0
- package/dist/benchmark/runner.js +308 -0
- package/dist/benchmark/runner.js.map +1 -0
- package/dist/benchmark/scenarios/context-recall.d.ts +65 -0
- package/dist/benchmark/scenarios/context-recall.d.ts.map +1 -0
- package/dist/benchmark/scenarios/context-recall.js +180 -0
- package/dist/benchmark/scenarios/context-recall.js.map +1 -0
- package/dist/benchmark/scenarios/index.d.ts +34 -0
- package/dist/benchmark/scenarios/index.d.ts.map +1 -0
- package/dist/benchmark/scenarios/index.js +230 -0
- package/dist/benchmark/scenarios/index.js.map +1 -0
- package/dist/benchmark/statistics.d.ts +125 -0
- package/dist/benchmark/statistics.d.ts.map +1 -0
- package/dist/benchmark/statistics.js +520 -0
- package/dist/benchmark/statistics.js.map +1 -0
- package/dist/benchmark/types.d.ts +458 -0
- package/dist/benchmark/types.d.ts.map +1 -0
- package/dist/benchmark/types.js +297 -0
- package/dist/benchmark/types.js.map +1 -0
- package/dist/cli 2.js +583 -0
- package/dist/cli.d 2.ts +8 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts 2.map +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +583 -0
- package/dist/cli.js 2.map +1 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/rate-limits.d.ts +76 -0
- package/dist/config/rate-limits.d.ts.map +1 -0
- package/dist/config/rate-limits.js +161 -0
- package/dist/config/rate-limits.js.map +1 -0
- package/dist/config 2/rate-limits.d.ts +76 -0
- package/dist/config 2/rate-limits.d.ts.map +1 -0
- package/dist/config 2/rate-limits.js +161 -0
- package/dist/config 2/rate-limits.js.map +1 -0
- package/dist/consolidation/pipeline.d.ts +52 -0
- package/dist/consolidation/pipeline.d.ts.map +1 -0
- package/dist/consolidation/pipeline.js +193 -0
- package/dist/consolidation/pipeline.js.map +1 -0
- package/dist/consolidation 2/pipeline.d.ts +52 -0
- package/dist/consolidation 2/pipeline.d.ts.map +1 -0
- package/dist/consolidation 2/pipeline.js +193 -0
- package/dist/consolidation 2/pipeline.js.map +1 -0
- package/dist/embeddings/client.d.ts +95 -0
- package/dist/embeddings/client.d.ts.map +1 -0
- package/dist/embeddings/client.js +162 -0
- package/dist/embeddings/client.js.map +1 -0
- package/dist/embeddings 2/client.d.ts +94 -0
- package/dist/embeddings 2/client.d.ts.map +1 -0
- package/dist/embeddings 2/client.js +144 -0
- package/dist/embeddings 2/client.js.map +1 -0
- package/dist/memory-layers/semantic-memory.d.ts +76 -0
- package/dist/memory-layers/semantic-memory.d.ts.map +1 -0
- package/dist/memory-layers/semantic-memory.js +231 -0
- package/dist/memory-layers/semantic-memory.js.map +1 -0
- package/dist/memory-layers/skill-library.d.ts +25 -0
- package/dist/memory-layers/skill-library.d.ts.map +1 -0
- package/dist/memory-layers/skill-library.js +54 -0
- package/dist/memory-layers/skill-library.js.map +1 -0
- package/dist/memory-layers/working-memory.d.ts +57 -0
- package/dist/memory-layers/working-memory.d.ts.map +1 -0
- package/dist/memory-layers/working-memory.js +153 -0
- package/dist/memory-layers/working-memory.js.map +1 -0
- package/dist/memory-layers 2/semantic-memory.d.ts +33 -0
- package/dist/memory-layers 2/semantic-memory.d.ts.map +1 -0
- package/dist/memory-layers 2/semantic-memory.js +114 -0
- package/dist/memory-layers 2/semantic-memory.js.map +1 -0
- package/dist/memory-layers 2/skill-library.d.ts +25 -0
- package/dist/memory-layers 2/skill-library.d.ts.map +1 -0
- package/dist/memory-layers 2/skill-library.js +54 -0
- package/dist/memory-layers 2/skill-library.js.map +1 -0
- package/dist/memory-layers 2/working-memory.d.ts +57 -0
- package/dist/memory-layers 2/working-memory.d.ts.map +1 -0
- package/dist/memory-layers 2/working-memory.js +153 -0
- package/dist/memory-layers 2/working-memory.js.map +1 -0
- package/dist/middleware/auth.d.ts +287 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +610 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware 2/auth.d.ts +287 -0
- package/dist/middleware 2/auth.d.ts.map +1 -0
- package/dist/middleware 2/auth.js +610 -0
- package/dist/middleware 2/auth.js.map +1 -0
- package/dist/monitoring/health.d.ts +241 -0
- package/dist/monitoring/health.d.ts.map +1 -0
- package/dist/monitoring/health.js +649 -0
- package/dist/monitoring/health.js.map +1 -0
- package/dist/monitoring/metrics.d.ts +153 -0
- package/dist/monitoring/metrics.d.ts.map +1 -0
- package/dist/monitoring/metrics.js +349 -0
- package/dist/monitoring/metrics.js.map +1 -0
- package/dist/monitoring 2/health.d.ts +241 -0
- package/dist/monitoring 2/health.d.ts.map +1 -0
- package/dist/monitoring 2/health.js +649 -0
- package/dist/monitoring 2/health.js.map +1 -0
- package/dist/monitoring 2/metrics.d.ts +153 -0
- package/dist/monitoring 2/metrics.d.ts.map +1 -0
- package/dist/monitoring 2/metrics.js +349 -0
- package/dist/monitoring 2/metrics.js.map +1 -0
- package/dist/retrieval/hybrid-search.d.ts +186 -0
- package/dist/retrieval/hybrid-search.d.ts.map +1 -0
- package/dist/retrieval/hybrid-search.js +330 -0
- package/dist/retrieval/hybrid-search.js.map +1 -0
- package/dist/retrieval 2/hybrid-search.d.ts +186 -0
- package/dist/retrieval 2/hybrid-search.d.ts.map +1 -0
- package/dist/retrieval 2/hybrid-search.js +327 -0
- package/dist/retrieval 2/hybrid-search.js.map +1 -0
- package/dist/router/smart-router.d.ts +157 -0
- package/dist/router/smart-router.d.ts.map +1 -0
- package/dist/router/smart-router.js +524 -0
- package/dist/router/smart-router.js.map +1 -0
- package/dist/router 2/smart-router.d.ts +111 -0
- package/dist/router 2/smart-router.d.ts.map +1 -0
- package/dist/router 2/smart-router.js +383 -0
- package/dist/router 2/smart-router.js.map +1 -0
- package/dist/security/rate-limit-middleware.d.ts +119 -0
- package/dist/security/rate-limit-middleware.d.ts.map +1 -0
- package/dist/security/rate-limit-middleware.js +193 -0
- package/dist/security/rate-limit-middleware.js.map +1 -0
- package/dist/security 2/rate-limit-middleware.d.ts +119 -0
- package/dist/security 2/rate-limit-middleware.d.ts.map +1 -0
- package/dist/security 2/rate-limit-middleware.js +193 -0
- package/dist/security 2/rate-limit-middleware.js.map +1 -0
- package/dist/server 2.js +861 -0
- package/dist/server-wrapper 2.js +170 -0
- package/dist/server-wrapper.d 2.ts +12 -0
- package/dist/server-wrapper.d.ts +12 -0
- package/dist/server-wrapper.d.ts 2.map +1 -0
- package/dist/server-wrapper.d.ts.map +1 -0
- package/dist/server-wrapper.js +170 -0
- package/dist/server-wrapper.js 2.map +1 -0
- package/dist/server-wrapper.js.map +1 -0
- package/dist/server.d 2.ts +14 -0
- package/dist/server.d.ts +14 -0
- package/dist/server.d.ts 2.map +1 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +656 -0
- package/dist/server.js 2.map +1 -0
- package/dist/server.js.map +1 -0
- package/dist/synthesis/conflict-detector.d.ts +43 -0
- package/dist/synthesis/conflict-detector.d.ts.map +1 -0
- package/dist/synthesis/conflict-detector.js +125 -0
- package/dist/synthesis/conflict-detector.js.map +1 -0
- package/dist/synthesis 2/conflict-detector.d.ts +43 -0
- package/dist/synthesis 2/conflict-detector.d.ts.map +1 -0
- package/dist/synthesis 2/conflict-detector.js +125 -0
- package/dist/synthesis 2/conflict-detector.js.map +1 -0
- package/dist/utils/monitoring.d.ts +25 -0
- package/dist/utils/monitoring.d.ts.map +1 -0
- package/dist/utils/monitoring.js +41 -0
- package/dist/utils/monitoring.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +97 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +166 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/validation.d.ts +139 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +195 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils 2/monitoring.d.ts +25 -0
- package/dist/utils 2/monitoring.d.ts.map +1 -0
- package/dist/utils 2/monitoring.js +41 -0
- package/dist/utils 2/monitoring.js.map +1 -0
- package/dist/utils 2/rate-limiter.d.ts +97 -0
- package/dist/utils 2/rate-limiter.d.ts.map +1 -0
- package/dist/utils 2/rate-limiter.js +166 -0
- package/dist/utils 2/rate-limiter.js.map +1 -0
- package/dist/utils 2/validation.d.ts +139 -0
- package/dist/utils 2/validation.d.ts.map +1 -0
- package/dist/utils 2/validation.js +195 -0
- package/dist/utils 2/validation.js.map +1 -0
- package/docker-compose.yml +65 -0
- package/embedding-service/Dockerfile +29 -0
- package/embedding-service/README.md +68 -0
- package/embedding-service/requirements.txt +6 -0
- package/embedding-service/server.py +110 -0
- package/package.json +92 -0
- package/scripts/FRESH_INSTALL.md +280 -0
- package/scripts/README.md +101 -0
- package/scripts/ensure-infrastructure.sh +38 -0
- package/scripts/fresh-install-auto.sh +96 -0
- package/scripts/fresh-install.sh +167 -0
- package/scripts/health-check.sh +72 -0
- package/scripts/init-qdrant.ts +201 -0
- package/scripts/postinstall.js +94 -0
- package/scripts/run-accuracy-benchmark.ts +1237 -0
- package/scripts/run-real-benchmark.ts +581 -0
- package/scripts/test-mcp-server.sh +38 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
services:
|
|
2
|
+
# Vector Database for embeddings and semantic search
|
|
3
|
+
qdrant:
|
|
4
|
+
image: qdrant/qdrant:v1.7.4
|
|
5
|
+
container_name: vesper-qdrant
|
|
6
|
+
ports:
|
|
7
|
+
- "6333:6333"
|
|
8
|
+
volumes:
|
|
9
|
+
- qdrant_storage:/qdrant/storage
|
|
10
|
+
restart: unless-stopped
|
|
11
|
+
networks:
|
|
12
|
+
- vesper-network
|
|
13
|
+
healthcheck:
|
|
14
|
+
test: ["CMD-SHELL", "bash -c 'echo -e \"GET /healthz HTTP/1.1\\r\\nHost: localhost\\r\\n\\r\\n\" > /dev/tcp/localhost/6333'"]
|
|
15
|
+
interval: 10s
|
|
16
|
+
timeout: 5s
|
|
17
|
+
retries: 5
|
|
18
|
+
start_period: 30s
|
|
19
|
+
|
|
20
|
+
# Cache layer and working memory
|
|
21
|
+
redis:
|
|
22
|
+
image: redis:7-alpine
|
|
23
|
+
container_name: vesper-redis
|
|
24
|
+
ports:
|
|
25
|
+
- "6379:6379"
|
|
26
|
+
volumes:
|
|
27
|
+
- redis_storage:/data
|
|
28
|
+
command: redis-server --appendonly yes
|
|
29
|
+
restart: unless-stopped
|
|
30
|
+
networks:
|
|
31
|
+
- vesper-network
|
|
32
|
+
healthcheck:
|
|
33
|
+
test: ["CMD", "redis-cli", "ping"]
|
|
34
|
+
interval: 10s
|
|
35
|
+
timeout: 5s
|
|
36
|
+
retries: 5
|
|
37
|
+
start_period: 10s
|
|
38
|
+
|
|
39
|
+
# BGE-large Embedding Service
|
|
40
|
+
embedding:
|
|
41
|
+
build:
|
|
42
|
+
context: ./embedding-service
|
|
43
|
+
dockerfile: Dockerfile
|
|
44
|
+
container_name: vesper-embedding
|
|
45
|
+
ports:
|
|
46
|
+
- "8000:8000"
|
|
47
|
+
restart: unless-stopped
|
|
48
|
+
networks:
|
|
49
|
+
- vesper-network
|
|
50
|
+
healthcheck:
|
|
51
|
+
test: ["CMD", "python", "-c", "import requests; requests.get('http://localhost:8000/health').raise_for_status()"]
|
|
52
|
+
interval: 30s
|
|
53
|
+
timeout: 10s
|
|
54
|
+
retries: 3
|
|
55
|
+
start_period: 60s
|
|
56
|
+
|
|
57
|
+
networks:
|
|
58
|
+
vesper-network:
|
|
59
|
+
driver: bridge
|
|
60
|
+
|
|
61
|
+
volumes:
|
|
62
|
+
qdrant_storage:
|
|
63
|
+
driver: local
|
|
64
|
+
redis_storage:
|
|
65
|
+
driver: local
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
FROM python:3.11-slim
|
|
2
|
+
|
|
3
|
+
WORKDIR /app
|
|
4
|
+
|
|
5
|
+
# Install system dependencies
|
|
6
|
+
RUN apt-get update && apt-get install -y \
|
|
7
|
+
gcc \
|
|
8
|
+
g++ \
|
|
9
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
10
|
+
|
|
11
|
+
# Copy requirements and install Python dependencies
|
|
12
|
+
COPY requirements.txt .
|
|
13
|
+
RUN pip install --no-cache-dir -r requirements.txt
|
|
14
|
+
|
|
15
|
+
# Pre-download the BGE-large model to avoid runtime download
|
|
16
|
+
RUN python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('BAAI/bge-large-en-v1.5')"
|
|
17
|
+
|
|
18
|
+
# Copy application code
|
|
19
|
+
COPY server.py .
|
|
20
|
+
|
|
21
|
+
# Expose port
|
|
22
|
+
EXPOSE 8000
|
|
23
|
+
|
|
24
|
+
# Health check
|
|
25
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
|
26
|
+
CMD python -c "import requests; requests.get('http://localhost:8000/health').raise_for_status()"
|
|
27
|
+
|
|
28
|
+
# Run the server
|
|
29
|
+
CMD ["python", "server.py"]
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# BGE-Large Embedding Service
|
|
2
|
+
|
|
3
|
+
REST API for generating 1024-dimensional semantic embeddings using BGE-large-en-v1.5.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Install dependencies
|
|
9
|
+
pip install -r requirements.txt
|
|
10
|
+
|
|
11
|
+
# Start server
|
|
12
|
+
python server.py
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The service will start on `http://localhost:8000`
|
|
16
|
+
|
|
17
|
+
## API Endpoints
|
|
18
|
+
|
|
19
|
+
### Health Check
|
|
20
|
+
```bash
|
|
21
|
+
curl http://localhost:8000/health
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Single/Multiple Embeddings
|
|
25
|
+
```bash
|
|
26
|
+
curl -X POST http://localhost:8000/embed \
|
|
27
|
+
-H "Content-Type: application/json" \
|
|
28
|
+
-d '{"text": "Hello world"}'
|
|
29
|
+
|
|
30
|
+
# Multiple texts
|
|
31
|
+
curl -X POST http://localhost:8000/embed \
|
|
32
|
+
-H "Content-Type: application/json" \
|
|
33
|
+
-d '{"text": ["Hello", "World"]}'
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Batch Processing
|
|
37
|
+
```bash
|
|
38
|
+
curl -X POST http://localhost:8000/embed/batch \
|
|
39
|
+
-H "Content-Type: application/json" \
|
|
40
|
+
-d '{
|
|
41
|
+
"texts": ["text1", "text2", "text3"],
|
|
42
|
+
"batch_size": 32
|
|
43
|
+
}'
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Integration
|
|
47
|
+
|
|
48
|
+
From TypeScript/Node.js:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
async function getEmbedding(text: string): Promise<number[]> {
|
|
52
|
+
const response = await fetch('http://localhost:8000/embed', {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
headers: { 'Content-Type': 'application/json' },
|
|
55
|
+
body: JSON.stringify({ text })
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const data = await response.json();
|
|
59
|
+
return data.embeddings[0];
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Performance
|
|
64
|
+
|
|
65
|
+
- **Model**: BAAI/bge-large-en-v1.5
|
|
66
|
+
- **Dimensions**: 1024
|
|
67
|
+
- **Throughput**: ~100-200 embeddings/sec (CPU), ~1000+/sec (GPU)
|
|
68
|
+
- **Latency**: ~10-50ms per text (CPU), ~1-5ms (GPU)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
BGE-Large Embedding Service - v3.0
|
|
4
|
+
|
|
5
|
+
Simple REST API for generating embeddings using BGE-large-en-v1.5.
|
|
6
|
+
Returns 1024-dimensional dense vectors for semantic search.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from flask import Flask, request, jsonify
|
|
10
|
+
from sentence_transformers import SentenceTransformer
|
|
11
|
+
import numpy as np
|
|
12
|
+
|
|
13
|
+
app = Flask(__name__)
|
|
14
|
+
|
|
15
|
+
# Load BGE-large model (1024-dim embeddings)
|
|
16
|
+
print("Loading BGE-large-en-v1.5 model...")
|
|
17
|
+
model = SentenceTransformer('BAAI/bge-large-en-v1.5')
|
|
18
|
+
print("Model loaded successfully!")
|
|
19
|
+
|
|
20
|
+
@app.route('/health', methods=['GET'])
|
|
21
|
+
def health():
|
|
22
|
+
"""Health check endpoint"""
|
|
23
|
+
return jsonify({"status": "healthy", "model": "BGE-large-en-v1.5", "dimensions": 1024})
|
|
24
|
+
|
|
25
|
+
@app.route('/embed', methods=['POST'])
|
|
26
|
+
def embed():
|
|
27
|
+
"""
|
|
28
|
+
Generate embeddings for text
|
|
29
|
+
|
|
30
|
+
Request:
|
|
31
|
+
{
|
|
32
|
+
"text": "string" or ["array", "of", "strings"],
|
|
33
|
+
"normalize": true # optional, default true
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
Response:
|
|
37
|
+
{
|
|
38
|
+
"embeddings": [[...], [...]],
|
|
39
|
+
"dimensions": 1024,
|
|
40
|
+
"count": 2
|
|
41
|
+
}
|
|
42
|
+
"""
|
|
43
|
+
try:
|
|
44
|
+
data = request.json
|
|
45
|
+
text = data.get('text')
|
|
46
|
+
normalize = data.get('normalize', True)
|
|
47
|
+
|
|
48
|
+
if not text:
|
|
49
|
+
return jsonify({"error": "Missing 'text' field"}), 400
|
|
50
|
+
|
|
51
|
+
# Convert single string to list
|
|
52
|
+
if isinstance(text, str):
|
|
53
|
+
text = [text]
|
|
54
|
+
|
|
55
|
+
# Generate embeddings
|
|
56
|
+
embeddings = model.encode(
|
|
57
|
+
text,
|
|
58
|
+
normalize_embeddings=normalize,
|
|
59
|
+
show_progress_bar=False
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
# Convert to list for JSON serialization
|
|
63
|
+
embeddings_list = embeddings.tolist()
|
|
64
|
+
|
|
65
|
+
return jsonify({
|
|
66
|
+
"embeddings": embeddings_list,
|
|
67
|
+
"dimensions": 1024,
|
|
68
|
+
"count": len(embeddings_list)
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
except Exception as e:
|
|
72
|
+
return jsonify({"error": str(e)}), 500
|
|
73
|
+
|
|
74
|
+
@app.route('/embed/batch', methods=['POST'])
|
|
75
|
+
def embed_batch():
|
|
76
|
+
"""
|
|
77
|
+
Batch embedding endpoint with better performance
|
|
78
|
+
|
|
79
|
+
Request:
|
|
80
|
+
{
|
|
81
|
+
"texts": ["text1", "text2", ...],
|
|
82
|
+
"batch_size": 32 # optional
|
|
83
|
+
}
|
|
84
|
+
"""
|
|
85
|
+
try:
|
|
86
|
+
data = request.json
|
|
87
|
+
texts = data.get('texts')
|
|
88
|
+
batch_size = data.get('batch_size', 32)
|
|
89
|
+
|
|
90
|
+
if not texts or not isinstance(texts, list):
|
|
91
|
+
return jsonify({"error": "Missing or invalid 'texts' field"}), 400
|
|
92
|
+
|
|
93
|
+
embeddings = model.encode(
|
|
94
|
+
texts,
|
|
95
|
+
batch_size=batch_size,
|
|
96
|
+
normalize_embeddings=True,
|
|
97
|
+
show_progress_bar=False
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
return jsonify({
|
|
101
|
+
"embeddings": embeddings.tolist(),
|
|
102
|
+
"dimensions": 1024,
|
|
103
|
+
"count": len(embeddings)
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
except Exception as e:
|
|
107
|
+
return jsonify({"error": str(e)}), 500
|
|
108
|
+
|
|
109
|
+
if __name__ == '__main__':
|
|
110
|
+
app.run(host='0.0.0.0', port=8000, debug=False)
|
package/package.json
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vesper-memory",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "AI memory system for Claude Code - Three-layer architecture with semantic search, knowledge graphs, and intelligent retrieval",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=20.0.0"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/server.js",
|
|
10
|
+
"bin": {
|
|
11
|
+
"vesper": "dist/cli.js",
|
|
12
|
+
"vesper-server": "dist/server-wrapper.js"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist/",
|
|
16
|
+
"config/",
|
|
17
|
+
"embedding-service/",
|
|
18
|
+
"scripts/",
|
|
19
|
+
"docker-compose.yml",
|
|
20
|
+
".env.example",
|
|
21
|
+
"README.md",
|
|
22
|
+
"CHANGELOG.md",
|
|
23
|
+
"LICENSE"
|
|
24
|
+
],
|
|
25
|
+
"keywords": [
|
|
26
|
+
"mcp",
|
|
27
|
+
"mcp-server",
|
|
28
|
+
"model-context-protocol",
|
|
29
|
+
"claude-code",
|
|
30
|
+
"claude",
|
|
31
|
+
"ai-memory",
|
|
32
|
+
"semantic-memory",
|
|
33
|
+
"semantic-search",
|
|
34
|
+
"knowledge-graph",
|
|
35
|
+
"embeddings",
|
|
36
|
+
"rag",
|
|
37
|
+
"retrieval-augmented-generation",
|
|
38
|
+
"vector-database",
|
|
39
|
+
"qdrant",
|
|
40
|
+
"redis",
|
|
41
|
+
"bge-embeddings",
|
|
42
|
+
"typescript"
|
|
43
|
+
],
|
|
44
|
+
"author": "David Fitzsimmons",
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "https://github.com/fitz2882/vesper.git"
|
|
48
|
+
},
|
|
49
|
+
"bugs": {
|
|
50
|
+
"url": "https://github.com/fitz2882/vesper/issues"
|
|
51
|
+
},
|
|
52
|
+
"homepage": "https://github.com/fitz2882/vesper#readme",
|
|
53
|
+
"license": "MIT",
|
|
54
|
+
"scripts": {
|
|
55
|
+
"postinstall": "node scripts/postinstall.js",
|
|
56
|
+
"dev": "node --loader ts-node/esm src/server.ts",
|
|
57
|
+
"build": "tsc",
|
|
58
|
+
"test": "vitest",
|
|
59
|
+
"test:ui": "vitest --ui",
|
|
60
|
+
"benchmark": "vitest run tests/benchmarks/memory-performance.test.ts",
|
|
61
|
+
"benchmark:scientific": "vitest run tests/benchmark/",
|
|
62
|
+
"benchmark:unit": "vitest run tests/benchmark/statistics.test.ts tests/benchmark/types.test.ts tests/benchmark/metrics-collector.test.ts",
|
|
63
|
+
"benchmark:real": "npx tsx scripts/run-real-benchmark.ts",
|
|
64
|
+
"benchmark:accuracy": "npx tsx scripts/run-accuracy-benchmark.ts",
|
|
65
|
+
"lint": "eslint src tests --ext .ts",
|
|
66
|
+
"format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
67
|
+
"init:qdrant": "npx tsx scripts/init-qdrant.ts",
|
|
68
|
+
"fresh-install": "./scripts/fresh-install.sh",
|
|
69
|
+
"fresh-install:auto": "./scripts/fresh-install-auto.sh"
|
|
70
|
+
},
|
|
71
|
+
"dependencies": {
|
|
72
|
+
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
73
|
+
"@qdrant/js-client-rest": "^1.16.2",
|
|
74
|
+
"better-sqlite3": "^9.2.2",
|
|
75
|
+
"ioredis": "^5.3.2",
|
|
76
|
+
"lru-cache": "^10.4.3",
|
|
77
|
+
"zod": "^4.3.6"
|
|
78
|
+
},
|
|
79
|
+
"devDependencies": {
|
|
80
|
+
"@types/better-sqlite3": "^7.6.8",
|
|
81
|
+
"@types/node": "^20.10.6",
|
|
82
|
+
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
83
|
+
"@typescript-eslint/parser": "^8.54.0",
|
|
84
|
+
"bintrees": "^1.0.2",
|
|
85
|
+
"dotenv": "^17.2.3",
|
|
86
|
+
"eslint": "^9.39.2",
|
|
87
|
+
"prettier": "^3.1.1",
|
|
88
|
+
"ts-node": "^10.9.2",
|
|
89
|
+
"typescript": "^5.3.3",
|
|
90
|
+
"vitest": "^4.0.18"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Fresh Installation Scripts
|
|
2
|
+
|
|
3
|
+
Complete cleanup and fresh installation scripts for Vesper Memory System.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
These scripts remove **ALL** previous installations and start completely fresh, including:
|
|
8
|
+
- Docker containers, volumes, and networks
|
|
9
|
+
- Node modules and build artifacts
|
|
10
|
+
- All database files and data
|
|
11
|
+
- Logs and temporary files
|
|
12
|
+
- Generated certificates (keeps scripts)
|
|
13
|
+
|
|
14
|
+
**⚠️ WARNING: ALL DATA WILL BE PERMANENTLY DELETED**
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
### Option 1: Interactive (Recommended)
|
|
19
|
+
|
|
20
|
+
**Via npm:**
|
|
21
|
+
```bash
|
|
22
|
+
npm run fresh-install
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Via make:**
|
|
26
|
+
```bash
|
|
27
|
+
make fresh-install
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Via script:**
|
|
31
|
+
```bash
|
|
32
|
+
./scripts/fresh-install.sh
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Features:**
|
|
36
|
+
- Safety prompts before deletion
|
|
37
|
+
- Interactive .env creation
|
|
38
|
+
- Colored output with progress
|
|
39
|
+
- Next steps guidance
|
|
40
|
+
|
|
41
|
+
### Option 2: Automated (CI/CD)
|
|
42
|
+
|
|
43
|
+
**Via npm:**
|
|
44
|
+
```bash
|
|
45
|
+
npm run fresh-install:auto
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Via make:**
|
|
49
|
+
```bash
|
|
50
|
+
make fresh-install-auto
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Via script:**
|
|
54
|
+
```bash
|
|
55
|
+
./scripts/fresh-install-auto.sh
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Features:**
|
|
59
|
+
- No prompts (fully automated)
|
|
60
|
+
- Auto-creates .env from .env.example
|
|
61
|
+
- Set `AUTO_START=true` to automatically start services
|
|
62
|
+
- Ideal for CI/CD pipelines
|
|
63
|
+
|
|
64
|
+
**Example with auto-start:**
|
|
65
|
+
```bash
|
|
66
|
+
AUTO_START=true npm run fresh-install:auto
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## What Gets Deleted
|
|
70
|
+
|
|
71
|
+
### Docker Resources
|
|
72
|
+
- All containers (stopped and running)
|
|
73
|
+
- All volumes (all data lost)
|
|
74
|
+
- All networks
|
|
75
|
+
- Dangling images
|
|
76
|
+
|
|
77
|
+
### Application Files
|
|
78
|
+
- `node_modules/` - All installed dependencies
|
|
79
|
+
- `package-lock.json` - Lock file
|
|
80
|
+
- `dist/` - Build artifacts
|
|
81
|
+
- `.cache/` - Build cache
|
|
82
|
+
- `.turbo/` - Turbo cache
|
|
83
|
+
- `coverage/` - Test coverage
|
|
84
|
+
|
|
85
|
+
### Data Directories
|
|
86
|
+
- `data/` - SQLite database and application data
|
|
87
|
+
- `logs/` - All log files
|
|
88
|
+
- `.redis-data/` - Redis persistent data
|
|
89
|
+
- `.postgres-data/` - PostgreSQL data
|
|
90
|
+
- `.qdrant-data/` - Qdrant vector data
|
|
91
|
+
|
|
92
|
+
### Certificates
|
|
93
|
+
- `config/ssl/*` - All certificate files (keeps .sh scripts)
|
|
94
|
+
|
|
95
|
+
## What Gets Preserved
|
|
96
|
+
|
|
97
|
+
- Source code (`src/`)
|
|
98
|
+
- Tests (`tests/`)
|
|
99
|
+
- Configuration files (`config/`)
|
|
100
|
+
- Docker Compose configuration
|
|
101
|
+
- Scripts (`.sh` files)
|
|
102
|
+
- `.env.example` template
|
|
103
|
+
- Documentation
|
|
104
|
+
|
|
105
|
+
## Installation Steps
|
|
106
|
+
|
|
107
|
+
The scripts perform these steps automatically:
|
|
108
|
+
|
|
109
|
+
1. **Stop Docker** - Gracefully stop all running containers
|
|
110
|
+
2. **Remove Volumes** - Delete all Docker volumes (data loss)
|
|
111
|
+
3. **Remove Networks** - Clean up Docker networks
|
|
112
|
+
4. **Clean Images** - Remove dangling images
|
|
113
|
+
5. **Remove Dependencies** - Delete node_modules and lock files
|
|
114
|
+
6. **Clean Build** - Remove all build artifacts
|
|
115
|
+
7. **Clean Data** - Delete all database and log files
|
|
116
|
+
8. **Clean Certificates** - Remove old certificates
|
|
117
|
+
9. **Install** - Fresh npm install
|
|
118
|
+
10. **Build** - Build project from source
|
|
119
|
+
|
|
120
|
+
## Post-Installation Steps
|
|
121
|
+
|
|
122
|
+
After the fresh install completes:
|
|
123
|
+
|
|
124
|
+
### 1. Configure Environment
|
|
125
|
+
```bash
|
|
126
|
+
# Edit .env with your settings
|
|
127
|
+
nano .env
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Required changes for production:**
|
|
131
|
+
- Set strong passwords (use `openssl rand -base64 32`)
|
|
132
|
+
- Enable `AUTH_ENABLED=true`
|
|
133
|
+
- Enable `METRICS_AUTH_ENABLED=true`
|
|
134
|
+
- Configure proper domain names
|
|
135
|
+
|
|
136
|
+
### 2. Generate Certificates
|
|
137
|
+
|
|
138
|
+
**Development:**
|
|
139
|
+
```bash
|
|
140
|
+
./scripts/generate-dev-certs.sh
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Production:**
|
|
144
|
+
```bash
|
|
145
|
+
docker-compose run --rm certbot certonly \
|
|
146
|
+
--webroot --webroot-path=/var/www/certbot \
|
|
147
|
+
-d your-domain.com
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 3. Start Services
|
|
151
|
+
```bash
|
|
152
|
+
docker-compose up -d
|
|
153
|
+
|
|
154
|
+
# Or use make
|
|
155
|
+
make docker-up
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 4. Verify Installation
|
|
159
|
+
```bash
|
|
160
|
+
# Check service status
|
|
161
|
+
make status
|
|
162
|
+
|
|
163
|
+
# Run tests
|
|
164
|
+
npm test
|
|
165
|
+
|
|
166
|
+
# Check health
|
|
167
|
+
curl -I http://localhost:8080/health
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 5. Generate API Key (Optional)
|
|
171
|
+
```bash
|
|
172
|
+
npm run generate-api-key -- --tier unlimited --name 'Development'
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Troubleshooting
|
|
176
|
+
|
|
177
|
+
### Permission Denied
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
chmod +x scripts/fresh-install.sh
|
|
181
|
+
chmod +x scripts/fresh-install-auto.sh
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Docker Issues
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# If Docker services won't stop
|
|
188
|
+
docker ps -a | grep vesper | awk '{print $1}' | xargs docker rm -f
|
|
189
|
+
|
|
190
|
+
# If volumes won't delete
|
|
191
|
+
docker volume prune -f
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Build Fails
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# Clean npm cache
|
|
198
|
+
npm cache clean --force
|
|
199
|
+
|
|
200
|
+
# Try again
|
|
201
|
+
npm run fresh-install
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Services Won't Start
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# Check Docker daemon
|
|
208
|
+
docker info
|
|
209
|
+
|
|
210
|
+
# Check logs
|
|
211
|
+
docker-compose logs -f
|
|
212
|
+
|
|
213
|
+
# Restart Docker daemon (macOS)
|
|
214
|
+
killall Docker && open -a Docker
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## CI/CD Integration
|
|
218
|
+
|
|
219
|
+
### GitHub Actions Example
|
|
220
|
+
|
|
221
|
+
```yaml
|
|
222
|
+
- name: Fresh Install Vesper
|
|
223
|
+
run: npm run fresh-install:auto
|
|
224
|
+
env:
|
|
225
|
+
AUTO_START: true
|
|
226
|
+
AUTH_ENABLED: false # Disable for testing
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Docker Compose Example
|
|
230
|
+
|
|
231
|
+
```yaml
|
|
232
|
+
version: '3.8'
|
|
233
|
+
services:
|
|
234
|
+
vesper-install:
|
|
235
|
+
image: node:20
|
|
236
|
+
volumes:
|
|
237
|
+
- .:/app
|
|
238
|
+
working_dir: /app
|
|
239
|
+
command: /app/scripts/fresh-install-auto.sh
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Safety Features
|
|
243
|
+
|
|
244
|
+
### Interactive Script
|
|
245
|
+
- Requires explicit "yes" confirmation
|
|
246
|
+
- Shows detailed warning of what will be deleted
|
|
247
|
+
- Prompts for .env creation
|
|
248
|
+
- Provides next steps guidance
|
|
249
|
+
|
|
250
|
+
### Automated Script
|
|
251
|
+
- Designed for trusted environments only
|
|
252
|
+
- No user interaction required
|
|
253
|
+
- Logs all actions
|
|
254
|
+
- Returns non-zero exit code on failure
|
|
255
|
+
|
|
256
|
+
## Performance
|
|
257
|
+
|
|
258
|
+
**Typical runtime:** 2-5 minutes (depending on network speed)
|
|
259
|
+
|
|
260
|
+
**Breakdown:**
|
|
261
|
+
- Cleanup: 10-30 seconds
|
|
262
|
+
- npm install: 1-3 minutes
|
|
263
|
+
- Build: 30-60 seconds
|
|
264
|
+
|
|
265
|
+
## Best Practices
|
|
266
|
+
|
|
267
|
+
1. **Backup First** - Always backup important data before running
|
|
268
|
+
2. **Use Interactive** - Use interactive version for manual operations
|
|
269
|
+
3. **Use Automated** - Use automated version only for CI/CD
|
|
270
|
+
4. **Review Output** - Check output for any errors
|
|
271
|
+
5. **Verify Installation** - Run tests after installation
|
|
272
|
+
|
|
273
|
+
## Support
|
|
274
|
+
|
|
275
|
+
If you encounter issues:
|
|
276
|
+
|
|
277
|
+
1. Check the troubleshooting section above
|
|
278
|
+
2. Review logs: `docker-compose logs -f`
|
|
279
|
+
3. Check Docker status: `make status`
|
|
280
|
+
4. File an issue: https://github.com/fitz2882/vesper/issues
|