content: [project]
  name = "lilypad"
  version = "0.10.4"
  description = "Spin up your data flywheel in one line of code."
  readme = "README.md"
  license = { file = "LICENSE" }
  requires-python = ">=3.10"
  authors = [
      { name = "William Bakst", email = "william@mirascope.com" },
      { name = "Brendan Kao", email = "brendan@mirascope.com" },
      { name = "Koudai Aono", email = "koudai@mirascope.com" },
  ]
  maintainers = [
      { name = "Brendan Kao", email = "brendan@mirascope.com" },
      { name = "Koudai Aono", email = "william@mirascope.com" },
  ]
  keywords = [
      "prompt engineering",
      "evaluation",
      "llm",
      "llm tools",
      "developer tools",
      "artificial intelligence",
  ]
  classifiers = [
      "Development Status :: 3 - Alpha",
      "Framework :: OpenTelemetry",
      "Intended Audience :: Developers",
      "License :: OSI Approved :: MIT License",
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
      "Topic :: Scientific/Engineering :: Artificial Intelligence",
      "Topic :: Software Development :: Libraries",
  ]
  dependencies = [
      "mirascope>=1.20.1",
      "opentelemetry-api>=1.30.0",
      "opentelemetry-sdk>=1.30.0",
      "opentelemetry-instrumentation>=0.51b0",
      "pydantic-settings>=2.6.1",
      "ruff>=0.9.5",
      "requests>=2.32.3",
      "pillow>=10.4.0",
      "libcst>=1.6.0",
      "cachetools>=5.5.1",
      "httpx>=0.24.0",
      "typing-extensions>=4.0.0",
      "rich>=13.0.0",
      "pydantic>=2.0.0",
      "datamodel-code-generator",
      "sqlmodel>=0.0.22",
      "psycopg2-binary>=2.9.9",
      "fastapi[standard]>=0.115.0",
      "alembic>=1.14.0",
      "posthog>=3.8.3",
      "resend>=2.6.0",
      "alembic-postgresql-enum>=1.6.0",
      "starlette>=0.26.0",
      "python-jose[cryptography]>=3.3.0",
      "cryptography>=43.0.3",
      "opensearch-py>=2.8.0",
      "stripe>=12.1.0",
      "aiokafka>=0.12.0",
      "boto3>=1.35.0",
  ]
  
  [project.urls]
  Homepage = "https://lilypad.mirascope.com"
  Documentation = "https://mirascope.com/lilypad"
  Repository = "https://github.com/Mirascope/lilypad"
  Issues = "https://github.com/Mirascope/lilypad/issues"
  Changelog = "https://github.com/Mirascope/lilypad/releases"
  
  [project.optional-dependencies]
  sandbox-docker = ["docker>=7.1.0"]
  
  
  [tool.uv]
  dev-dependencies = [
      "pytest>=8.3.2",
      "pyright>=1.1.402",
      "pytest-asyncio>=0.23.8",
      "pytest-cov>=5.0.0",
      "pre-commit>=3.8.0",
      "datamodel-code-generator[ruff]>=0.28.4",
      "types-boto3[boto3,secretsmanager]>=1.35.0",
      "moto[secretsmanager]>=5.0.24",
  ]
  
  
  [project.scripts]
  lilypad = "lilypad.cli.main:app"
  
  [tool.pytest.ini_options]
  filterwarnings = ["ignore::DeprecationWarning"]
  asyncio_default_fixture_loop_scope = "function"
  testpaths = ["tests"]
  addopts = "--ignore=scripts/"
  
  [tool.ruff]
  exclude = [
      ".bzr",
      ".direnv",
      ".eggs",
      ".git",
      ".git-rewrite",
      ".hg",
      ".mypy_cache",
      ".nox",
      ".pants.d",
      ".pytype",
      ".ruff_cache",
      ".svn",
      ".tox",
      ".venv",
      "__pypackages__",
      "_build",
      "buck-out",
      "build",
      "dist",
      "node_modules",
      "venv",
  ]
  line-length = 88
  target-version = "py310"
  
  [tool.ruff.lint.per-file-ignores]
  "migrations/versions/*.py" = ["D"]
  "lilypad/server/client/schemas/*.py" = ["D101"]
  "__init__.py" = ["F401"]
  "tests/*.py" = ["S101", "ANN"]
  "tests/_utils/closure/closure_test_functions/main.py" = [
      "D101",
      "D212",
      "D402",
      "D403",
  ]
  "tests/_utils/closure/closure_test_functions/other.py" = [
      "D101",
      "D102",
      "D103",
  ]
  "docs/*.py" = ["ANN401"]
  "scripts/*.py" = ["T201"]
  
  [tool.ruff.lint]
  select = [
      "D",
      "E",
      "F",
      "I",
      "UP",
      "YTT",
      "B",
      "T10",
      "T20",
      "C4",
      "PYI006",
      "SIM",
      "ANN",
  ]
  ignore = [
      'D105',
      'D107',
      'D205',
      'D415',
      'E501',
      'B011',
      'B028',
      'B904',
      'ANN401',
  ]
  fixable = ["ALL"]
  isort = { known-first-party = ['lilypad', 'ee', 'tests', 'examples'] }
  pydocstyle = { convention = 'google' }
  unfixable = []
  dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
  
  [tool.ruff.format]
  quote-style = "double"
  indent-style = "space"
  skip-magic-trailing-comma = false
  line-ending = "auto"
  
  [tool.pyright]
  exclude = ["examples"]
  include = ["lilypad", "ee", "tests"]
  venvPath = "."
  venv = ".venv"
  
  [tool.codespell]
  skip = [
      ".git",
      "*.lock",
      "./client/pnpm-lock.yaml",
      "./docs/pnpm-lock.yaml",
      "./client/bun.lock",
  ]
  
  [tool.coverage.run]
  source = ["lilypad", "ee"]
  omit = ["*/tests/*", "*/test_*.py", "*/__pycache__/*", "*/site-packages/*"]
  
  [tool.coverage.report]
  exclude_also = ["@overload", "@abstractmethod", "if TYPE_CHECKING:"]
  precision = 2
  show_missing = true
  
  [build-system]
  requires = ["hatchling"]
  build-backend = "hatchling.build"
  
  [tool.hatch.build.targets.wheel]
  packages = ["lilypad", "ee"]
  
  [tool.hatch.build.targets.sdist]
  include = ["/lilypad", "/ee"]
  
  [tool.hatch.build.force-include]
  "lilypad/server/static" = "lilypad/server/static"
  