What's Changed
- feat: 请求日志记录新增'推理强度'字段 by @deqiying in #1506
- feat: per-channel concurrency queue + admission control by @suixinio in #1503
- feat: auto reasoning effort with suffix by @looplj in #1515
- feat: add optional read-write separation for database by @lazhenyi in #1516
- feat(quota): add wafer, synthetic, and neuralwatt quota checkers by @djdembeck in #1509
- fix(dashboard): align token stats by API key/channel/model with totals by @raikyou in #1524
- feat: add Anthropic endpoints for Volcengine, AiHubMix, and Xiaomi MiMo by @banlanzs in #1521
- display token usage in channel cards via tokenStatsByChannel API by @banlanzs in #1528
- feat(quota): add provider quota enforcement with per-limit status tracking by @djdembeck in #1518
- feat: customized channel endpoints by @looplj in #1529
- fix(pipeline): prevent channels from getting stuck in processing status by @djdembeck in #1530
- chore: reformat llm package by @looplj in #1531
- fix(models): clicking Archive on a disabled model had no effect by @djdembeck in #1535
- fix(ui): show used/total in NanoGPT quota display instead of used/remaining by @djdembeck in #1543
- fix(models): resolve vision capability from modalities when explicit field is absent by @djdembeck in #1542
- opt: disable spell check for API key textarea by @BLumia in #1544
- opt: custom endpoint api format by @looplj in #1545
- feat: align endpoint i18n and prompt protection preview by @looplj in #1546
- feat(oidc): Initial OpenID Connect Support by @LazuliKao in #1091
- scheduler: centralized cron job management by @looplj in #1550
- chore: update issue template by @looplj in #1551
- fix(llm): missing anthropic thinking disabled transform by @looplj in #1552
- feat: openai/deepseek completion api, close #1458 by @looplj in #1554
- chore: change prompt content column, close #1553 by @looplj in #1580
- fix: max model association priority, close #1507 by @looplj in #1581
- opt: responses stream failed handle & request executions index, close #1473 by @looplj in #1585
- opt: openai outbound reasoning field config, close #1584 by @looplj in #1586
- chore: sync model developers data by @github-actions[bot] in #1588
- feat: global pass-through setting by @raikyou in #1591
- feat: add lowercaseModelName channel setting for cross-channel load b… by @nb5p in #1589
- feat: expose inbound request headers to override templates by @ttttmr in #1520
- feat(apikeys): add API key profile templates by @djdembeck in #1590
- feat: prefer outbound format equals to inbound format by @looplj in #1592
- 修改前端,"测试场"新增测试模型网关模型 by @zhai23 in #1597
- fix(gc): drop nil bind args so VACUUM actually runs on Postgres by @suixinio in #1602
- chore: add gpt-5.5 for codex plans by @qinkangdeid in #1605
- refactor: remove the signature prefix marker to improve pass through by @looplj in #1593
- Support image parts in Ollama chat transformer by @zhzy0077 in #1610
- feat: add Qiniu provider support by @JackChiang233 in #1612
- fix(channels): import Qiniu icon in config_channels by @suixinio in #1613
- feat(openapi): add updateAPIKeyProfiles and loadApiKeyProfileTemplate by @suixinio in #1617
- chore: sync model developers data by @github-actions[bot] in #1627
- fix: detect synthetic weekly quota exhausted state by @djdembeck in #1619
- feat: auto enable wal for sqlite by @looplj in #1633
- feat: customized channel endpoints with base url by @looplj in #1635
- fix: prevent panic when client canceled for pass-through, close #1634 by @looplj in #1637
- fix: should omit empty name for function call, close #1587 by @looplj in #1639
- fix: fetch models for codex with auth.json, close #1636 by @looplj in #1645
- feat: hide upstream error message by @LRan1028 in #1640
- feat: gc now with options, close #1618 by @looplj in #1647
- feat: backup usage stats by @henryz78 in #1632
- feat(transformer): add cross-provider search citation and annotation support by @ttttmr in #1643
- feat: add volume price mode, close #1582 by @looplj in #1651
- doc: update add channel doc by @looplj in #1653
- chore(llm): change openai default reasoning_field to content by @looplj in #1656
- fix(llm): clear ReasoningEffort when DeepSeek thinking is disabled by @Lucent-Snow in #1663
- fix: request detail preview in dark mode by @looplj in #1666
- feat: add modelBlacklistRegex system setting to filter channel-derive… by @nb5p in #1673
- chore: sync model developers data by @github-actions[bot] in #1675
- fix(llm): close text block before starting thinking block in inbound stream by @hen7777777 in #1677
- feat: opencode go channel, close #1614 by @looplj in #1682
- Add developer-level model association rules by @zhaozhaozz in #1672
- feat: auto decompress request body, close #1680 by @looplj in #1688
- fix(pipeline): expose RawRequest before llm middlewares by @ttttmr in #1687
- feat: introduce Atlas Cloud as sponsor by @looplj in #1693
- feat: add atlascloud provider by @lucaszhu-hue in #1695
- feat: rotate api key, close #1692 by @looplj in #1696
- fix: should not error if can access to api keys, close #1674 by @looplj in #1697
- fix: cache not refresh in some cache by @looplj in #1699
- fix(gc): avoid SELECT * when querying old requests/executions for cle… by @FlyLoongZ in #1700
New Contributors
- @suixinio made their first contribution in #1503
- @BLumia made their first contribution in #1544
- @ttttmr made their first contribution in #1520
- @zhai23 made their first contribution in #1597
- @zhzy0077 made their first contribution in #1610
- @JackChiang233 made their first contribution in #1612
- @LRan1028 made their first contribution in #1640
- @henryz78 made their first contribution in #1632
- @Lucent-Snow made their first contribution in #1663
- @zhaozhaozz made their first contribution in #1672
- @lucaszhu-hue made their first contribution in #1695
- @FlyLoongZ made their first contribution in #1700
Full Changelog: v0.9.38...v1.0.0-beta1