Hook is a place in BotSharp that allows you to tap in to a module to either provide different behavior or to react.

Agent Hook


// Triggered when agent is loading.
bool OnAgentLoading(ref string id);
bool OnInstructionLoaded(string template, Dictionary<string, object> dict);
bool OnFunctionsLoaded(List<FunctionDef> functions);
bool OnSamplesLoaded(ref string samples);

// Triggered when agent is loaded completely.
void OnAgentLoaded(Agent agent);

More information about agent hook please go to Agent Hook.

Conversation Hook


// Triggered once for every new conversation.
Task OnConversationInitialized(Conversation conversation);
Task OnDialogsLoaded(List<RoleDialogModel> dialogs);
Task OnMessageReceived(RoleDialogModel message);

// Triggered before LLM calls function.
Task OnFunctionExecuting(RoleDialogModel message);

// Triggered when the function calling completed.
Task OnFunctionExecuted(RoleDialogModel message);
Task OnResponseGenerated(RoleDialogModel message);

// LLM detected the current task is completed.
Task OnCurrentTaskEnding(RoleDialogModel message);

// LLM detected the user's intention to end the conversation
Task OnConversationEnding(RoleDialogModel message);

// LLM can't handle user's request or user requests human being to involve.
Task OnHumanInterventionNeeded(RoleDialogModel message);

More information about conversation hook please go to Conversation Hook.


Task OnStateLoaded(ConversationState state);
Task OnStateChanged(string name, string preValue, string currentValue);

Content Generating Hook


Model content generating hook, it can be used for logging, metrics and tracing.

// Before content generating.
Task BeforeGenerating(Agent agent, List<RoleDialogModel> conversations);

// After content generated.
Task AfterGenerated(RoleDialogModel message, TokenStatsModel tokenStats);


Task BeforeCompletion(Agent agent, RoleDialogModel message);
Task AfterCompletion(Agent agent, InstructResult result);