Spaces:
Paused
Paused
| """ | |
| Configuration constants for Perplexity AI API. | |
| This module contains all configurable constants used throughout the library. | |
| Modify these values to customize behavior without changing core code. | |
| """ | |
| from typing import Dict | |
| # API Configuration | |
| API_BASE_URL = "https://www.perplexity.ai" | |
| API_VERSION = "2.18" | |
| API_TIMEOUT = 30 | |
| # Endpoints | |
| ENDPOINT_AUTH_SESSION = f"{API_BASE_URL}/api/auth/session" | |
| ENDPOINT_AUTH_SIGNIN = f"{API_BASE_URL}/api/auth/signin/email" | |
| ENDPOINT_SSE_ASK = f"{API_BASE_URL}/rest/sse/perplexity_ask" | |
| ENDPOINT_UPLOAD_URL = f"{API_BASE_URL}/rest/uploads/create_upload_url" | |
| ENDPOINT_SOCKET_IO = f"{API_BASE_URL}/socket.io/" | |
| # Emailnator Configuration | |
| EMAILNATOR_BASE_URL = "https://www.emailnator.com" | |
| EMAILNATOR_GENERATE_ENDPOINT = f"{EMAILNATOR_BASE_URL}/generate-email" | |
| EMAILNATOR_MESSAGE_LIST_ENDPOINT = f"{EMAILNATOR_BASE_URL}/message-list" | |
| # Account Limits | |
| DEFAULT_COPILOT_QUERIES = 5 | |
| DEFAULT_FILE_UPLOADS = 10 | |
| ACCOUNT_TIMEOUT = 20 # seconds to wait for email | |
| # Search Modes | |
| SEARCH_MODES = ["auto", "pro", "reasoning", "deep research"] | |
| SEARCH_SOURCES = ["web", "scholar", "social"] | |
| SEARCH_LANGUAGES = ["en-US", "en-GB", "pt-BR", "es-ES", "fr-FR", "de-DE"] | |
| # Model Mappings - SYNCED with app.py and client.py | |
| MODEL_MAPPINGS: Dict[str, Dict[str, str]] = { | |
| "auto": {None: "pplx_pro"}, | |
| "pro": { | |
| None: "gpt54", | |
| "sonar": "experimental", | |
| "sonar2": "experimental", | |
| "gpt-5.4": "gpt54", | |
| "gpt-5.4-thinking": "gpt54_thinking", | |
| "gpt-5.5": "gpt55", | |
| "gpt-5.5-thinking": "gpt55_thinking", | |
| "claude-sonnet-4.6": "claude46sonnet", | |
| "claude-sonnet-4.6-thinking": "claude46sonnetthinking", | |
| "claude-opus-4.7": "claude47opus", | |
| "claude-opus-4.7-thinking": "claude47opusthinking", | |
| "gemini-3.1-pro": "gemini31pro_high", | |
| "gemini-3.1-pro-thinking": "gemini31pro_high", | |
| "nemotron-3-super-120b": "nv_nemotron_3_super", | |
| "nemotron-3-super-120b-thinking": "nv_nemotron_3_super", | |
| "kimi-k2.6": "kimik26instant", | |
| "kimi-k2.6-thinking": "kimik26thinking", | |
| }, | |
| "reasoning": { | |
| None: "gpt54_thinking", | |
| "gpt-5.4-thinking": "gpt54_thinking", | |
| "gpt-5.5-thinking": "gpt55_thinking", | |
| "claude-sonnet-4.6-thinking": "claude46sonnetthinking", | |
| "claude-opus-4.7-thinking": "claude47opusthinking", | |
| "gemini-3.1-pro-thinking": "gemini31pro_high", | |
| "nemotron-3-super-120b-thinking": "nv_nemotron_3_super", | |
| "kimi-k2.6-thinking": "kimik26thinking", | |
| }, | |
| "deep research": {None: "pplx_alpha"}, | |
| } | |
| LABS_MODELS = [ | |
| "sonar", | |
| "sonar-pro", | |
| "sonar-reasoning-pro", | |
| "sonar-deep-research", | |
| ] | |
| # HTTP Headers Template | |
| DEFAULT_HEADERS = { | |
| "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", | |
| "accept-language": "en-US,en;q=0.9", | |
| "cache-control": "max-age=0", | |
| "dnt": "1", | |
| "priority": "u=0, i", | |
| "sec-ch-ua": '"Not;A=Brand";v="24", "Chromium";v="128"', | |
| "sec-ch-ua-arch": '"x86"', | |
| "sec-ch-ua-bitness": '"64"', | |
| "sec-ch-ua-full-version": '"128.0.6613.120"', | |
| "sec-ch-ua-full-version-list": '"Not;A=Brand";v="24.0.0.0", "Chromium";v="128.0.6613.120"', | |
| "sec-ch-ua-mobile": "?0", | |
| "sec-ch-ua-model": '""', | |
| "sec-ch-ua-platform": '"Windows"', | |
| "sec-ch-ua-platform-version": '"19.0.0"', | |
| "sec-fetch-dest": "document", | |
| "sec-fetch-mode": "navigate", | |
| "sec-fetch-site": "same-origin", | |
| "sec-fetch-user": "?1", | |
| "upgrade-insecure-requests": "1", | |
| "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36", | |
| } | |
| # Emailnator Headers Template | |
| EMAILNATOR_HEADERS = { | |
| "accept": "application/json, text/plain, */*", | |
| "accept-language": "en-US,en;q=0.9", | |
| "content-type": "application/json", | |
| "dnt": "1", | |
| "origin": EMAILNATOR_BASE_URL, | |
| "priority": "u=1, i", | |
| "referer": f"{EMAILNATOR_BASE_URL}/", | |
| "sec-ch-ua": '"Not;A=Brand";v="24", "Chromium";v="128"', | |
| "sec-ch-ua-arch": '"x86"', | |
| "sec-ch-ua-bitness": '"64"', | |
| "sec-ch-ua-full-version": '"128.0.6613.120"', | |
| "sec-ch-ua-full-version-list": '"Not;A=Brand";v="24.0.0.0", "Chromium";v="128.0.6613.120"', | |
| "sec-ch-ua-mobile": "?0", | |
| "sec-ch-ua-model": '""', | |
| "sec-ch-ua-platform": '"Windows"', | |
| "sec-ch-ua-platform-version": '"19.0.0"', | |
| "sec-fetch-dest": "empty", | |
| "sec-fetch-mode": "cors", | |
| "sec-fetch-site": "same-origin", | |
| "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36", | |
| "x-requested-with": "XMLHttpRequest", | |
| } | |
| # Retry Configuration | |
| RETRY_MAX_ATTEMPTS = 3 | |
| RETRY_BACKOFF_FACTOR = 2 | |
| RETRY_EXCEPTIONS = (ConnectionError, TimeoutError) | |
| # Logging Configuration | |
| LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" | |
| LOG_LEVEL = "INFO" | |
| LOG_FILE = "perplexity.log" | |
| # Rate Limiting | |
| RATE_LIMIT_MIN_DELAY = 1.0 # seconds | |
| RATE_LIMIT_MAX_DELAY = 3.0 # seconds | |
| RATE_LIMIT_ENABLED = True | |
| # Validation Paterns | |
| EMAIL_SUBJECT_PATTERN = "Sign in to Perplexity" | |
| SIGNIN_URL_PATTERN = r'"https://www\.perplexity\.ai/api/auth/callback/email\?callbackUrl=.*?"' | |