melhoria de bug capitao no subagent
This commit is contained in:
parent
04ae95e778
commit
fd4526fa30
@ -26,6 +26,16 @@ const deleteDialogRef = ref(null);
|
|||||||
const selectedTool = ref(null);
|
const selectedTool = ref(null);
|
||||||
const dialogType = ref('');
|
const dialogType = ref('');
|
||||||
|
|
||||||
|
const nativeToolKeys = [
|
||||||
|
'react_to_message',
|
||||||
|
'check_availability',
|
||||||
|
'update_contact',
|
||||||
|
'create_reservation_intent',
|
||||||
|
'generate_pix',
|
||||||
|
'status_suites',
|
||||||
|
'suite_watchdog',
|
||||||
|
];
|
||||||
|
|
||||||
const assistantId = computed(() => route.params.assistantId);
|
const assistantId = computed(() => route.params.assistantId);
|
||||||
|
|
||||||
const fetchTools = async () => {
|
const fetchTools = async () => {
|
||||||
@ -153,7 +163,7 @@ onMounted(() => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="tool.enabled && tool.key !== 'react_to_message'"
|
v-if="tool.enabled && !nativeToolKeys.includes(tool.key)"
|
||||||
class="flex flex-col gap-4 pl-4 border-l-2 border-n-weak mt-6 pt-2 transition-all"
|
class="flex flex-col gap-4 pl-4 border-l-2 border-n-weak mt-6 pt-2 transition-all"
|
||||||
>
|
>
|
||||||
<h5
|
<h5
|
||||||
|
|||||||
@ -86,6 +86,10 @@ class Captain::Assistant < ApplicationRecord
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def pubsub_token
|
||||||
|
"captain_assistant_#{id}"
|
||||||
|
end
|
||||||
|
|
||||||
def agent_tools(conversation: nil, user: nil)
|
def agent_tools(conversation: nil, user: nil)
|
||||||
tools = [
|
tools = [
|
||||||
self.class.resolve_tool_class('faq_lookup').new(self, conversation: conversation, user: user),
|
self.class.resolve_tool_class('faq_lookup').new(self, conversation: conversation, user: user),
|
||||||
|
|||||||
@ -13,15 +13,14 @@ module Captain
|
|||||||
@tool_key = tool_key
|
@tool_key = tool_key
|
||||||
@inbox = inbox
|
@inbox = inbox
|
||||||
@conversation = conversation
|
@conversation = conversation
|
||||||
@definition = Captain::Tools::Definitions::ALL[tool_key]
|
@definition = resolve_definition
|
||||||
@config = Captain::ToolConfig.find_by(captain_assistant_id: assistant.id, tool_key: tool_key) ||
|
@config = resolve_config
|
||||||
Captain::ToolConfig.find_by(inbox: inbox, account: inbox.account, tool_key: tool_key)
|
|
||||||
@contact = conversation.contact
|
@contact = conversation.contact
|
||||||
@additional_data = additional_data
|
@additional_data = additional_data
|
||||||
end
|
end
|
||||||
|
|
||||||
def run
|
def run
|
||||||
return failed_response('Tool not configured or disabled') unless @config&.is_enabled
|
return failed_response('Tool not configured or disabled') unless tool_enabled?
|
||||||
return failed_response('Tool definition not found') unless @definition
|
return failed_response('Tool definition not found') unless @definition
|
||||||
|
|
||||||
start_time = Time.current
|
start_time = Time.current
|
||||||
@ -29,6 +28,7 @@ module Captain
|
|||||||
when :http then execute_http
|
when :http then execute_http
|
||||||
when :webhook then execute_webhook
|
when :webhook then execute_webhook
|
||||||
when :internal then execute_internal
|
when :internal then execute_internal
|
||||||
|
when :scenario then execute_scenario
|
||||||
else failed_response('Unknown tool type')
|
else failed_response('Unknown tool type')
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -38,6 +38,51 @@ module Captain
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def resolve_definition
|
||||||
|
return Captain::Tools::Definitions::ALL[@tool_key] if Captain::Tools::Definitions::ALL.key?(@tool_key)
|
||||||
|
|
||||||
|
scenario = find_scenario_by_tool_key
|
||||||
|
return { type: :scenario, scenario: scenario } if scenario
|
||||||
|
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def resolve_config
|
||||||
|
Captain::ToolConfig.find_by(captain_assistant_id: @assistant.id, tool_key: @tool_key) ||
|
||||||
|
Captain::ToolConfig.find_by(inbox: @inbox, account: @inbox.account, tool_key: @tool_key)
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_scenario_by_tool_key
|
||||||
|
@assistant.scenarios.enabled.find do |scenario|
|
||||||
|
"consultar_#{scenario.title.parameterize.underscore}" == @tool_key
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def tool_enabled?
|
||||||
|
return true if @definition && @definition[:type] == :scenario
|
||||||
|
|
||||||
|
@config&.is_enabled
|
||||||
|
end
|
||||||
|
|
||||||
|
def execute_scenario
|
||||||
|
scenario = @definition[:scenario]
|
||||||
|
# We pass the contact (user) and conversation context.
|
||||||
|
# We use the full user message as the 'pergunta_interna' for the sub-agent.
|
||||||
|
tool = Captain::Tools::ScenarioDelegatorTool.new(scenario, user: @contact, conversation: @conversation)
|
||||||
|
|
||||||
|
# ScenarioDelegatorTool expects 'pergunta_interna'
|
||||||
|
params = { 'pergunta_interna' => @additional_data[:message] }
|
||||||
|
execution_result = tool.execute(params)
|
||||||
|
|
||||||
|
if execution_result.is_a?(String)
|
||||||
|
{ success: true, body: { message: execution_result } }
|
||||||
|
else
|
||||||
|
{ success: true, body: execution_result }
|
||||||
|
end
|
||||||
|
rescue StandardError => e
|
||||||
|
{ success: false, error: "Scenario Error: #{e.message}" }
|
||||||
|
end
|
||||||
|
|
||||||
def execute_http
|
def execute_http
|
||||||
uri = URI(@definition[:url])
|
uri = URI(@definition[:url])
|
||||||
http = Net::HTTP.new(uri.host, uri.port)
|
http = Net::HTTP.new(uri.host, uri.port)
|
||||||
@ -67,7 +112,7 @@ module Captain
|
|||||||
|
|
||||||
return failed_response("Tool Class #{tool_class_name} not found") unless klass
|
return failed_response("Tool Class #{tool_class_name} not found") unless klass
|
||||||
|
|
||||||
tool_instance = klass.new(@assistant, user: nil, conversation: @conversation)
|
tool_instance = klass.new(@assistant, user: @contact, conversation: @conversation)
|
||||||
|
|
||||||
# Merge additional data into params if the tool expects them
|
# Merge additional data into params if the tool expects them
|
||||||
# Typically internal tools take a params hash.
|
# Typically internal tools take a params hash.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user