# ============================================================
# [실습] Retriever를 도구로: RAG를 에이전트에 연결
#
# 검색(retriever)을 '도구'로 달면, 에이전트가 필요할 때만 스스로 검색한다.
# 아래 항목을 직접 구현하세요:
#  1) InMemoryVectorStore.from_texts(DOCS, embedding=embeddings) 로 벡터스토어를 만든다.
#  2) @tool search_handbook(query): similarity_search(k=2) 결과를 문자열로 반환한다.
#     (docstring 에 '우리 회사 규정' 을 검색한다고 명시 → 에이전트가 라우팅한다)
#  3) create_agent(llm, [search_handbook], system_prompt=...) 로 에이전트를 만든다.
#  4) run_agent 로 '규정 질문'과 '무관한 질문'을 실행해 검색 발생 차이를 확인한다.
# ============================================================

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_core.tools import tool
from langchain_core.vectorstores import InMemoryVectorStore
from langchain.agents import create_agent

from agent_utils import run_agent

load_dotenv()

DOCS = [
    "우리 회사 연차는 입사 1년 후 15일 부여되며, 이후 매년 1일씩 증가한다.",
    "우리 회사 재택근무는 주 3일까지 가능하고, 사전에 팀장 승인이 필요하다.",
    "우리 회사 경조사 휴가는 본인 결혼 5일, 직계가족 사망 5일이다.",
    "우리 회사 사내 카페는 평일 오전 8시부터 오후 6시까지 운영한다.",
]
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# 1) 여기에 코드를 작성하세요 (vectorstore = InMemoryVectorStore.from_texts(DOCS, embedding=embeddings))


# 2) 여기에 코드를 작성하세요 (@tool search_handbook(query) → similarity_search(k=2) 결과 문자열)


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

# 3) 여기에 코드를 작성하세요 (agent = create_agent(llm, [search_handbook], system_prompt=...))


if __name__ == "__main__":
    # 4) 여기에 코드를 작성하세요
    #    run_agent(agent, "연차는 며칠 받을 수 있어?")   # 규정 → 검색
    #    run_agent(agent, "2 더하기 3은?")               # 무관 → 검색 없음
    pass
