e9607b2f0c
CHANGELOG gets all five breaking changes, not the one the draft had: ThinkingCapability's constructor, two ports that grew a parameter with no default, resolve_thinking's new return type, and ProviderProfile's single wire field. Behaviour changes get their own section, including the one that is easy to miss — the openai fallback segment no longer refuses an unknown shape, so a downstream that parks a foreign model there and asks for thinking used to fail at assembly and now sends nothing at all. minimax is called out as the exception it is: the gateway proved M3 does not think without a parameter, so that segment keeps its medium and its downstreams see no change this release. The capability table is reported as it stands — 17 of 24 rows measured, 7 still on documentation, with the reason each one went unmeasured, so nobody reads "measured" into a row that is a guess. The auto limitation and its deliberate MiniMax-M3 inconsistency are written down rather than left for someone to trip over; issue #21 holds the real fix. ARCHITECTURE had five claims that measurement showed had gone false: the cache key formula, the field count, the reconcile predicate and its throttle key, and two field lists. README's FIELD set was missing the two new keys it calls exhaustive. docs-convention still opened by announcing a 17-page site that has not existed since August. It now says what is actually there — one placeholder page pointing at .env.example, CHANGELOG and the source docstrings — and says which four files carry the sync gate while the site is down.
88 lines
2.9 KiB
TOML
88 lines
2.9 KiB
TOML
[build-system]
|
||
requires = ["setuptools>=68.0"]
|
||
build-backend = "setuptools.build_meta"
|
||
|
||
[project]
|
||
name = "polygateway"
|
||
version = "1.3.3"
|
||
description = "PolyGateway:实验室统一的大语言模型(LLM/VLM/OCR)调度与中转库——多源、限流、重试、熔断、缓存、遥测"
|
||
# registry 包页面的正文只认这一项:缺了页面就是一片空白(1.1.2 的教训,twine 会警告
|
||
# long_description missing 但不阻塞上传)。README 在打包时被固化进产物,发布后再改无效。
|
||
readme = "README.md"
|
||
requires-python = ">=3.12"
|
||
dependencies = [
|
||
"httpx>=0.27",
|
||
"pydantic>=2.8",
|
||
"pydantic-settings>=2.4",
|
||
# 显式声明(2026-07-20 人类确认): config.py 的多源动态键族直接使用 dotenv_values,
|
||
# 不能只依赖 pydantic-settings 的传递安装
|
||
"python-dotenv>=1.0",
|
||
"loguru>=0.7",
|
||
]
|
||
|
||
[project.optional-dependencies]
|
||
redis = ["redis>=5.0"]
|
||
postgres = ["asyncpg>=0.29"]
|
||
structured = ["json-repair>=0.28"]
|
||
sdk = ["openai>=1.30"]
|
||
dev = [
|
||
"pytest>=8.0",
|
||
"pytest-cov>=5.0",
|
||
"pytest-asyncio>=0.23",
|
||
"ruff>=0.6",
|
||
"radon>=6.0",
|
||
"import-linter>=2.0",
|
||
]
|
||
|
||
[project.urls]
|
||
Homepage = "https://gitea.iomgaa.online/iomgaa/PolyGateway"
|
||
Changelog = "https://gitea.iomgaa.online/iomgaa/PolyGateway/src/branch/main/CHANGELOG.md"
|
||
Issues = "https://gitea.iomgaa.online/iomgaa/PolyGateway/issues"
|
||
|
||
[tool.setuptools.packages.find]
|
||
where = ["src"]
|
||
|
||
[tool.pytest.ini_options]
|
||
pythonpath = ["src"]
|
||
testpaths = ["tests"]
|
||
asyncio_mode = "auto"
|
||
# slow(真实等待的时间语义变体,单文件 12-15 分钟)默认排除;
|
||
# 显式 `pytest -m slow` 覆盖(CLI 的 -m 后到优先)。M2 T12 全量跑。
|
||
addopts = "-m 'not slow'"
|
||
markers = [
|
||
"requires_redis: 需要可达的 Redis(无则 skip)",
|
||
"requires_llm: 需要真实 LLM 网关(无则 skip,输出落 tests/outputs/)",
|
||
"slow: 慢速测试(CI 按需跑)",
|
||
]
|
||
|
||
[tool.ruff]
|
||
target-version = "py312"
|
||
line-length = 100
|
||
|
||
[tool.ruff.lint]
|
||
select = ["E", "F", "W", "I", "N", "UP", "B", "A", "C4", "SIM", "TCH"]
|
||
ignore = ["E501"]
|
||
|
||
[tool.ruff.lint.isort]
|
||
known-first-party = ["polygateway"]
|
||
|
||
# 依赖纪律(ARCHITECTURE.md §8):ports/types/errors/streaming 为最内层;
|
||
# middleware 只依赖端口;transports/backends/telemetry/structured/providers/sources
|
||
# 只实现端口且互不依赖;client 是唯一组装层。
|
||
# 注:M1 模块落地前 lint-imports 由 Makefile 门控跳过。
|
||
[tool.importlinter]
|
||
root_packages = ["polygateway"]
|
||
|
||
[[tool.importlinter.contracts]]
|
||
name = "洋葱分层:client → config → middleware → 实现层(互不依赖)→ 叶子 → 内核"
|
||
type = "layers"
|
||
layers = [
|
||
"polygateway.client",
|
||
"polygateway.config",
|
||
"polygateway.middleware",
|
||
"polygateway.transports | polygateway.backends | polygateway.telemetry | polygateway.structured",
|
||
"polygateway.thinking",
|
||
"polygateway.providers : polygateway.sources",
|
||
"polygateway.ports : polygateway.types : polygateway.errors : polygateway.streaming",
|
||
]
|