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 == "" {
|
if modelName == "" || toolCode == "" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
serverCode, toolName, _ := toolx.GetRegisteredToolIdentity(toolCode)
|
serverCode, toolName, sourceType, _ := toolx.BuildToolMetadata(toolCode)
|
||||||
toolMetadataBy[modelName] = einocallbacks.ToolMetadata{
|
toolMetadataBy[modelName] = einocallbacks.ToolMetadata{
|
||||||
ToolCode: toolCode,
|
ToolCode: toolCode,
|
||||||
ServerCode: serverCode,
|
ServerCode: serverCode,
|
||||||
ToolName: toolName,
|
ToolName: toolName,
|
||||||
SourceType: toolx.ResolveToolSourceType(toolCode),
|
SourceType: sourceType,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if input.SelectedSkill != nil {
|
if input.SelectedSkill != nil {
|
||||||
|
|||||||
@@ -53,33 +53,14 @@ func isAllowedToolCode(toolCode string, allowedToolCodes map[string]struct{}) bo
|
|||||||
if len(allowedToolCodes) == 0 {
|
if len(allowedToolCodes) == 0 {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
toolCode = toolx.NormalizeToolCodeAlias(strings.TrimSpace(toolCode))
|
||||||
if _, ok := allowedToolCodes[toolCode]; ok {
|
if _, ok := allowedToolCodes[toolCode]; ok {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if isAlwaysAllowedToolCode(toolCode) {
|
if toolx.IsAlwaysAllowedToolCode(toolCode) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if strings.TrimSpace(toolCode) == toolx.GraphTriageServiceRequest.Code {
|
return toolx.IsImpliedAllowedToolCode(toolCode, allowedToolCodes)
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeAllowedToolCodeSet(input []string) map[string]struct{} {
|
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))
|
ret := make(map[string]struct{}, len(input))
|
||||||
for _, item := range input {
|
for _, item := range input {
|
||||||
item = strings.TrimSpace(item)
|
item = toolx.NormalizeToolCodeAlias(strings.TrimSpace(item))
|
||||||
if item == "" {
|
if item == "" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -96,7 +77,3 @@ func makeAllowedToolCodeSet(input []string) map[string]struct{} {
|
|||||||
}
|
}
|
||||||
return ret
|
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
|
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 {
|
func hasToolCode(toolCodes map[string]string, target string) bool {
|
||||||
target = strings.TrimSpace(target)
|
target = strings.TrimSpace(target)
|
||||||
if target == "" || len(toolCodes) == 0 {
|
if target == "" || len(toolCodes) == 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user