Commit Graph
18 Commits
Author SHA1 Message Date
Dark-Alex-17 a968c3228d feat(rag): add driver/attached fields, validation floors and force-reingest
Phase 1 of the RAG driver abstraction (design doc sections 5.1-5.5a).

Data model:
- Add `driver: String` (serde default "yaml" via RagData::default_driver) and
  `attached: bool` as the first two fields of RagData, so driver metadata sits
  at the top of each RAG YAML. Old files without them load unchanged.
- Add `#[serde(default)]` to the non-Option fields so a minimal attached-RAG
  YAML deserializes, and add `skip_serializing_if` to `vectors` so an empty
  map renders no `vectors:` key.
- Add a hand-written `impl Default for RagData` delegating to `RagData::new()`.
  It is deliberately not derived: a derived impl yields `driver: ""`, which is
  not a valid driver string.

Validation (the price of the new serde defaults):
- Add `RagData::validate()`, called from `Rag::load()` after deserialization.
  It enforces the (driver, attached) matrix and, critically, numeric floors
  that the new defaults would otherwise mask: `top_k >= 1` unconditionally
  (a 0 makes every query return nothing, silently), and `chunk_size >= 1` plus
  `chunk_overlap < chunk_size` when not attached (a 0 chunk_size is a real
  divide-by-zero panic while sizing embedding batches).
- Reject `.set rag_top_k 0` at the setter, before the set/update fork. Without
  this, the new load-time floor turns one keystroke into an unloadable RAG:
  the setter saves immediately and no dot-command can reach the file again.

Rebuild actually re-embeds now:
- `.rebuild rag` and `--rebuild-rag` previously re-scanned paths and re-embedded
  nothing, because the content-hash skip fired regardless of the refresh flag.
  Extract that decision into a module-level `find_hash_skip()` free function and
  thread a `force_reingest` flag through `sync_documents()` and
  `refresh_document_paths()`, set true only from `rebuild_rag()`. `.edit rag-docs`
  stays incremental. Re-embedding costs time and API spend, so `rebuild_rag()`
  now prints a one-line file-count warning first (no prompt: the path is
  reachable from a non-interactive CLI flag).

Attached-RAG guards:
- Block `.rebuild rag` / `--rebuild-rag` and `.edit rag-docs` on attached RAGs,
  which Coyote did not index and whose source documents it does not own.
- Add `Rag::driver()`, `Rag::is_attached()` and `Rag::file_count()`, and surface
  driver/attached through `Rag::export()` so `.info rag` shows them.

Adds 12 unit tests (1299 -> 1311), including the two gate tests pinning that a
forced re-ingest does not hash-skip while an ordinary refresh still does.
2026-08-10 11:04:51 -06:00
Dark-Alex-17 304088bf5c tests: Added tests for graph-based RAG
CI / All (ubuntu-latest) (push) Failing after 24s
CI / All (macos-latest) (push) Has been cancelled
CI / All (windows-latest) (push) Has been cancelled
2026-07-16 14:33:52 -06:00
Dark-Alex-17 4f0dae9b49 feat: fully functional graph-based RAG
CI / All (ubuntu-latest) (push) Failing after 26s
CI / All (macos-latest) (push) Has been cancelled
CI / All (windows-latest) (push) Has been cancelled
2026-07-13 16:50:07 -06:00
Dark-Alex-17 deb673ebc9 fmt: applied some formatting changes 2026-07-13 16:07:19 -06:00
Dark-Alex-17 7fc06ad9bc feat: Implemented graph-based RAG 2026-07-08 21:20:50 -06:00
Dark-Alex-17 33c6f2c4e3 fix: use rawPredict for non-streaming Claude requests
CI / All (ubuntu-latest) (push) Failing after 24s
CI / All (macos-latest) (push) Has been cancelled
CI / All (windows-latest) (push) Has been cancelled
2026-06-09 23:05:31 -06:00
Dark-Alex-17 597f823bdf fmt: cleaned up graph implementation 2026-05-21 11:27:29 -06:00
Dark-Alex-17 e292c414c5 feat: added additional support for all RAG-configuration fields in RAG nodes 2026-05-15 16:38:52 -06:00
Dark-Alex-17 8a2f18204f feat: initial support for RAG nodes in the graph execution system 2026-05-15 14:11:23 -06:00
Dark-Alex-17 c53e0546d4 test: added integration tests for inter-feature interactions like RAG + Agents, function calling/MCP servers, etc. 2026-05-01 14:06:41 -06:00
Dark-Alex-17 349b3748bd test: Added unit tests for the rag, completions and prompt, macros, vault, and functions/tool usage 2026-05-01 13:24:58 -06:00
Dark-Alex-17 0421c9b643 style: Addressed style issues 2026-04-28 08:08:23 -06:00
Dark-Alex-17 a145a42b2b refactor: fully complete state re-architecting 2026-04-19 19:21:24 -06:00
Dark-Alex-17 83de60f59c refactor: created a single install_builtins free function to remove from Config::init 2026-04-19 17:54:50 -06:00
Dark-Alex-17 d81508c22a feat: 99% complete migration to new state structs to get away from God-Config struct; i.e. AppConfig, AppState, and RequestContext 2026-04-19 17:05:27 -06:00
Dark-Alex-17 02b7ed37f6 feat: Supported the injection of RAG sources into the prompt, not just via the .sources rag command in the REPL so models can directly reference the documents that supported their responses 2026-02-13 17:45:56 -07:00
Dark-Alex-17 dbf7329e87 refactor: Updated to the most recent Rust version with 2024 syntax 2025-11-07 15:50:55 -07:00
Dark-Alex-17 216a3d53cd Baseline project 2025-07-06 10:45:42 -06:00