system-prompts-and-models-o.../salesflow-saas/backend/app/config.py
2026-03-31 19:53:49 +03:00

112 lines
4.8 KiB
Python

from pydantic_settings import BaseSettings
from functools import lru_cache
from typing import Optional
class Settings(BaseSettings):
# ── App ──────────────────────────────────────────────
APP_NAME: str = "Dealix"
APP_NAME_AR: str = "ديل اي اكس"
DEBUG: bool = False
DEFAULT_TIMEZONE: str = "Asia/Riyadh"
DEFAULT_CURRENCY: str = "SAR"
DEFAULT_LOCALE: str = "ar"
# ── Database ─────────────────────────────────────────
DATABASE_URL: str = "postgresql+asyncpg://salesflow:salesflow_secret_2024@db:5432/salesflow"
# ── Redis ────────────────────────────────────────────
REDIS_URL: str = "redis://redis:6379/0"
# ── Security ─────────────────────────────────────────
SECRET_KEY: str = "change-this-to-a-random-secret-key"
ALGORITHM: str = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
REFRESH_TOKEN_EXPIRE_DAYS: int = 7
# ── URLs ─────────────────────────────────────────────
API_URL: str = "http://localhost:8000"
FRONTEND_URL: str = "http://localhost:3000"
# ── LLM Providers ────────────────────────────────────
# Primary: Groq (free/cheap, very fast)
GROQ_API_KEY: str = ""
GROQ_MODEL: str = "llama-3.3-70b-versatile"
GROQ_FAST_MODEL: str = "llama-3.1-8b-instant"
# Fallback: OpenAI
OPENAI_API_KEY: str = ""
OPENAI_MODEL: str = "gpt-4o"
OPENAI_MINI_MODEL: str = "gpt-4o-mini"
# Embeddings
EMBEDDING_PROVIDER: str = "openai" # openai, sentence-transformers
EMBEDDING_MODEL: str = "text-embedding-3-small"
EMBEDDING_DIMENSIONS: int = 1536
# LLM defaults
LLM_PRIMARY_PROVIDER: str = "groq" # groq, openai
LLM_TEMPERATURE: float = 0.3
LLM_MAX_TOKENS: int = 2048
LLM_TIMEOUT: int = 30
# ── WhatsApp Business API ────────────────────────────
WHATSAPP_API_TOKEN: str = ""
WHATSAPP_PHONE_NUMBER_ID: str = ""
WHATSAPP_BUSINESS_ACCOUNT_ID: str = ""
WHATSAPP_VERIFY_TOKEN: str = ""
WHATSAPP_API_URL: str = "https://graph.facebook.com/v21.0"
WHATSAPP_MOCK_MODE: bool = True # Use mock for development
# ── Email ────────────────────────────────────────────
EMAIL_PROVIDER: str = "smtp" # smtp, sendgrid
SMTP_HOST: str = "smtp.gmail.com"
SMTP_PORT: int = 587
SMTP_USER: str = ""
SMTP_PASSWORD: str = ""
SENDGRID_API_KEY: str = ""
EMAIL_FROM_NAME: str = "Dealix"
EMAIL_FROM_ADDRESS: str = "noreply@dealix.sa"
# ── SMS (Unifonic - Saudi) ───────────────────────────
UNIFONIC_APP_SID: str = ""
UNIFONIC_SENDER_ID: str = "Dealix"
# ── Calendar Integration ─────────────────────────────
GOOGLE_CALENDAR_CREDENTIALS: str = ""
GOOGLE_CALENDAR_ID: str = ""
MICROSOFT_CLIENT_ID: str = ""
MICROSOFT_CLIENT_SECRET: str = ""
# ── CRM Connectors ───────────────────────────────────
HUBSPOT_API_KEY: str = ""
SALESFORCE_CLIENT_ID: str = ""
SALESFORCE_CLIENT_SECRET: str = ""
SALESFORCE_DOMAIN: str = ""
# ── Scraping / Lead Gen ──────────────────────────────
GOOGLE_MAPS_API_KEY: str = ""
RAPIDAPI_KEY: str = "" # For LinkedIn data enrichment
# ── Rate Limiting ────────────────────────────────────
RATE_LIMIT_PER_MINUTE: int = 60
RATE_LIMIT_PER_HOUR: int = 1000
WHATSAPP_RATE_LIMIT_PER_SECOND: int = 80
# ── Celery ───────────────────────────────────────────
CELERY_BROKER_URL: str = "redis://redis:6379/1"
CELERY_RESULT_BACKEND: str = "redis://redis:6379/2"
# ── File Storage ─────────────────────────────────────
UPLOAD_DIR: str = "/app/uploads"
MAX_UPLOAD_SIZE_MB: int = 10
class Config:
env_file = ".env"
case_sensitive = True
@lru_cache()
def get_settings() -> Settings:
return Settings()