Repository navigation
Conversation
…parent Deployed apps never exported agent traces. The Apps proxy forwards a W3C `traceparent`, so each request's first span has a remote parent, and @mlflow/core (0.4.0) roots a trace only at a span with no parent at all: no trace was registered and every span logged "No trace ID found for span ... Skipping." AppKit's GatedMlflowSpanProcessor made the same root check. Treat a remote-parent span as the local root: the gate hands mlflow a parentless view of it (a Proxy that hides `parentSpanContext` and binds methods to the real span), while the real span keeps its remote parent for OTLP. Covers both the classic and the UC processor, and also silences the "No trace ID found" warnings for plain requests that carry `traceparent`. Upstream: mlflow/mlflow#27545 Co-authored-by: Isaac <no-reply@databricks.com> Signed-off-by: Fabian Jakobs <fabian.jakobs@databricks.com>
Contributor
📦 Bundle size reportCompared against
|
| dist | raw | gzip |
|---|---|---|
| JS (runtime) | 1.3 MB (+998 B) | 460 KB (+386 B) |
| Type declarations | 465 KB | 169 KB (-1 B) |
| Source maps | 2.5 MB (+1.6 KB) | 859 KB (+589 B) |
| Other | 11 KB | 3.7 KB |
| Total | 4.2 MB (+2.6 KB) | 1.5 MB (+974 B) |
Per-entry composition (own code — deps external (as shipped))
| Entry | Initial (gz) | Lazy (gz) | Total (gz) | node_modules (min) | Own code (min) |
|---|---|---|---|---|---|
. |
106 KB | 2.5 KB | 109 KB | external | 344 KB |
./beta |
103 KB (+62 B) | 482 B | 104 KB (+62 B) | external | 310 KB (+212 B) |
./testing |
45 KB | 32 KB | 77 KB | external | 223 KB |
./tsdown |
520 B | 0 B | 520 B | external | 813 B |
./type-generator |
26 KB | 0 B | 26 KB | external | 74 KB |
Chunks:
| Entry | Chunk | Load | Size (gz) |
|---|---|---|---|
. |
index.js |
initial | 102 KB |
. |
utils.js |
initial | 4.6 KB |
. |
remote-tunnel-manager.js |
lazy | 2.5 KB |
./beta |
beta.js |
initial | 83 KB |
./beta |
modular.js |
initial | 6.0 KB |
./beta |
stream-manager.js |
initial | 5.9 KB |
./beta |
service-context.js |
initial | 4.2 KB |
./beta |
databricks.js |
initial | 3.3 KB |
./beta |
client.js |
initial | 647 B |
./beta |
index.js |
initial | 20 B |
./beta |
supervisor-api.js |
lazy | 192 B |
./beta |
databricks.js |
lazy | 176 B |
./beta |
index.js |
lazy | 114 B |
./testing |
manifest.js |
initial | 32 KB |
./testing |
index.js |
initial | 10 KB |
./testing |
wide-event-emitter.js |
initial | 2.9 KB |
./testing |
index.js |
lazy | 28 KB |
./testing |
remote-tunnel-manager.js |
lazy | 2.5 KB |
./testing |
utils.js |
lazy | 1.8 KB |
./tsdown |
index.js |
initial | 520 B |
./type-generator |
index.js |
initial | 26 KB |
@databricks/appkit-ui
npm tarball (packed): 397 KB (-4 B) — gzipped download (dist + bin; excludes release-only docs/NOTICE).
| dist | raw | gzip |
|---|---|---|
| JS (runtime) | 429 KB | 147 KB |
| Type declarations | 267 KB | 98 KB (-1 B) |
| Source maps | 853 KB | 286 KB |
| CSS | 16 KB | 3.2 KB |
| Total | 1.5 MB | 534 KB (-1 B) |
Per-entry composition (consumer bundle — deps bundled, peerDeps external)
| Entry | Initial (gz) | Lazy (gz) | Total (gz) | node_modules (min) | Own code (min) |
|---|---|---|---|---|---|
./js |
5.3 KB | 49 KB | 55 KB | 208 KB | 14 KB |
./js/beta |
2.1 KB | 0 B | 2.1 KB | 0 B | 5.0 KB |
./react |
433 KB | 49 KB | 481 KB | 1.3 MB | 177 KB |
./react/beta |
4.9 KB | 0 B | 4.9 KB | 0 B | 12 KB |
Chunks:
| Entry | Chunk | Load | Size (gz) |
|---|---|---|---|
./js |
index.js |
initial | 5.2 KB |
./js |
chunk |
initial | 120 B |
./js |
apache-arrow |
lazy | 49 KB |
./js/beta |
beta.js |
initial | 2.1 KB |
./react |
index.js |
initial | 431 KB |
./react |
tslib |
initial | 2.1 KB |
./react |
apache-arrow |
lazy | 49 KB |
./react/beta |
beta.js |
initial | 4.9 KB |
Contributor
🤖 AppKit PR bot🔬 Run evalsStart an eval for this PR from the evals-monitor app: Go to Evals Monitor → 📦 Try this PR's app templateScaffolds a new app from this PR's SDK build. Run it in any folder (requires the GitHub CLI — gh run download 42243687946 -R databricks/appkit -n appkit-template-0.90.0-pr.a54a550-fjakobs-la-2052-mlflow-traces-deployed-717 -D appkit-pr-717 \
&& unzip -o "appkit-pr-717/appkit-template-0.90.0-pr.a54a550-fjakobs-la-2052-mlflow-traces-deployed-717.zip" -d "appkit-pr-717" \
&& databricks apps init --template "appkit-pr-717"The template pins |
MarioCadenas
approved these changes
Nov 6, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
traceparentheader with every request. AppKit's tracer provider picks up that context, so the first span of each request (the HTTP server span) has a remote parent (parentSpanContext.isRemote === true).@mlflow/core(0.4.0, andmasteras of today) treats a span as the trace root only if it has no parent at all. It ignoresisRemote. Seeexporters/mlflow.js:36/86/151andexporters/uc_table.js:38/89/153in the published build.No trace ID found for span <name>. Skipping.Nothing is exported.GatedMlflowSpanProcessorhad the same root check.No trace ID foundwarnings on plain (non-agent) requests have the same cause.Change
GatedMlflowSpanProcessor(packages/appkit/src/plugins/agents/mlflow.ts), a span whose parent is remote now counts as the root of this process's trace.Proxythat hidesparentSpanContextand binds methods to the real span, so mlflow's writes such assetAttributeland on the real span. The real span is not changed and keeps its remote parent, so OTLP export still joins the caller's distributed trace.WeakSetbecameWeakMap), soonStartandonEndhand mlflow the same view. The outbound-CLIENTdrop and the root check both use the new definition of root.shortcut:, to be removed once upstream treats remote parents as roots.Testing
plugins/agents/tests/mlflow.test.ts. All 3 fail onmainand pass with this change:popTrace). It is not left unregistered.pnpm build,pnpm docs:build,pnpm check:fix,pnpm -r typecheckandpnpm testall pass.server()+agents()with one markdown agent on a foundation model endpoint, and an MLflow experiment bound through the agents plugin'sexperimentresource). The SDK was packed from this branch.traceparenttraceparentNo trace ID found for span POSTtraceparent)No trace ID foundforPOSTand the agent spanmlflow_trace_idin the response), no warningstraceparentNo trace ID foundfor every spanPOST /invocationswith an emptyparent_span_id, and the agent span sits under it. Locally, the MLflow trace id matched the caller'straceparenttrace id.This pull request and its description were written by Isaac.