# ============================================================
# [실습] Retriever 구성 (검색 모드 / 메타데이터 필터)
#
# 아래 항목을 직접 구현하세요:
#  1) 벡터 스토어를 store.as_retriever(search_kwargs={"k": 3}) 로 감싸
#     "질문 → 관련 문서" 표준 부품을 만든다.
#  2) similarity_search, similarity_search_with_score(거리 점수),
#     max_marginal_relevance_search(k, fetch_k, lambda_mult)(다양성) 결과를 비교한다.
#  3) Chroma.from_documents 로 docs 를 컬렉션에 저장한 뒤, filter(where) 만 바꿔 가며
#     동등 / 숫자 비교($gte) / 복합 AND($and) 조건으로 similarity_search 후보를 좁힌다.
# ============================================================

from dotenv import load_dotenv

load_dotenv()  # .env 에서 OPENAI_API_KEY 로드

from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma
from langchain_core.documents import Document
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# 1) 여기에 코드를 작성하세요
#    - ../DATA 로드·청킹 → Chroma store 구성
#    - retriever = store.as_retriever(search_kwargs={"k": 3})


def search_modes(store, query):
    # 2) 여기에 코드를 작성하세요
    #    - similarity_search / similarity_search_with_score / max_marginal_relevance_search 비교
    pass


# 여기에 코드를 작성하세요 (search_modes(store, "...") 호출)


# 메타 필터 데모용 문서 (미리 제공)
docs = [
    Document(page_content="NVMe SSD 는 PCIe 로 약 7GB/s 의 시퀀셜 속도를 낸다.",
             metadata={"category": "nvme", "year": 2022, "tier": "high"}),
    Document(page_content="SATA SSD 는 약 0.5GB/s 로 NVMe 보다 느리지만 호환성이 좋다.",
             metadata={"category": "sata", "year": 2018, "tier": "mid"}),
    Document(page_content="HDD 는 회전 디스크 기반이라 IO 가 느린 편이다.",
             metadata={"category": "hdd", "year": 2015, "tier": "low"}),
    Document(page_content="최신 PCIe 5.0 NVMe 는 약 14GB/s 까지 도달한다.",
             metadata={"category": "nvme", "year": 2024, "tier": "high"}),
]

# 3) 여기에 코드를 작성하세요
#    - Chroma.from_documents(docs, embeddings, collection_name="meta_filter_demo")
#    - filter={"category":"nvme"} / {"year":{"$gte":2020}} / {"$and":[...]} 로 similarity_search 비교
