diff --git a/src/chadgpt/chatbot.py b/src/chadgpt/chatbot.py new file mode 100644 index 0000000..f088638 --- /dev/null +++ b/src/chadgpt/chatbot.py @@ -0,0 +1,10 @@ +from gpt_index import GPTSimpleVectorIndex +from .config import DB_PATH + + +def chatbot(input_text): + # TODO: need check if index_file no exist + index_file = DB_PATH + "/index.json" + index = GPTSimpleVectorIndex.load_from_disk(index_file) + response = index.query(input_text, response_mode="compact") + return response.response diff --git a/src/chadgpt/config.py b/src/chadgpt/config.py new file mode 100644 index 0000000..beee4cc --- /dev/null +++ b/src/chadgpt/config.py @@ -0,0 +1,6 @@ +import os +from dotenv import load_dotenv + + +load_dotenv() +DB_PATH = os.environ.get("DB_PATH", "/app/db") diff --git a/src/chadgpt/indexer.py b/src/chadgpt/indexer.py new file mode 100644 index 0000000..3d67058 --- /dev/null +++ b/src/chadgpt/indexer.py @@ -0,0 +1,43 @@ +from langchain.chat_models import ChatOpenAI +from gpt_index import ( + SimpleDirectoryReader, + GPTSimpleVectorIndex, + LLMPredictor, + PromptHelper +) + + +def construct_index(db_path): + max_input_size = 4096 + num_outputs = 512 + max_chunk_overlap = 20 + chunk_size_limit = 600 + + prompt_helper = PromptHelper( + max_input_size, + num_outputs, + max_chunk_overlap, + chunk_size_limit=chunk_size_limit + ) + + llm = ChatOpenAI( + temperature=0.7, + model_name="gpt-3.5-turbo", + max_tokens=num_outputs + ) + + llm_predictor = LLMPredictor(llm) + + # get documents for learn: + documents = SimpleDirectoryReader(db_path).load_data() + + index = GPTSimpleVectorIndex( + documents, + llm_predictor=llm_predictor, + prompt_helper=prompt_helper + ) + + index_file = db_path + "/index.json" + index.save_to_disk(index_file) + + return index diff --git a/src/chadgpt/interface.py b/src/chadgpt/interface.py new file mode 100644 index 0000000..d90caef --- /dev/null +++ b/src/chadgpt/interface.py @@ -0,0 +1,10 @@ +import gradio as gr +from .chatbot import chatbot + + +iface = gr.Interface( + fn=chatbot, + inputs=gr.components.Textbox(lines=7, label="Enter your text"), + outputs="text", + title="ISPsystem custom-trained AI Chatbot" +)