from dotenv import load_dotenv

load_dotenv()  # .env 에서 OPENAI_API_KEY 로드

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser, CommaSeparatedListOutputParser

llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)

prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 친절한 어시스턴트입니다."),
    ("user", "{question}"),
])

# (1) 정답 — prompt | llm | parser 를 파이프로 연결
chain = prompt | llm | StrOutputParser()

result = chain.invoke({"question": "파이썬이 뭐야? 한 줄로 답해줘."})
print(result)


# (2) 정답 — 06 에서 모델→파서를 .invoke() 로 직접 이었던 리스트 추출을, 이제 LCEL 한 줄로
#     (06 은 문자열 프롬프트였지만, 여기서는 템플릿까지 합쳐 prompt | llm | parser 로 묶는다)
list_parser = CommaSeparatedListOutputParser()
list_prompt = ChatPromptTemplate.from_template("{subject} 5개를 나열해줘.\n{format_instructions}")

list_chain = list_prompt | llm | list_parser
print(list_chain.invoke({
    "subject": "한국 대표 과일",
    "format_instructions": list_parser.get_format_instructions(),
}))
