""" Unified Analysis Client Factory Creates appropriate client based on provider type """ from typing import Dict, Optional from app.services.analysis_client import AnalysisClient from app.services.alpha_engine_client import AlphaEngineClient def create_analysis_client( provider: str, config: Dict, model: str = None ): """ Create an analysis client based on provider type Args: provider: Provider type ("openai", "gemini", "new_api", "alpha_engine") config: Configuration dictionary containing provider-specific settings model: Model name (optional, may be overridden by config) Returns: Client instance (AnalysisClient or AlphaEngineClient) """ if provider == "alpha_engine": # AlphaEngine specific configuration api_url = config.get("api_url", "") api_key = config.get("api_key", "") token = config.get("token", "") user_id = config.get("user_id", 999041) model_name = model or config.get("model", "deepseek-r1") using_indicator = config.get("using_indicator", True) start_time = config.get("start_time", "2024-01-01") doc_show_type = config.get("doc_show_type", ["A001", "A002", "A003", "A004"]) simple_tracking = config.get("simple_tracking", True) return AlphaEngineClient( api_url=api_url, api_key=api_key, token=token, user_id=user_id, model=model_name, using_indicator=using_indicator, start_time=start_time, doc_show_type=doc_show_type, simple_tracking=simple_tracking ) else: # OpenAI-compatible API (openai, gemini, new_api) api_key = config.get("api_key", "") base_url = config.get("base_url", "") model_name = model or config.get("model", "gemini-1.5-flash") return AnalysisClient( api_key=api_key, base_url=base_url, model=model_name )