1+ import logging
12import os
3+ import signal
24import sys
5+ import time
36from pathlib import Path
47
58import click
69from rich .console import Console
710
11+ from .benchmark import RagBenchmark
812from .indexing .indexer import Indexer
13+ from .indexing .watcher import FileWatcher
914from .query .context_assembler import ContextAssembler
1015
1116console = Console ()
1217
1318# TODO: change this to a more appropriate location
14- default_persist_dir = Path ( __file__ ). parent / "data "
19+ default_persist_dir = Path . home () / ".cache" / "gptme" / "rag "
1520
1621
1722@click .group ()
18- def cli ():
23+ @click .option ("--verbose/-v" , is_flag = True , help = "Enable verbose output" )
24+ def cli (verbose : bool ):
1925 """RAG implementation for gptme context management."""
20- pass
26+ logging .basicConfig (
27+ level = logging .DEBUG if verbose else logging .INFO ,
28+ format = "%(levelname)s - %(name)s - %(message)s" ,
29+ )
2130
2231
2332@cli .command ()
@@ -36,20 +45,13 @@ def cli():
3645def index (directory : Path , pattern : str , persist_dir : Path ):
3746 """Index documents in a directory."""
3847 try :
39- indexer = Indexer (persist_directory = persist_dir )
48+ indexer = Indexer (persist_directory = persist_dir , enable_persist = True )
4049 console .print (f"Indexing files in { directory } with pattern { pattern } " )
4150
42- # List files that will be indexed
43- files = list (directory .glob (pattern ))
44- console .print (f"Found { len (files )} files:" )
45- for file in files :
46- console .print (f" - { file } " )
47-
4851 # Index the files
49- with console .status (f"Indexing { len (files )} files..." ):
50- indexer .index_directory (directory , pattern )
52+ n_indexed = indexer .index_directory (directory , pattern )
5153
52- console .print (f"✅ Successfully indexed { len ( files ) } files" , style = "green" )
54+ console .print (f"✅ Successfully indexed { n_indexed } files" , style = "green" )
5355 except Exception as e :
5456 console .print (f"❌ Error indexing directory: { e } " , style = "red" )
5557
@@ -80,7 +82,7 @@ def search(
8082 stdout = sys .stdout
8183 sys .stdout = open (os .devnull , "w" )
8284 try :
83- indexer = Indexer (persist_directory = persist_dir )
85+ indexer = Indexer (persist_directory = persist_dir , enable_persist = True )
8486 assembler = ContextAssembler (max_tokens = max_tokens )
8587 documents , distances = indexer .search (query , n_results = n_results )
8688 finally :
@@ -165,7 +167,6 @@ def watch(directory: Path, pattern: str, persist_dir: Path, ignore_patterns: lis
165167 indexer .index_directory (directory , pattern )
166168
167169 console .print ("Starting file watcher..." )
168- from .indexing .watcher import FileWatcher
169170
170171 try :
171172 file_watcher = FileWatcher (
@@ -174,14 +175,11 @@ def watch(directory: Path, pattern: str, persist_dir: Path, ignore_patterns: lis
174175 with file_watcher :
175176 console .print ("Watching for changes. Press Ctrl+C to stop." )
176177 # Keep the main thread alive
177- import signal
178178
179179 try :
180180 signal .pause ()
181181 except AttributeError : # Windows doesn't have signal.pause
182182 while True :
183- import time
184-
185183 time .sleep (1 )
186184 except KeyboardInterrupt :
187185 console .print ("\n Stopping file watcher..." )
@@ -212,7 +210,6 @@ def benchmark():
212210)
213211def indexing (directory : Path , pattern : str , persist_dir : Path | None ):
214212 """Benchmark document indexing performance."""
215- from .benchmark import RagBenchmark
216213
217214 benchmark = RagBenchmark (index_dir = persist_dir )
218215
@@ -252,7 +249,6 @@ def search_benchmark(
252249 persist_dir : Path | None ,
253250):
254251 """Benchmark search performance."""
255- from .benchmark import RagBenchmark
256252
257253 benchmark = RagBenchmark (index_dir = persist_dir )
258254
@@ -296,7 +292,6 @@ def watch_perf(
296292 persist_dir : Path | None ,
297293):
298294 """Benchmark file watching performance."""
299- from .benchmark import RagBenchmark
300295
301296 benchmark = RagBenchmark (index_dir = persist_dir )
302297
0 commit comments