3058f4c744
Add architecture doc (research-wiki/ARCHITECTURE.md), CLAUDE.md with tiered SOP for Fable 5, adapted .claude skills/hooks/settings, package skeleton (src/polygateway), pyproject with import-linter contracts, Makefile, .env.example and smoke test.
70 lines
2.0 KiB
TOML
70 lines
2.0 KiB
TOML
[build-system]
|
||
requires = ["setuptools>=68.0"]
|
||
build-backend = "setuptools.build_meta"
|
||
|
||
[project]
|
||
name = "polygateway"
|
||
version = "0.1.0"
|
||
description = "PolyGateway:实验室统一的大语言模型(LLM/VLM/OCR)调度与中转库——多源、限流、重试、熔断、缓存、遥测"
|
||
requires-python = ">=3.11"
|
||
dependencies = [
|
||
"httpx>=0.27",
|
||
"pydantic>=2.8",
|
||
"pydantic-settings>=2.4",
|
||
"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",
|
||
]
|
||
|
||
[tool.setuptools.packages.find]
|
||
where = ["src"]
|
||
|
||
[tool.pytest.ini_options]
|
||
pythonpath = ["src"]
|
||
testpaths = ["tests"]
|
||
asyncio_mode = "auto"
|
||
markers = [
|
||
"requires_redis: 需要可达的 Redis(无则 skip)",
|
||
"requires_llm: 需要真实 LLM 网关(无则 skip,输出落 tests/outputs/)",
|
||
"slow: 慢速测试(CI 按需跑)",
|
||
]
|
||
|
||
[tool.ruff]
|
||
target-version = "py311"
|
||
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 → 实现层 → 内核(ports/types/errors/streaming)"
|
||
type = "layers"
|
||
layers = [
|
||
"polygateway.client",
|
||
"polygateway.middleware : polygateway.transports : polygateway.backends : polygateway.telemetry : polygateway.structured : polygateway.providers : polygateway.sources",
|
||
"polygateway.ports : polygateway.types : polygateway.errors : polygateway.streaming",
|
||
]
|