fix(a2a): Support instruction providers in cards - #6451
Conversation
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
|
Hi @March-77 , Thank you for your contribution! It appears you haven't yet signed the Contributor License Agreement (CLA). Please visit https://cla.developers.google.com/ to complete the signing process. Once the CLA is signed, we'll be able to proceed with the review of your PR. Thank you! |
1157b06 to
cf8d1e1
Compare
|
Hi @March-77 , Thank you for your contribution! We appreciate you taking the time to submit this pull request. Your PR has been received by the team and is currently under review. We will provide feedback as soon as we have an update to share. |
|
Hi @wukath , can you please review this. LGTM |
Agent cards are static and have no ReadonlyContext, so passing callable instructions into description or example regexes crashes card generation. Include only static strings and leave runtime providers unexecuted. Fixes google#6450
cf8d1e1 to
d8d24c5
Compare
|
Thanks for the review! I rebased this PR onto the latest main to address the unrelated mypy baseline drift. The functional patch is unchanged (range-diff is identical), and the PR still contains the same single commit touching the same two files. The related tests still pass locally. The new workflow run is currently awaiting maintainer approval. |
Link to Issue or Description of Change
1. Link to an existing issue (if applicable):
Problem:
LlmAgent.instructionandglobal_instructionmay be runtimeInstructionProvidercallables, but the static Agent Card builder passed them to string regexes for description and example extraction. Card generation therefore failed before the A2A agent could start.Solution:
Only include string instructions in static card descriptions and examples. Providers require a real
ReadonlyContext, so card generation leaves them unexecuted while preserving the agent description, default description, and existing string-instruction behavior.Testing Plan
Unit Tests:
Passed:
pytest tests/unittests/a2a/utils -q: 110 passed, 2 skippeduv build: sdist and wheel built successfullyThe repository-wide Windows run reached 9,059 passed, 66 skipped, and 18 xfailed; 40 unrelated tests failed on Windows path-length, shell, line-ending, and filesystem integration assumptions. The changed A2A suite is fully green. The pre-commit
check-new-py-prefixwrapper also expects/bin/bashand cannot launch natively on Windows; no files were added, and the script passes when invoked directly with Git Bash.Manual End-to-End (E2E) Tests:
Ran the issue's public
LlmAgent+AgentCardBuilder.build()flow with an instruction provider. Before the change it raisedRuntimeErrorwrappingTypeError; after the change it returns a card without invoking the provider.Checklist
Additional context
The Agent Card is static and has no session or invocation context. Skipping runtime providers avoids executing user code with fabricated context and avoids exposing context-dependent instructions in card metadata.