Spaces:
Sleeping
Sleeping
import openai | |
import streamlit as st | |
import os | |
import pickle | |
import logging | |
from llama_index import SimpleDirectoryReader | |
from llama_index.chat_engine import CondenseQuestionChatEngine; | |
from llama_index.response_synthesizers import get_response_synthesizer | |
from llama_index import Prompt, SimpleDirectoryReader | |
from logging import getLogger, StreamHandler, Formatter | |
index_name = "./storage" | |
pkl_name = "stored_documents.pkl" | |
custom_prompt = Prompt("""\ | |
以下はこれまでの会話履歴と、ドキュメントを検索して回答する必要がある、ユーザーからの会話文です。 | |
会話と新しい会話文に基づいて、検索クエリを作成します。回答は日本語で行います。 | |
新しい会話文が挨拶の場合、挨拶を返してください。 | |
新しい会話文が質問の場合、検索した結果の回答を返してください。 | |
答えがわからない場合は正直にわからないと回答してください。 | |
会話履歴: | |
{chat_history} | |
新しい会話文: | |
{question} | |
Search query: | |
""") | |
chat_history = [] | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger("__name__") | |
logger.debug("調査用ログ") | |
if "file_uploader_key" not in st.session_state: | |
st.session_state["file_uploader_key"] = 0 | |
st.title("📝 ImportFile") | |
uploaded_file = st.file_uploader("Upload an article", type=("txt", "md","pdf"),key=st.session_state["file_uploader_key"]) | |
if st.button("import",use_container_width=True): | |
filepath = None | |
try: | |
filepath = os.path.join('documents', os.path.basename( uploaded_file.name)) | |
logger.info(filepath) | |
with open(filepath, 'wb') as f: | |
f.write(uploaded_file.getvalue()) | |
f.close() | |
document = SimpleDirectoryReader(input_files=[filepath]).load_data()[0] | |
logger.info(document) | |
st.session_state.stored_docs.append(uploaded_file.name) | |
logger.info(st.session_state.stored_docs) | |
st.session_state.index.insert(document=document) | |
st.session_state.index.storage_context.persist(persist_dir=index_name) | |
response_synthesizer = get_response_synthesizer(response_mode='refine') | |
st.session_state.query_engine = st.session_state.index.as_query_engine(response_synthesizer=response_synthesizer) | |
st.session_state.chat_engine = CondenseQuestionChatEngine.from_defaults( | |
query_engine=st.session_state.query_engine, | |
condense_question_prompt=custom_prompt, | |
chat_history=chat_history, | |
verbose=True | |
) | |
with open(pkl_name, "wb") as f: | |
print("pickle") | |
pickle.dump(st.session_state.stored_docs, f) | |
st.session_state["file_uploader_key"] += 1 | |
st.experimental_rerun() | |
except Exception as e: | |
# cleanup temp file | |
logger.error(e) | |
if filepath is not None and os.path.exists(filepath): | |
os.remove(filepath) | |
st.subheader("Import File List") | |
if "stored_docs" in st.session_state: | |
logger.info(st.session_state.stored_docs) | |
for docname in st.session_state.stored_docs: | |
st.write(docname) | |