llama-index
172 строки · 5.3 Кб
1import argparse2from typing import Any, Optional3
4from llama_index.legacy.command_line.rag import RagCLI, default_ragcli_persist_dir5from llama_index.legacy.embeddings import OpenAIEmbedding6from llama_index.legacy.ingestion import IngestionCache, IngestionPipeline7from llama_index.legacy.llama_dataset.download import (8LLAMA_DATASETS_LFS_URL,9LLAMA_DATASETS_SOURCE_FILES_GITHUB_TREE_URL,10download_llama_dataset,11)
12from llama_index.legacy.llama_pack.download import LLAMA_HUB_URL, download_llama_pack13from llama_index.legacy.storage.docstore import SimpleDocumentStore14from llama_index.legacy.text_splitter import SentenceSplitter15from llama_index.legacy.vector_stores import ChromaVectorStore16
17
18def handle_download_llama_pack(19llama_pack_class: Optional[str] = None,20download_dir: Optional[str] = None,21llama_hub_url: str = LLAMA_HUB_URL,22**kwargs: Any,23) -> None:24assert llama_pack_class is not None25assert download_dir is not None26
27download_llama_pack(28llama_pack_class=llama_pack_class,29download_dir=download_dir,30llama_hub_url=llama_hub_url,31)32print(f"Successfully downloaded {llama_pack_class} to {download_dir}")33
34
35def handle_download_llama_dataset(36llama_dataset_class: Optional[str] = None,37download_dir: Optional[str] = None,38llama_hub_url: str = LLAMA_HUB_URL,39llama_datasets_lfs_url: str = LLAMA_DATASETS_LFS_URL,40llama_datasets_source_files_tree_url: str = LLAMA_DATASETS_SOURCE_FILES_GITHUB_TREE_URL,41**kwargs: Any,42) -> None:43assert llama_dataset_class is not None44assert download_dir is not None45
46download_llama_dataset(47llama_dataset_class=llama_dataset_class,48download_dir=download_dir,49llama_hub_url=llama_hub_url,50llama_datasets_lfs_url=llama_datasets_lfs_url,51llama_datasets_source_files_tree_url=llama_datasets_source_files_tree_url,52show_progress=True,53load_documents=False,54)55
56print(f"Successfully downloaded {llama_dataset_class} to {download_dir}")57
58
59def default_rag_cli() -> RagCLI:60import chromadb61
62persist_dir = default_ragcli_persist_dir()63chroma_client = chromadb.PersistentClient(path=persist_dir)64chroma_collection = chroma_client.create_collection("default", get_or_create=True)65vector_store = ChromaVectorStore(66chroma_collection=chroma_collection, persist_dir=persist_dir67)68docstore = SimpleDocumentStore()69
70ingestion_pipeline = IngestionPipeline(71transformations=[SentenceSplitter(), OpenAIEmbedding()],72vector_store=vector_store,73docstore=docstore,74cache=IngestionCache(),75)76try:77ingestion_pipeline.load(persist_dir=persist_dir)78except FileNotFoundError:79pass80
81return RagCLI(82ingestion_pipeline=ingestion_pipeline,83verbose=False,84persist_dir=persist_dir,85)86
87
88def main() -> None:89parser = argparse.ArgumentParser(description="LlamaIndex CLI tool.")90
91# Subparsers for the main commands92subparsers = parser.add_subparsers(title="commands", dest="command", required=True)93
94# llama rag command95llamarag_parser = subparsers.add_parser(96"rag", help="Ask a question to a document / a directory of documents."97)98RagCLI.add_parser_args(llamarag_parser, default_rag_cli)99
100# download llamapacks command101llamapack_parser = subparsers.add_parser(102"download-llamapack", help="Download a llama-pack"103)104llamapack_parser.add_argument(105"llama_pack_class",106type=str,107help=(108"The name of the llama-pack class you want to download, "109"such as `GmailOpenAIAgentPack`."110),111)112llamapack_parser.add_argument(113"-d",114"--download-dir",115type=str,116default="./llama_packs",117help="Custom dirpath to download the pack into.",118)119llamapack_parser.add_argument(120"--llama-hub-url",121type=str,122default=LLAMA_HUB_URL,123help="URL to llama hub.",124)125llamapack_parser.set_defaults(126func=lambda args: handle_download_llama_pack(**vars(args))127)128
129# download llamadatasets command130llamadataset_parser = subparsers.add_parser(131"download-llamadataset", help="Download a llama-dataset"132)133llamadataset_parser.add_argument(134"llama_dataset_class",135type=str,136help=(137"The name of the llama-dataset class you want to download, "138"such as `PaulGrahamEssayDataset`."139),140)141llamadataset_parser.add_argument(142"-d",143"--download-dir",144type=str,145default="./llama_datasets",146help="Custom dirpath to download the pack into.",147)148llamadataset_parser.add_argument(149"--llama-hub-url",150type=str,151default=LLAMA_HUB_URL,152help="URL to llama hub.",153)154llamadataset_parser.add_argument(155"--llama-datasets-lfs-url",156type=str,157default=LLAMA_DATASETS_LFS_URL,158help="URL to llama datasets.",159)160llamadataset_parser.set_defaults(161func=lambda args: handle_download_llama_dataset(**vars(args))162)163
164# Parse the command-line arguments165args = parser.parse_args()166
167# Call the appropriate function based on the command168args.func(args)169
170
171if __name__ == "__main__":172main()173