Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| from llama_index import SimpleDirectoryReader, GPTVectorStoreIndex | |
| import os | |
| import shutil | |
| def save_file(files): | |
| directory_name = 'tmp_docs' | |
| # Remove existing files in the directory | |
| if os.path.exists(directory_name): | |
| for filename in os.listdir(directory_name): | |
| file_path = os.path.join(directory_name, filename) | |
| try: | |
| if os.path.isfile(file_path): | |
| os.remove(file_path) | |
| except Exception as e: | |
| print(f"Error: {e}") | |
| # Save the new file with original filename | |
| if files is not None: | |
| for file in files: | |
| file_name = file.name | |
| file_path = os.path.join(directory_name, file_name) | |
| with open(file_path, 'wb') as f: | |
| shutil.copyfileobj(file, f) | |
| def ingest(docs_dir): | |
| documents = SimpleDirectoryReader(docs_dir).load_data() | |
| index = GPTVectorStoreIndex.from_documents(documents) | |
| return index | |
| def get_answer(index, message): | |
| response = query(index, message) | |
| return [('Chatbot', ''.join(response.response))] | |
| def query(index, query_text): | |
| query_engine = index.as_query_engine() | |
| response = query_engine.query(query_text) | |
| return response | |
| os.environ['OPENAI_API_KEY'] = st.text_input( | |
| "Enter your OpenAI API key", type="password") | |
| if os.environ['OPENAI_API_KEY']: | |
| # Initialize chatbot history | |
| chatbot = [] | |
| # Display file upload component | |
| files = st.file_uploader('Upload Files', accept_multiple_files=True) | |
| if files is not None: | |
| save_file(files) | |
| index = ingest('tmp_docs') | |
| # Display message input component | |
| message = st.text_input('Enter message') | |
| # If message is entered, ingest documents and get chatbot response | |
| if message: | |
| chatbot.append(('You', message)) | |
| chatbot += get_answer(index, message) | |
| # Display chat history | |
| st.text_area('Chatbot:', value='\n'.join( | |
| [f'{x[0]}: {x[1]}' for x in chatbot]), height=250) | |