mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-02 10:40:15 +08:00
Compare commits
5 Commits
fix/8414
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5907e2320f | ||
|
|
8d5fd3055b | ||
|
|
c4251e8210 | ||
|
|
66a10c08b2 | ||
|
|
c7e9d5b481 |
@@ -5,7 +5,7 @@ import os
|
||||
from astrbot.core.computer.booters.cua_defaults import CUA_DEFAULT_CONFIG
|
||||
from astrbot.core.utils.astrbot_path import get_astrbot_data_path
|
||||
|
||||
VERSION = "4.25.3"
|
||||
VERSION = "4.25.4"
|
||||
DB_PATH = os.path.join(get_astrbot_data_path(), "data_v4.db")
|
||||
PERSONAL_WECHAT_CONFIG_METADATA = {
|
||||
"weixin_oc_base_url": {
|
||||
@@ -417,7 +417,7 @@ CONFIG_METADATA_2 = {
|
||||
"weixin_oc_bot_type": "3",
|
||||
"weixin_oc_qr_poll_interval": 1,
|
||||
"weixin_oc_long_poll_timeout_ms": 35_000,
|
||||
"weixin_oc_api_timeout_ms": 15_000,
|
||||
"weixin_oc_api_timeout_ms": 120_000,
|
||||
},
|
||||
"飞书(Lark)": {
|
||||
"id": "lark",
|
||||
|
||||
@@ -130,7 +130,7 @@ class WeixinOCAdapter(Platform):
|
||||
platform_config.get("weixin_oc_long_poll_timeout_ms", 35_000),
|
||||
)
|
||||
self.api_timeout_ms = int(
|
||||
platform_config.get("weixin_oc_api_timeout_ms", 15_000),
|
||||
platform_config.get("weixin_oc_api_timeout_ms", 120_000),
|
||||
)
|
||||
self.cdn_base_url = str(
|
||||
platform_config.get(
|
||||
|
||||
@@ -302,12 +302,14 @@ class ProviderAnthropic(Provider):
|
||||
|
||||
return system_prompt, new_messages
|
||||
|
||||
def _extract_usage(self, usage: Usage) -> TokenUsage:
|
||||
def _extract_usage(self, usage: Usage | None) -> TokenUsage:
|
||||
if usage is None:
|
||||
return TokenUsage()
|
||||
# https://docs.claude.com/en/docs/build-with-claude/prompt-caching#tracking-cache-performance
|
||||
return TokenUsage(
|
||||
input_other=usage.input_tokens or 0,
|
||||
input_cached=usage.cache_read_input_tokens or 0,
|
||||
output=usage.output_tokens,
|
||||
output=usage.output_tokens or 0,
|
||||
)
|
||||
|
||||
def _update_usage(self, token_usage: TokenUsage, usage: MessageDeltaUsage) -> None:
|
||||
|
||||
35
changelogs/v4.25.4.md
Normal file
35
changelogs/v4.25.4.md
Normal file
@@ -0,0 +1,35 @@
|
||||
- [更新日志(简体中文)](#chinese)
|
||||
- [Changelog(English)](#english)
|
||||
|
||||
<a id="chinese"></a>
|
||||
|
||||
## What's Changed
|
||||
|
||||
### 修复
|
||||
|
||||
- 回滚部分改动,修复偶现的 `Database is locked` 的问题。([#8639](https://github.com/AstrBotDevs/AstrBot/pull/8639))
|
||||
- 修复 Pipeline 异步任务可能因缺少强引用而被垃圾回收的问题,提升事件处理稳定性。([#8618](https://github.com/AstrBotDevs/AstrBot/pull/8618))
|
||||
- 修复 WebChat 使用 Web 搜索工具时,引用提示词在同一轮对话多次工具调用后被重复追加到系统消息的问题,避免破坏上下文缓存。([#8642](https://github.com/AstrBotDevs/AstrBot/pull/8642))
|
||||
- 同步 Dashboard `pnpm-lock.yaml` 中的 overrides 配置,修复锁文件与工作区配置不一致的问题。([#8637](https://github.com/AstrBotDevs/AstrBot/pull/8637))
|
||||
|
||||
### 优化
|
||||
|
||||
- 将微信公众号 HTTP API 请求超时时间从 15 秒提升到 120 秒,降低较慢网络或接口响应下下载文件超时失败概率。([#8643](https://github.com/AstrBotDevs/AstrBot/pull/8643))
|
||||
- Dashboard 登录表单启用完整凭据自动填充,改善浏览器密码管理器的使用体验。([#8631](https://github.com/AstrBotDevs/AstrBot/pull/8631))
|
||||
|
||||
<a id="english"></a>
|
||||
|
||||
## What's Changed (EN)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fixed repeated Web search citation prompt appends in WebChat after multiple tool calls within the same interaction, preventing context cache invalidation. ([#8642](https://github.com/AstrBotDevs/AstrBot/pull/8642))
|
||||
- Fixed Pipeline async tasks potentially being garbage-collected due to missing strong references, improving event processing stability. ([#8618](https://github.com/AstrBotDevs/AstrBot/pull/8618))
|
||||
- Synced Dashboard `pnpm-lock.yaml` overrides with the workspace configuration. ([#8637](https://github.com/AstrBotDevs/AstrBot/pull/8637))
|
||||
- Reverted the Provider stats SQLite lock retry change to avoid related regressions. ([#8639](https://github.com/AstrBotDevs/AstrBot/pull/8639))
|
||||
- Reverted the macOS SQLAlchemy compatibility changes to avoid regressions in database initialization and vector storage paths. ([#8638](https://github.com/AstrBotDevs/AstrBot/pull/8638))
|
||||
|
||||
### Improvements
|
||||
|
||||
- Increased the WeChat Official Account HTTP API request timeout from 15 seconds to 120 seconds, reducing timeout failures on slower networks or API responses. ([#8643](https://github.com/AstrBotDevs/AstrBot/pull/8643))
|
||||
- Enabled full credential autofill on the Dashboard login form for better browser password manager support. ([#8631](https://github.com/AstrBotDevs/AstrBot/pull/8631))
|
||||
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "AstrBot"
|
||||
version = "4.25.3"
|
||||
version = "4.25.4"
|
||||
description = "Easy-to-use multi-platform LLM chatbot and development framework"
|
||||
readme = "README.md"
|
||||
license = { text = "AGPL-3.0-or-later" }
|
||||
|
||||
@@ -483,6 +483,40 @@ def _setup_provider_with_mock_client(monkeypatch) -> anthropic_source.ProviderAn
|
||||
return provider
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_query_handles_none_usage_when_content_filtered(monkeypatch):
|
||||
provider = _setup_provider_with_mock_client(monkeypatch)
|
||||
content_filter_message = (
|
||||
"The request was rejected because it was considered high risk"
|
||||
)
|
||||
|
||||
class _FakeMessageBlock:
|
||||
def __init__(self, text: str):
|
||||
self.type = "text"
|
||||
self.text = text
|
||||
|
||||
class _FakeMessage:
|
||||
def __init__(self):
|
||||
self.id = "msg_content_filter"
|
||||
self.content = [_FakeMessageBlock(content_filter_message)]
|
||||
self.stop_reason = "content_filter"
|
||||
self.usage = None
|
||||
|
||||
async def fake_create(**kwargs):
|
||||
return _FakeMessage()
|
||||
|
||||
monkeypatch.setattr(anthropic_source, "Message", _FakeMessage)
|
||||
provider.client.messages.create = fake_create
|
||||
|
||||
llm_response = await provider.text_chat(prompt="test")
|
||||
|
||||
assert llm_response.completion_text == content_filter_message
|
||||
assert llm_response.usage is not None
|
||||
assert llm_response.usage.input_other == 0
|
||||
assert llm_response.usage.input_cached == 0
|
||||
assert llm_response.usage.output == 0
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_tool_choice_auto_converts_to_dict(monkeypatch):
|
||||
"""tool_choice='auto' 应转换为 {'type': 'auto'}"""
|
||||
|
||||
Reference in New Issue
Block a user