Coverage for merco/core/empty_response.py: 92%

13 statements  

« prev     ^ index     » next       coverage.py v7.15.0, created at 2026-07-07 14:04 +0800

1"""Empty response strategies.""" 

2from __future__ import annotations 

3 

4import logging 

5from .pipeline import EmptyResponseStrategy, EmptyResponseContext 

6 

7logger = logging.getLogger("merco.pipeline") 

8 

9 

10class CallbackEmptyResponse(EmptyResponseStrategy): 

11 """空回复回调:注入 user 消息让 LLM 自愈。 

12 

13 适用于支持 function calling 但偶尔忘记调用工具的模型。 

14 """ 

15 

16 name = "callback" 

17 

18 async def attempt(self, ctx: EmptyResponseContext) -> bool: 

19 if ctx.retry_count >= ctx.max_retries: 

20 return False 

21 from merco.tools.errors import empty_response 

22 err = empty_response() 

23 ctx.inject_error = err["error"] 

24 return True