Spaces:
Sleeping
Sleeping
import subprocess | |
# Instalar un paquete utilizando pip desde Python | |
subprocess.check_call(["pip", "install", "langchain_community","langchain"]) | |
# Import necessary libraries | |
import streamlit as st | |
from langchain.chains import ConversationChain | |
from langchain.chains.conversation.memory import ConversationEntityMemory | |
from langchain.chains.conversation.prompt import ENTITY_MEMORY_CONVERSATION_TEMPLATE | |
import os | |
from getpass import getpass | |
from langchain import HuggingFaceHub | |
from langchain_community.llms import HuggingFaceEndpoint | |
from langchain_core.output_parsers import StrOutputParser | |
from langchain.prompts import PromptTemplate | |
from langchain.chains import LLMChain | |
# Set Streamlit page configuration | |
st.set_page_config(page_title='🧠MemoryBot🤖', layout='wide') | |
# Initialize session states. Un session state es como un diccionario | |
if "generated" not in st.session_state: | |
st.session_state["generated"] = [] | |
if "past" not in st.session_state: | |
st.session_state["past"] = [] | |
if "input" not in st.session_state: | |
st.session_state["input"] = "" | |
if "stored_session" not in st.session_state: | |
st.session_state["stored_session"] = [] | |
# Define function to get user input | |
def get_text(): | |
""" | |
Get the user input text. | |
Returns: | |
(str): The text entered by the user | |
""" | |
input_text = st.text_input("You: ", st.session_state["input"], key="input", | |
placeholder="Your AI assistant here! Ask me anything ...", | |
label_visibility='hidden') | |
return input_text | |
# #parte para hacer un chat nuevo | |
def new_chat(): | |
""" | |
Clears session state and starts a new chat. | |
""" | |
save = [] | |
for i in range(len(st.session_state['generated'])-1, -1, -1): | |
save.append("User:" + st.session_state["past"][i]) | |
save.append("Bot:" + st.session_state["generated"][i]) | |
st.session_state["stored_session"].append(save) | |
st.session_state["generated"] = [] | |
st.session_state["past"] = [] | |
st.session_state["input"] = "" | |
st.session_state.entity_memory.entity_store = {} | |
st.session_state.entity_memory.buffer.clear() | |
# Add a button to start a new chat | |
st.sidebar.button("New Chat", on_click = new_chat, type='primary') | |
# Move K outside of the sidebar expander | |
K = st.sidebar.number_input(' (#)Summary of prompts to consider', min_value=3, max_value=1000) | |
# Set up the Streamlit app layout | |
st.title("Personalized chatbot") | |
# Create prompt ( elige entre template_mario, template_poet, template_helper, template_chef, template_gym...) | |
prompt = PromptTemplate.from_template(os.environ["template_chef"]) | |
#Cambia la referencia a esta variable en llm_chain SOLO si vas a usar la memoria | |
prompt_memory = ENTITY_MEMORY_CONVERSATION_TEMPLATE | |
# Create an OpenAI instance | |
llm = HuggingFaceEndpoint(repo_id='mistralai/Mistral-7B-Instruct-v0.2', | |
temperature=0.3, | |
model_kwargs = {"max_length":128}, | |
huggingfacehub_api_token = os.environ["HUGGINGFACEHUB_API_TOKEN"]) | |
# Create a ConversationEntityMemory object if not already created | |
if 'entity_memory' not in st.session_state: | |
st.session_state.entity_memory = ConversationEntityMemory(llm=llm, k=K ) | |
# Create the LLMChain object with the specified configuration | |
llm_chain = LLMChain( | |
llm = llm, | |
prompt= prompt_memory, #cambia esto a prompt si no vas a usar memoria | |
memory = st.session_state.entity_memory, | |
output_parser=StrOutputParser() | |
) | |
# Get the user input | |
user_input = get_text() | |
# Generate the output using the ConversationChain object and the user input, and add the input/output to the session | |
if user_input: | |
output = Conversation.run(input=user_input) | |
st.session_state.past.append(user_input) | |
st.session_state.generated.append(output) | |
# Display the conversation history using an expander, and allow the user to download it | |
with st.expander("Conversation", expanded=True): | |
for i in range(len(st.session_state['generated'])-1, -1, -1): | |
st.info(st.session_state["past"][i],icon="🧐") | |
st.success(st.session_state["generated"][i], icon="🤖") | |
# Display stored conversation sessions in the sidebar | |
for i, sublist in enumerate(st.session_state.stored_session): | |
with st.sidebar.expander(label= f"Conversation-Session:{i}"): | |
st.write(sublist) | |
# Allow the user to clear all stored conversation sessions | |
if st.session_state.stored_session: | |
if st.sidebar.checkbox("Clear-all"): | |
del st.session_state.stored_session |