Spaces:
Sleeping
Sleeping
| import os | |
| from langchain_community.llms import HuggingFaceEndpoint | |
| from langchain.chains import LLMChain | |
| from langchain_core.prompts import PromptTemplate | |
| import gradio as gr | |
| from langchain_community.chat_message_histories import ChatMessageHistory | |
| from langchain_core.chat_history import BaseChatMessageHistory | |
| from langchain_core.runnables.history import RunnableWithMessageHistory | |
| from langchain_core.messages import HumanMessage | |
| from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder | |
| repo_id = "mistralai/Mistral-7B-Instruct-v0.3" | |
| llm = HuggingFaceEndpoint( | |
| repo_id=repo_id, max_length=128, temperature=0.2 | |
| ) | |
| store = {} | |
| def llm_chain(question, chat_history): | |
| def get_session_history(session_id: str) -> BaseChatMessageHistory: | |
| if session_id not in store: | |
| store[session_id] = ChatMessageHistory() | |
| return store[session_id] | |
| template = """Question: {question} | |
| """ | |
| prompt = PromptTemplate.from_template(template) | |
| chain = prompt | llm | |
| with_message_history = RunnableWithMessageHistory(chain, get_session_history) | |
| config = {"configurable": {"session_id": "abc1"}} | |
| response = with_message_history.invoke( | |
| [HumanMessage(content=question)], | |
| config=config, | |
| ) | |
| chat_history.append((question, response)) | |
| return "", chat_history | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| with gr.Column(): | |
| chatbot = gr.Chatbot() | |
| msg = gr.Textbox(interactive=True, ) | |
| with gr.Row(): | |
| clear = gr.ClearButton([msg, chatbot], icon="https://img.icons8.com/?size=100&id=Xnx8cxDef16O&format=png&color=000000") | |
| send_btn = gr.Button("Send", variant='primary', icon="https://img.icons8.com/?size=100&id=g8ltXTwIfJ1n&format=png&color=000000") | |
| msg.submit(fn=llm_chain, inputs=[msg, chatbot], outputs=[msg, chatbot]) | |
| send_btn.click(fn=llm_chain, inputs=[msg, chatbot], outputs=[msg, chatbot]) | |
| if __name__ == "__main__": | |
| demo.launch() |