Files
awoooi/apps/api/pyproject.toml
OG T 46a346d948
All checks were successful
CD Pipeline / build-and-deploy (push) Successful in 6m33s
E2E Health Check / e2e-health (push) Successful in 15s
fix(llmops): 鎖定 langfuse SDK v2.x (v3.x/v4.x 均已移除 client.trace() API)
排查確認:v3.x 也無 client.trace(),langfuse_client.py 依賴此 API。
鎖定 <3.0.0 確保安裝 v2.60.10 (v2 最新),trace/generation/score 均可用。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 00:23:29 +08:00

110 lines
3.2 KiB
TOML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[project]
name = "awoooi-api"
version = "0.1.0"
description = "AWOOOI BFF API Gateway"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"fastapi>=0.115.0", # Upgraded for starlette 1.0.0 compatibility (claude-agent-sdk)
"uvicorn[standard]>=0.27.0",
"pydantic>=2.5.0",
"pydantic-settings>=2.1.0",
"httpx>=0.26.0",
"redis>=5.0.0",
"asyncpg>=0.29.0",
"structlog>=24.1.0",
# CTO-201: Infrastructure Execution Engine
"kubernetes-asyncio>=29.0.0",
"sqlalchemy[asyncio]>=2.0.0",
# NOTE: 禁止 aiosqlite/SQLite (AWOOOI 鐵律 #2),使用 asyncpg + PostgreSQL
# OpenTelemetry (SigNoz Integration)
"opentelemetry-api>=1.20.0",
"opentelemetry-sdk>=1.20.0",
"opentelemetry-exporter-otlp>=1.20.0",
"opentelemetry-instrumentation-fastapi>=0.41b0",
"opentelemetry-instrumentation-httpx>=0.41b0",
"opentelemetry-instrumentation-logging>=0.41b0",
# Sentry (Error Tracking - 補強 SignOzSelf-Hosted @ 192.168.0.110)
"sentry-sdk[fastapi]>=2.0.0",
# Langfuse (LLMOps - Phase 15.1Self-Hosted @ 192.168.0.110:3100)
# 2026-04-02 Claude Code: 鎖定 v2.60.x — v3.x/v4.x 移除 client.trace() API與 langfuse_client.py 不相容
# v2.x 最高版 = 2.60.10,有 client.trace()、trace.generation()、trace.score()
"langfuse>=2.0.0,<3.0.0",
# Prometheus (ADR-037 Wave A.5 監控指標)
"prometheus-client>=0.20.0",
# Phase 6.4g: leWOOOgo Brain - 積木化決策引擎
# NOTE: Local packages 透過 Dockerfile 預先安裝,無需在此列出
# 請參閱 apps/api/Dockerfile Phase 6.4i 註解
# Phase 9: Agent Teams - Claude Agent SDK
"claude-agent-sdk>=0.1.50",
]
# [tool.uv.sources]
# lewooogo-brain = { path = "../../packages/lewooogo-brain", editable = true }
[project.optional-dependencies]
dev = [
"pytest>=7.4.0",
"pytest-asyncio>=0.23.0",
"pytest-cov>=4.1.0",
"ruff>=0.1.0",
"mypy>=1.8.0",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src"]
[tool.ruff]
target-version = "py311"
line-length = 88
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # Pyflakes
"I", # isort
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"UP", # pyupgrade
]
ignore = [
"E501", # line too long (handled by formatter)
]
[tool.ruff.lint.isort]
known-first-party = ["src"]
[tool.mypy]
python_version = "3.11"
# 漸進式類型檢查 (業界最佳實踐)
# strict = true # TODO: 當所有模組都完成類型註解後啟用
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = false # 暫時關閉,允許部分函數無類型
disallow_incomplete_defs = false
check_untyped_defs = true
ignore_missing_imports = true
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
# 排除舊代碼 (漸進式遷移)
[[tool.mypy.overrides]]
module = [
"scripts.*",
"tests.*",
]
ignore_errors = true
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
markers = [
"integration: 需要外部服務 (Redis/PostgreSQL/K8s) 的整合測試,需在有外部服務的環境執行",
]