Ragdaemon is a Retrieval-Augmented Generation (RAG) system for code. It runs a daemon (background process) to watch your active code, put it in a knowledge graph, and query the knowledge graph to (among other things) generate context for LLM completions.
Three ways to use Ragdaemon:
Ragdaemon powers the 'auto-context' feature in Mentat, a command-line coding assistant. You can install Mentat using pip install mentat
. Run with the --auto-context-tokens <amount>
or -a
(default=5000) flag, and ragdaemon-selected context will be added to all of your prompts.
Install locally to visualize and query the knowledge graph directly.
Install using pip install ragdaemon
, and run in your codebase's directory, e.g. ragdaemon
. This will start a Daemon on your codebase, and an interface at localhost:5001
. Options:
--chunk-extensions <ext>[..<ext>]
: Which file extensions to chunk. If not specified, defaults to the top 20 most common code file extensions.--chunk-model
: OpenAI'sgpt-4-0215-preview
by default.--embeddings-model
: OpenAI'stext-embedding-3-large
by default.--diff
: A git diff to include in the knowledge graph. By default, the active diff (if any) is included with each code feature.
Ragdaemon is released open-source as a standalone RAG system. It includes a library of python classes to generate and query the knowledge graph. The graph itself is a NetworkX MultiDiGraph which saves/loads to a .json
file.
import asyncio
from pathlib import Path
from ragdaemon.daemon import Daemon
async def main():
cwd = Path.cwd()
daemon = Daemon(cwd)
await daemon.update()
results = daemon.search("javascript")
for result in results:
print(f"{result['distance']} | {result['id']}")
query = "How do I run the tests?"
context_builder = daemon.get_context(
query,
auto_tokens=5000
)
context = context_builder.render()
messages = [
{"role": "user", "content": query},
{"role": "user", "content": f"CODE CONTEXT\n{context}"}
]
print(messages)
asyncio.run(main())