fix: handle exceptions during index loading and recreate cache if necessary in aider/help.py

This commit is contained in:
Paul Gauthier (aider) 2024-09-27 12:22:09 -07:00
parent a230fa10b3
commit cb1f6f2e3a

View file

@ -58,6 +58,9 @@ def fname_to_url(filepath):
return docid return docid
import json
import shutil
def get_index(): def get_index():
from llama_index.core import ( from llama_index.core import (
Document, Document,
@ -69,35 +72,46 @@ def get_index():
dname = Path.home() / ".aider" / "caches" / ("help." + __version__) dname = Path.home() / ".aider" / "caches" / ("help." + __version__)
index = None
if dname.exists(): if dname.exists():
try:
storage_context = StorageContext.from_defaults(
persist_dir=dname,
)
index = load_index_from_storage(storage_context)
except (OSError, json.JSONDecodeError):
shutil.rmtree(dname)
pass
storage_context = StorageContext.from_defaults( storage_context = StorageContext.from_defaults(
persist_dir=dname, persist_dir=dname,
) )
index = load_index_from_storage(storage_context) index = load_index_from_storage(storage_context)
else: else:
if index is None:
parser = MarkdownNodeParser() parser = MarkdownNodeParser()
nodes = [] nodes = []
for fname in get_package_files(): for fname in get_package_files():
fname = Path(fname) fname = Path(fname)
if any(fname.match(pat) for pat in exclude_website_pats): if any(fname.match(pat) for pat in exclude_website_pats):
continue continue
doc = Document( doc = Document(
text=importlib_resources.files("aider.website") text=importlib_resources.files("aider.website")
.joinpath(fname) .joinpath(fname)
.read_text(encoding="utf-8"), .read_text(encoding="utf-8"),
metadata=dict( metadata=dict(
filename=fname.name, filename=fname.name,
extension=fname.suffix, extension=fname.suffix,
url=fname_to_url(str(fname)), url=fname_to_url(str(fname)),
), ),
) )
nodes += parser.get_nodes_from_documents([doc]) nodes += parser.get_nodes_from_documents([doc])
index = VectorStoreIndex(nodes, show_progress=True) index = VectorStoreIndex(nodes, show_progress=True)
dname.parent.mkdir(parents=True, exist_ok=True) dname.parent.mkdir(parents=True, exist_ok=True)
index.storage_context.persist(dname) index.storage_context.persist(dname)
return index return index