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

Method __init__

api/rag.py:157–243  ·  view source on GitHub ↗

Initialize the RAG component. Args: provider: Model provider to use (google, openai, openrouter, ollama) model: Model name to use with the provider use_s3: Whether to use S3 for database storage (default: False)

(self, provider="google", model=None, use_s3: bool = False)

Source from the content-addressed store, hash-verified

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
211 data_parser = adal.DataClassParser(data_class=RAGAnswer, return_data_class=True)
212
213 # Format instructions to ensure proper output structure
214 format_instructions = data_parser.get_output_format_str() + """

Callers 1

__init__Method · 0.45

Calls 7

initialize_db_managerMethod · 0.95
get_embedder_typeFunction · 0.90
get_embedder_configFunction · 0.90
get_embedderFunction · 0.90
get_model_configFunction · 0.90
MemoryClass · 0.85

Tested by

no test coverage detected