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 {}