Stack-2-9-finetuned / docs /pattern-moat.md
walidsobhie-code
docs: Add official launch plan
d083607
# Pattern Memory Evolution
The Pattern Memory Moat is a system for capturing, storing, and sharing code patterns across teams. It transforms individual learning into collective intelligence.
## Table of Contents
1. [Auto-Extraction](#auto-extraction)
2. [Team Sync](#team-sync)
3. [Weight Fusion](#weight-fusion)
4. [API Reference](#api-reference)
---
## Auto-Extraction
Extract patterns automatically from your Git history. The system analyzes commit messages, identifies bug fixes and features, and stores the before/after code changes.
### How It Works
The `extract_patterns_from_git.py` script:
1. **Scans Git History**: Reads through commit messages and diffs
2. **Identifies Patterns**: Uses keywords to classify commits as bug fixes or features
3. **Extracts Context**: Captures before/after code with metadata
4. **Stores in JSONL**: Outputs structured data suitable for training
### Usage
```bash
# Extract patterns from all commits
python scripts/extract_patterns_from_git.py \
--repo-path /path/to/repo \
--output patterns.jsonl
# Only recent commits
python scripts/extract_patterns_from_git.py \
--repo-path /path/to/repo \
--output patterns.jsonl \
--since-date "2024-01-01"
```
### Output Format
Each line in the JSONL output:
```json
{
"pattern_id": "a1b2c3d4e5f6g7h8",
"problem_type": "bug_fix",
"before_code": "def buggy_function():\n return None + 1",
"after_code": "def fixed_function():\n return 1",
"commit_msg": "fix: handle None case in function",
"author": "developer@example.com",
"date": "2024-03-15 10:30:00",
"confidence": 0.85
}
```
### Problem Types
- `bug_fix`: Commits that resolve issues (keywords: fix, bug, hotfix, patch, resolve)
- `feature_addition`: Commits that add new functionality (keywords: feat, add, implement, enhance)
- `unknown`: Other commits (typically skipped)
### Confidence Scoring
The confidence score (0.0-1.0) reflects pattern quality:
- Base: 0.5
- +0.2 for clear bug fix keywords
- +0.15 for clear feature keywords
- +0.15 for having both before and after code
- +0.1 for substantial changes (>100 chars)
- +0.1 for large changes (>500 chars)
---
## Team Sync
Share and sync patterns across your team using a shared PostgreSQL database.
### PostgreSQL Schema
```sql
CREATE TABLE patterns (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
problem_type VARCHAR(50) NOT NULL,
solution_hash VARCHAR(64) NOT NULL,
code_before TEXT NOT NULL,
code_after TEXT NOT NULL,
success_count INTEGER DEFAULT 0,
last_used TIMESTAMP,
created_by VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- Indexes
CONSTRAINT unique_solution UNIQUE (solution_hash),
INDEX idx_problem_type (problem_type),
INDEX idx_success_count (success_count DESC)
);
CREATE TABLE pattern_feedback (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
pattern_id UUID REFERENCES patterns(id),
user_id VARCHAR(255) NOT NULL,
helpful BOOLEAN NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE adapter_versions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
version_name VARCHAR(100) NOT NULL,
adapter_path VARCHAR(500) NOT NULL,
created_by VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT FALSE
);
```
### FastAPI Endpoints
#### GET /patterns
List patterns with filtering and pagination.
```bash
curl -H "X-API-Key: your-api-key" \
"http://localhost:8000/patterns?problem_type=bug_fix&limit=20"
```
Response:
```json
{
"patterns": [...],
"total": 150,
"page": 1,
"per_page": 20
}
```
#### POST /patterns
Add a new pattern.
```bash
curl -X POST -H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{"problem_type": "bug_fix", "code_before": "...", "code_after": "..."}' \
"http://localhost:8000/patterns"
```
#### POST /patterns/{id}/feedback
Submit feedback on a pattern.
```bash
curl -X POST -H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{"helpful": true}' \
"http://localhost:8000/patterns/123e4567-e89b-12d3-a456-426614174000/feedback"
```
### Authentication
API key authentication via `X-API-Key` header:
```python
# Server-side middleware
async def verify_api_key(request: Request, call_next):
api_key = request.headers.get("X-API-Key")
if not api_key or api_key != settings.API_KEY:
raise HTTPException(status_code=401, detail="Invalid API key")
return await call_next(request)
```
### Conflict Resolution
When multiple team members contribute similar patterns:
1. **Pattern Similarity Detection**: Hash-based deduplication
2. **Merge Strategy**: Patterns with similar `solution_hash` are merged
3. **Success Rate Tracking**: `success_count` increases with positive feedback
4. **Priority**: Patterns with higher `success_count` rank higher in queries
---
## Weight Fusion
Combine LoRA adapters from multiple users using weighted averaging based on success rates.
### Algorithm
```
merged_weight = Σ(adapter_i.weight * adapter_i.success_rate) / Σ(success_rate)
```
This ensures adapters that have shown better results contribute more to the final merged adapter.
### Merge Script Usage
```bash
# Basic merge with manual weights
python scripts/merge_lora_adapters.py \
--adapters user1_adapter.safetensors user2_adapter.safetensors \
--weights 0.6 0.4 \
--output merged_adapter.safetensors
# Merge using success rates (auto-computes proportional weights)
python scripts/merge_lora_adapters.py \
--adapters alice_adapter.safetensors bob_adapter.safetensors \
--success-rates 0.85 0.65 \
--output team_adapter.safetensors
# Equal weights (default)
python scripts/merge_lora_adapters.py \
--adapters adapter1.safetensors adapter2.safetensors \
--output merged.safetensors
```
### Versioning
Each merge creates a version record:
```json
{
"version_name": "v2.1-team-merge",
"adapter_path": "/adapters/merged_v2.1.safetensors",
"created_by": "alice@example.com",
"created_at": "2024-03-15T10:30:00Z",
"parent_versions": ["v2.0", "user-alice-v3", "user-bob-v2"]
}
```
### Rollback
To revert to a previous merged adapter:
```bash
# List available versions
ls -la adapters/versions/
# Restore previous version
cp adapters/versions/v2.0.safetensors adapters/merged.safetensors
```
Or via API:
```bash
curl -X POST -H "X-API-Key: your-api-key" \
-d '{"version_id": "123e4567-e89b-12d3-a456-426614174000"}' \
"http://localhost:8000/adapters/rollback"
```
---
## API Reference
### Patterns API
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/patterns` | List patterns |
| GET | `/patterns/{id}` | Get pattern by ID |
| POST | `/patterns` | Create pattern |
| POST | `/patterns/{id}/feedback` | Submit feedback |
| DELETE | `/patterns/{id}` | Delete pattern |
### Adapter API
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/adapters` | List adapter versions |
| POST | `/adapters/merge` | Merge multiple adapters |
| POST | `/adapters/{id}/activate` | Set as active adapter |
| POST | `/adapters/rollback` | Rollback to previous version |
### Health Check
```bash
curl "http://localhost:8000/health"
```
Response:
```json
{
"status": "healthy",
"version": "1.0.0",
"database": "connected"
}
```
---
## Example Workflow
### 1. Extract Patterns from Project
```bash
# Extract patterns from your codebase
python scripts/extract_patterns_from_git.py \
--repo-path ./my-project \
--output patterns.jsonl \
--since-date "2024-01-01"
```
### 2. Upload to Team Database
```python
import requests
with open('patterns.jsonl') as f:
for line in f:
pattern = json.loads(line)
requests.post(
"http://team-patterns.example.com/patterns",
headers={"X-API-Key": "your-key"},
json=pattern
)
```
### 3. Merge Team Patterns
```bash
# Merge adapters from team members
python scripts/merge_lora_adapters.py \
--adapters alice_adapter.safetensors bob_adapter.safetensors carol_adapter.safetensors \
--success-rates 0.90 0.75 0.85 \
--output team_merged.safetensors
```
### 4. Activate for Team Use
The merged adapter with the highest success rate becomes the new team baseline.
---
## Files Reference
| File | Description |
|------|-------------|
| `scripts/extract_patterns_from_git.py` | Git history pattern extractor |
| `scripts/merge_lora_adapters.py` | LoRA adapter merger |
| `docs/pattern-moat.md` | This documentation |