content: [project]
  description = "AI-powered call center solution with Azure and OpenAI GPT."
  dynamic = ["version"]
  license = { file = "LICENSE" }
  name = "call-center-ai"
  readme = "README.md"
  requires-python = ">=3.13"
  dependencies = [
    "aiohttp-retry~=2.9",                                  # Retry middleware for aiohttp, used with Twilio SDK
    "aiohttp[speedups]~=3.10",                             # Async HTTP client for Azure and Twilio SDKs, plus async DNS resolver and async Brotli compression
    "aiojobs~=1.3",                                        # Async job scheduler
    "azure-ai-inference[opentelemetry]~=1.0.0a0",          # Azure AI Foundry LLM inference
    "azure-ai-translation-text~=1.0",                      # Azure Cognitive Services Text Translation
    "azure-appconfiguration~=1.7",                         # Outsourced configuration for live updates
    "azure-cognitiveservices-speech~=1.41",                # Azure AI Speech
    "azure-communication-callautomation~=1.4.0a0",         # Azure Communication Services Call Automation
    "azure-communication-sms~=1.1",                        # Azure Communication Services SMS
    "azure-cosmos~=4.7",                                   # Azure Cosmos DB
    "azure-eventgrid~=4.20",                               # Azure Event Grid
    "azure-identity~=1.19",                                # Azure identity library
    "azure-monitor-opentelemetry~=1.6",                    # Azure Monitor OpenTelemetry
    "azure-search-documents~=11.6.0a0",                    # Azure AI Search
    "azure-storage-queue~=12.12",                          # Azure Storage Queue
    "django-htmlmin~=0.11",                                # Minify HTML
    "fastapi~=0.115",                                      # Web framework
    "granian~=2.3",                                        # Application server
    "jinja2~=3.1",                                         # Template engine, used for prompts and web views
    "json-repair~=0.30",                                   # Repair JSON files from LLM
    "mistune~=3.0",                                        # Markdown parser for web views
    "noisereduce~=3.0",                                    # Noise reduction
    "opentelemetry-instrumentation-aiohttp-client~=0.0a0", # OpenTelemetry instrumentation for aiohttp client
    "opentelemetry-instrumentation-redis~=0.0a0",          # OpenTelemetry instrumentation for Redis
    "opentelemetry-semantic-conventions~=0.0a0",           # OpenTelemetry conventions, to standardize telemetry data
    "phonenumbers~=8.13",                                  # Phone number parsing and formatting, used with Pydantic
    "pydantic-extra-types~=2.9",                           # Extra types for Pydantic
    "pydantic-settings~=2.6",                              # Application configuration management with Pydantic
    "pydantic[email]~=2.9",                                # Data serialization and validation, plus email validation
    "pyjwt~=2.9",                                          # Secure inbound calls from Communication Services
    "python-dotenv~=1.0",                                  # Load environment variables from .env file
    "python-multipart==0.*",                               # Form parsing
    "pytz~=2024.0",                                        # Time zone handling
    "pyyaml~=6.0",                                         # YAML parser
    "redis~=5.2",                                          # Redis client
    "structlog~=24.4",                                     # Pretty logging
    "tenacity~=8.2",                                       # Async retrying library
    "tiktoken~=0.8",                                       # Tokenization library for OpenAI models
    "twilio~=9.3",                                         # Twilio SDK, used for SMS
    "typing-extensions~=4.12",                             # Typing extensions for Python 3.6+
  ]
  
  [project.optional-dependencies]
  dev = [
    "deepeval~=0.21",            # LLM model evaluation
    "deptry~=0.20",              # Dependency tree testing
    "granian[reload]",           # Granian with reload support for development
    "pyright~=1.1",              # Static type checker
    "pytest-assume~=2.4",        # Pytest plugin for conditional tests
    "pytest-asyncio~=0.24",      # Pytest plugin for async tests
    "pytest-repeat~=0.9",        # Pytest plugin for repeating tests
    "pytest-xdist[psutil]~=3.6", # Pytest plugin for parallel testing
    "pytest~=8.3",               # Testing framework
    "ruff~=0.7",                 # Linter
  ]
  
  [tool.setuptools]
  py-modules = ["app"]
  
  [tool.deptry]
  ignore_notebooks = true
  pep621_dev_dependency_groups = ["dev"]
  
  [tool.deptry.per_rule_ignores]
  DEP002 = [
    "aiodns", # Resolver is required for the AIOHTTP AsyncResolver TCP resolver
  ]
  
  [tool.ruff]
  target-version = "py313"
  
  [tool.ruff.lint.isort]
  combine-as-imports = true
  
  [tool.ruff.format]
  docstring-code-format = true
  
  [tool.pyright]
  pythonVersion = "3.13"
  typeCheckingMode = "standard"
  venv = ".venv"
  venvPath = "."
  