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
899988c09b
docs: bump v0.13.0 → v0.14.0, document cluster protocol (Task 11)
2026-07-06 19:24:47 -07:00
gramps
975e7579cf
feat: Task 10 — AMQP connection layer with aio-pika
...
amqp.py: connect/disconnect/get_channel/publish with auto-reconnect
- Graceful degradation when aio-pika not installed
- Lazy secret file reader via config.get_amqp_url()
- Fire-and-forget publish (logs error, never raises)
- Connection errors caught and logged (non-fatal)
config.py: AMQP_RECONNECT_DELAY, exchanges, get_amqp_url() helper
app.py: connect in lifespan after assess_hardware, disconnect on shutdown
requirements.txt: aio-pika>=9.0.0
tests/test_amqp.py: 3 mocked tests (publish success, publish disconnected
no-raise, get_channel reconnect)
135 tests pass (132 existing + 3 new)
Fixes: AGENTS.md test/run commands (venv was incomplete)
2026-07-06 08:51:36 -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
779d606923
chore: re-version to v0.11.0 (pre-release until public release)
2026-07-03 12:49:31 -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
7651ea620c
v1.8.8 -> v1.8.9: fix copy button with execCommand fallback for insecure context
2026-07-01 18:01:42 -07:00
gramps
04d885e9eb
v1.8.7 -> v1.8.8: add TTR badge (time-to-respond) next to PPL
2026-07-01 17:56:28 -07:00
gramps
9ef306e133
v1.8.6 -> v1.8.7: add image paste guard with toast notification
2026-07-01 17:35:12 -07:00
gramps
6451f674bb
v1.8.5 -> v1.8.6: bump patch for trash icon fix, model dropdown removal, preset default
2026-07-01 17:30:35 -07:00
gramps
fcc0605a4a
release: bump version to v1.8.5
2026-06-27 15:27:47 -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
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