diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 54cf0779f..54ce79f9e 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -13,7 +13,7 @@ jobs: - name: checkout uses: actions/checkout@v6 - name: Setup pnpm - uses: pnpm/action-setup@v6.0.7 + uses: pnpm/action-setup@v6.0.8 with: version: 10.28.2 - name: Setup Node.js diff --git a/.github/workflows/dashboard_ci.yml b/.github/workflows/dashboard_ci.yml index 09b2f5bed..61b455fd9 100644 --- a/.github/workflows/dashboard_ci.yml +++ b/.github/workflows/dashboard_ci.yml @@ -15,7 +15,7 @@ jobs: uses: actions/checkout@v6 - name: Setup pnpm - uses: pnpm/action-setup@v6.0.7 + uses: pnpm/action-setup@v6.0.8 with: version: 10.28.2 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c04543519..7b28976bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,7 +51,7 @@ jobs: echo "tag=$tag" >> "$GITHUB_OUTPUT" - name: Setup pnpm - uses: pnpm/action-setup@v6.0.7 + uses: pnpm/action-setup@v6.0.8 with: version: 10.28.2 diff --git a/astrbot/core/agent/context/compressor.py b/astrbot/core/agent/context/compressor.py index 8b040684d..1affde574 100644 --- a/astrbot/core/agent/context/compressor.py +++ b/astrbot/core/agent/context/compressor.py @@ -236,11 +236,15 @@ class LLMSummaryCompressor: # generate summary try: response = await self.provider.text_chat(contexts=llm_payload) - summary_content = response.completion_text + summary_content = (response.completion_text or "").strip() except Exception as e: logger.error(f"Failed to generate summary: {e}") return messages + if not summary_content: + logger.warning("LLM context compression returned an empty summary.") + return messages + # build result result = [] result.extend(system_messages) diff --git a/docs/zh/faq.md b/docs/zh/faq.md index 7bc9cb431..96199f677 100644 --- a/docs/zh/faq.md +++ b/docs/zh/faq.md @@ -51,7 +51,7 @@ Set dashboard.host in data/cmd_config.json to enable remote access. }, ``` -删除 `username`, `password`, `pbkdf2_password`, `password_storage_upgraded`, `password_change_required`, `jwt_secret` 五个字段(连同值一起),然后保存。上述片段修改类似如下: +删除 `username`, `password`, `pbkdf2_password`, `password_storage_upgraded`, `password_change_required`, `jwt_secret` 六个字段(连同值一起),然后保存。上述片段修改类似如下: ```json diff --git a/tests/agent/test_context_manager.py b/tests/agent/test_context_manager.py index a03f87e52..24fa15209 100644 --- a/tests/agent/test_context_manager.py +++ b/tests/agent/test_context_manager.py @@ -94,6 +94,25 @@ class TestContextManager: assert isinstance(manager.compressor, TruncateByTurnsCompressor) + @pytest.mark.asyncio + async def test_llm_compressor_keeps_history_when_summary_is_empty(self): + from astrbot.core.agent.context.compressor import LLMSummaryCompressor + + provider = MockProvider() + provider.text_chat = AsyncMock( + return_value=LLMResponse(role="assistant", completion_text=" ") + ) + compressor = LLMSummaryCompressor(provider=provider, keep_recent=2) # type: ignore[arg-type] + messages = self.create_messages(6) + + with patch("astrbot.core.agent.context.compressor.logger") as mock_logger: + result = await compressor(messages) + + assert result == messages + mock_logger.warning.assert_called_once_with( + "LLM context compression returned an empty summary." + ) + # ==================== Empty and Edge Cases ==================== @pytest.mark.asyncio