Spaces:
Sleeping
Sleeping
from llama_hub.github_repo import GithubRepositoryReader, GithubClient | |
from llama_index import download_loader, GPTVectorStoreIndex | |
from llama_index import LLMPredictor, ServiceContext, LangchainEmbedding | |
from langchain.llms import AzureOpenAI | |
from langchain.embeddings.openai import OpenAIEmbeddings | |
import os | |
import pickle | |
import streamlit as st | |
import logging | |
import sys | |
logging.basicConfig( | |
stream=sys.stdout, level=logging.DEBUG | |
) # logging.DEBUG for more verbose output | |
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout)) | |
# Sidebar contents | |
with st.sidebar: | |
st.title("🤗💬 LLM Chat App") | |
st.markdown( | |
""" | |
## About | |
This app is an LLM-powered chatbot built using: | |
- [Streamlit](https://streamlit.io/) | |
- [LangChain](https://python.langchain.com/) | |
- [X-Pipe](https://github.com/ctripcorp/x-pipe) | |
""" | |
) | |
# add_vertical_space(5) | |
st.write("Made by Nick") | |
def main() -> None: | |
st.header("X-Pipe Wiki 机器人 💬") | |
# define embedding | |
embedding = LangchainEmbedding(OpenAIEmbeddings(client=None, chunk_size=1)) | |
# define LLM | |
llm_predictor = LLMPredictor( | |
llm=AzureOpenAI( | |
deployment_name="text-davinci-003", | |
model="text-davinci-003", | |
client=None, | |
) | |
) | |
# configure service context | |
service_context = ServiceContext.from_defaults( | |
llm_predictor=llm_predictor, embed_model=embedding | |
) | |
download_loader("GithubRepositoryReader") | |
docs = None | |
if os.path.exists("docs/docs.pkl"): | |
with open("docs/docs.pkl", "rb") as f: | |
docs = pickle.load(f) | |
if docs is None: | |
github_client = GithubClient(os.getenv("GITHUB_TOKEN")) | |
loader = GithubRepositoryReader( | |
github_client, | |
owner="ctripcorp", | |
repo="x-pipe", | |
filter_directories=( | |
[".", "doc"], | |
GithubRepositoryReader.FilterType.INCLUDE, | |
), | |
filter_file_extensions=([".md"], GithubRepositoryReader.FilterType.INCLUDE), | |
verbose=True, | |
concurrent_requests=10, | |
) | |
docs = loader.load_data(branch="master") | |
with open("docs/docs.pkl", "wb") as f: | |
pickle.dump(docs, f) | |
index = GPTVectorStoreIndex.from_documents(docs, service_context=service_context) | |
query_engine = index.as_query_engine(service_context=service_context) | |
query = st.text_input("X-Pipe Wiki 问题:") | |
if query: | |
index = GPTVectorStoreIndex.from_documents( | |
docs, service_context=service_context | |
) | |
query_engine = index.as_query_engine(service_context=service_context) | |
response = query_engine.query(query) | |
st.write(response) | |
if __name__ == "__main__": | |
main() | |