import logging import os from dotenv import load_dotenv from langchain_openai.chat_models import AzureChatOpenAI from azure.identity import AzureCliCredential ,ChainedTokenCredential ,ManagedIdentityCredential from openai import AzureOpenAI from azure.core.credentials import AzureKeyCredential # Load environment variables from .env (so OPENAI_API_KEY in .env is available) load_dotenv() credential_chain = ChainedTokenCredential( ManagedIdentityCredential(),AzureCliCredential() ) logging.basicConfig( level=logging.INFO, format='[%(asctime)s] [%(levelname)s] %(name)s: %(message)s', ) logger = logging.getLogger("webcrawler-fastapi") logging.getLogger("LiteLLM").setLevel(logging.WARNING) logging.getLogger("azure.core.pipeline.policies.http_logging_policy").setLevel(logging.WARNING) logging.getLogger("httpx").setLevel(logging.WARNING) logging.getLogger("uvicorn.access").setLevel(logging.WARNING) def setup_azure_openai_local(logger): """Setup Azure OpenAI client for local deployment.""" try: logger.info("Setting up Azure OpenAI client for local deployment") openai_endpoint = 'https://dmrid-ai-services-dev-openai-04.openai.azure.com/' azure_deployment = 'gpt-4.1' # Prefer OPENAI_API_KEY from .env or env, fall back to legacy OPEN_AI_API api_key = os.getenv('OPENAI_API_KEY') or os.getenv('OPEN_AI_API') if api_key: os.environ["OPENAI_API_KEY"] = api_key logger.info("OPENAI_API_KEY set from environment/.env variable.") else: logger.error( "Neither OPENAI_API_KEY nor OPEN_AI_API is set.\n" "Set OPENAI_API_KEY in your shell or in a .env file (e.g. OPENAI_API_KEY=your_key),\n" "or update the code to use the Azure SDK (azure.openai.OpenAIClient) with Managed Identity." ) raise RuntimeError( "OPENAI_API_KEY not set; cannot initialize AzureChatOpenAI without API key." ) azure_openai_client = AzureChatOpenAI( azure_deployment=azure_deployment, openai_api_type='azure_ad', api_version="2024-09-01-preview", azure_endpoint=openai_endpoint, temperature=0 ) logger.info("Azure OpenAI client setup completed.") return azure_openai_client except Exception as e: logger.error(f"Failed to set up Azure OpenAI client: {e}", exc_info=True) raise azure_openai_client = setup_azure_openai_local(logger)