"""streamlit_chat_message_history_demo.py — StreamlitChatMessageHistory + RunnableWithMessageHistory"""

import subprocess
import sys


def _running_under_streamlit() -> bool:
    try:
        from streamlit.runtime.scriptrunner import get_script_run_ctx
        return get_script_run_ctx() is not None
    except Exception:
        return False


if __name__ == "__main__" and not _running_under_streamlit():
    print("Starting Streamlit server — open http://localhost:8501 in your browser.")
    raise SystemExit(
        subprocess.call(
            [sys.executable, "-m", "streamlit", "run", __file__, *sys.argv[1:]],
        )
    )

import streamlit as st
from dotenv import load_dotenv
from langchain_community.chat_message_histories import StreamlitChatMessageHistory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI

load_dotenv()

st.set_page_config(page_title="HTML Questions")
st.title("HTML Questions")

msgs = StreamlitChatMessageHistory(key="langchain_messages")

prompt = ChatPromptTemplate.from_messages([
    ("system", "Keep each reply to one short sentence."),
    MessagesPlaceholder(variable_name="history"),
    ("human", "{input}"),
])

chain = prompt | ChatOpenAI(model="gpt-4o-mini", temperature=0)

chain_with_history = RunnableWithMessageHistory(
    chain,
    lambda session_id: msgs,
    input_messages_key="input",
    history_messages_key="history",
)

config = {"configurable": {"session_id": "demo-1"}}

for msg in msgs.messages:
    st.chat_message(msg.type).write(msg.content)

if question := st.chat_input("Type a question…"):
    st.chat_message("human").write(question)
    response = chain_with_history.invoke({"input": question}, config)
    st.chat_message("ai").write(response.content)