content: [build-system]
  requires = ["hatchling"]
  build-backend = "hatchling.build"
  
  [project]
  name = "aws-genai-llm-chatbot"
  version = "5.0.38"
  description = "Enterprise-ready generative AI chatbot with RAG capabilities"
  readme = "README.md"
  requires-python = ">=3.9"
  authors = [
      {name = "Amazon Web Services"}
  ]
  dependencies = [
      # Core dependencies
      "boto3>=1.28.57",
      "botocore>=1.28.57",
      "aws-lambda-powertools==2.42.0",
      "aws_xray_sdk>=2.14.0",
      
      # LangChain and related
      "langchain>=0.3.7",
      "langchain-core>=0.3.29",
      "langchain-aws>=0.2.10",
      "langchain-community>=0.3.3",
      "langchain-openai>=0.2.4",
      "langchain-text-splitters>=0.3.5",
      
      # Database and vector stores
      "opensearch-py>=2.3.1",
      "psycopg2-binary>=2.9.7",
      "pgvector>=0.2.2",
      
      # Data processing
      "numpy>=1.26.4",
      "pydantic>=2.9.2",
      
      # AWS authentication
      "cfnresponse>=1.1.2",
      "aws_requests_auth>=0.4.3",
      "requests-aws4auth>=1.2.3",
      
      # Web and parsing
      "urllib3==2.5.0",
      "beautifulsoup4>=4.12.2",
      "requests>=2.32.4",
      "attrs>=23.1.0",
      "feedparser>=6.0.11",
      "defusedxml>=0.7.1",
      "filetype>=1.2.0",
      
      # PDF processing
      "pdfplumber>=0.11.0",
      
      # AI models
      "openai>=0.28.0",
      
      # Authentication
      "PyJWT>=2.9.0",
  ]
  
  [tool.hatch.build.targets.wheel]
  packages = ["lib/shared/layers/python-sdk/python"]
  
  [tool.hatch.envs.default]
  python = "3.9"
  features = []
  env-vars = {"PYTHONPATH" = "{root}:{root}/lib/shared/layers/python-sdk/python"}
  post-install-commands = ["pip install -e {root}"]
  
  [tool.hatch.envs.core]
  python = "3.9"
  features = []
  env-vars = {"PYTHONPATH" = "{root}:{root}/lib/shared/layers/python-sdk/python"}
  post-install-commands = ["pip install -e {root}/lib/shared/layers/python-sdk/python"]
  
  [tool.hatch.envs.dev]
  python = "3.9"
  features = []
  dependencies = [
    "pytest>=7.3.1",
    "pytest-mock>=3.10.0",
    "black>=23.3.0",
    "isort>=5.12.0",
    "mypy>=1.3.0",
    "flake8>=6.0.0"
  ]
  env-vars = {"PYTHONPATH" = "{root}:{root}/lib/shared/layers/python-sdk/python"}
  post-install-commands = ["pip install -e {root}"]
  
  [tool.hatch.envs.default.scripts]
  test = "pytest {args:tests}"
  lint = "flake8 lib/shared/layers/python-sdk/python"
  format = "black lib/shared/layers/python-sdk/python"
  
  [tool.hatch.envs.test]
  python = "3.9"
  features = []
  dependencies = [
    "pytest==7.4.0",
    "pytest-mock==3.11.1",
    "pytest-xdist==3.6.1",
    "pytest-anyio",
    "pytest-rerunfailures",
    "gql==3.4.1",
    "aws_lambda_powertools==2.42.0",
    "bandit==1.7.9",
    "pip-audit==2.7.3",
    "black==24.8.0",
    "flake8==7.1.0",
    "selenium==4.16",
    "pdfplumber==0.11.0",
    "pyopenssl==24.3.0",
    "cryptography==44.0.1"
  ]
  env-vars = {"PYTHONPATH" = "{root}:{root}/lib/shared/layers/python-sdk/python"}
  
  [tool.hatch.envs.test.scripts]
  run = "pytest {args:tests}"
  coverage = "pytest --cov=lib {args:tests}"
  
  [tool.hatch.envs.nexus]
  python = "3.9"
  features = []
  dependencies = [
    "ruff==0.3.4",
    "mypy==1.9.0",
    "black==24.8.0",
    "pytest==7.4.0",
    "pytest-mock==3.11.1",
    "aws_lambda_powertools==2.42.0"
  ]
  env-vars = {"PYTHONPATH" = "{root}:{root}/lib/shared/layers/python-sdk/python"}
  
  [tool.hatch.envs.nexus.scripts]
  # Define helper scripts that output the paths
  nexus-src-paths = "echo lib/shared/layers/python-sdk/python/genai_core/model_providers lib/shared/layers/python-sdk/python/genai_core/models.py lib/shared/layers/python-sdk/python/genai_core/clients.py lib/chatbot-api/functions/api-handler/routes/models.py"
  nexus-test-paths = "echo tests/shared/layers/python-sdk/genai_core/model_providers"
  nexus-all-paths = "echo $(hatch -e nexus run nexus-src-paths) $(hatch -e nexus run nexus-test-paths)"
  
  # Use the helper scripts in the main commands
  lint = [
    "ruff check $(hatch -e nexus run nexus-all-paths) --fix",
    "mypy $(hatch -e nexus run nexus-src-paths)"
  ]
  format = "ruff format $(hatch -e nexus run nexus-all-paths)"
  test = "pytest $(hatch -e nexus run nexus-test-paths)"
  
  [tool.pytest.ini_options]
  asyncio_mode = "strict"
  asyncio_default_fixture_loop_scope = "function"
  
  pythonpath = [
      ".",
      "lib/shared/layers/python-sdk/python"
  ]
  
  [tool.ruff]
  line-length = 100
  target-version = "py39"
  
  [tool.ruff.lint]
  select = [
    "E",   # pycodestyle errors
    "F",   # pyflakes
    "I",   # isort
    "W",   # pycodestyle warnings
    "N",   # pep8-naming
    "UP",  # pyupgrade
    "B",   # flake8-bugbear
    "C4",  # flake8-comprehensions
    "SIM", # flake8-simplify
    "ARG", # flake8-unused-arguments
    "PTH", # flake8-use-pathlib
    "RUF", # ruff-specific rules
  ]
  ignore = [
    "E501",  # line too long - handled by black
    "B008",  # do not perform function calls in argument defaults
  ]
  
  [tool.mypy]
  python_version = "3.9"
  warn_return_any = true
  warn_unused_configs = true
  disallow_untyped_defs = true
  disallow_incomplete_defs = true
  check_untyped_defs = true
  disallow_untyped_decorators = true
  no_implicit_optional = true
  strict_optional = true
  namespace_packages = true
  explicit_package_bases = true
  