Perplexity Advanced MCP

by code-yeongyu
Verified
""" Configuration Module Manages global settings and environment configuration for the perplexity-advanced-mcp package, including provider-specific settings and API key management. """ import logging from typing import cast import typer from .logging import setup_logging from .types import ModelConfig, ProviderType, QueryType # Initialize logging configuration setup_logging(level=logging.INFO) # Provider configurations (API keys are assigned at runtime) PROVIDER_CONFIG: dict[ProviderType, ModelConfig] = { "openrouter": { "models": { QueryType.SIMPLE: "perplexity/sonar", QueryType.COMPLEX: "perplexity/sonar-reasoning", }, "key": None, }, "perplexity": { "models": { QueryType.SIMPLE: "sonar-pro", QueryType.COMPLEX: "sonar-reasoning-pro", }, "key": None, }, } def get_api_keys( openrouter_key: str | None = typer.Option( None, "--openrouter-api-key", "-o", help="OpenRouter API key", envvar="OPENROUTER_API_KEY", ), perplexity_key: str | None = typer.Option( None, "--perplexity-api-key", "-p", help="Perplexity API key", envvar="PERPLEXITY_API_KEY", ), ) -> tuple[str | None, str | None]: """ Retrieves API keys from command line arguments or environment variables. Ensures exactly one API key is provided. Args: openrouter_key: OpenRouter API key from CLI or environment perplexity_key: Perplexity API key from CLI or environment Returns: tuple: A tuple containing (OpenRouter API key, Perplexity API key) Raises: typer.BadParameter: If both keys are provided or if no key is provided """ has_openrouter: bool = bool(openrouter_key and openrouter_key.strip()) has_perplexity: bool = bool(perplexity_key and perplexity_key.strip()) if has_openrouter and has_perplexity: raise typer.BadParameter( "Cannot specify both OpenRouter and Perplexity API keys. Please provide only one of them." ) if not has_openrouter and not has_perplexity: raise typer.BadParameter( "No API keys found. Please provide either OPENROUTER_API_KEY or PERPLEXITY_API_KEY " "through command line arguments (--openrouter-api-key/--perplexity-api-key) " "or environment variables (OPENROUTER_API_KEY/PERPLEXITY_API_KEY)" ) return ( cast(str, openrouter_key) if has_openrouter else None, cast(str, perplexity_key) if has_perplexity else None, )