Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
56764d9
⚡ Bolt: Throttle synchronous disk I/O in stats tracking
google-labs-jules[bot] Jun 16, 2026
29dbea7
⚡ Bolt: Throttle synchronous disk I/O in stats tracking
google-labs-jules[bot] Jun 16, 2026
d2f3b06
⚡ Bolt: Throttle synchronous disk I/O in stats tracking
google-labs-jules[bot] Jun 16, 2026
bc052b6
⚡ Bolt: Throttle synchronous disk I/O in stats tracking
google-labs-jules[bot] Jun 17, 2026
808a28d
fix: address CodeRabbit and Gemini review feedback
sheepdestroyer Jun 17, 2026
60da6e1
fix: address CodeRabbit and Gemini round-2 review feedback
sheepdestroyer Jun 17, 2026
418f90c
fix: address Gemini round-3 review — offload sync I/O to thread pool
sheepdestroyer Jun 17, 2026
1fd6d01
feat: dataset visualizer + benchmark script + gap-fill extraction
sheepdestroyer Jun 17, 2026
7fc31cb
fix: restore tier table widget + extract first user msg from Hermes s…
sheepdestroyer Jun 18, 2026
a4fcb01
feat: gemma4 classifier with grammar, combined evals visualizer, dash…
sheepdestroyer Jun 18, 2026
640d2b6
feat: direct classifier + error retry scripts for dataset building
sheepdestroyer Jun 18, 2026
958e6b8
fix: address PR reviews and align test suite for DualCircuitBreaker
sheepdestroyer Jun 18, 2026
43f0eef
fix: prevent file descriptor leaks, deduplicate save stats, and log b…
sheepdestroyer Jun 18, 2026
ef47704
Address code review feedback from pullrequestreview-4523251587
sheepdestroyer Jun 18, 2026
764fe64
Add robustness fixes for reclassify/retry datasets, utf-8, and error …
sheepdestroyer Jun 18, 2026
9bfbdba
Use absolute paths in visualizer fetch requests to prevent trailing s…
sheepdestroyer Jun 18, 2026
9c8f286
Add GitHub Actions testing workflow and correct Dependabot Docker dir…
sheepdestroyer Jun 18, 2026
3b82424
Fix Dependabot schema validation errors by removing invalid prefix-ma…
sheepdestroyer Jun 18, 2026
ead7ed4
fix: resolve dependabot yaml parsing errors
google-labs-jules[bot] Jun 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ updates:
separator: "/"
commit-message:
prefix: "chore(deps)"
prefix-major: "chore(deps)!"
include: "scope"
labels:
- "dependencies"
Expand All @@ -20,11 +19,6 @@ updates:
- "sheepdestroyer"
allow:
- dependency-type: "direct"
ignore:
# Ignore major version updates for critical services
# Uncomment and adjust as needed
# - dependency-name: "postgres"
# update-types: ["version-update:semver-major"]

# GitHub Actions dependency updates (optional - add if using GH Actions)
- package-ecosystem: "github-actions"
Expand Down
9 changes: 0 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,3 @@ router/__pycache__/
router/router_stats.json
router/quantization_report.txt
router/router_timeline.json
router/best_free_model.json
router/free_models_roster.json

# Hermes agent artifacts
.hermes/
workdirs/

# Dataset work in progress
data/
3 changes: 3 additions & 0 deletions .jules/bolt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## 2024-06-16 - Synchronous I/O in Async API Handlers
**Learning:** `save_persisted_stats()` was being called synchronously on every API request, cache hit, and tool usage log, triggering blocking disk I/O in the main event loop.
**Action:** Always throttle or batch background telemetry writes in async Python applications to prevent blocking the event loop under load.
11 changes: 1 addition & 10 deletions litellm/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -143,19 +143,10 @@ redis_settings:
redis_port: 6379
router_settings:
allowed_fails: 2
cooldown_time: 300
cooldown_time: 30
enable_pre_call_checks: false
num_retries: 1
routing_strategy: latency-based-routing
# Per-error-type cooldown thresholds (overrides allowed_fails for specific errors).
# Upstream rate limits ("temporarily rate-limited upstream") can last minutes —
# a 30s cooldown just wastes retries. 300s gives providers time to clear the limit.
# RateLimitError: cooldown on FIRST 429 (upstream rate limits persist for minutes —
# allowing even 1 retry wastes a request against a provider that's still throttling)
allowed_fails_policy:
RateLimitErrorAllowedFails: 0
TimeoutErrorAllowedFails: 3
BadRequestErrorAllowedFails: 1
vector_store_settings:
collection_name: litellm_semantic_cache
connection_string: postgresql://postgres:***@127.0.0.1:5432/postgres
Expand Down
2 changes: 1 addition & 1 deletion router/Containerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ WORKDIR /app
RUN pip install --no-cache-dir fastapi uvicorn httpx pyyaml python-multipart asyncpg langfuse

# Copy all source in one layer — removes dead config COPY (volume-mounted at runtime)
COPY main.py agy_proxy.py circuit_breaker.py aa_scores.json free_models_roster.json best_free_model.json /app/
COPY main.py agy_proxy.py circuit_breaker.py aa_scores.json /app/

EXPOSE 5000

Expand Down
8 changes: 8 additions & 0 deletions router/best_free_model.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"id": "nvidia/nemotron-3-ultra-550b-a55b:free",
"name": "NVIDIA: Nemotron 3 Ultra (free)",
"score": 48.0,
"context_length": 1000000,
"is_fallback": false,
"updated_at": "2026-06-16T15:43:39.475769Z"
}
21 changes: 8 additions & 13 deletions router/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,17 @@ router:
router_model:
api_base: "http://127.0.0.1:8080/v1"
api_key: "local-token"
model: "gemma4-26a4b-routing"
model: "qwen-2b-routing"

classification_rules:
system_prompt: |
Classify the coding task complexity. Output ONLY the tier name.

agent-simple-core: trivial one-liners, syntax fixes, single-line edits
agent-medium-core: single-function changes, light refactoring, simple tests
agent-complex-core: multi-file changes, algorithmic work, data pipelines
agent-reasoning-core: deep analysis, architecture decisions, debugging complex systems
agent-advanced-core: system-level architecture, cross-cutting concerns, novel design

Task:
Analyze the request complexity. Respond with exactly one of:
- simple boilerplate: agent-simple-core
- moderate complexity: agent-medium-core
- deep algorithms: agent-complex-core
- heavy reasoning, advanced architecture, deep multi-step analysis: agent-reasoning-core
- extremely complex across many files: agent-advanced-core
Do not add markdown formatting. Only the model name string.

# 5-tier classifier dispatch backends — all proxied through LiteLLM (port 4000).
# Tiers (complexity ↑):
Expand Down Expand Up @@ -51,9 +49,6 @@ backends:
- name: "ollama-deepseek-v4-pro"
api_base: "http://127.0.0.1:4000/v1"
api_key: "DYNAMIC_LITELLM_MASTER_KEY_PLACEHOLDER"
- name: "ollama-deepseek-v4-flash"
api_base: "http://127.0.0.1:4000/v1"
api_key: "DYNAMIC_LITELLM_MASTER_KEY_PLACEHOLDER"
- name: "openrouter-auto"
Comment on lines 51 to 52

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Removing the ollama-deepseek-v4-flash backend from backends will cause a runtime HTTPException (500 Internal Server Error) when routing reasoning-core requests via Ollama. In router/main.py, agent-reasoning-core requests are mapped to ollama-deepseek-v4-flash and looked up in the backends dictionary. Since it is no longer defined in backends, backends.get(target_model) will return None, causing a misconfiguration error.

    api_key: "DYNAMIC_LITELLM_MASTER_KEY_PLACEHOLDER"
  - name: "ollama-deepseek-v4-flash"
    api_base: "http://127.0.0.1:4000/v1"
    api_key: "DYNAMIC_LITELLM_MASTER_KEY_PLACEHOLDER"
  - name: "openrouter-auto"

api_base: "http://127.0.0.1:4000/v1"
api_key: "DYNAMIC_LITELLM_MASTER_KEY_PLACEHOLDER"
22 changes: 20 additions & 2 deletions router/free_models_roster.json
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,24 @@
"score": 25.0,
"context_length": 32768
},
{
"id": "meta-llama/llama-3.3-70b-instruct:free",
"name": "Meta: Llama 3.3 70B Instruct (free)",
"score": 25.0,
"context_length": 131072
},
{
"id": "meta-llama/llama-3.2-3b-instruct:free",
"name": "Meta: Llama 3.2 3B Instruct (free)",
"score": 25.0,
"context_length": 131072
},
{
"id": "nousresearch/hermes-3-llama-3.1-405b:free",
"name": "Nous: Hermes 3 405B Instruct (free)",
"score": 25.0,
"context_length": 131072
},
{
"id": "poolside/laguna-xs.2:free",
"name": "Poolside: Laguna XS.2 (free)",
Expand All @@ -139,6 +157,6 @@
"context_length": 32768
}
],
"updated_at": "2026-06-17T20:17:56.981195Z",
"count": 23
"updated_at": "2026-06-16T15:40:59.687282Z",
"count": 26
}
Loading