""" Main script to run the LLM chatbot using the Zigistry framework This script performs the following tasks: 1. Perform pre-requisites check 2. Configure LLM and embedding model 3. Data ingestion 4. Query handling 5. Launch the chatbot interface """ # --- Importing required libraries --- from zigistry import constants from llama_index.llms.openrouter import OpenRouter from llama_index.core.llms import ChatMessage from zigistry import pre_requisite import gradio as gr from llama_index.core import ( StorageContext, load_index_from_storage, VectorStoreIndex, SimpleDirectoryReader, ChatPromptTemplate, Settings, ) from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI from llama_index.embeddings.huggingface import HuggingFaceEmbedding # ------------------------------------- # --- Perform pre-requisites and pre-requisite check --- pre_requisite.performPreRequisites() if not pre_requisite.CorrectlyCompletedPreRequisites(): exit(1) # ------------------------------------------------------ # --- Configure LLM and embedding model --- Settings.llm = OpenRouter( model_name=constants.LLM, api_key=constants.OR_TOKEN, context_window=3000, max_tokens=512, temperature=constants.TEMPERATURE, ) Settings.embed_model = HuggingFaceEmbedding(model_name=constants.EMBEDDER) # ----------------------------------------- def data_ingestion(): """ Ingest data from the input files and create an index """ documents = SimpleDirectoryReader(input_files=constants.FILES).load_data() index = VectorStoreIndex.from_documents(documents) index.storage_context.persist(persist_dir=constants.PERSIST_DIR) def handle_query(query): """ Handle the query and return the response """ storage_context = StorageContext.from_defaults(persist_dir=constants.PERSIST_DIR) index = load_index_from_storage(storage_context) text_qa_template = ChatPromptTemplate.from_messages(constants.LLM_RESPONSE_FORMAT) query_engine = index.as_query_engine(text_qa_template=text_qa_template) answer = query_engine.query(query) if hasattr(answer, "response"): return answer.response if isinstance(answer, dict) and "response" in answer: return answer["response"] return "Sorry, I couldn't find an answer." if __name__ == "__main__": data_ingestion() # --- Launch the chatbot interface --- demo = gr.Interface( fn=handle_query, inputs="text", outputs="text", title="LLM Chatbot", flagging_mode="never", ) demo.launch() # -------------------------------------