MCPcopy
hub / github.com/AsyncFuncAI/deepwiki-open / RAG

Class RAG

api/rag.py:153–445  ·  view source on GitHub ↗

RAG with one repo. If you want to load a new repos, call prepare_retriever(repo_url_or_path) first.

Source from the content-addressed store, hash-verified

151 __output_fields__ = ["rationale", "answer"]
152
153class RAG(adal.Component):
154 """RAG with one repo.
155 If you want to load a new repos, call prepare_retriever(repo_url_or_path) first."""
156
157 def __init__(self, provider="google", model=None, use_s3: bool = False): # noqa: F841 - use_s3 is kept for compatibility
158 """
159 Initialize the RAG component.
160
161 Args:
162 provider: Model provider to use (google, openai, openrouter, ollama)
163 model: Model name to use with the provider
164 use_s3: Whether to use S3 for database storage (default: False)
165 """
166 super().__init__()
167
168 self.provider = provider
169 self.model = model
170
171 # Import the helper functions
172 from api.config import get_embedder_config, get_embedder_type
173
174 # Determine embedder type based on current configuration
175 self.embedder_type = get_embedder_type()
176 self.is_ollama_embedder = (self.embedder_type == 'ollama') # Backward compatibility
177
178 # Check if Ollama model exists before proceeding
179 if self.is_ollama_embedder:
180 from api.ollama_patch import check_ollama_model_exists
181 from api.config import get_embedder_config
182
183 embedder_config = get_embedder_config()
184 if embedder_config and embedder_config.get("model_kwargs", {}).get("model"):
185 model_name = embedder_config["model_kwargs"]["model"]
186 if not check_ollama_model_exists(model_name):
187 raise Exception(f"Ollama model '{model_name}' not found. Please run 'ollama pull {model_name}' to install it.")
188
189 # Initialize components
190 self.memory = Memory()
191 self.embedder = get_embedder(embedder_type=self.embedder_type)
192
193 self_weakref = weakref.ref(self)
194 # Patch: ensure query embedding is always single string for Ollama
195 def single_string_embedder(query):
196 # Accepts either a string or a list, always returns embedding for a single string
197 if isinstance(query, list):
198 if len(query) != 1:
199 raise ValueError("Ollama embedder only supports a single string")
200 query = query[0]
201 instance = self_weakref()
202 assert instance is not None, "RAG instance is no longer available, but the query embedder was called."
203 return instance.embedder(input=query)
204
205 # Use single string embedder for Ollama, regular embedder for others
206 self.query_embedder = single_string_embedder if self.is_ollama_embedder else self.embedder
207
208 self.initialize_db_manager()
209
210 # Set up the output parser

Calls

no outgoing calls