FAQ

Can I use these subsystems without the rest of "zerda"? Nine of the ten can — they only depend on the standard library plus a duck-typed rag_system/llm you supply. graph_rag is the exception: it hard-imports DocumentChunk from four levels above this archive (....chunks), so it needs the parent project present. See Installation.

Which subsystem should I start with? If you just need multi-turn chat, use conversational_rag. If retrieval quality is inconsistent for hard questions, self_improving_rag.SelfIRAG or agentic_rag.AgenticRAG add iterative correction. If you have several existing RAG backends and want to combine them, federated_rag is the composition layer — see Architecture.

Can I combine multiple subsystems? Yes — none of the ten packages import each other, and they're designed to be layered. The most explicit example in the source is federated_rag, whose add_source() accepts any object with a retrieve/generate (or query) method, which every other subsystem's main class satisfies.

Why are two different RetrievalError classes defined? agentic_rag.agentic_rag.RetrievalError and self_improving_rag.self_improving_rag.RetrievalError are independent classes with the same name, defined in separate exception hierarchies (AgenticRAGError vs. RAGSystemError). This is a real code duplication in the archive, not a documentation error — see Self-Improving RAG.

Why does so much default to Arabic (lang="ar")? Several modules (conversational_rag, domain_rag, multi_hop, multi_doc_rag) default their language/lang parameter to "ar", and prompt templates throughout the codebase contain explicit Arabic strings and language-matching instructions (e.g. streaming_rag's default prompt_template). This reflects the library's origin and primary use case; pass language="en" (or another supported code) explicitly if you need a different default.

Is any of this thread-safe? Only where explicitly documented. federated_rag.federat_cache.TTLCache is documented as thread-safe. agentic_rag.cache.TTLCache is explicitly documented as not thread-safe. No other class in the archive makes an explicit thread-safety claim in its docstring, so treat the rest as single-threaded unless you've verified otherwise.

Do these modules make real network calls to an LLM provider? No — every module calls .generate() / .stream() / .astream() on whatever llm or rag_system object you inject. There is no embedded HTTP client or provider SDK anywhere in this archive.

Related pages