deepdata: core product code (backend, frontend, runtime, deepflow module)

This commit is contained in:
figmar
2026-08-30 19:23:38 +08:00
commit bd3db30be9
1405 changed files with 271727 additions and 0 deletions
@@ -0,0 +1,97 @@
"""
LangChain Embeddings 封装
直接使用 LangChain 的 embeddings 功能,支持多种提供商:
- OpenAI: langchain-openai
- Ollama: langchain-community
- 其他: 通过 LangChain 生态
"""
from typing import Optional, Any
from langchain_core.embeddings import Embeddings
from langchain_openai import OpenAIEmbeddings
class EmbeddingFactory:
"""LangChain Embeddings 工厂类"""
@staticmethod
def create_embeddings(
model_name: str,
base_url: Optional[str] = None,
api_key: Optional[str] = None,
**kwargs: Any,
) -> Embeddings:
"""
创建 LangChain Embeddings 实例
Args:
model_name: 模型名称(如 text-embedding-3-small)
base_url: API 基础 URL
api_key: API 密钥
**kwargs: 其他参数
Returns:
LangChain Embeddings 实例
"""
# ========== 新增修复开始 ==========
# DashScope兼容模式不支持encoding_format=base64,强制删除该key
if "encoding_format" in kwargs:
del kwargs["encoding_format"]
# ========== 新增修复结束 ==========
# OpenAI / OpenAI 兼容接口
if "openai" in model_name.lower() or model_name.startswith("text-embedding"):
return OpenAIEmbeddings(
model=model_name,
base_url=base_url,
api_key=api_key,
check_embedding_ctx_length=False,
**kwargs,
)
# Ollama
if base_url and "ollama" in base_url.lower():
from langchain_community.embeddings.ollama import OllamaEmbeddings
return OllamaEmbeddings(
model=model_name,
base_url=base_url,
**kwargs,
)
# 默认使用 OpenAI 兼容
return OpenAIEmbeddings(
model=model_name,
base_url=base_url,
api_key=api_key,
**kwargs,
)
# xuhuanqing
@staticmethod
async def aembed_texts(
texts: list[str],
model_name: str,
base_url: str,
api_key: str,
**kwargs,
) -> list[list[float]]:
"""
LangChain Embeddings 的异步包装
专门给 LightRAG / 非 LangChain 调用方使用
"""
embeddings = EmbeddingFactory.create_embeddings(
model_name=model_name,
base_url=base_url,
api_key=api_key,
**kwargs,
)
# LangChain 的 embed_documents 是同步的
# 在 async 环境中用 run_in_executor 包装
import asyncio
loop = asyncio.get_running_loop()
return await loop.run_in_executor(
None,
embeddings.embed_documents,
texts,
)