Files
awoooi/apps/api/pyproject.toml
OG T 256a24e843
All checks were successful
CD Pipeline / build-and-deploy (push) Successful in 17m23s
fix(deps+startup): drain3/statsmodels 補入 pyproject + warmup skip 舊資料
- pyproject.toml: 補 drain3>=0.9.11, statsmodels>=0.14.0, sse-starlette
  → Docker build 從 pyproject 裝,requirements.txt 的套件之前沒裝進 image
  → P4 LogAnomalyDetector 400次 drain3_not_available 告警排除
- main.py: working_memory warmup per-record try/except
  → 舊 incident 含非法 source (node-exporter) → 跳過,不 crash 整個 warmup

2026-04-15 ogt + Claude Sonnet 4.6(亞太)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 22:08:13 +08:00

117 lines
3.5 KiB
TOML
Raw 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",
# Sprint 5.1 2026-04-08 Claude Sonnet 4.6: Service Registry YAML 讀取
"pyyaml>=6.0.0",
# Phase 4 ADR-084: 動態異常偵測 (2026-04-15 ogt: 補齊缺失依賴)
"statsmodels>=0.14.0",
"drain3>=0.9.11",
"sse-starlette>=1.8.0",
]
# [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"]
addopts = "-m 'not integration'"
markers = [
"integration: 需要外部服務 (Redis/PostgreSQL/K8s) 的整合測試,需在有外部服務的環境執行",
]