Skip to content

Commit b5e34b4

Browse files
committed
Merge branch 'main' into caitlin/update-braintrust-otel
2 parents 7128da2 + 798ba5f commit b5e34b4

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

apis/cloudflare/src/proxy.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ export async function handleProxyV1(
115115

116116
let spanLogger: SpanLogger | undefined;
117117
let span: Span | undefined;
118+
let spanId: string | undefined;
119+
let spanExport: string | undefined;
118120
const parentHeader = request.headers.get(BT_PARENT);
119121
if (parentHeader) {
120122
let parent;
@@ -147,6 +149,14 @@ export async function handleProxyV1(
147149
parent: parent.toStr(),
148150
});
149151
spanLogger = makeProxySpanLogger(span, ctx.waitUntil.bind(ctx));
152+
153+
// Extract span ID and export for response headers
154+
spanId = span.id;
155+
if (spanId.trim() !== "") {
156+
spanExport = await span.export();
157+
} else {
158+
spanId = undefined;
159+
}
150160
}
151161

152162
const opts: ProxyOpts = {
@@ -187,6 +197,8 @@ export async function handleProxyV1(
187197
logHistogram, // Pass logging functions to edge layer
188198
whitelist,
189199
spanLogger,
200+
spanId,
201+
spanExport,
190202
};
191203

192204
const url = new URL(request.url);

packages/proxy/edge/index.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { flushMetrics } from "@lib/metrics";
33
import { proxyV1, SpanLogger, LogHistogramFn } from "@lib/proxy";
44
import { isEmpty } from "@lib/util";
55
import { MeterProvider } from "@opentelemetry/sdk-metrics";
6-
import { Meter } from "@opentelemetry/api";
76

87
import { APISecret, getModelEndpointTypes } from "@schema";
98
import { verifyTempCredentials, isTempCredential } from "utils";
@@ -37,6 +36,8 @@ export interface ProxyOpts {
3736
logHistogram?: LogHistogramFn;
3837
whitelist?: (string | RegExp)[];
3938
spanLogger?: SpanLogger;
39+
spanId?: string;
40+
spanExport?: string;
4041
}
4142

4243
const defaultWhitelist: (string | RegExp)[] = [
@@ -177,7 +178,7 @@ export function makeFetchApiSecrets({
177178
let lookupFailed = false;
178179
// Only cache API keys for 60 seconds. This reduces the load on the database but ensures
179180
// that changes roll out quickly enough too.
180-
let ttl = 60;
181+
const ttl = 60;
181182
try {
182183
const response = await fetch(
183184
`${opts.braintrustApiUrl || DEFAULT_BRAINTRUST_APP_URL}/api/secret`,
@@ -258,11 +259,11 @@ export function EdgeProxyV1(opts: ProxyOpts) {
258259

259260
// Create an identity TransformStream (a.k.a. a pipe).
260261
// The readable side will become our new response body.
261-
let { readable, writable } = new TransformStream();
262+
const { readable, writable } = new TransformStream();
262263

263264
let status = 200;
264265

265-
let headers: Record<string, string> = opts.cors ? corsHeaders : {};
266+
const headers: Record<string, string> = opts.cors ? corsHeaders : {};
266267

267268
const setStatus = (code: number) => {
268269
status = code;
@@ -289,6 +290,14 @@ export function EdgeProxyV1(opts: ProxyOpts) {
289290

290291
const fetchApiSecrets = makeFetchApiSecrets({ ctx, opts });
291292

293+
// Set span headers if available
294+
if (opts.spanId) {
295+
setHeader("x-bt-span-id", opts.spanId);
296+
}
297+
if (opts.spanExport) {
298+
setHeader("x-bt-span-export", opts.spanExport);
299+
}
300+
292301
const cachePut = async (
293302
encryptionKey: string,
294303
key: string,

0 commit comments

Comments
 (0)