Skip to content

Codex/function tool cache v1 - #7211

Open
joshi-07 wants to merge 1 commit into
google:v1from
joshi-07:codex/function-tool-cache-v1
Open

joshi-07 wants to merge 1 commit into
google:v1from
joshi-07:codex/function-tool-cache-v1

Conversation

@joshi-07

@joshi-07 joshi-07 commented Sep 19, 2026

Copy link
Copy Markdown

Please ensure you have read the contribution guide before creating a pull request.

Link to Issue or Description of Change

1. Link to an existing issue (if applicable):

  • Closes: #issue_number
  • Related: #issue_number

2. Or, if no issue exists, describe the change:

If applicable, please follow the issue templates to provide as much detail as
possible.

Problem:
A clear and concise description of what the problem is.

Solution:
A clear and concise description of what you want to happen and why you choose
this solution.

Testing Plan

Please describe the tests that you ran to verify your changes. This is required
for all PRs that are not small documentation or typo fixes.

Unit Tests:

  • I have added or updated unit tests for my change.
  • All unit tests pass locally.

Please include a summary of passed pytest results.

Manual End-to-End (E2E) Tests:

Please provide instructions on how to manually test your changes, including any
necessary setup or configuration. Please provide logs or screenshots to help
reviewers better understand the fix.

Checklist

  • I have read the CONTRIBUTING.md document.
  • I have performed a self-review of my own code.
  • I have commented my code, particularly in hard-to-understand areas.
  • I have added tests that prove my fix is effective or that my feature works.
  • New and existing unit tests pass locally with my changes.
  • I have manually tested my changes end-to-end.
  • Any dependent changes have been merged and published in downstream modules.

Additional context

Add any other context or screenshots about the feature request here.

@joshi-07
joshi-07 changed the base branch from main to v1 September 19, 2026 10:03
FunctionTool._get_declaration ran pydantic create_model + JSON-schema
generation for every tool on every LLM step, even though the result is fixed
once the tool is constructed. Memoize the build keyed by (func, ignored
params, API variant, feature flag) and return a copy so callers (e.g. toolset
prefixing) can still mutate the result.

The cache is module-level rather than per-instance because a bare callable in
LlmAgent.tools is re-wrapped into a fresh FunctionTool on every step, which
defeats an instance cache for exactly the callers this costs the most.

Co-authored-by: George Weale <gweale@google.com>
PiperOrigin-RevId: 955481497
(cherry picked from commit 57f3af2)
@joshi-07
joshi-07 force-pushed the codex/function-tool-cache-v1 branch from fc2f6ff to e8501cd Compare September 19, 2026 10:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants