Ab-Romia commited on
Commit
703d86f
ยท
verified ยท
1 Parent(s): c5f48e4

Update app/config.py

Browse files
Files changed (1) hide show
  1. 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
- # Token Limits Configuration
15
- MAX_TOKENS_CHAT: int = 4000 # For Q&A responses
16
- MAX_TOKENS_SUMMARIZE: int = 3000 # For summaries
17
- MAX_TOKENS_PLAN: int = 5000 # For action plans
18
- MAX_TOKENS_CREATIVE: int = 6000 # For creative writing
19
- MAX_TOKENS_TEST: int = 50 # For API key testing
20
 
21
- # Context Limits
22
- MAX_CONTEXT_LENGTH_CHAT: int = 8000 # For chat context
23
- MAX_CONTEXT_LENGTH_TASK: int = 12000 # For task context
24
- MAX_CHUNKS_RETRIEVE: int = 3 # Number of chunks to retrieve
25
 
26
- # Performance Settings
27
- REQUEST_TIMEOUT_BASE: int = 60 # Base timeout in seconds
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("๐Ÿ”ง CONFIGURATION DEBUG")
44
  logger.info("=" * 80)
45
 
46
- # Check environment variables
47
- logger.info("๐ŸŒ Environment Variables Check:")
48
- logger.info(f" OPENROUTER_API_KEY in os.environ: {'OPENROUTER_API_KEY' in os.environ}")
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("โœ… Server API key format looks correct (starts with 'sk-or-')")
81
  else:
82
- logger.warning("โš ๏ธ Server API key might be incorrect format (should start with 'sk-or-')")
83
  else:
84
- logger.info("๐Ÿ”‘ No server API key configured - users must provide their own")
85
 
86
- # Additional debugging for Hugging Face environment
87
  if os.path.exists("/app"):
88
- logger.info("๐Ÿค— Running in Hugging Face environment")
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
- """Get the appropriate max tokens for a specific task type."""
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
- """Calculate appropriate timeout based on token count."""
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
- """Validate OpenRouter API key format"""
113
  if not api_key:
114
  return False
115
 
116
- # OpenRouter keys should start with "sk-or-" and be at least 40 characters
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"๐Ÿ” Server API Key Validation: {'โœ… Valid' if is_valid else 'โŒ Invalid'}")
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']