AI UPDATE
This commit is contained in:
+64
-9
@@ -1,5 +1,6 @@
|
||||
"""
|
||||
بارگذاری تنظیمات RAG از rag_config.yaml — با پشتیبانی از چند provider و چند پایگاه دانش
|
||||
بارگذاری تنظیمات RAG از rag_config.yaml — با پشتیبانی از چند provider،
|
||||
چند پایگاه دانش و چند سرویس.
|
||||
"""
|
||||
import os
|
||||
from dataclasses import dataclass, field
|
||||
@@ -36,6 +37,7 @@ class ChunkingConfig:
|
||||
|
||||
@dataclass
|
||||
class LLMConfig:
|
||||
provider: str = "gapgpt"
|
||||
model: str = "gpt-4o"
|
||||
base_url: str | None = None
|
||||
api_key_env: str | None = None
|
||||
@@ -50,6 +52,17 @@ class KnowledgeBaseConfig:
|
||||
description: str = ""
|
||||
|
||||
|
||||
@dataclass
|
||||
class ServiceConfig:
|
||||
service_id: str
|
||||
knowledge_base: str
|
||||
llm: LLMConfig = field(default_factory=LLMConfig)
|
||||
tone_file: str | None = None
|
||||
system_prompt: str | None = None
|
||||
use_user_embeddings: bool = True
|
||||
description: str = ""
|
||||
|
||||
|
||||
@dataclass
|
||||
class RAGConfig:
|
||||
embedding: EmbeddingConfig
|
||||
@@ -57,9 +70,31 @@ class RAGConfig:
|
||||
chunking: ChunkingConfig
|
||||
llm: LLMConfig = field(default_factory=LLMConfig)
|
||||
knowledge_bases: dict[str, KnowledgeBaseConfig] = field(default_factory=dict)
|
||||
services: dict[str, ServiceConfig] = field(default_factory=dict)
|
||||
chromadb: dict[str, Any] = field(default_factory=dict)
|
||||
|
||||
|
||||
def _build_llm_config(data: dict[str, Any] | None, default: LLMConfig | None = None) -> LLMConfig:
|
||||
llm_data = data or {}
|
||||
fallback = default or LLMConfig()
|
||||
return LLMConfig(
|
||||
provider=llm_data.get("provider", fallback.provider),
|
||||
model=llm_data.get("model", fallback.model),
|
||||
base_url=llm_data.get("base_url", fallback.base_url),
|
||||
api_key_env=llm_data.get("api_key_env", fallback.api_key_env),
|
||||
avalai_base_url=llm_data.get("avalai_base_url", fallback.avalai_base_url),
|
||||
avalai_api_key_env=llm_data.get("avalai_api_key_env", fallback.avalai_api_key_env),
|
||||
)
|
||||
|
||||
|
||||
def get_service_config(service_id: str, config: RAGConfig | None = None) -> ServiceConfig:
|
||||
cfg = config or load_rag_config()
|
||||
service = cfg.services.get(service_id)
|
||||
if service is None:
|
||||
raise KeyError(f"Unknown service_id: {service_id}")
|
||||
return service
|
||||
|
||||
|
||||
def load_rag_config(config_path: str | Path | None = None) -> RAGConfig:
|
||||
"""
|
||||
بارگذاری تنظیمات از YAML و env.
|
||||
@@ -101,14 +136,7 @@ def load_rag_config(config_path: str | Path | None = None) -> RAGConfig:
|
||||
overlap_tokens=ch.get("overlap_tokens", 50),
|
||||
)
|
||||
|
||||
llm_data = data.get("llm", {})
|
||||
llm = LLMConfig(
|
||||
model=llm_data.get("model", "gpt-4o"),
|
||||
base_url=llm_data.get("base_url"),
|
||||
api_key_env=llm_data.get("api_key_env"),
|
||||
avalai_base_url=llm_data.get("avalai_base_url"),
|
||||
avalai_api_key_env=llm_data.get("avalai_api_key_env"),
|
||||
)
|
||||
llm = _build_llm_config(data.get("llm", {}))
|
||||
|
||||
kb_data = data.get("knowledge_bases", {})
|
||||
knowledge_bases: dict[str, KnowledgeBaseConfig] = {}
|
||||
@@ -119,11 +147,38 @@ def load_rag_config(config_path: str | Path | None = None) -> RAGConfig:
|
||||
description=kb_conf.get("description", ""),
|
||||
)
|
||||
|
||||
services_data = data.get("services", {})
|
||||
services: dict[str, ServiceConfig] = {}
|
||||
for service_id, service_conf in services_data.items():
|
||||
kb_name = service_conf.get("knowledge_base", service_id)
|
||||
kb_conf = knowledge_bases.get(kb_name)
|
||||
services[service_id] = ServiceConfig(
|
||||
service_id=service_id,
|
||||
knowledge_base=kb_name,
|
||||
llm=_build_llm_config(service_conf.get("llm"), default=llm),
|
||||
tone_file=service_conf.get("tone_file") or (kb_conf.tone_file if kb_conf else None),
|
||||
system_prompt=service_conf.get("system_prompt"),
|
||||
use_user_embeddings=service_conf.get("use_user_embeddings", True),
|
||||
description=service_conf.get("description", ""),
|
||||
)
|
||||
|
||||
if not services:
|
||||
for kb_name, kb_conf in knowledge_bases.items():
|
||||
services[kb_name] = ServiceConfig(
|
||||
service_id=kb_name,
|
||||
knowledge_base=kb_name,
|
||||
llm=llm,
|
||||
tone_file=kb_conf.tone_file,
|
||||
use_user_embeddings=True,
|
||||
description=kb_conf.description,
|
||||
)
|
||||
|
||||
return RAGConfig(
|
||||
embedding=embedding,
|
||||
qdrant=qdrant,
|
||||
chunking=chunking,
|
||||
llm=llm,
|
||||
knowledge_bases=knowledge_bases,
|
||||
services=services,
|
||||
chromadb=data.get("chromadb", {}),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user