chore: bump version to 1.0.0 with changelog
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.0(2026-07-22)
|
||||
|
||||
首个正式版。统一 LLM/VLM/OCR/Embedding 调度与中转库,治理单位为一次模型调用;经 GovDoc-SaaS 与 CHSAnalyzer 两个真实项目全量迁移验收(ARCHITECTURE §11)。
|
||||
|
||||
- **M1 核心**: types/errors/ports 内核、OpenAI 兼容 httpx transport(SSE + 非流式)、三层活性看门狗、自研重试(错误四分类驱动,换源/退避/Retry-After)、多源多账号 + 选源 + 源冷却、内存限流/熔断、Redis/内存响应缓存(key 含 namespace/salt/多模态摘要)、SQLite 遥测(18 字段必录)、结构化输出阶梯(json_repair/原生 schema + 有界重问)、provider 注册表、`from_env` 装配。
|
||||
- **M2 分布式**: Redis 六道闸限流(Lua,契约测试双后端共用)、跨进程熔断(单探针租约 + epoch fencing)、背压 stall 双条件判定、Postgres 遥测、pricing 成本、EmbeddingClient(分批/维度校验)。
|
||||
- **M2.5 治理韧性**: 双通道熔断(失败率窗 + 连败 + 健康证据抑制)、健康感知选源(EWMA×在途 P2C 缺省)、AIMD 自适应并发、429 免重试预算、健康门槛降权;故障混编 soak 同场景 58.1%→98.96%。
|
||||
- **M3 OCR**: OcrTextPort/OcrLayoutPort 端口族 + MonkeyOCR 双端点 transport(数值防御下沉)、OcrClient 独立治理循环、`check_health()` 逐源预检;OCR soak 1500 调用 99.73%。
|
||||
- **M4 迁移验证**: GovDoc 与 CHS 全量迁移(合计约 −6800 行项目治理代码由库继任),原测试全绿 + 真实冒烟 + 50 样本回归;Gitea PyPI 分发。
|
||||
|
||||
安装(实验室 Gitea PyPI):
|
||||
|
||||
```bash
|
||||
pip install --index-url https://gitea.iomgaa.online/api/packages/iomgaa/pypi/simple/ \
|
||||
--extra-index-url https://pypi.org/simple/ "polygateway[redis,postgres,structured]==1.0.*"
|
||||
```
|
||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "polygateway"
|
||||
version = "0.1.0"
|
||||
version = "1.0.0"
|
||||
description = "PolyGateway:实验室统一的大语言模型(LLM/VLM/OCR)调度与中转库——多源、限流、重试、熔断、缓存、遥测"
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
|
||||
@@ -73,14 +73,14 @@ async def dsn():
|
||||
conn = await asyncpg.connect(value, timeout=10)
|
||||
try:
|
||||
if await conn.fetchval("SELECT to_regclass('llm_calls')") is not None:
|
||||
await conn.execute(
|
||||
"DELETE FROM llm_calls WHERE call_id LIKE $1", f"{_RUN_PREFIX}-%"
|
||||
)
|
||||
await conn.execute("DELETE FROM llm_calls WHERE call_id LIKE $1", f"{_RUN_PREFIX}-%")
|
||||
finally:
|
||||
await conn.close()
|
||||
|
||||
|
||||
async def _record_minimal(recorder: PostgresRecorder, call_id: str | None = None, **overrides) -> None:
|
||||
async def _record_minimal(
|
||||
recorder: PostgresRecorder, call_id: str | None = None, **overrides
|
||||
) -> None:
|
||||
fields = {
|
||||
"call_id": call_id if call_id is not None else _cid("c1"),
|
||||
"parent_call_id": None,
|
||||
|
||||
Reference in New Issue
Block a user