Files
xsai/packages-ext/telemetry/src/utils/wrap-tool.ts
T
藍+85CD 399a3098d4 refactor(telemetry)!: gen_ai (#244)
* refactor(telemetry)!: gen_ai

* refactor(telemetry/generate-text): clean

* refactor(telemetry/generate-text): clean

* feat(telemetry): trace execute tool

* [autofix.ci] apply automated fixes

* ci(autofix): remove push trigger

* refactor(telemetry): update

* chore(telemetry): add lang fuse span processor

* refactor(telemetry): remove gen_ai.system

* chore: update

* chore: update

* chore: update snap

* chore: update

* chore: update

* feat(telemetry): with version

* refactor(telemetry): rename overrides to types, update docs
2025-12-29 18:08:08 +08:00

34 lines
1.0 KiB
TypeScript

import type { Tracer } from '@opentelemetry/api'
import type { Tool, ToolExecuteOptions } from 'xsai'
import { recordSpan } from './record-span'
export const wrapTool = (tool: Tool, tracer: Tracer): Tool => ({
execute: async (input: unknown, options: ToolExecuteOptions) =>
recordSpan({
attributes: {
'gen_ai.operation.name': 'execute_tool',
'gen_ai.tool.call.arguments': JSON.stringify(input),
'gen_ai.tool.call.description': tool.function.description,
'gen_ai.tool.call.id': options.toolCallId,
'gen_ai.tool.call.name': tool.function.name,
},
name: `execute_tool ${tool.function.name}`,
tracer,
}, async (span) => {
try {
const result = await tool.execute(input, options)
span.setAttribute('gen_ai.tool.call.result', JSON.stringify(result))
return result
}
catch (err) {
if (err instanceof Error)
span.setAttribute('error.type', err.message)
throw err
}
}),
function: tool.function,
type: tool.type,
})