Improve AgentServer warm response latency and reduce repeated work - #49000
Nathandrake229 wants to merge 3 commits into
Conversation
Reuse request-scoped history and input materialization, preserve awaited telemetry completion after streaming, and remove redundant owned copies. Generate real models lazily from canonical declarations and avoid eager internal type-only lookups. Generate invocation fallback IDs on demand. Preserve current upstream session-GUID behavior, versions, dependencies, validation, persistence, replay, and model/public-method contracts. Include focused regressions, generator checks, and package changelogs. Await request-owned stream cleanup on disconnect before final flushing, while retaining independent stored/background producer ownership. Authored-by: GitHub Copilot CLI v1.0.84-4 Model: GPT-6 Astra (gpt-6-astra) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 32aa91cd-ed7c-4f55-9651-703e5f823636
|
Azure Pipelines: Successfully started running 1 pipeline(s). 10 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
Benchmark validation contextThe description highlights the warm gains. For review, the complete observed
Material tradeoff: cold Responses P95 completion latency increased 257.3 ms The candidate's numerical Responses-minus-Invocations TTFB gaps were 177.8 ms Method and limitations
No internal resource identifiers, request traces, access tokens or private Port and review scopeThe measured prototype used released package versions. The PR is ported onto Review-size warning: this cumulative draft contains 53 files and 38,155 The port also fixes a request-owned disconnect cleanup ordering issue found |
|
Azure Pipelines: Successfully started running 1 pipeline(s). 10 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
🔵 Needs a closer look
It spans concurrency, cancellation, persistence, telemetry, and generated public models while full CI and platform validation remain pending.
Pull request overview
Optimizes AgentServer warm-response latency while preserving request isolation, persistence, cleanup, and model contracts.
Changes:
- Reuses request-local history/input materialization and removes redundant copying/UUID generation.
- Defers streaming telemetry flush while awaiting cleanup before HTTP completion.
- Lazily constructs generated response models with deterministic generation and contract tests.
File summaries
| File | Description |
|---|---|
sdk/agentserver/azure-ai-agentserver-responses/CHANGELOG.md |
Documents Responses optimizations. |
sdk/agentserver/azure-ai-agentserver-responses/docs/runtime-work-reuse.md |
Explains reuse and cleanup contracts. |
sdk/agentserver/azure-ai-agentserver-responses/_scripts/extract_model_contracts.py |
Integrates lazy-model emission. |
sdk/agentserver/azure-ai-agentserver-responses/_scripts/lazy_model_emitter.py |
Generates lazy model factories. |
sdk/agentserver/azure-ai-agentserver-responses/_scripts/qualify_model_references.py |
Qualifies internal model references. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/__init__.py |
Lazily exports root models. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/_response_context.py |
Adds request-local caches and single-flight resolution. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/hosting/_acceptance.py |
Uses lazy generated annotations. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/hosting/_endpoint_handler.py |
Defers flush and coordinates stream cleanup. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/hosting/_event_subject.py |
Qualifies lazy event types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/hosting/_execution_context.py |
Qualifies context model types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/hosting/_orchestrator.py |
Reuses work and manages producer ownership. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/hosting/_request_parsing.py |
Qualifies request model references. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/hosting/_resilient_input.py |
Uses lazy request annotations. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/hosting/_resilient_orchestrator.py |
Resets recovered request caches. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/hosting/_routing.py |
Closes owned handler iterators. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/hosting/_runtime_state.py |
Qualifies output-item types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/hosting/_validation.py |
Qualifies validation model types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/models/__init__.py |
Lazily exposes public models. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/models/_generated/__init__.py |
Dispatches generated lazy exports. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/models/_generated/_catalog.py |
Catalogs generated exports. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/models/_generated/_unions.py |
Lazily constructs generated unions. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/models/_generated/types.py |
Lazily constructs generated models. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/models/_helpers.py |
Avoids eager model imports. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/models/_lazy_models.py |
Provides thread-safe lazy loading. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/models/runtime.py |
Qualifies runtime model references. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_base.py |
Qualifies provider protocol types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_file.py |
Qualifies file-store types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_foundry_provider.py |
Qualifies Foundry provider types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_foundry_serializer.py |
Qualifies serialization types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_memory.py |
Qualifies in-memory store types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/streaming/_builders/_base.py |
Defers cast type evaluation. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/streaming/_builders/_function.py |
Defers function-event cast types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/streaming/_builders/_message.py |
Defers message-event cast types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/streaming/_builders/_reasoning.py |
Defers reasoning-event cast types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/streaming/_builders/_tools.py |
Defers tool-event cast types. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/streaming/_checkpoint.py |
Qualifies checkpoint response type. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/streaming/_event_stream.py |
Reduces seed copying. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/streaming/_helpers.py |
Reuses owned coerced events. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/streaming/_internals.py |
Removes redundant item copying. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/streaming/_sse.py |
Shields iterator cleanup. |
sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/streaming/_text_response.py |
Qualifies text-response types. |
sdk/agentserver/azure-ai-agentserver-responses/tests/contract/test_eager_history_prefetch.py |
Tests prefetch reuse and failures. |
sdk/agentserver/azure-ai-agentserver-responses/tests/contract/test_history_storage_pull_counts.py |
Verifies storage call counts. |
sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_event_copy_reuse.py |
Tests copy boundaries. |
sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_input_singleflight.py |
Tests concurrent input resolution. |
sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_lazy_generated_models.py |
Tests lazy model contracts. |
sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_request_history_resolution.py |
Tests history cache isolation. |
sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_streaming_flush.py |
Tests flush and cleanup ordering. |
sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_streaming_history_reuse.py |
Tests persistence history reuse. |
sdk/agentserver/azure-ai-agentserver-invocations/CHANGELOG.md |
Documents lazy ID generation. |
sdk/agentserver/azure-ai-agentserver-invocations/azure/ai/agentserver/invocations/_invocation.py |
Generates fallback UUIDs lazily. |
sdk/agentserver/azure-ai-agentserver-invocations/tests/test_lazy_id_fallback.py |
Tests fallback ID behavior. |
Review details
- Files reviewed: 52/53 changed files
- Comments generated: 1
- Review effort level: Balanced
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
Describe the invocation and session ID fallbacks actually optimized by the SDK, addressing the Copilot review comment. Authored-by: GitHub Copilot CLI v1.0.84-5 Model: GPT-6 Astra (gpt-6-astra) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: b49f8378-a7d0-4752-9bb5-84f7fcc180c8
There was a problem hiding this comment.
🔵 Needs a closer look
It changes concurrency, cancellation, persistence, and generated API machinery, while full CI and platform validation remain pending.
Review details
- Files reviewed: 52/53 changed files
- Comments generated: 0 new
- Review effort level: Balanced
| """ | ||
|
|
||
| from __future__ import annotations | ||
| from ..models import _generated as _generated_models |
There was a problem hiding this comment.
should we import only ResponseObject instead of all?
| AgentReference, | ||
| CreateResponse, | ||
| ) | ||
| from ..models import _generated as _generated_models |
There was a problem hiding this comment.
same here. only import necessary ones instead of all?
Description
Reduce repeated work in the AgentServer Responses and Invocations SDKs while
preserving request isolation, persistence ordering, validation, replay and
awaited telemetry completion.
Changes
it before final HTTP completion.
importing the host does not eagerly construct the entire model catalog.
without taking ownership of independent stored/background producers.
Current upstream versions, dependencies, session-GUID handling and new model
contracts are retained. No Core changes, native-curl image changes, server
changes or fire-and-forget telemetry behavior are included.
Performance highlights
The benchmarked cumulative SDK candidate improved warm Responses latency
against the released SDK baseline:
Both variants used the same hosted Echo application and runtime/dependency
configuration apart from the SDK packages, a colocated UK South client,
concurrency 25 and at least 2,000 successful samples per protocol/phase.
Neither image included native curl.
Cycle-block bootstrap 95% intervals support the observed warm reductions:
TTFB 351.8-469.9 ms, TTLB 125.1-253.5 ms.
These measurements describe the tested candidate on released SDK versions.
This PR ports the same optimization intent onto current
main; the exactported head has not been re-benchmarked. Results are aggregate, not isolated
attribution to individual changes. Full benchmark context is provided in a
separate review note.
Validation
tests and 126 Invocations tests passed.
current main with no differences.
and scoped formatting checks passed.
orchestration finalization, flush and request return; stored producer behavior
is covered separately.
remain for review/CI; this PR is intentionally opened as a draft.
Review guide
The 53-file diff includes four generated model files. Most line volume is
mechanical generator output; review the generator and runtime changes separately
from their generated output. Tests and changelogs are included. This keeps the
requested cumulative change set together for review; no release is implied.
Contribution checklist