def execute(m, prompt)
plan = self.class.build_execute_plan(
prompt.to_s,
asker: m.user.nick,
channel: m.channel&.name,
network: bot.config.server,
channel_obj: m.channel,
user: m.user,
yaml_default: bot.config.shared[:ai_model]
)
if plan[:immediate_reply]
themed_flood_safe_reply(m, plan[:immediate_reply])
return
end
return unless plan[:async]
themed_flood_safe_reply(m, plan[:async_ack]) if plan[:async_ack]
AsyncJob.run(label: "aip") do
outcome = if plan[:continuation]
AiChatCore.process_plan_answer(
response: plan[:response],
channel: plan[:channel],
asker: plan[:asker],
network: plan[:network],
yaml_default: bot.config.shared[:ai_model],
usage_fetch: method(:usage_fetch)
)
else
AiChatCore.process_plan_request(
question: plan[:question],
channel: plan[:channel],
asker: plan[:asker],
network: plan[:network],
yaml_default: bot.config.shared[:ai_model],
usage_fetch: method(:usage_fetch)
)
end
themed_flood_safe_reply(m, outcome[:reply])
rescue StandardError
themed_flood_safe_reply(m, AipReport.format_error("AI plan request failed"))
end
end