gusdelact's picture
chatbot con memoria
8889163 verified
#simple chatbot con Langchain y usando Amazon Bedrock.
import gradio as gr
import random
import langchain
import langchain_community
from langchain_aws import ChatBedrock
from langchain.chains import ConversationChain
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
#para manejar la memoria del chat
import uuid
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.chat_history import BaseChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
#para langchain 0.2
store = {}
#funcion que retorna un id de sesion usando uuid
def get_chat_session_id():
return str(uuid.uuid4())
def get_session_history(session_id: str) -> BaseChatMessageHistory:
if session_id not in store:
store[session_id] = ChatMessageHistory()
return store[session_id]
def init():
#definir chat con memoria
chat = ChatBedrock(
model_id="anthropic.claude-3-sonnet-20240229-v1:0",
model_kwargs={"temperature": 0.1}
)
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You're an assistant who's good at {ability}. Respond in 20 words or fewer",
),
MessagesPlaceholder(variable_name="history"),
("human", "{input}"),
]
)
runnable = prompt | chat
with_message_history = RunnableWithMessageHistory(
runnable,
get_session_history,
input_messages_key="input",
history_messages_key="history",
)
return with_message_history
def bedrock_response(message,history):
the_ability= "Filosofia"
response=the_chat.invoke(
{"ability": the_ability, "input": message},
config={"configurable": {"session_id": id_session}},
)
print(type(response))
print(response)
return response.content
id_session=get_chat_session_id()
the_chat = init()
demo = gr.ChatInterface(bedrock_response)
if __name__ == "__main__":
demo.launch()