AiPmTool / app /config /settings.py
devarshia5's picture
Upload 43 files
1def50b verified
Raw
History Blame Contribute Delete
2.29 kB
# ============================================================================
# CONFIGURATION
# ============================================================================
import os
from dotenv import load_dotenv
# Load .env file
load_dotenv()
class Config:
"""Centralized configuration"""
# PM Tool API
PM_TOOL_BASE_URL = "https://pmtoolapi.synthesys.in/api"
PM_TOOL_LOGIN_ENDPOINT = f"{PM_TOOL_BASE_URL}/Auth/Login"
PM_TOOL_TASKS_ENDPOINT = f"{PM_TOOL_BASE_URL}/Tasks/GetTaskByType"
PM_TOOL_ATTACHMENTS_ENDPOINT = f"{PM_TOOL_BASE_URL}/Attachments"
# Groq AI - Multi-key support
# Single key (backward compatible): GROQ_API_KEY=key1
# Multiple keys: GROQ_API_KEYS=key1,key2,key3,...,key10
GROQ_API_KEY = os.getenv("GROQ_API_KEY", "")
GROQ_API_KEYS = [
key.strip()
for key in os.getenv("GROQ_API_KEYS", os.getenv("GROQ_API_KEY", "")).split(",")
if key.strip()
]
GROQ_MODEL = "openai/gpt-oss-120b"
GROQ_MAX_TOKENS = 8192
GROQ_TEMPERATURE = 0.4
# Groq Rate Limits (per key)
GROQ_RPM_LIMIT = 30 # Requests per minute
GROQ_RPH_LIMIT = 1000 # Requests per hour
GROQ_RPD_LIMIT = 10000 # Requests per day
GROQ_TPM_LIMIT = 30000 # Tokens per minute
GROQ_TPD_LIMIT = 500000 # Tokens per day
# API Settings
API_TITLE = "AI Test Case Generator API"
API_VERSION = "1.0.0"
API_DESCRIPTION = """
🧪 **Automated Test Case Generation Engine**
Features:
- Generate test cases from PM Tool tasks
- Support for bulk and single task processing
- Attachment context integration
- Multiple output formats (JSON, Excel, PDF)
- Concurrent processing with retry logic
- Comprehensive error handling
"""
# Rate Limiting & Concurrency
MAX_CONCURRENT_TASKS = 5
MAX_REQUESTS_PER_MINUTE = 30
REQUEST_TIMEOUT = 120 # seconds
MAX_RETRY_ATTEMPTS = 3
RETRY_DELAY = 2 # seconds
# Token Cache
TOKEN_CACHE_TTL = 3600 # 1 hour
# Output - use /tmp for HF Spaces (writable directory)
OUTPUT_DIR = os.getenv("OUTPUT_DIR", "generated_testcases")
LOG_LEVEL = "INFO"
# Ensure output directory exists
os.makedirs(Config.OUTPUT_DIR, exist_ok=True)