Skip to content

Conversation

condorcet
Copy link
Contributor

Closes #787

The OpenAPI tool has been ported to the httpx client to make requests truly asynchronous.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @condorcet, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the OpenAPI tool's performance and responsiveness by introducing true asynchronous capabilities. By switching to an httpx-based client, the tool can now handle network I/O in a non-blocking manner, which is crucial for applications requiring high concurrency or integration with asyncio event loops.

Highlights

  • Asynchronous Operations: The OpenAPI tool has been refactored to support true asynchronous operations by migrating its underlying HTTP client from requests to httpx.
  • Dependency Update: The httpx library has been added as a new dependency to enable asynchronous HTTP requests.
  • Code Modernization: Existing synchronous HTTP calls and error handling within the OpenAPI tool's authentication helpers and REST API parser have been updated to use httpx's asynchronous methods and exception types.
  • Testing Alignment: Unit tests for the OpenAPI tool's authentication and REST API components have been updated to correctly mock httpx calls and exceptions, ensuring test coverage for the new asynchronous implementation.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@adk-bot
Copy link
Collaborator

adk-bot commented Sep 7, 2025

Response from ADK Triaging Agent

Hello @condorcet, thank you for creating this PR!

To help reviewers better understand and test your changes, could you please add a testing plan section to your PR description? You can find more details in our contribution guidelines.

Thanks!

@adk-bot adk-bot added bot triaged [Bot] This issue is triaged by ADK bot tools [Component] This issue is related to tools labels Sep 7, 2025
@adk-bot adk-bot requested a review from seanzhou1023 September 7, 2025 21:09
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request successfully ports the OpenAPI tool to use httpx for asynchronous requests, replacing the requests library. The changes are well-implemented, making the tool's call method asynchronous. I have a few suggestions to further improve the code by removing an unused import, simplifying a new helper function, and refining exception handling for better clarity and conciseness.

Comment on lines 297 to 300
except (httpx.HTTPStatusError, httpx.RequestError) as e:
raise ValueError(
f"Failed to fetch OpenID configuration from {openid_url}: {e}"
) from e

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

httpx.HTTPStatusError is a subclass of httpx.RequestError, so catching just httpx.RequestError is sufficient to handle both status code errors and other request-related errors. This simplifies the code.

Please also update the docstring on lines 290-291 accordingly to only mention httpx.RequestError.

Suggested change
except (httpx.HTTPStatusError, httpx.RequestError) as e:
raise ValueError(
f"Failed to fetch OpenID configuration from {openid_url}: {e}"
) from e
except httpx.RequestError as e:
raise ValueError(
f"Failed to fetch OpenID configuration from {openid_url}: {e}"
) from e

@@ -22,9 +22,10 @@
from typing import Tuple
from typing import Union

import requests

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The requests library is imported but appears to be unused in this file after the changes. It should be removed to keep the code clean.

Comment on lines +433 to +434
async def _request(**request_params) -> httpx.Response:
async with httpx.AsyncClient() as client:
return await client.request(**request_params)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The _request helper function can be simplified. For making a single request, using the top-level httpx.request() function is more concise. It handles the client creation and cleanup internally, just like using async with httpx.AsyncClient(), but with less code.

Suggested change
async def _request(**request_params) -> httpx.Response:
async with httpx.AsyncClient() as client:
return await client.request(**request_params)
async def _request(**request_params) -> httpx.Response:
# `httpx.request` is more concise for a single request.
return await httpx.request(**request_params)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure about this, because httpx.request is synchronous

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bot triaged [Bot] This issue is triaged by ADK bot tools [Component] This issue is related to tools
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support Async call for RestAPITool
2 participants