from dotenv import load_dotenv

load_dotenv()  # .env 에서 OPENAI_API_KEY 로드

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

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


# (1) StrOutputParser ─────────────────────────────────────────
# 1단계: 모델을 호출한다. 결과는 문자열이 아니라 AIMessage '객체' 다.
response = llm.invoke("파이썬을 한 줄로 설명해줘.")
print(response)            # content='파이썬은 ...' ... ← 객체 통째로 출력된다

# 2단계: 파서를 만들고, 그 객체를 invoke 해서 '문자열'만 뽑는다.
str_parser = StrOutputParser()
text = str_parser.invoke(response)
print(text)                # 파이썬은 ...


# (2) CommaSeparatedListOutputParser ──────────────────────────
# 1단계: 리스트 파서를 만들고, '쉼표로 구분해 답하라'는 형식 지시문을 프롬프트에 붙여 모델 호출.
list_parser = CommaSeparatedListOutputParser()
prompt = "한국 대표 과일 5개를 나열해줘.\n" + list_parser.get_format_instructions()
response = llm.invoke(prompt)
print(response)            # content='사과, 배, 감, ...' ← 아직은 쉼표 문자열(AIMessage)

# 2단계: 파서를 invoke 해서 '파이썬 리스트' 로 변환.
fruits = list_parser.invoke(response)
print(fruits)              # ['사과', '배', ...]
