File size: 3,138 Bytes
064bfd6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | import {
isBetaTracingEnabled,
type LLMRequestNewContext,
} from './betaSessionTracing.js'
export { isBetaTracingEnabled, type LLMRequestNewContext }
export interface Span {
setAttribute(name: string, value: string | number | boolean): void
setAttributes(attributes: Record<string, string | number | boolean>): void
addEvent(
name: string,
attributes?: Record<string, string | number | boolean>,
): void
end(): void
recordException(error: unknown): void
}
type SpanMetadata = Record<string, string | number | boolean>
function createNoopSpan(): Span {
return {
setAttribute() {},
setAttributes() {},
addEvent() {},
end() {},
recordException() {},
}
}
let currentInteractionSpan: Span | null = null
let currentToolSpan: Span | null = null
export function isEnhancedTelemetryEnabled(): boolean {
return false
}
export function startInteractionSpan(_userPrompt: string): Span {
const span = createNoopSpan()
currentInteractionSpan = span
return span
}
export function endInteractionSpan(): void {
currentInteractionSpan = null
}
export function startLLMRequestSpan(
_model: string,
_newContext?: LLMRequestNewContext,
_messagesForAPI?: unknown[],
_fastMode?: boolean,
): Span {
return createNoopSpan()
}
export function endLLMRequestSpan(
_span?: Span,
_metadata?: {
inputTokens?: number
outputTokens?: number
cacheReadTokens?: number
cacheCreationTokens?: number
success?: boolean
statusCode?: number
error?: string
attempt?: number
modelResponse?: string
modelOutput?: string
thinkingOutput?: string
hasToolCall?: boolean
ttftMs?: number
requestSetupMs?: number
attemptStartTimes?: number[]
},
): void {}
export function startToolSpan(
_toolName: string,
_toolAttributes?: SpanMetadata,
_toolInput?: string,
): Span {
const span = createNoopSpan()
currentToolSpan = span
return span
}
export function startToolBlockedOnUserSpan(): Span {
return createNoopSpan()
}
export function endToolBlockedOnUserSpan(
_decision?: string,
_source?: string,
): void {}
export function startToolExecutionSpan(): Span {
return createNoopSpan()
}
export function endToolExecutionSpan(_metadata?: {
success?: boolean
error?: string
}): void {}
export function endToolSpan(
_toolResult?: string,
_resultTokens?: number,
): void {
currentToolSpan = null
}
export function addToolContentEvent(
_eventName: string,
_attributes: SpanMetadata,
): void {}
export function getCurrentSpan(): Span | null {
return currentToolSpan ?? currentInteractionSpan
}
export async function executeInSpan<T>(
_spanName: string,
fn: (span: Span) => Promise<T>,
_attributes?: SpanMetadata,
): Promise<T> {
return fn(createNoopSpan())
}
export function startHookSpan(
_hookEvent: string,
_hookName: string,
_numHooks: number,
_hookDefinitions: string,
): Span {
return createNoopSpan()
}
export function endHookSpan(
_span: Span,
_metadata?: {
numSuccess?: number
numBlocking?: number
numNonBlockingError?: number
numCancelled?: number
},
): void {}
|