Current section

Files

Jump to
erlang_adk src plugins adk_plugin_stateful_adapter.erl
Raw

src/plugins/adk_plugin_stateful_adapter.erl

%% @doc adk_plugin adapter for an adk_plugin_instance process.
-module(adk_plugin_stateful_adapter).
-behaviour(adk_plugin).
-export([on_user_message/3, before_run/3, after_run/3,
before_agent/3, after_agent/3,
before_model/3, after_model/3, on_model_error/3,
before_tool/3, after_tool/3, on_tool_error/3,
on_event/3, on_agent_error/3, on_run_error/3, on_error/3]).
on_user_message(C, V, O) -> invoke(on_user_message, C, V, O).
before_run(C, V, O) -> invoke(before_run, C, V, O).
after_run(C, V, O) -> invoke(after_run, C, V, O).
before_agent(C, V, O) -> invoke(before_agent, C, V, O).
after_agent(C, V, O) -> invoke(after_agent, C, V, O).
before_model(C, V, O) -> invoke(before_model, C, V, O).
after_model(C, V, O) -> invoke(after_model, C, V, O).
on_model_error(C, V, O) -> invoke(on_model_error, C, V, O).
before_tool(C, V, O) -> invoke(before_tool, C, V, O).
after_tool(C, V, O) -> invoke(after_tool, C, V, O).
on_tool_error(C, V, O) -> invoke(on_tool_error, C, V, O).
on_event(C, V, O) -> invoke(on_event, C, V, O).
on_agent_error(C, V, O) -> invoke(on_agent_error, C, V, O).
on_run_error(C, V, O) -> invoke(on_run_error, C, V, O).
on_error(C, V, O) -> invoke(on_error, C, V, O).
invoke(Hook, Context, Value, Config) ->
Instance = maps:get(instance, Config, undefined),
Timeout = maps:get(timeout_ms, Config, 900),
case adk_plugin_instance:invoke(
Instance, Hook, Context, Value, Timeout) of
{ok, Result} -> Result;
{error, Reason} -> erlang:error({stateful_plugin_failed, Reason})
end.