vllm-project / vllm-project/agentic-api

feat: request and execution traces across HTTP, WebSocket, and executor stages (#279 phase 2)

Open
#339 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
Rust
Stars
284
Forks
74
Avg merge
1d 17h
Merged PRs (30d)
93

Description

Problem statement / motivation

Parent: #279 (phase 2). Depends on phase 1 foundation #338.

Make one request followable end-to-end: extract incoming W3C context, hang every executor stage under a single execution span, inject the active context into upstream inference requests, keep streaming spans alive until body completion or disconnect, and record typed execution and delivery outcomes so that HTTP 200 never implies success.

Proposed solution

WIP

Acceptance criteria
  • Valid inbound traceparenthttp.server.request is its child and the mock upstream receives a traceparent whose parent is the gateway's http.client.request; invalid/absent → new root, no error.
  • A two-round streaming cassette shows rehydrate, two inference_round (each with an http.client.request child), tool.execute (bounded agentic.tool.type), compaction when triggered, and persist under one agentic.execute.
  • Proxy and executor routes, HTTP and WebSocket transports, Responses and Messages APIs produce the same span shape.
  • Streaming spans close after the last chunk on success, upstream failure (error.type bounded), shutdown cancel, and mid-body client drop (delivery=disconnected, execution=cancelled).
  • Three response.create messages on one socket → three distinct execution spans linked to one session span; a pipelined message records non-zero queue wait.
  • SSE error under HTTP 200 → execution.outcome=failed, otel.status_code=ERROR.
  • Attribute scanner: no input/output text, tool arguments, Authorization/x-api-key, raw URLs with query, or upstream error bodies in any exported attribute.
  • Existing cassette, relay-ordering, and WebSocket tests pass unchanged; no new unbounded channel.
Alternatives considered
Non-goals

Metrics and histogram definitions (phase 3); sampling changes; OTLP logs; refactoring run_stream's channel (#244 owns it); capturing payloads even behind a flag.

Additional context

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Read phase 1 foundation issue #338 and trace the existing run_stream path; first run the cassette, relay-ordering, and WebSocket tests mentioned here. Map the proxy and executor routes plus HTTP and WebSocket transports before changing anything. Done means the listed span shapes, typed outcomes, streaming-close cases, attribute restrictions, and unchanged existing tests all pass.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
api, distributed-systems, observability, testing-qa
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.