import logging import os from httpx import AsyncClient from litellm.router import Router from jinja2 import Environment, StrictUndefined, FileSystemLoader # Declare all global app dependencies here # - Setup your dependency global inside init_dependencies() # - Create a get_xxxx_() function to retrieve the dependency inside the FastAPI router INSIGHT_FINDER_BASE_URL = "https://organizedprogrammers-insight-finder.hf.space/" def init_dependencies(): """Initialize the application global dependencies""" global llm_router global prompt_templates global http_client llm_router = Router(model_list=[ { "model_name": "gemini-v1", "litellm_params": { "model": "gemini/gemini-2.0-flash", "api_key": os.environ.get("GEMINI"), "max_retries": 5, "rpm": 15, "allowed_fails": 1, "cooldown": 30, } }, { "model_name": "gemini-v2", "litellm_params": { "model": "gemini/gemini-2.5-flash-lite-preview-06-17", "api_key": os.environ.get("GEMINI"), "max_retries": 5, "rpm": 10, "allowed_fails": 1, "cooldown": 30, } }], fallbacks=[{"gemini-v2": ["gemini-v1"]}], num_retries=10, retry_after=30) prompt_templates = Environment(loader=FileSystemLoader( "prompts"), enable_async=True, undefined=StrictUndefined) enable_ssl = not os.environ.get("NO_SSL", "0") == "1" logging.debug(f"SSL cert check is {enable_ssl}") http_client = AsyncClient(verify=enable_ssl, timeout=None) def get_llm_router() -> Router: """Retrieves the LLM router""" return llm_router def get_prompt_templates() -> Environment: """Retrieves the Jinja2 prompt templates environment""" return prompt_templates def get_http_client() -> AsyncClient: """Retrieves the HTTP Client""" return http_client