pyproject.toml•6.49 kB
[project]
dependencies = [
  "dotpromptz",
  "genkit",
  "genkit-plugin-dev-local-vectorstore",
  "genkit-plugin-compat-oai",
  "genkit-plugin-firebase",
  "genkit-plugin-flask",
  "genkit-plugin-google-genai",
  "genkit-plugin-google-cloud",
  "genkit-plugin-ollama",
  "genkit-plugin-vertex-ai",
  "liccheck>=0.9.2",
  "strenum>=0.4.15; python_version < '3.11'",
]
description = "Workspace for Genkit packages"
license = { text = "Apache-2.0" }
name = "genkit-workspace"
readme = "README.md"
requires-python = ">=3.10"
version = "0.1.0"
[dependency-groups]
dev = [
  "bpython>=0.25",
  "ipython~=8.22; python_version <= '3.10'",
  "ipython~=9.0.2; python_version >= '3.11'",
  "jupyter>=1.1.1",
  "pytest-asyncio>=0.25.3",
  "pytest>=8.3.4",
  "pytest-cov>=6.0.0",
  "datamodel-code-generator>=0.27.3",
  "pytest-watcher>=0.4.3",
  "pytest-mock>=3.14.0",
  "twine>=6.1.0",
  "poethepoet>=0.33.1",
  "pip>=25.0.1",
  "tox>=4.25.0",
  "tox-uv>=1.25.0",
  "nox>=2025.2.9",
  "nox-uv>=0.2.2",
]
lint = ["mypy>=1.15", "ruff>=0.9"]
[tool.hatch.build.targets.wheel]
packages = []
[tool.setuptools]
py-modules = []
# Pytest for unit testing and coverage.
[tool.pytest]
[tool.pytest.ini_options]
addopts = [
  "--cov",
  #"--cov-report=", # Disable terminal report generation by pytest-cov
  "-ra",
  "-vv",
]
asyncio_default_fixture_loop_scope = "session"
python_files = ["test_*.py", "*_test.py"]
testpaths = ["packages", "plugins", "samples", "tests"]
#asyncio_mode = "auto"
asyncio_mode = "strict"
[tool.coverage.report]
fail_under = 78
[tool.coverage.run]
omit = [
  "**/__init__.py",  # Often contains just imports
  "**/testing.py",   # Test utilities
  "**/constants.py", # Typically just constants
  "**/typing.py",    # Often auto-generated or complex types
  "**/types.py",     # Often auto-generated or complex types
]
# uv based package management.
[tool.uv]
default-groups = ["dev", "lint"]
[tool.uv.sources]
dotpromptz                          = { git = "https://github.com/google/dotprompt.git", subdirectory = "python/dotpromptz", rev = "main" }
genkit                              = { workspace = true }
genkit-plugin-compat-oai            = { workspace = true }
genkit-plugin-dev-local-vectorstore = { workspace = true }
genkit-plugin-firebase              = { workspace = true }
genkit-plugin-flask                 = { workspace = true }
genkit-plugin-google-cloud          = { workspace = true }
genkit-plugin-google-genai          = { workspace = true }
genkit-plugin-ollama                = { workspace = true }
genkit-plugin-vertex-ai             = { workspace = true }
google-genai-hello                  = { workspace = true }
google-genai-image                  = { workspace = true }
[tool.uv.workspace]
members = ["packages/*", "plugins/*", "samples/*"]
# Ruff checks and formatting.
[tool.ruff]
exclude = [
  ".bzr",
  ".direnv",
  ".eggs",
  ".git",
  ".git-rewrite",
  ".hg",
  ".ipynb_checkpoints",
  ".mypy_cache",
  ".nox",
  ".pants.d",
  ".pyenv",
  ".pytest_cache",
  ".pytype",
  ".ruff_cache",
  ".svn",
  ".tox",
  ".venv",
  ".vscode",
  "__pypackages__",
  "_build",
  "bazel-*",
  "buck-out",
  "build",
  "dist",
  "node_modules",
  "site-packages",
  "venv",
]
indent-width = 4
line-length = 120
preview = true
target-version = "py311" # NOTE: Keep this at 3.11 not 3.10. We use backported libs for enums.
unsafe-fixes = true
[tool.ruff.lint]
fixable = ["ALL"]
select = [
  "E",    # pycodestyle (errors)
  "W",    # pycodestyle (warnings)
  "F",    # pyflakes
  "I",    # isort (import sorting)
  "UP",   # pyupgrade (Python version upgrades)
  "B",    # flake8-bugbear (common bugs)
  "N",    # pep8-naming (naming conventions)
  "D",    # pydocstyle
  "F401", # unused imports
  "F403", # wildcard imports
  "F841", # unused variables
]
[tool.ruff.lint.isort]
combine-as-imports = true
force-single-line = false
known-first-party = ["genkit"]
section-order = [
  "future",
  "standard-library",
  "third-party",
  "first-party",
  "local-folder",
]
[tool.ruff.lint.pydocstyle]
convention = "google"
[tool.ruff.format]
docstring-code-format      = true
docstring-code-line-length = 120
indent-style               = "space"
line-ending                = "lf"
quote-style                = "single"
skip-magic-trailing-comma  = false
# Static type checking.
[tool.mypy]
disallow_incomplete_defs = true
disallow_untyped_defs = true
exclude = ["samples/"]
explicit_package_bases = true
mypy_path = [
  "packages/genkit/src",
  "plugins/chroma/src",
  "plugins/compat-oai/src",
  "plugins/dev-local-vectorstore/src",
  "plugins/firebase/src",
  "plugins/flask/src",
  "plugins/google-cloud/src",
  "plugins/google-genai/src",
  "plugins/ollama/src",
  "plugins/pinecone/src",
  "plugins/vertex-ai/src",
]
namespace_packages = true
strict = true
warn_unused_configs = true
[tool.datamodel-codegen]
#collapse-root-models = true # Don't use; produces Any as types.
#strict-types = ["str", "int", "float", "bool", "bytes"] # Don't use; produces StrictStr, StrictInt, etc.
#use-subclass-enum        = true
capitalize-enum-members  = true
disable-timestamp        = true
enable-version-header    = true
field-constraints        = true
input                    = "../genkit-tools/genkit-schema.json"
input-file-type          = "jsonschema"
output                   = "packages/genkit/src/genkit/core/typing.py"
output-model-type        = "pydantic_v2.BaseModel"
snake-case-field         = true
strict-nullable          = true
target-python-version    = "3.11"
use-default              = false
use-schema-description   = true
use-standard-collections = true
use-subclass-enum        = true
use-union-operator       = true
use-unique-items-as-set  = true
[tool.liccheck]
authorized_licenses = [
  "3-clause bsd",
  "apache 2.0",
  "apache software license",
  "apache software",
  "apache",
  "apache-2.0",
  "bsd license",
  "bsd-3-clause",
  "bsd",
  "cmu license (mit-cmu)",
  "isc license (iscl)",
  "isc license",
  "mit license",
  "mit",
  "mit-cmu",
  "new bsd license",
  "new bsd",
  "psf-2.0",
  "python software foundation license",
  "simplified bsd",
  "the unlicense (unlicense)",          # TODO: verify.
]
dependencies = true
unauthorized_licenses = [
  "gnu lgpl",
  "gpl v3",
  "lgpl with exceptions or zpl",
  "zpl 2.1",
  "mpl",
]
[tool.liccheck.authorized_packages]
certifi      = "2025.4.26" # TODO: Verify.
dependencies = true
ollama       = "0.5.1"     # MIT "https://github.com/ollama/ollama-python/blob/main/LICENSE"