# ============================================================
# [실습] 도구 호출의 진짜 원리 — LangChain 없이 (raw OpenAI)
#
# LangChain 의 @tool / bind_tools 는 결국 OpenAI 의 tools= 파라미터를 감싼 것이다.
# 흐름: ① 도구를 JSON 스키마로 정의 → ② tools= 로 호출(모델이 호출 결정)
#       → ③ 결정된 함수 실행 → ④ 결과를 다시 줘서 → 최종 답
#
# 아래 항목을 직접 구현하세요:
#  1) tools = [{"type":"function","function":{name/description/parameters}}] 스키마를 정의한다.
#  2) chat.completions.create(..., tools=tools) 로 호출하고 message.tool_calls 를 확인한다.
#  3) 함수를 실행해 {"role":"tool", ...} 로 붙여 다시 호출 → 최종 답을 받는다.
# ============================================================

import json
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()
client = OpenAI()


def calculator(expression):
    """실제로 계산을 수행할 파이썬 함수"""
    return str(eval(expression))


# 1) 여기에 코드를 작성하세요 (tools = [...]  도구를 JSON 스키마로 정의)


messages = [{"role": "user", "content": "53 * 7 + 2 는 얼마야?"}]

# 2) 여기에 코드를 작성하세요 (tools=tools 로 호출 → message.tool_calls 출력)


# 3) 여기에 코드를 작성하세요
#    (tool_calls 의 함수 실행 → {"role":"tool", tool_call_id, content} 로 붙여 → 다시 호출 → 최종답)
