[build-system] requires = ["hatchling==1.32.0"] build-backend = "hatchling.build" [project] name = "freellmpool" version = "0.13.0" description = "Free LLM gateway: 22 LLM providers, 178 enabled chat routes, 431 cataloged chat models; keyless start when available." readme = "README.md" license = "MIT" requires-python = ">=3.11" authors = [{ name = "0xzr" }] keywords = [ "anthropic", "claude", "llm", "free-llm", "openai", "openai-compatible", "proxy", "gateway", "llm-gateway", "router", "free", "groq", "cerebras", "openrouter", "gemini", "mcp", "model-context-protocol", "cursor", "speech-to-text", "transcription", "rate-limiting", "load-balancer", "failover", ] classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Framework :: AsyncIO", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Internet :: WWW/HTTP :: HTTP Servers", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries", "Topic :: Utilities", ] dependencies = [ "httpx>=0.27", ] [project.urls] Homepage = "https://github.com/0xzr/freellmpool" Docs = "https://0xzr.github.io/freellmpool/" Repository = "https://github.com/0xzr/freellmpool" Changelog = "https://github.com/0xzr/freellmpool/blob/main/CHANGELOG.md" Issues = "https://github.com/0xzr/freellmpool/issues" [project.optional-dependencies] dev = [ "build>=1.2", "mypy>=1.10", "pytest>=8.0", "pytest-cov>=5.0", "pyyaml>=6.0,<7", "ruff>=0.6", "twine==7.0.0", ] security = [ "bandit==1.9.4", "pip-audit==2.10.1", "zizmor==1.29.0", ] [project.scripts] freellmpool = "freellmpool.cli:main" ffp = "freellmpool.cli:main" [tool.hatch.build.targets.wheel] packages = ["src/freellmpool"] [tool.hatch.build.targets.wheel.force-include] "src/freellmpool/providers.toml" = "freellmpool/providers.toml" "src/freellmpool/capability_scores.json" = "freellmpool/capability_scores.json" "src/freellmpool/task_evidence.json" = "freellmpool/task_evidence.json" "src/freellmpool/recipes/second-opinion.json" = "freellmpool/recipes/second-opinion.json" "src/freellmpool/recipes/pr-review.json" = "freellmpool/recipes/pr-review.json" "src/freellmpool/recipes/repo-summary.json" = "freellmpool/recipes/repo-summary.json" "src/freellmpool/recipes/launch-copy-critic.json" = "freellmpool/recipes/launch-copy-critic.json" "src/freellmpool/recipes/metaswarm-worker-review.json" = "freellmpool/recipes/metaswarm-worker-review.json" [tool.hatch.build.targets.sdist.force-include] "src/freellmpool/recipes/second-opinion.json" = "src/freellmpool/recipes/second-opinion.json" "src/freellmpool/recipes/pr-review.json" = "src/freellmpool/recipes/pr-review.json" "src/freellmpool/recipes/repo-summary.json" = "src/freellmpool/recipes/repo-summary.json" "src/freellmpool/recipes/launch-copy-critic.json" = "src/freellmpool/recipes/launch-copy-critic.json" "src/freellmpool/recipes/metaswarm-worker-review.json" = "src/freellmpool/recipes/metaswarm-worker-review.json" [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "I", "UP", "B"] ignore = ["E501"] [tool.pytest.ini_options] testpaths = ["tests"] addopts = "-q" pythonpath = [".", "src"] [tool.mypy] python_version = "3.11" strict = true warn_unused_ignores = true