-
-
Notifications
You must be signed in to change notification settings - Fork 5k
[Feat] A2a Gateway - allow using bedrock agentcore, langgraph agents with A2a Gateway #17786
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
| if "thread_id" in optional_params: | ||
| payload["thread_id"] = optional_params["thread_id"] | ||
|
|
||
| verbose_logger.debug(f"LangGraph request payload: {payload}") |
Check failure
Code scanning / CodeQL
Clear-text logging of sensitive information High
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expressi
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 1 day ago
To fix this issue, we must avoid logging sensitive fields (such as any kind of API key, tokens, or likely-secret values) as part of the raw payload. The proper way is to sanitize the payload before logging by removing or masking sensitive information. Specifically, prior to logging, we should create a sanitized copy of the payload dictionary with potentially sensitive fields either removed or replaced with a placeholder (e.g., "***"). This includes, at a minimum, theoretically sensitive standard fields such as "api_key" (if present) and any other field known to possibly contain secrets (e.g., "Authorization", "assistant_id" if it can be secret, or any user-defined metadata/config fields as appropriate). The replacement should only apply to the logger call, returning the original payload object normally.
Edits should occur directly in the transform_request method (around line 220) in litellm/llms/langgraph/chat/transformation.py, possibly adding a small utility method in this file for clarity if multiple log sanitizations are needed, or just inlining it for one-off use. This change does not require new imports or definitions from outside the provided snippet.
-
Copy modified lines R220-R225
| @@ -217,7 +217,12 @@ | ||
| if "thread_id" in optional_params: | ||
| payload["thread_id"] = optional_params["thread_id"] | ||
|
|
||
| verbose_logger.debug(f"LangGraph request payload: {payload}") | ||
| # Sanitize payload before logging to avoid leaking secrets | ||
| sanitized_payload = dict(payload) | ||
| for sensitive_field in ["api_key", "Authorization", "assistant_id"]: | ||
| if sensitive_field in sanitized_payload: | ||
| sanitized_payload[sensitive_field] = "***" | ||
| verbose_logger.debug(f"LangGraph request payload: {sanitized_payload}") | ||
| return payload | ||
|
|
||
| def _extract_content_from_response(self, response_json: dict) -> str: |
| if client is None or not isinstance(client, HTTPHandler): | ||
| client = _get_httpx_client(params={}) | ||
|
|
||
| verbose_logger.debug(f"Making sync streaming request to: {api_base}") |
Check failure
Code scanning / CodeQL
Clear-text logging of sensitive information High
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression log
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 1 day ago
To resolve the issue, avoid logging sensitive data (such as API endpoints that could include credentials or secrets) as clear text.
- General approach: Never log full endpoints or URL values which could, in some deployments, contain sensitive query string parameters, credentials, tokens, or keys.
- Best practice: If you need to log requests for debugging purposes, you should sanitize any user/configuration-derived values before logging, or alternatively, omit these values from logs altogether.
- Specific fix for this code:
- In
litellm/llms/langgraph/chat/transformation.py, within theget_sync_custom_stream_wrappermethod, remove or sanitize theverbose_logger.debug(f"Making sync streaming request to: {api_base}")logging statement. - If you still want to log activity for observability, replace it with a generic message, e.g., "Making sync streaming request," without exposing the endpoint.
- No new methods or complex imports are required; only edit the logging statement.
- In
-
Copy modified line R296
| @@ -293,7 +293,7 @@ | ||
| if client is None or not isinstance(client, HTTPHandler): | ||
| client = _get_httpx_client(params={}) | ||
|
|
||
| verbose_logger.debug(f"Making sync streaming request to: {api_base}") | ||
| verbose_logger.debug("Making sync streaming request.") | ||
|
|
||
| # Make streaming request | ||
| response = client.post( |
| llm_provider=cast(Any, "langgraph"), params={} | ||
| ) | ||
|
|
||
| verbose_logger.debug(f"Making async streaming request to: {api_base}") |
Check failure
Code scanning / CodeQL
Clear-text logging of sensitive information High
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression logs
sensitive data (secret)
This expression logs
sensitive data (password)
This expression log
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 1 day ago
To remediate this vulnerability, we should avoid logging the complete api_base value, as it may contain embedded secrets or sensitive keys. Instead, log only generic information, or completely omit logging sensitive connection endpoints. In this context, replacing:
verbose_logger.debug(f"Making async streaming request to: {api_base}")with:
verbose_logger.debug("Making async streaming request to LangGraph endpoint.")or, at most, logging only the scheme and domain (i.e. stripping path and query). This guarantees sensitive information is not printed.
Make the same change for similar sync handler (line 296), for complete coverage.
No new imports are needed, and existing logger usage remains unchanged. Only the log statement context string needs to be changed.
-
Copy modified line R296 -
Copy modified line R361
| @@ -293,7 +293,7 @@ | ||
| if client is None or not isinstance(client, HTTPHandler): | ||
| client = _get_httpx_client(params={}) | ||
|
|
||
| verbose_logger.debug(f"Making sync streaming request to: {api_base}") | ||
| verbose_logger.debug("Making sync streaming request to LangGraph endpoint.") | ||
|
|
||
| # Make streaming request | ||
| response = client.post( | ||
| @@ -358,7 +358,7 @@ | ||
| llm_provider=cast(Any, "langgraph"), params={} | ||
| ) | ||
|
|
||
| verbose_logger.debug(f"Making async streaming request to: {api_base}") | ||
| verbose_logger.debug("Making async streaming request to LangGraph endpoint.") | ||
|
|
||
| # Make async streaming request | ||
| response = await client.post( |
[Feat] A2a Gateway - allow using bedrock agentcore, langgraph agents with A2a Gateway
Relevant issues
Pre-Submission checklist
Please complete all items before asking a LiteLLM maintainer to review your PR
tests/litellm/directory, Adding at least 1 test is a hard requirement - see detailsmake test-unitType
🆕 New Feature
✅ Test
Changes