diff --git a/private_gpt/ui/ui.py b/private_gpt/ui/ui.py index 0bf06d193f..80ee48fd73 100644 --- a/private_gpt/ui/ui.py +++ b/private_gpt/ui/ui.py @@ -55,9 +55,11 @@ class Source(BaseModel): file: str page: str text: str + pdf_prefix: str = "C:/UsedFilesFolder/" class Config: frozen = True + USE_HYPERLINKS_FOR_SOURCES: bool = True @staticmethod def curate_sources(sources: list[Chunk]) -> list["Source"]: @@ -76,7 +78,11 @@ def curate_sources(sources: list[Chunk]) -> list["Source"]: ) # Unique sources only return curated_sources - + + def to_hyperlink(self) -> str: + encoded_file = self.file.replace(" ", "%20") + file_path = f"{self.pdf_prefix}{encoded_file}#page={self.page}" + return f'{self.file} (page {self.page})' @singleton class PrivateGptUi: @@ -123,10 +129,10 @@ def yield_deltas(completion_gen: CompletionGen) -> Iterable[str]: used_files = set() for index, source in enumerate(cur_sources, start=1): if f"{source.file}-{source.page}" not in used_files: - sources_text = ( - sources_text - + f"{index}. {source.file} (page {source.page}) \n\n" - ) + if settings().USE_HYPERLINKS_FOR_SOURCES: + sources_text += f"{index}. {source.to_hyperlink()} \n\n" + else: + sources_text += f"{index}. {source.to_text()} \n\n" used_files.add(f"{source.file}-{source.page}") sources_text += "
\n\n" full_response += sources_text @@ -289,7 +295,8 @@ def _list_ingested_files(self) -> list[list[str]]: "file_name", "[FILE NAME MISSING]" ) files.add(file_name) - return [[row] for row in files] + sorted_files = sorted(files) # Sort the files alphabetically + return [[row] for row in sorted_files] # Use sorted files def _upload_file(self, files: list[str]) -> None: logger.debug("Loading count=%s files", len(files))