feat: refactor tool metadata handling and simplify allowed tool code checks
This commit is contained in:
@@ -108,12 +108,12 @@ func (f *AgentFactory) BuildCustomerServiceAgent(ctx context.Context, input Buil
|
||||
if modelName == "" || toolCode == "" {
|
||||
continue
|
||||
}
|
||||
serverCode, toolName, _ := toolx.GetRegisteredToolIdentity(toolCode)
|
||||
serverCode, toolName, sourceType, _ := toolx.BuildToolMetadata(toolCode)
|
||||
toolMetadataBy[modelName] = einocallbacks.ToolMetadata{
|
||||
ToolCode: toolCode,
|
||||
ServerCode: serverCode,
|
||||
ToolName: toolName,
|
||||
SourceType: toolx.ResolveToolSourceType(toolCode),
|
||||
SourceType: sourceType,
|
||||
}
|
||||
}
|
||||
if input.SelectedSkill != nil {
|
||||
|
||||
@@ -53,33 +53,14 @@ func isAllowedToolCode(toolCode string, allowedToolCodes map[string]struct{}) bo
|
||||
if len(allowedToolCodes) == 0 {
|
||||
return true
|
||||
}
|
||||
toolCode = toolx.NormalizeToolCodeAlias(strings.TrimSpace(toolCode))
|
||||
if _, ok := allowedToolCodes[toolCode]; ok {
|
||||
return true
|
||||
}
|
||||
if isAlwaysAllowedToolCode(toolCode) {
|
||||
if toolx.IsAlwaysAllowedToolCode(toolCode) {
|
||||
return true
|
||||
}
|
||||
if strings.TrimSpace(toolCode) == toolx.GraphTriageServiceRequest.Code {
|
||||
if _, ok := allowedToolCodes[toolx.GraphCreateTicketConfirm.Code]; ok {
|
||||
return true
|
||||
}
|
||||
if _, ok := allowedToolCodes[toolx.GraphHandoffConversation.Code]; ok {
|
||||
return true
|
||||
}
|
||||
}
|
||||
if strings.TrimSpace(toolCode) == toolx.GraphAnalyzeConversation.Code {
|
||||
if _, ok := allowedToolCodes[toolx.GraphCreateTicketConfirm.Code]; ok {
|
||||
return true
|
||||
}
|
||||
if _, ok := allowedToolCodes[toolx.GraphHandoffConversation.Code]; ok {
|
||||
return true
|
||||
}
|
||||
}
|
||||
if strings.TrimSpace(toolCode) == toolx.GraphPrepareTicketDraft.Code {
|
||||
_, ok := allowedToolCodes[toolx.GraphCreateTicketConfirm.Code]
|
||||
return ok
|
||||
}
|
||||
return false
|
||||
return toolx.IsImpliedAllowedToolCode(toolCode, allowedToolCodes)
|
||||
}
|
||||
|
||||
func makeAllowedToolCodeSet(input []string) map[string]struct{} {
|
||||
@@ -88,7 +69,7 @@ func makeAllowedToolCodeSet(input []string) map[string]struct{} {
|
||||
}
|
||||
ret := make(map[string]struct{}, len(input))
|
||||
for _, item := range input {
|
||||
item = strings.TrimSpace(item)
|
||||
item = toolx.NormalizeToolCodeAlias(strings.TrimSpace(item))
|
||||
if item == "" {
|
||||
continue
|
||||
}
|
||||
@@ -96,7 +77,3 @@ func makeAllowedToolCodeSet(input []string) map[string]struct{} {
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func isAlwaysAllowedToolCode(toolCode string) bool {
|
||||
return strings.TrimSpace(toolCode) == toolx.GraphHandoffConversation.Code
|
||||
}
|
||||
|
||||
@@ -278,6 +278,38 @@ func BuildToolAppendices(hasDynamicMCPTools bool, toolCodes map[string]string) [
|
||||
return ret
|
||||
}
|
||||
|
||||
func BuildToolMetadata(toolCode string) (serverCode, toolName, sourceType string, ok bool) {
|
||||
spec, ok := GetRegisteredToolSpec(toolCode)
|
||||
if !ok {
|
||||
return "", "", ResolveToolSourceType(toolCode), false
|
||||
}
|
||||
return spec.ServerCode, spec.Name, spec.SourceType, true
|
||||
}
|
||||
|
||||
func IsAlwaysAllowedToolCode(toolCode string) bool {
|
||||
return NormalizeToolCodeAlias(strings.TrimSpace(toolCode)) == GraphHandoffConversation.Code
|
||||
}
|
||||
|
||||
func IsImpliedAllowedToolCode(toolCode string, allowedToolCodes map[string]struct{}) bool {
|
||||
toolCode = NormalizeToolCodeAlias(strings.TrimSpace(toolCode))
|
||||
if toolCode == "" || len(allowedToolCodes) == 0 {
|
||||
return false
|
||||
}
|
||||
switch toolCode {
|
||||
case GraphTriageServiceRequest.Code, GraphAnalyzeConversation.Code:
|
||||
if _, ok := allowedToolCodes[GraphCreateTicketConfirm.Code]; ok {
|
||||
return true
|
||||
}
|
||||
if _, ok := allowedToolCodes[GraphHandoffConversation.Code]; ok {
|
||||
return true
|
||||
}
|
||||
case GraphPrepareTicketDraft.Code:
|
||||
_, ok := allowedToolCodes[GraphCreateTicketConfirm.Code]
|
||||
return ok
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func hasToolCode(toolCodes map[string]string, target string) bool {
|
||||
target = strings.TrimSpace(target)
|
||||
if target == "" || len(toolCodes) == 0 {
|
||||
|
||||
Reference in New Issue
Block a user