""" Adapter Pattern برای API providers — سوئیچ بین GapGPT و Avalai تنظیمات فعلی: GapGPT به‌عنوان provider اصلی Avalai به‌عنوان fallback نگه داشته شده. """ import logging import os from openai import OpenAI from .config import RAGConfig, load_rag_config logger = logging.getLogger(__name__) def get_embedding_client(config: RAGConfig | None = None) -> OpenAI: """ ساخت کلاینت OpenAI برای Embedding بر اساس provider فعال. provider از config.embedding.provider خوانده می‌شود: "gapgpt" یا "avalai" """ cfg = config or load_rag_config() emb = cfg.embedding logger.info(emb.provider) if emb.provider == "avalai": env_var = emb.avalai_api_key_env or emb.api_key_env or "AVALAI_API_KEY" api_key = os.environ.get(env_var) base_url = emb.avalai_base_url or emb.base_url or "https://api.avalai.ir/v1" else: env_var = emb.api_key_env or "GAPGPT_API_KEY" api_key = os.environ.get(env_var) base_url = emb.base_url or "https://api.gapgpt.app/v1" logger.info(api_key+" "+base_url) return OpenAI(api_key=api_key, base_url=base_url) def get_chat_client(config: RAGConfig | None = None) -> OpenAI: """ ساخت کلاینت OpenAI برای Chat/LLM بر اساس provider فعال. provider از config.embedding.provider خوانده می‌شود (مشترک بین embedding و chat). """ cfg = config or load_rag_config() llm = cfg.llm provider = cfg.embedding.provider logger.info(provider) if provider == "avalai": env_var = llm.avalai_api_key_env or llm.api_key_env or "AVALAI_API_KEY" api_key = os.environ.get(env_var) base_url = llm.avalai_base_url or llm.base_url or "https://api.avalai.ir/v1" else: env_var = llm.api_key_env or "GAPGPT_API_KEY" api_key = os.environ.get(env_var) base_url = llm.base_url or "https://api.gapgpt.app/v1" logger.info(api_key,base_url) return OpenAI(api_key=api_key, base_url=base_url)