gramps
f16bef4671
tok: #/## % badge with context tracking, client-side token counting, remove triage dep
2026-07-13 08:07:26 -07:00
gramps
6f95cc67bb
fix: replace triage import with LLAMA_SERVER_BASE for deployed compat
2026-07-13 07:59:38 -07:00
gramps
12a7d92f99
add TOK badge to response footer + arrow key history recall
2026-07-13 07:57:27 -07:00
gramps
35af444c88
fix: add /fim/completions route for Continue compatibility (no /v1 prefix)
2026-07-09 10:13:58 -07:00
gramps
2ec9584abe
feat: add /v1/fim/completions route with Qwen FIM token formatting for Continue
2026-07-09 10:09:18 -07:00
gramps
d0e1870438
fix: add /v1/completions route for Continue FIM compatibility
2026-07-09 10:01:21 -07:00
gramps
9bf04d921d
fix: route FIM passthrough to llama-server native /completion endpoint (supports suffix param)
2026-07-09 09:59:04 -07:00
gramps
fb0ff576d3
Tasks 12 + 13: worker node agent + Phi-4-mini query triage
...
Task 12 — node_agent/agent.py: standalone AMQP worker agent
config reader, model discovery, registration publisher,
ping/pong handler, model swap with systemctl + health poll
(14 tests)
Task 13 — triage.py: query classification + cluster node selection
classify_query() routes to Phi-4-mini at :8083
select_node() picks best worker by model affinity
get_inference_url() replaces hardcoded LLAMA_SERVER_BASE
cluster.py stores node ip for URL construction
(6 tests + 5 existing chat tests mocked for triage)
168 tests passing (+20 new)
2026-07-07 07:30:30 -07:00
gramps
90d2cf8326
Rename: jarvisChat → cAIc (product name)
...
- jarvisChat/JarvisChat/jarvischat → cAIc/cAIc/caic (branded/lower)
- JARVISCHAT_ env vars → CAIC_
- jc- script/config prefix → caic-
- jarvis_rag → caic_rag
- jarvischat.db / volumes → caic.db / caic_*
- AMQP vhost/user jarvischat → caic
- Syslog, loggers, docstrings all updated
- 47 files, zero stale references, 148 tests pass
2026-07-06 19:56:32 -07:00
gramps
78f7b79494
Task 11: cluster protocol — subscribe(), ping/pong health, 9 message types
...
- amqp.py: subscribe() creates exclusive queues bound to routing keys,
_rebind_subscriptions() recreates them after reconnect
- cluster.py: CLUSTER_NODES, CLUSTER_EVENTS (bounded 1000),
CLUSTER_COORDINATOR with auto-promotion, all 6 handlers
(register, deregister, pong, event, coordinator_query),
ping_node() with 5s timeout + auto-deregister on failure
- routers/cluster.py: GET /api/cluster
- Wired into app.py lifespan after amqp_connect()
- 13 tests covering all handlers, boundaries, and API shape
- No passive heartbeats — workers assumed present until ping
timeout at work-routing time
2026-07-06 19:22:31 -07:00
gramps
cb7a6c5cb5
fix: address three gaps in Task 8 spec compliance
...
- get_rag_operational_stats() now returns at_risk_count,
pinned_count, avg_retrieval_count via scroll-based computation
- GET /api/rag/stats requires admin role (was guest-accessible)
- test_rag_stats_endpoint asserts full shape per spec
- Add test_rag_stats_requires_admin (guest → 403)
2026-07-06 08:05:14 -07:00
gramps
bb16cd6927
refactor: extract eviction engine into eviction.py (rag.py 303→109 lines)
...
- Move all eviction logic (evict_batch, maybe_evict, EVICTION_LOG,
get_collection_count/stats, get_rag_operational_stats) into eviction.py
- Move QDRANT_URL, RAG_COLLECTION into config.py to break circular dep
- rag.py re-exports eviction symbols for backward compatibility
- Router imports updated to use eviction module directly
- All 130 tests pass
2026-07-06 08:00:26 -07:00
gramps
8072fb3dd0
feat: Roadmap K — RAG corpus management with score-based eviction (v0.13.0)
...
- Config: RAG_MAX_VECTORS, high/low water marks, grace period, weights
- rag.py: get_collection_count, evict_batch, maybe_evict (asyncio.Lock),
get_rag_operational_stats, EVICTION_LOG, retrieval_count tracking
- routers/rag_admin.py: GET /api/rag/stats, POST /api/rag/flush (admin)
- Wire maybe_evict() into upload.py and ingest.py after Qdrant upsert
- 16 tests: collection stats, eviction scoring, pinned/grace/batch guards,
endpoint auth, race lock, flush, operational stats shape
- Bump to v0.13.0
2026-07-06 07:56:09 -07:00
gramps
7291b8fc42
v0.11.0 -> v0.12.0: startup hardware self-assessment (Roadmap J)
...
- hardware.py: assess_hardware() probes RAM, CPU, GPU VRAM (rocm-smi),
llama-server, Qdrant, SearXNG reachability — writes hardware_state.json
- routers/hardware.py: GET /api/hardware (no auth) returns snapshot
- app.py: calls assess_hardware() in lifespan after init_db()
- 4 new tests: all services reachable, rocm-smi absent, llama unreachable,
HTTP endpoint
2026-07-03 12:53:34 -07:00
gramps
1ac21ad13f
v1.10.0 -> v1.11.0: terminal command RAG hook (Roadmap I)
...
- POST /api/ingest with Bearer token auth, chunk_text, embed, Qdrant upsert
- docs/jc-ingest.sh — shell script for PROMPT_COMMAND hook on jarvis
- /api/ingest exempted from session middleware (self-authenticating)
- 5 tests: missing/wrong key, empty/missing content, success path
2026-07-03 12:35:21 -07:00
gramps
81238c0d7f
v1.9.0 -> v1.10.0: file upload UI + attachment management
...
- Paperclip icon left of text input, file preview pill (image thumb or file icon)
- Conversation list shows attachment icon right of trash, opens gallery overlay
- Gallery overlay: scrollable, close (X), delete attachment per item
- DELETE /api/upload/{id} removes from SQLite + Qdrant
- PATCH /api/upload/{id}/link ties upload to conversation
- GET /api/upload/by-conversation/{id} lists attachments
- Chat accepts upload_context_id, injects [ATTACHED DOCUMENT] into system prompt
- Conversation list includes attachment_count field
- 8 new tests: upload context injection, delete, link, by-conversation, image type, attachment count
Still missing (P3): drag-and-drop upload, global attachments page, file download, batch upload
2026-07-03 12:18:06 -07:00
gramps
4a891c8435
v1.8.9 -> v1.9.0: file upload backend (PDF/text, Qdrant ingest, SQLite context)
2026-07-01 18:15:23 -07:00
gramps
cc1efa7a21
fix: resolve all critical runtime errors and bugs from audit
...
- Add COMPLETIONS_API_KEY to config.py (env var + auto-generated fallback)
- Fix perplexity auto-search: upstream sends logprobs=true, parse_llama_stream_chunk
extracts per-token logprobs, all_logprobs populated during streaming
- Fix all /api/models endpoints to target LLAMA_SERVER_BASE (port 8081) not OLLAMA_BASE
- Fix RAG embedding endpoint URL from port 11434 (Ollama) to 8081 (llama-server)
- Correct misleading error messages: 'inference server' not 'Ollama'
- Remove raw_results leak from SSE event stream in /api/search
- Fix weather query extractor: pattern-match instead of unconditional suffix append
- Escape FTS5 operator keywords (AND/OR/NOT/NEAR) in memory search
- Move auth.py BODY_LIMIT_DEFAULT_BYTES imports to module level
- Change RAG injection log level from warning to info
- Fix all 8 test files after modular refactor (rewire imports from correct modules)
- Update AGENTS.md and README.md to reflect v1.8.0 changes
2026-06-27 15:12:18 -07:00
gramps
ec2f4c0332
feat: add OpenAI-compat /v1/chat/completions endpoint (TODO #22 )
2026-06-20 14:34:47 -07:00
gramps
d01dd3b761
refactor(arch): modular package structure — split monolithic app.py into config/db/auth/memory/search/rag/gpu + routers/
...
- config.py: all constants, env vars, limits, skill registry, profiles
- db.py: schema init, connection factory, skill state helpers
- security.py: PIN hashing, audit logging, rate limiting, CSRF, request helpers
- auth.py: session management, PIN verify, auth routes
- memory.py: FTS5 CRUD + remember/forget command processing
- search.py: SearXNG integration, perplexity scoring, refusal/hedge detection
- gpu.py: rocm-smi stats
- rag.py: Qdrant vector search + system prompt assembly
- routers/: conversations, memories, models, presets, profile, settings, skills, chat, search
- app.py: slim entry point, middleware, router registration only
Bumps to v1.9.0
2026-06-16 08:17:46 -07:00