# 本文件用于下载并获取embedding向量化模型

from pathlib import Path
from langchain_huggingface import HuggingFaceEmbeddings

# 获取embeddings模型 -- 首次调用时自动下载
def get_embeddings(model_name="BAAI/bge-small-zh-v1.5",device="cpu",**kwargs):
    # 支持更换其他向量化模型
    local_dir = Path("models")/model_name.replace("/", "_")
    if not local_dir.exists():
        print(f'⚠️ 首次使用嵌入模型，正在下载到{local_dir.absolute()}')
        print("💡 提示：需要联网(必需梯子)，完成后可离线使用")
        from huggingface_hub import snapshot_download
        # 模型下载工具
        snapshot_download(
            repo_id = model_name,
            local_dir = local_dir,
        )
        print('✅ 下载完成！')

    # 构造参数字典
    model_kwargs =  {
            "device":device,
            "local_files_only": True,  # 仅使用本地文件
        }

    # 此处实例化时，把kwargs传入
    _EMBEDDINGS = HuggingFaceEmbeddings(
        model_name = str(local_dir), # 使用本地已下载的模型
        model_kwargs = model_kwargs,
        **kwargs # 允许传入参数
    )
    return _EMBEDDINGS
