f802a49535
* fix: repair interrupted tool call history Normalize incomplete tool exchanges before model calls so strict providers do not reject resumed sessions. Preserve completed exchanges and cover sync and async model paths. * fix: repair malformed tool calls and dedupe repair warnings Track AIMessage.invalid_tool_calls alongside tool_calls so interrupted threads with syntactically invalid tool calls get synthesized error results and are accepted by strict providers. Preserve the originating tool call's name in the synthesized ToolMessage, and deduplicate repair warnings per unique tool-call id via a warned set owned by the middleware instance, since the middleware rewrites the request but not thread state. Document the middleware's scope versus deepagents' PatchToolCallsMiddleware (orphan ToolMessage dropping and mid-run coverage). --------- Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
"""Middleware package for EvoScientist.
|
|
|
|
Re-exports middleware classes and factory functions so that existing
|
|
``from EvoScientist.middleware import X`` imports continue to work.
|
|
"""
|
|
|
|
from .ask_user import (
|
|
AskUserMiddleware,
|
|
AskUserRequest,
|
|
AskUserWidgetResult,
|
|
Choice,
|
|
Question,
|
|
)
|
|
from .code_interpreter import create_code_interpreter_middleware
|
|
from .configurable_model import ConfigurableModelMiddleware
|
|
from .context_editing import (
|
|
compute_context_editing_trigger,
|
|
create_context_editing_middleware,
|
|
)
|
|
from .context_overflow import ContextOverflowMapperMiddleware
|
|
from .error_normalization import ErrorNormalizationMiddleware
|
|
from .memory import (
|
|
EvoMemoryMiddleware,
|
|
create_memory_middleware,
|
|
)
|
|
from .memory_lifecycle import (
|
|
EvoMemoryLifecycleMiddleware,
|
|
create_memory_lifecycle_middleware,
|
|
default_memory_scheduler,
|
|
)
|
|
from .model_fallback import ModelFallbackMiddleware, load_fallback_chain
|
|
from .runtime_context import RuntimeContextMiddleware, create_runtime_context_middleware
|
|
from .scheduler import (
|
|
SchedulerMiddleware,
|
|
create_scheduler_middleware,
|
|
)
|
|
from .tool_error_handler import ToolErrorHandlerMiddleware
|
|
from .tool_history_repair import ToolHistoryRepairMiddleware
|
|
from .tool_selector import create_tool_selector_middleware
|
|
from .utils import disable_thinking
|
|
|
|
__all__ = [
|
|
"AskUserMiddleware",
|
|
"AskUserRequest",
|
|
"AskUserWidgetResult",
|
|
"Choice",
|
|
"ConfigurableModelMiddleware",
|
|
"ContextOverflowMapperMiddleware",
|
|
"ErrorNormalizationMiddleware",
|
|
"EvoMemoryLifecycleMiddleware",
|
|
"EvoMemoryMiddleware",
|
|
"ModelFallbackMiddleware",
|
|
"Question",
|
|
"RuntimeContextMiddleware",
|
|
"SchedulerMiddleware",
|
|
"ToolErrorHandlerMiddleware",
|
|
"ToolHistoryRepairMiddleware",
|
|
"compute_context_editing_trigger",
|
|
"create_code_interpreter_middleware",
|
|
"create_context_editing_middleware",
|
|
"create_memory_lifecycle_middleware",
|
|
"create_memory_middleware",
|
|
"create_runtime_context_middleware",
|
|
"create_scheduler_middleware",
|
|
"create_tool_selector_middleware",
|
|
"default_memory_scheduler",
|
|
"disable_thinking",
|
|
"load_fallback_chain",
|
|
]
|