Commit Graph

138 Commits

Author SHA1 Message Date
gramps 35cd48098a v0.17.15: waterfall display — newest messages at top, prepend instead of append, scroll to top 2026-07-13 09:41:55 -07:00
gramps bda4089120 v0.17.14: remove status dots from input area — served no purpose 2026-07-13 09:38:33 -07:00
gramps 79762f67f2 v0.17.13: left-align status dots, font 9px 2026-07-13 09:35:58 -07:00
gramps 3d515ed11f v0.17.12: stack status dots vertically in input area 2026-07-13 09:34:44 -07:00
gramps e1530499b7 v0.17.11: color-code DRC values (green/orange/red), add status dot labels, fix version prefix 2026-07-13 09:33:05 -07:00
gramps a35d68b38e v0.17.10: move CPU/MEM/GPU/VRAM stats to topbar center; status dots to input row left of paperclip 2026-07-13 09:29:21 -07:00
gramps 2d28cfe384 v0.17.9: use uploaded image as welcome screen background 2026-07-13 09:23:51 -07:00
gramps ce4e796768 v0.17.8: show jcscreenie.png as welcome screen graphic instead of text 2026-07-13 09:20:14 -07:00
gramps 3294231e64 v0.17.7: lighten text colors for legibility across header, input, welcome screen 2026-07-13 09:18:36 -07:00
gramps fc2f209008 v0.17.6: add orange search button right of SEND, shown only when SearXNG available 2026-07-13 09:16:34 -07:00
gramps 3601d31e03 v0.17.5: fix topbar legibility, remove llama icons/preset/search from input, implement toggleDrawer 2026-07-13 09:12:37 -07:00
gramps 19d099f17a v0.17.4: remove redundant context thermometer; default to qwen2.5-7b-instruct 2026-07-13 09:01:08 -07:00
gramps e7e6cd8af6 v0.17.3: remove toolbar opacity entirely — always visible 2026-07-13 08:29:08 -07:00
gramps 429d4df29f docs: rewrite README intro to lead with heterogeneous GPU clustering as primary project thesis 2026-07-13 08:26:50 -07:00
gramps cbe4a361bb v0.17.2: auto-fact detection with conflict-alert flow
- auto_detect_facts() scans chat turns for factual content (IPs, paths,
  services, config changes, hardware refs) using pattern matching
- check_fact_conflicts() cross-references detected facts against stored
  FTS5 memories — when a contradiction exists (same topic, diff value)
  the system surfaces a rag_update_suggestion in the done SSE payload
- Frontend shows a floating notification banner comparing old vs new
  fact with Update/Dismiss buttons
- confirm_fact_update() replaces the memory + re-embeds/re-indexes
  the Qdraft entry on user confirmation
- Silent auto-ingest (memories + Qdrant) when no conflict exists
- Frontend: msg-toolbar opacity 0→0.35 for visibility
2026-07-13 08:25:08 -07:00
gramps dcb73945e0 v0.17.1: fix msg-toolbar visibility, add follow_redirects to SearXNG query 2026-07-13 08:15:57 -07:00
gramps f16bef4671 tok: #/## % badge with context tracking, client-side token counting, remove triage dep 2026-07-13 08:07:26 -07:00
gramps b6dadd95ec fix: client-side token counting + move tok badge after ttr 2026-07-13 08:03:08 -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 fbacb1861d docs: sync all docs through v0.17.0 — Roadmap N complete, cluster/AMQP fully documented 2026-07-09 09:15:08 -07:00
gramps f0689ac12b feat: Roadmap N — AMQP cluster nervous system complete 2026-07-09 09:09:22 -07:00
gramps 7c022dbc6d docs: restore full Task 14 spec text in TASKS.md 2026-07-09 09:06:27 -07:00
gramps 7fc7f7679c docs: mark Task 14 done, add cluster.py/amqp.py/test_model_swap.py to docs tables 2026-07-09 09:05:23 -07:00
gramps 9d1fd44d7f Task 14: coordinator-side model swap flow
- request_model_swap() publishes cmd.swap_model on jc.admin, sets node status to swapping
- handle_model_ready() updates active_model from inventory, restores active status
- handle_model_failed() sets node status to error with failure detail
- select_node() made async with two-pass logic: find ready node or trigger swap
- inventory field stored in node records for swap target lookup
- Both handlers subscribed on jc.system via SUBSCRIBE_TABLE
2026-07-09 09:04:15 -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 94e1cdae11 docs(Task 12): replace heartbeat with ping/pong, add subsection markers 2026-07-06 19:29:48 -07:00
gramps 54cf152bd3 docs: mark Task 11 done in TASKS.md 2026-07-06 19:25:54 -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 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 454fb3a380 docs: remove hb_query — worker presence is binary, passive heartbeats suffice 2026-07-06 19:13:30 -07:00
gramps 94c9c9d8c0 docs: final review fixes — count, ModelRecord alignment, event payload, subscribe re-binding 2026-07-06 19:12:02 -07:00
gramps 46adecfce0 docs: document data isolation rationale for two-channel split 2026-07-06 19:06:05 -07:00
gramps bb40748d95 docs: fold model category back into cluster — two buckets only 2026-07-06 19:04:28 -07:00
gramps 75202735e1 docs: collapse event types to three categories (cluster/model/application) 2026-07-06 19:01:20 -07:00
gramps f0819175f8 docs: simplify Task 11 — register/deregister drive status transitions; events are side effects 2026-07-06 18:59:33 -07:00
gramps 649f37e2b6 docs: expand Task 11 with full cluster protocol (7 message types, event log, coordinator auto-promotion) 2026-07-06 18:56:36 -07:00
gramps 8bbc836c3e docs: remove snark from README 2026-07-06 09:00:03 -07:00
gramps fcee454a32 docs: update README for v0.13.0 — RAG eviction, RabbitMQ, AMQP layer 2026-07-06 08:55: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 659339cb1f docs: document broker-mediated cluster architecture, coordinator vs worker node types
Developer-Architecture.md (§6):
  - Broker-mediated design model as preferred architecture
  - Coordinator vs Worker node type table with full service requirements
  - Service distribution ASCII diagram
  - Workers connect as AMQP clients only (no local broker needed)
  - Contrasted with service-mesh alternative

docker.md (§9):
  - New Worker Node Deployment Model section
  - Worker requirements: llama-server binary + node_agent.py + aio-pika
  - Explicit table of what workers do NOT run
  - Architecture note: broker-mediated vs service-mesh
  - Ref: AMQP-0-9-1 client-server protocol since 2006
2026-07-06 08:44:25 -07:00
gramps d1676ea73a docs: sync wiki with current architecture and roadmap
Developer-Architecture.md:
  - Module layout table (eviction.py, amqp.py, routers/)
  - External services table with ports + purposes
  - Config discovery / env var mapping
  - Chat pipeline includes upload_context injection + logprobs/perplexity
  - RAG eviction engine design (score formula, hysteresis, pinned sources)
  - AMQP cluster architecture overview (jc.admin / jc.system exchanges)
  - SSE protocol reference
  - Full test coverage table (132 tests across 18 files)
  - Hardware self-assessment section

current-wip.md:
  - Replace stale backlog with active Roadmap N table (Tasks 8-15)
  - Add post-Roadmap-N backlog (B1-B3)
2026-07-06 08:21:44 -07:00
gramps 775ad5d06e docs: mark Task 9 complete — RabbitMQ installed on ultron 2026-07-06 08:19:54 -07:00
gramps 2417659097 docs: mark Task 8 complete in TASKS.md 2026-07-06 08:10:59 -07:00
gramps 191ac2603f docs: add docker.md — full Docker distribution architecture plan
Covers all six services (jarvisChat, SearXNG, Qdrant, RabbitMQ,
llama-server, Ollama) with images, ports, volumes, healthchecks,
env mapping, secrets management, setup wizard spec, and back-out
procedure. Includes pre-v1.0 gate checklist and open decisions.

Also add .env, secrets/, searxng/ to .gitignore (these are
generated by setup.sh and contain secrets).
2026-07-06 08:09:40 -07:00