honcho/example/cli/main.py

62 lines
1.8 KiB
Python

from typing import List
from uuid import uuid4
from langchain.prompts import ChatPromptTemplate
from langchain.schema import AIMessage, HumanMessage, SystemMessage
from langchain_community.chat_models.fake import FakeListChatModel
from honcho import Honcho
from honcho.ext.langchain import langchain_message_converter
app_name = str(uuid4())
honcho = Honcho(
app_name=app_name, base_url="http://localhost:8000"
) # uncomment to use local
# honcho = Honcho(app_name=app_name) # uses demo server at https://demo.honcho.dev
honcho.initialize()
responses = ["Fake LLM Response :)"]
llm = FakeListChatModel(responses=responses)
system = SystemMessage(
content="You are world class technical documentation writer. Be as concise as possible"
)
user_name = "CLI-Test"
user = honcho.create_user(user_name)
session = user.create_session()
# def langchain_message_converter(messages: List):
# new_messages = []
# for message in messages:
# if message.is_user:
# new_messages.append(HumanMessage(content=message.content))
# else:
# new_messages.append(AIMessage(content=message.content))
# return new_messages
def chat():
while True:
user_input = input("User: ")
if user_input == "exit":
session.close()
break
user_message = HumanMessage(content=user_input)
history = list(session.get_messages_generator())
langchain_history = langchain_message_converter(history)
prompt = ChatPromptTemplate.from_messages(
[system, *langchain_history, user_message]
)
chain = prompt | llm
response = chain.invoke({})
print(type(response))
print(f"AI: {response.content}")
session.create_message(is_user=True, content=user_input)
session.create_message(is_user=False, content=response.content)
chat()