# ============================================================
# [실습] 커스텀 도구 만들기: @tool과 Pydantic
#
# 빌트인을 쓰는 걸 봤으니, 이제 '내 도구'를 직접 만든다.
# 아래 항목을 직접 구현하세요:
#  1) @tool 을 붙여 get_word_length(word: str) -> int 도구를 만든다 (docstring 필수).
#  2) SearchInput(BaseModel): query, max_results(default=5, ge=1, le=20),
#     sort_by(Literal["relevance","date"], default="relevance") 필드를 정의한다.
#  3) @tool(args_schema=SearchInput) 로 search(...) 도구를 만든다.
#  4) llm.bind_tools([search]) 후 "최신 자료 5개를 날짜순으로 검색해줘" 를 invoke 해
#     tool_calls 의 args 가 sort_by="date" 로 채워지는지 확인한다.
# ============================================================

from typing import Literal
from pydantic import BaseModel, Field
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool

load_dotenv()


# 1) 여기에 코드를 작성하세요 (@tool get_word_length)


# 2) 여기에 코드를 작성하세요 (class SearchInput(BaseModel): ...)


# 3) 여기에 코드를 작성하세요 (@tool(args_schema=SearchInput) def search(...))


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

# 4) 여기에 코드를 작성하세요
#    (get_word_length 정보 출력 + llm.bind_tools([search]) 로 invoke → tool_calls 확인)
