增加代码知识库;修复文档处理内容;增加API设置

This commit is contained in:
2026-05-16 20:20:10 +08:00
parent 69b49d28b2
commit 7aa3ce3294
119 changed files with 182273 additions and 793 deletions

View File

@@ -1,30 +1,39 @@
from app.core.config import settings
from langchain_openai import OpenAIEmbeddings
from langchain_ollama import OllamaEmbeddings
from typing import Optional
# If you plan on adding other embeddings, import them here
# from some_other_module import AnotherEmbeddingClass
class EmbeddingsFactory:
@staticmethod
def create():
def create(provider: Optional[str] = None, model_profile: Optional[object] = None):
"""
Factory method to create an embeddings instance based on .env config.
"""
# Suppose your .env has a value like EMBEDDINGS_PROVIDER=openai
embeddings_provider = settings.EMBEDDINGS_PROVIDER.lower()
if model_profile is not None:
embeddings_provider = (provider or getattr(model_profile, "provider", None) or "dashscope").lower()
api_key = getattr(model_profile, "api_key", "") or ""
api_base = getattr(model_profile, "api_base", None) or _default_api_base(embeddings_provider)
model = getattr(model_profile, "embedding_model", None) or _default_embedding_model(embeddings_provider)
else:
embeddings_provider = (provider or settings.EMBEDDINGS_PROVIDER).lower()
api_key = _default_api_key(embeddings_provider)
api_base = _default_api_base(embeddings_provider)
model = _default_embedding_model(embeddings_provider)
if embeddings_provider == "openai":
return OpenAIEmbeddings(
openai_api_key=settings.OPENAI_API_KEY,
openai_api_base=settings.OPENAI_API_BASE,
model=settings.OPENAI_EMBEDDINGS_MODEL
openai_api_key=api_key,
openai_api_base=api_base,
model=model
)
elif embeddings_provider == "dashscope":
elif embeddings_provider in {"dashscope", "openai_compatible"}:
return OpenAIEmbeddings(
openai_api_key=settings.DASH_SCOPE_API_KEY,
openai_api_base=settings.DASH_SCOPE_API_BASE,
model=settings.DASH_SCOPE_EMBEDDINGS_MODEL,
openai_api_key=api_key,
openai_api_base=api_base,
model=model,
# DashScope OpenAI-compatible embedding expects string input,
# while LangChain's len-safe path may send token ids.
check_embedding_ctx_length=False,
@@ -35,8 +44,8 @@ class EmbeddingsFactory:
)
elif embeddings_provider == "ollama":
return OllamaEmbeddings(
model=settings.OLLAMA_EMBEDDINGS_MODEL,
base_url=settings.OLLAMA_API_BASE
model=model,
base_url=api_base
)
# Extend with other providers:
@@ -44,3 +53,34 @@ class EmbeddingsFactory:
# return AnotherEmbeddingClass(...)
else:
raise ValueError(f"Unsupported embeddings provider: {embeddings_provider}")
def _default_embedding_model(provider: Optional[str]) -> str:
provider = (provider or settings.EMBEDDINGS_PROVIDER).lower()
if provider == "openai":
return settings.OPENAI_EMBEDDINGS_MODEL
if provider == "dashscope":
return settings.DASH_SCOPE_EMBEDDINGS_MODEL or "text-embedding-v4"
if provider == "ollama":
return settings.OLLAMA_EMBEDDINGS_MODEL
return settings.DASH_SCOPE_EMBEDDINGS_MODEL or settings.OPENAI_EMBEDDINGS_MODEL
def _default_api_key(provider: Optional[str]) -> str:
provider = (provider or settings.EMBEDDINGS_PROVIDER).lower()
if provider == "openai":
return settings.OPENAI_API_KEY
if provider == "dashscope":
return settings.DASH_SCOPE_API_KEY
return settings.API_KEY
def _default_api_base(provider: Optional[str]) -> str:
provider = (provider or settings.EMBEDDINGS_PROVIDER).lower()
if provider == "openai":
return settings.OPENAI_API_BASE
if provider == "dashscope":
return settings.DASH_SCOPE_API_BASE
if provider == "ollama":
return settings.OLLAMA_API_BASE
return settings.DASH_SCOPE_API_BASE