feat: implement ResolveToolMetadata function and update tool metadata resolution across the codebase

This commit is contained in:
mlogclub
2026-04-14 09:51:03 +08:00
parent d87253dddd
commit ceb5df87fd
4 changed files with 40 additions and 16 deletions
@@ -125,11 +125,12 @@ func (h *RuntimeTraceHandler) resolveToolMetadata(modelToolName string) (ToolMet
return ToolMetadata{}, false return ToolMetadata{}, false
} }
if spec, ok := toolx.GetRegisteredToolSpecByName(modelToolName); ok { if spec, ok := toolx.GetRegisteredToolSpecByName(modelToolName); ok {
resolved := toolx.ResolveToolMetadata(spec.Code, spec.Name)
return ToolMetadata{ return ToolMetadata{
ToolCode: spec.Code, ToolCode: resolved.ToolCode,
ServerCode: spec.ServerCode, ServerCode: resolved.ServerCode,
ToolName: spec.Name, ToolName: resolved.ToolName,
SourceType: spec.SourceType, SourceType: resolved.SourceType,
}, true }, true
} }
metadata, ok := h.toolMetadataBy[modelToolName] metadata, ok := h.toolMetadataBy[modelToolName]
@@ -45,11 +45,12 @@ func buildRuntimeTraceToolMetadata(
} }
} }
if selectedSkill != nil { if selectedSkill != nil {
resolved := toolx.ResolveToolMetadata(toolx.BuiltinSkill.Code, toolx.BuiltinSkill.Name)
ret[toolx.BuiltinSkill.Name] = einocallbacks.ToolMetadata{ ret[toolx.BuiltinSkill.Name] = einocallbacks.ToolMetadata{
ToolCode: toolx.BuiltinSkill.Code, ToolCode: resolved.ToolCode,
ServerCode: toolx.BuiltinSkill.ServerCode, ServerCode: resolved.ServerCode,
ToolName: toolx.BuiltinSkill.Name, ToolName: resolved.ToolName,
SourceType: toolx.BuiltinSkill.SourceType, SourceType: resolved.SourceType,
} }
} }
return ret return ret
+5 -8
View File
@@ -46,15 +46,12 @@ func (r *Registry) Resolve(ctx Context) (*ToolSet, error) {
} }
ret.StaticTools = append(ret.StaticTools, tool) ret.StaticTools = append(ret.StaticTools, tool)
ret.StaticToolCodes[toolName] = toolCode ret.StaticToolCodes[toolName] = toolCode
serverCode, resolvedToolName, sourceType, _ := toolx.BuildToolMetadata(toolCode) resolvedMetadata := toolx.ResolveToolMetadata(toolCode, toolName)
if resolvedToolName == "" {
resolvedToolName = toolName
}
ret.StaticToolMetadata[toolName] = ToolMetadata{ ret.StaticToolMetadata[toolName] = ToolMetadata{
ToolCode: toolCode, ToolCode: resolvedMetadata.ToolCode,
ServerCode: serverCode, ServerCode: resolvedMetadata.ServerCode,
ToolName: resolvedToolName, ToolName: resolvedMetadata.ToolName,
SourceType: sourceType, SourceType: resolvedMetadata.SourceType,
} }
} }
return ret, nil return ret, nil
+25
View File
@@ -16,6 +16,13 @@ type ToolSpec struct {
Appendix string Appendix string
} }
type ToolMetadata struct {
ToolCode string
ServerCode string
ToolName string
SourceType string
}
var ( var (
BuiltinToolSearch = ToolSpec{ BuiltinToolSearch = ToolSpec{
Code: "builtin/tool_search", Code: "builtin/tool_search",
@@ -310,6 +317,24 @@ func BuildToolMetadata(toolCode string) (serverCode, toolName, sourceType string
return spec.ServerCode, spec.Name, spec.SourceType, true return spec.ServerCode, spec.Name, spec.SourceType, true
} }
func ResolveToolMetadata(toolCode string, fallbackName string) ToolMetadata {
toolCode = NormalizeToolCodeAlias(strings.TrimSpace(toolCode))
fallbackName = strings.TrimSpace(fallbackName)
serverCode, toolName, sourceType, ok := BuildToolMetadata(toolCode)
if !ok && toolName == "" {
toolName = fallbackName
}
if toolName == "" {
toolName = fallbackName
}
return ToolMetadata{
ToolCode: toolCode,
ServerCode: strings.TrimSpace(serverCode),
ToolName: strings.TrimSpace(toolName),
SourceType: strings.TrimSpace(sourceType),
}
}
func IsAlwaysAllowedToolCode(toolCode string) bool { func IsAlwaysAllowedToolCode(toolCode string) bool {
return NormalizeToolCodeAlias(strings.TrimSpace(toolCode)) == GraphHandoffConversation.Code return NormalizeToolCodeAlias(strings.TrimSpace(toolCode)) == GraphHandoffConversation.Code
} }