Spaces:
Sleeping
Sleeping
Update app/config.py
Browse files- app/config.py +23 -77
app/config.py
CHANGED
|
@@ -4,96 +4,55 @@ import logging
|
|
| 4 |
|
| 5 |
logger = logging.getLogger("config")
|
| 6 |
|
| 7 |
-
|
| 8 |
class Settings(BaseSettings):
|
| 9 |
-
# OpenRouter Configuration
|
| 10 |
OPENROUTER_API_KEY: str = ""
|
| 11 |
OPENROUTER_URL: str = "https://openrouter.ai/api/v1"
|
| 12 |
MODEL_NAME: str = "deepseek/deepseek-r1-0528:free"
|
| 13 |
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
MAX_TOKENS_TEST: int = 50 # For API key testing
|
| 20 |
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
MAX_CHUNKS_RETRIEVE: int = 3 # Number of chunks to retrieve
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
REQUEST_TIMEOUT_PER_1K_TOKENS: int = 2 # Additional seconds per 1000 tokens
|
| 29 |
|
| 30 |
-
# New setting to control fallback behavior
|
| 31 |
REQUIRE_USER_API_KEY: bool = True
|
| 32 |
|
| 33 |
class Config:
|
| 34 |
env_file = ".env"
|
| 35 |
case_sensitive = True
|
| 36 |
|
| 37 |
-
# Create settings instance
|
| 38 |
settings = Settings()
|
| 39 |
|
| 40 |
-
|
| 41 |
-
# Debug logging for API key configuration
|
| 42 |
logger.info("=" * 80)
|
| 43 |
-
logger.info("
|
| 44 |
logger.info("=" * 80)
|
| 45 |
|
| 46 |
-
|
| 47 |
-
logger.info("
|
| 48 |
-
logger.info(f"
|
| 49 |
-
logger.info(f" OPENROUTER_API_KEY length from env: {len(os.environ.get('OPENROUTER_API_KEY', ''))}")
|
| 50 |
-
|
| 51 |
-
# Check settings object
|
| 52 |
-
logger.info("โ๏ธ Settings Object Check:")
|
| 53 |
-
logger.info(f" settings.OPENROUTER_API_KEY present: {bool(settings.OPENROUTER_API_KEY)}")
|
| 54 |
-
logger.info(f" settings.OPENROUTER_API_KEY length: {len(settings.OPENROUTER_API_KEY)}")
|
| 55 |
-
logger.info(f" settings.OPENROUTER_URL: {settings.OPENROUTER_URL}")
|
| 56 |
-
logger.info(f" settings.MODEL_NAME: {settings.MODEL_NAME}")
|
| 57 |
-
logger.info(f" settings.REQUIRE_USER_API_KEY: {settings.REQUIRE_USER_API_KEY}")
|
| 58 |
|
| 59 |
-
# Configuration mode detection
|
| 60 |
-
if settings.REQUIRE_USER_API_KEY and not settings.OPENROUTER_API_KEY:
|
| 61 |
-
logger.info("๐ CONFIGURATION MODE: User API Key Required")
|
| 62 |
-
logger.info(" - Users must provide their own OpenRouter API key")
|
| 63 |
-
logger.info(" - No fallback key available")
|
| 64 |
-
elif settings.OPENROUTER_API_KEY and not settings.REQUIRE_USER_API_KEY:
|
| 65 |
-
logger.info("๐ง CONFIGURATION MODE: Server API Key (Legacy)")
|
| 66 |
-
logger.info(" - Using server-provided API key as fallback")
|
| 67 |
-
logger.warning(" - โ ๏ธ This may cause quota conflicts with multiple users")
|
| 68 |
-
else:
|
| 69 |
-
logger.info("๐ CONFIGURATION MODE: Hybrid")
|
| 70 |
-
logger.info(" - Users can provide their own API key")
|
| 71 |
-
logger.info(" - Server API key available as fallback")
|
| 72 |
-
|
| 73 |
-
# Check if API key starts with expected prefix (only if present)
|
| 74 |
if settings.OPENROUTER_API_KEY:
|
| 75 |
-
api_key_preview = settings.OPENROUTER_API_KEY[:20] + "..." if len(settings.OPENROUTER_API_KEY) > 20 else settings.OPENROUTER_API_KEY
|
| 76 |
-
logger.info(f"๐ Server API Key Preview: {api_key_preview}")
|
| 77 |
-
|
| 78 |
-
# OpenRouter API keys typically start with "sk-or-"
|
| 79 |
if settings.OPENROUTER_API_KEY.startswith("sk-or-"):
|
| 80 |
-
logger.info("
|
| 81 |
else:
|
| 82 |
-
logger.warning("
|
| 83 |
else:
|
| 84 |
-
logger.info("
|
| 85 |
|
| 86 |
-
# Additional debugging for Hugging Face environment
|
| 87 |
if os.path.exists("/app"):
|
| 88 |
-
logger.info("
|
| 89 |
-
logger.info("๐ก RECOMMENDATION: Remove server API key and require users to provide their own")
|
| 90 |
-
logger.info(" This prevents quota conflicts and gives users better control")
|
| 91 |
|
| 92 |
logger.info("=" * 80)
|
| 93 |
|
| 94 |
-
|
| 95 |
def get_max_tokens_for_task(task_type: str) -> int:
|
| 96 |
-
"""
|
| 97 |
token_map = {
|
| 98 |
"q_and_a": settings.MAX_TOKENS_CHAT,
|
| 99 |
"summarize": settings.MAX_TOKENS_SUMMARIZE,
|
|
@@ -104,32 +63,19 @@ def get_max_tokens_for_task(task_type: str) -> int:
|
|
| 104 |
return token_map.get(task_type, settings.MAX_TOKENS_CHAT)
|
| 105 |
|
| 106 |
def get_timeout_for_tokens(max_tokens: int) -> int:
|
| 107 |
-
"""
|
| 108 |
additional_time = (max_tokens // 1000) * settings.REQUEST_TIMEOUT_PER_1K_TOKENS
|
| 109 |
return settings.REQUEST_TIMEOUT_BASE + additional_time
|
| 110 |
|
| 111 |
def validate_api_key(api_key: str) -> bool:
|
| 112 |
-
"""
|
| 113 |
if not api_key:
|
| 114 |
return False
|
| 115 |
|
| 116 |
-
|
| 117 |
-
if not api_key.startswith("sk-or-"):
|
| 118 |
-
logger.warning("โ ๏ธ API key should start with 'sk-or-'")
|
| 119 |
-
return False
|
| 120 |
-
|
| 121 |
-
if len(api_key) < 40:
|
| 122 |
-
logger.warning("โ ๏ธ API key seems too short")
|
| 123 |
-
return False
|
| 124 |
-
|
| 125 |
-
return True
|
| 126 |
|
| 127 |
-
# Validate the current server API key (if present)
|
| 128 |
if settings.OPENROUTER_API_KEY:
|
| 129 |
is_valid = validate_api_key(settings.OPENROUTER_API_KEY)
|
| 130 |
-
logger.info(f"
|
| 131 |
-
else:
|
| 132 |
-
logger.info("๐ No server API key to validate")
|
| 133 |
|
| 134 |
-
# Export settings
|
| 135 |
__all__ = ['settings', 'validate_api_key']
|
|
|
|
| 4 |
|
| 5 |
logger = logging.getLogger("config")
|
| 6 |
|
|
|
|
| 7 |
class Settings(BaseSettings):
|
|
|
|
| 8 |
OPENROUTER_API_KEY: str = ""
|
| 9 |
OPENROUTER_URL: str = "https://openrouter.ai/api/v1"
|
| 10 |
MODEL_NAME: str = "deepseek/deepseek-r1-0528:free"
|
| 11 |
|
| 12 |
+
MAX_TOKENS_CHAT: int = 4000
|
| 13 |
+
MAX_TOKENS_SUMMARIZE: int = 3000
|
| 14 |
+
MAX_TOKENS_PLAN: int = 5000
|
| 15 |
+
MAX_TOKENS_CREATIVE: int = 6000
|
| 16 |
+
MAX_TOKENS_TEST: int = 50
|
|
|
|
| 17 |
|
| 18 |
+
MAX_CONTEXT_LENGTH_CHAT: int = 8000
|
| 19 |
+
MAX_CONTEXT_LENGTH_TASK: int = 12000
|
| 20 |
+
MAX_CHUNKS_RETRIEVE: int = 3
|
|
|
|
| 21 |
|
| 22 |
+
REQUEST_TIMEOUT_BASE: int = 60
|
| 23 |
+
REQUEST_TIMEOUT_PER_1K_TOKENS: int = 2
|
|
|
|
| 24 |
|
|
|
|
| 25 |
REQUIRE_USER_API_KEY: bool = True
|
| 26 |
|
| 27 |
class Config:
|
| 28 |
env_file = ".env"
|
| 29 |
case_sensitive = True
|
| 30 |
|
|
|
|
| 31 |
settings = Settings()
|
| 32 |
|
|
|
|
|
|
|
| 33 |
logger.info("=" * 80)
|
| 34 |
+
logger.info("Application Configuration Summary")
|
| 35 |
logger.info("=" * 80)
|
| 36 |
|
| 37 |
+
logger.info(f"OpenRouter API Key Present: {bool(settings.OPENROUTER_API_KEY)}")
|
| 38 |
+
logger.info(f"Model Name: {settings.MODEL_NAME}")
|
| 39 |
+
logger.info(f"Require User API Key: {settings.REQUIRE_USER_API_KEY}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
if settings.OPENROUTER_API_KEY:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
if settings.OPENROUTER_API_KEY.startswith("sk-or-"):
|
| 43 |
+
logger.info("Server API key format looks correct.")
|
| 44 |
else:
|
| 45 |
+
logger.warning("Server API key format may be incorrect; it should start with 'sk-or-'.")
|
| 46 |
else:
|
| 47 |
+
logger.info("No server API key configured. Users must provide their own.")
|
| 48 |
|
|
|
|
| 49 |
if os.path.exists("/app"):
|
| 50 |
+
logger.info("Running in a Hugging Face environment.")
|
|
|
|
|
|
|
| 51 |
|
| 52 |
logger.info("=" * 80)
|
| 53 |
|
|
|
|
| 54 |
def get_max_tokens_for_task(task_type: str) -> int:
|
| 55 |
+
"""Returns the maximum token limit for a given task type."""
|
| 56 |
token_map = {
|
| 57 |
"q_and_a": settings.MAX_TOKENS_CHAT,
|
| 58 |
"summarize": settings.MAX_TOKENS_SUMMARIZE,
|
|
|
|
| 63 |
return token_map.get(task_type, settings.MAX_TOKENS_CHAT)
|
| 64 |
|
| 65 |
def get_timeout_for_tokens(max_tokens: int) -> int:
|
| 66 |
+
"""Calculates a request timeout based on token count."""
|
| 67 |
additional_time = (max_tokens // 1000) * settings.REQUEST_TIMEOUT_PER_1K_TOKENS
|
| 68 |
return settings.REQUEST_TIMEOUT_BASE + additional_time
|
| 69 |
|
| 70 |
def validate_api_key(api_key: str) -> bool:
|
| 71 |
+
"""Performs a basic format validation on an OpenRouter API key."""
|
| 72 |
if not api_key:
|
| 73 |
return False
|
| 74 |
|
| 75 |
+
return api_key.startswith("sk-or-") and len(api_key) >= 40
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 76 |
|
|
|
|
| 77 |
if settings.OPENROUTER_API_KEY:
|
| 78 |
is_valid = validate_api_key(settings.OPENROUTER_API_KEY)
|
| 79 |
+
logger.info(f"Server API Key Validation: {'Valid' if is_valid else 'Invalid'}")
|
|
|
|
|
|
|
| 80 |
|
|
|
|
| 81 |
__all__ = ['settings', 'validate_api_key']
|