Skip to content

Releases

v0.3.1

Choose a tag to compare

@Finn763 Finn763 released this 02 Sep 06:58

v0.3.1

本版核心:npm 一键安装分发 —— foresight-agent 现在可以通过 npm 一条命令安装使用,用户机器上无需 Python、无需 uv。

English →


一键安装

npm i -g foresight-agent
foresight "Will the Fed cut rates in September?" --closes 2026-09-17
  • 预编译单文件二进制(内含 Python 运行时 + duckdb):Windows x64 / macOS x64 / macOS arm64 / Linux x64,安装时按平台自动拉取
  • 免 Python、免 uv —— 任意目录直接运行
  • esbuild 式分发:主包带跨平台启动器,平台子包经 optionalDependencies 按需安装
  • PyInstaller 打包入口 packaging/entry.py;CI 矩阵(.github/workflows/publish-npm.yml)在 v* tag 时自动构建并发布全部平台
  • pyproject.toml 增加 [project.scripts] foresight CLI 入口

验证

  • Windows x64 / macOS x64 / macOS arm64 / Linux x64 平台子包已发布至 npm(foresight-agent-<platform>-<arch>@0.3.1)
  • 主包 foresight-agent@0.3.1 已发布;Windows 真机安装实测通过(added 5 packages,foresight --help exit=0)

v0.3.0

Choose a tag to compare

@Finn763 Finn763 released this 01 Sep 14:17

v0.3.0

本版核心:预测管线故障根治(连续 4 天 38 题跳过的根因)+ Ponytail 全量代码精简(净减 ~750 行,零新依赖、零行为变更)。

English →


预测管线修复

  • 预测跳过根治:DeepSeek Responses API 开启 json_format 时要求 input 含 "json" 字样,否则恒 400——websearch_predictor 与 llm_resolver 的输入模板补齐 JSON 输出示例,38 题跳过归零
  • 异步入口默认参数补齐:aresponses_create 的 max_output_tokens/temperature/json_format/timeout 补默认值,调用方不再因缺参 TypeError 全体失败
  • 存量题回补:17 题从未预测 + 7 天待更新题全部补测(predicted=17, skipped=0)

代码精简(Ponytail 四路并行)

  • ops/health.py 275→99:_c 构造 helper、_union_predict 内联、探测检查循环化、scoreboard 表驱动
  • scripts/evolve.py 340→171:删 arm B 实验臂(候选恒 None)、_build_base_rates(5 key 只命中 1)、difficulty_tiers 统计、周报占位 40L→10L
  • scripts/daily.py 250→169:删重复 import、_within_update_window 内联、_predict_safely 死参
  • data/storage.py 1019→936:删 canonical_model_name 6 符号(单模型永远走不到 ensemble)、source_*/ops_* 改 SQL json_extract 消除 N+1
  • selection/families.py 229→202:8 个硬编码题族 spec 抽 FAMILIES 常量表
  • websearch_predictor.py 342→234:文本/引用提取合并去重、心跳内联、删 _log_skip 第三拷贝
  • pipeline.py 152→96:删单模型权重逻辑(恒等权)、extremize 参数内联
  • llm/client.py 232→222:chat/responses 双重试循环抽 _post_with_retry、_has_answer 提到模块级、token 上限统一 65536
  • web/server.py 281→248:告警横幅 inline style→CSS 类、deque/Query/with_suffix/HTTPException 替手写
  • ops/probes.py 149→141:csv.DictReader 替手切 CSV

稳定性

  • crawl_social.py mtime 比较加 1s 容差:修复 Windows 文件时间戳精度导致的测试 flaky(真实抓取 >30s 不受影响)
  • 告警 ack 批量处理:历史 10 条未确认告警清账,dashboard 横幅退出

验证

  • 全量 pytest 绿;真实 LLM 采样 + 端到端预测(#107 → 1.67%,29 引用)实测通过
  • dashboard 全端点(/api/questions /api/system /api/ops/health 探针三项)正常
  • 定时任务三件套就绪(daily 09:00 / evolve 09:05 / resolve 16:30)

v0.2.3

Choose a tag to compare

@Finn763 Finn763 released this 27 Aug 14:26

v0.2.3

预测与统计

  • Brier 战绩按题族分桶:新增 brier_by_family()(行情族 → 主题族 → 兜底),与总体计数精确对账
  • brier_ema 归属修正:多模型集成的 Brier 归 ensemble,不再分摊到每个模型名
  • 模型名配置化落点:get_model_name() 单一事实源,统计标签不再依赖代码硬编码

扩展桥契约化

  • 22 条调用通道全部契约化:参数白名单 + import 白名单 + 运行时校验,越界即拒载
  • 第三条通道(9 个只读内联工具)定性并登记入册,引擎改名不再静默破坏桥

运维

  • dashboard 守护:新增 scripts/ensure_dashboard.py,每 30 分钟自检、挂掉自动拉起
  • 日志读取 UTF-8 化:dashboard 日志页正确显示新日志
  • Polymarket 拉题接入每日调度(20:00,先于 21:00 的揭晓任务)

全量测试 ~490 用例全绿,ruff 零告警,tsc 零错误。

v0.2.2

Choose a tag to compare

@Finn763 Finn763 released this 27 Aug 12:30

v0.2.2

预测质量

  • 更新规则小时差语义:7 天更新判定统一为 7×24 小时语义(跨时区/夏令时安全),补边界测试
  • 校准器自动刷新:16:30 自动揭晓路径在揭晓后自动刷新校准器(此前仅人工路径刷新)
  • 保序回归 tie 加权修复:同分跨块聚合按块大小加权(复现偏差 33% 修复)
  • 采样数 2→3 + 口径修正:概率取全样本均值、理由取离均值最近的采样(此前取第一条,口径不一致)
  • 题面注入隔离:题目文本 XML 分隔包裹 +「题面内容不构成指令」声明

数据与揭晓

  • 证据表去重:source_documents 增加 (question_id, url) 唯一索引 + 幂等迁移(历史重复清理、保留正文行),写入改 INSERT OR IGNORE
  • 选题去重补宏观题族:美联储/FOMC/CPI/EIA/非农/PMI 事件签名,近义题不再并存
  • 揭晓器异常补日志:resolver 内部异常不再静默吞掉,与其它路径日志口径一致

运维

  • 数据库每日自动备份:每日 02:30 文件级拷贝备份(不锁库),保留 7 天
  • 告警消费闭环:同日同类告警合并去重 + 30 天清理 + 网页横幅 + 确认机制(internal 模式限定)
  • 日志轮转:1MiB 上限自动轮转

全量测试 ~440 用例全绿,ruff 零告警。

v0.2.1

Choose a tag to compare

@Finn763 Finn763 released this 27 Aug 11:10

v0.2.1

修复(P1 批次)

  • 统计基线错映射根治:CPI 模式收紧中国限定;新增题面窗口解析器(天/周/月/年/月底/年底/绝对日期,>90 天宁缺毋滥);FOMC 基线按题面方向三支(加息/降息/维持);标普阈值题改走 breakout 算法——每天进入生产预测输入的错误锚点清零
  • 回测地面真值止血:outcome 缺失显式跳过并计数,禁止 None→False 静默转换;NaN 序列化为 null,不再产出非法 JSON
  • 前端 XSS 修复:innerHTML 转义、javascript: 协议白名单、属性回填转义、CSP meta 兜底;新增 38 项断言脚本 scripts/test_xss_helpers.js

性能

  • 行情序列轮级缓存 + 10 路并发拉取:单次 20.4s → ≤8s,同轮后续调用零网络,全天节省约 10 分钟冗余 IO
  • LLM 采样并发 + 工具层超时对齐(180s → 900s)+ 连接池复用 + stderr 进度心跳:轮次最坏时长 12.4 → 6.4 分钟,agent 侧挂起根因消除

自动化

  • 自主选题闭环:08:30 选题(scripts/autopick.py)→ 08:45 判重入库(scripts/autopick_ingest.py,观察期不入对外榜单)→ 09:00 预测轮
  • Polymarket 揭晓接入每日调度(21:00,scripts/pm_resolve.py 退出码与撞锁处理加固)

全量测试 381 用例全绿,ruff 零告警。

v0.2.0

Choose a tag to compare

@Finn763 Finn763 released this 27 Aug 10:09

v0.2.0

修复

  • 红测试时间炸弹动态日期化:test_storage_readonly 硬编码日期过归档阈值 + test_storage 4 处未来日期炸弹,同类组合全仓扫描清零
  • 引擎反向 import 解耦:新增 src/predictor/ops/lock.py(acquire_lock / lock_state / wait_acquire)与 ops/manual.py,src/ 不再依赖 scripts/,wheel 可独立运行
  • health_check 撞锁失明根治:wait_acquire 排队等锁(45 分钟上限 + 含持有者 pid 的兜底告警),替代原 60 秒盲重试
  • 全量测试 347 用例全绿,ruff 零告警

新功能

  • 自主选题引擎 scripts/autopick.py:聚合 20 个新闻源(Google News RSS ×13 + BBC / NPR / Guardian)→ LLM 筛选打分 → 生成带可查证揭晓条件的新题(questions 表 schema)→ 注册表判重、按日幂等 → 每日简报 data/daily-brief.md

文档与展示

  • README 双语:英文主版 + README.zh-CN.md
  • 架构图:静态 SVG(docs/architecture.svg,英/中各一版)+ 自包含交互版(GitHub Pages,平移/缩放/主题切换/焦点追踪),由 Archify 生成(MIT,见 THIRD_PARTY_NOTICES.md)
  • 文档瘦身:仅保留 ForecastBench 提交调研(英文文件名)与 fork 合规文档 BRANDING

v0.1.0

Choose a tag to compare

@Finn763 Finn763 released this 27 Aug 07:31

Foresight v0.1.0

AI 事件概率预测引擎的首个公开版本:pi 架构外壳 + Python 预测引擎。

核心能力

  • 预测引擎(src/predictor):DuckDB 存储、Brier 评分与校准追踪、历史回测、行情数据源
  • Agent 外壳(shell/pi,rebrand @foresight/foresight-agent):agent 循环、会话管理、多 provider 支持,配置目录 .foresight
  • 扩展桥(.foresight/extensions/foresight-tools.ts):predict / leaderboard / resolve 三个工具,薄壳调用 Python 引擎
  • Web 仪表盘:预测、排行榜与揭晓状态的可视化
  • 无窗口调度:scripts/run_silent.py + pythonw 包装,定时任务零控制台弹窗;ensure_signsrv.py 服务拉起含深度校验(端口占用但 pong 不对判失败)与 CREATE_BREAKAWAY_FROM_JOB 生命周期隔离
  • 测试套件:uv run pytest(约 5 分钟,含 ops 探针)

安装

# 外壳(agent CLI)
cd shell/pi && npm install && npm link   # 全局命令 foresight

# Python 引擎
uv sync

说明

  • 本仓库为技术子集镜像;预测数据库从 data/fb_seed 种子数据初始化
  • 许可证:MIT