feat(proxy): T-P0 代理层骨架(包结构/DDL/门控挂载/单进程校验)

- gateway/proxy/ 十文件:config(ProxyConfig:元->毫元加载期换算 D-P1、差异化售价、
  桶/峰谷/限流/semcache 配置)/ errors(8 类 HTTP 语义异常)/ ledger(四表两索引 DDL,
  WAL,ReviewQueue 连接纪律)/ auth·pricing·normalizer·semcache·upstream(§6 签名占位)
  / routes(/proxy/v1/models OpenAI 形状)/ __init__(build_proxy_router 组装点)
- settings DEFAULTS 增 proxy 段(enabled 默认 False,D-P7)
- api.py 首次 include_router(enabled 门控 + 装配失败不拖垮主应用)
- serve.py workers>1 拒绝启动(D-P9:WEB_CONCURRENCY/UVICORN_WORKERS 校验)
- 测试 +4(门控 404/DDL 幂等/毫元换算/池模型列表),全量 322 passed
This commit is contained in:
tzt
2026-09-05 08:35:31 +08:00
parent 3cc9851623
commit b109576707
15 changed files with 580 additions and 1 deletions
+22
View File
@@ -0,0 +1,22 @@
"""鉴权与限流(T-P1 落地;本文件先立签名)。"""
from __future__ import annotations
from typing import Any, Dict, Optional
def issue_key(ledger, student_id: int, rpm_cap: Optional[int] = None,
day_cap_req: Optional[int] = None) -> Dict[str, Any]:
"""签发学生代理 key:明文只返回一次(T-P1 实现)。"""
raise NotImplementedError("T-P1")
def authenticate(authorization: str, ledger, limits, now: float) -> Dict[str, Any]:
"""校验 Bearer key -> 学生上下文(T-P1 实现;带热路径缓存)。"""
raise NotImplementedError("T-P1")
class RateLimiter:
"""令牌桶 rpm + per-key 并发信号量(T-P1 实现)。"""
def allow(self, key_id: int, rpm_cap: int) -> bool:
raise NotImplementedError("T-P1")