content: [project]
  name = "lilypad-sdk"
  version = "0.10.4"
  description = "The official Python library for the Lilypad API"
  dynamic = ["readme"]
  license = "Apache-2.0"
  authors = [{ name = "Mirascope", email = "support@mirascope.com" }]
  requires-python = ">=3.10"
  classifiers = [
      "Typing :: Typed",
      "Intended Audience :: Developers",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
      "Operating System :: OS Independent",
      "Operating System :: POSIX",
      "Operating System :: MacOS",
      "Operating System :: POSIX :: Linux",
      "Operating System :: Microsoft :: Windows",
      "Topic :: Software Development :: Libraries :: Python Modules",
      "License :: OSI Approved :: Apache Software License",
  ]
  dependencies = [
      "httpx>=0.23.0, <1",
      "pydantic>=2.10.6, <3",
      "typing-extensions>=4.10, <5",
      "anyio>=3.5.0, <5",
      "distro>=1.7.0, <2",
      "sniffio",
      "libcst>=1.6.0",
      "mirascope>=1.23.3",
      "opentelemetry-api>=1.31.0",
      "opentelemetry-sdk>=1.31.0",
      "opentelemetry-instrumentation>=0.51b0",
      "opentelemetry-propagator-b3>=1.31.0",
      "opentelemetry-propagator-jaeger>=1.31.0",
      "pydantic-settings>=2.6.1",
      "ruff>=0.11.2",
      "orjson>=2.0.1",
  ]
  
  [project.urls]
  Homepage = "https://github.com/Mirascope/lilypad"
  Repository = "https://github.com/Mirascope/lilypad"
  
  [dependency-groups]
  dev = [
      "pyright==1.1.402",
      "pytest>=8.3.2",
      "mypy",
      "respx",
      "pytest-asyncio>=0.23.8",
      "pytest-cov>=5.0.0",
      "ruff",
      "time-machine",
      "nox",
      "dirty-equals>=0.6.0",
      "importlib-metadata>=6.7.0",
      "rich>=13.7.1",
      "nest_asyncio==1.6.0",
      "pre-commit>=3.8.0",
      "requests>=2.32.4",
      "aiohttp>=3.10.5",
      "urllib3>=2.4.0",
  ]
  
  examples = ["fastapi>=0.115.13,<1", "requests>=2.32.4,<3", "uvicorn>=0.34.3,<1"]
  
  [tool.uv]
  default-groups = ["dev"]
  
  [project.optional-dependencies]
  cli = ["typer>=0.15.2", "rich>=13.7.1"]
  openai = ["openai>=1.57.0"]
  anthropic = ["anthropic>=0.36.0"]
  azure = ["azure-ai-inference>=1.0.0b9,<2.0", "aiohttp>=3.10.5,<4.0"]
  gemini = ["google-generativeai>=0.4.0,<1", "pillow>=10.4.0,<11"]
  google = ["google-genai>=1.7.0,<2", "pillow>=10.4.0,<11", "proto-plus>=1.24.0"]
  bedrock = [
      "boto3>=1.34.70,<2",
      "aioboto3>=13.1.1,<14",
      "boto3-stubs[bedrock-runtime]>=1.35.32,<2",
      "types-aioboto3[bedrock-runtime]>=13.1.1,<14",
  ]
  mistral = ["mistralai>=1.0.0,<2"]
  outlines = ["outlines>=0.1.11"]
  sandbox-docker = ["docker>=7.1.0"]
  vertex = ["google-cloud-aiplatform>=1.74.0"]
  
  
  [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 = 120
  output-format = "grouped"
  target-version = "py310"
  
  [tool.ruff.lint.per-file-ignores]
  "__init__.py" = ["F401"]
  "tests/**.py" = ["T201", "T203", "ANN", "UP007"]
  "tests/lib/**.py" = ["ARG", "F401"]
  
  [tool.ruff.lint]
  select = [
      "E",
      "F",
      "I",
      "UP",
      "YTT",
      "B",
      "T10",
      "T20",
      "C4",
      "PYI006",
      "SIM",
      "ANN",
      "RUF022",
  ]
  ignore = [
      'D105',
      'D107',
      'D205',
      'D415',
      'E501',
      'B011',
      'B028',
      'B904',
      'ANN401',
      'UP007',
      'UP035',
      'UP006',
      'ANN204',
      'I001',
      'UP037',
      'UP038',
      'E722',
      'E721',
      'E711',
      'SIM101',
      'SIM102',
      'SIM108',
      'E402',
      'F841',
  ]
  fixable = ["ALL"]
  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"
  docstring-code-format = true
  
  [tool.ruff.lint.flake8-tidy-imports.banned-api]
  "functools.lru_cache".msg = "This function does not retain type information for the wrapped function's arguments; The `lru_cache` function from `_utils` should be used instead"
  
  [tool.ruff.lint.isort]
  length-sort = true
  length-sort-straight = true
  combine-as-imports = true
  extra-standard-library = ["typing_extensions"]
  known-first-party = ["lilypad", "tests"]
  
  [tool.pyright]
  pythonVersion = "3.10"
  
  exclude = [".venv", "tests", "src/lilypad", "examples"]
  
  [build-system]
  requires = ["hatchling"]
  build-backend = "hatchling.build"
  
  [tool.hatch.build.targets.wheel]
  packages = ["src/lilypad"]
  
  [tool.hatch.build]
  include = ["src/*"]
  
  [tool.hatch.build.targets.sdist]
  include = [
      "/*.toml",
      "/*.json",
      "/*.lock",
      "/*.md",
      "/noxfile.py",
      "bin/*",
      "examples/*",
      "src/*",
      "tests/*",
  ]
  
  [tool.pytest.ini_options]
  asyncio_default_fixture_loop_scope = "function"
  
  [tool.coverage.run]
  source = ["src/lilypad"]
  omit = [
      "*/examples/*",
      "*/tests/*",
      "*/test_*.py",
      "*/__pycache__/*",
      "*/site-packages/*",
      "*/generated/*",
  ]
  
  [tool.coverage.report]
  exclude_also = [
      "@overload",
      "@abstractmethod",
      "if TYPE_CHECKING:",
      "\\.\\.\\.",
  ]
  precision = 2
  show_missing = true
  
  [project.scripts]
  lilypad = "lilypad.cli.main:app"
  