"""runnable_parallel_demo.py — run two chains at the same time
Run with venv active:  python runnable_parallel_demo.py
"""
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableParallel

load_dotenv()

model = ChatOpenAI(model="gpt-4o-mini", temperature=0)
parser = StrOutputParser()

purpose_prompt = ChatPromptTemplate.from_template(
    "What does the HTML '{tag}' element do? One short sentence."
)
example_prompt = ChatPromptTemplate.from_messages([
    (
        "system",
        "Reply with exactly one line of HTML. "
        "No markdown fences. No DOCTYPE. No <html>, <head>, or <body> tags. "
        "Only the single tag snippet.",
    ),
    ("human", "Minimal one-line example for the HTML '{tag}' tag:"),
])

purpose_chain = purpose_prompt | model | parser
example_chain = example_prompt | model | parser

# Run both branches in parallel — result is a dict
chain = RunnableParallel(
    purpose=purpose_chain,
    example=example_chain,
)

tags = ["a", "img"]

for tag in tags:
    result = chain.invoke({"tag": tag})
    print(f"Tag: <{tag}>")
    print(f"  purpose: {result['purpose']}")
    print(f"  example: {result['example']}\n")