adk-go icon indicating copy to clipboard operation
adk-go copied to clipboard

Filter function calls

Open cs168898 opened this issue 4 weeks ago • 1 comments

Filter Function Calls

Developers using ADK-go can now add filters when they create a new LLM agent as such:

	agent, err := llmagent.New(llmagent.Config{
		Name:        "agent",
		Description: "math agent",
		Model:       model,
		Instruction: "only use the tools provided to output results",
		// TODO(hakim): set to false when autoflow is implemented.
		DisallowTransferToParent: true,
		DisallowTransferToPeers:  true,
		Tools:                    []tool.Tool{sumTool},
		Filter:                   map[string]bool{sumTool.Name(): false},  <================ Added filter field
	})

The Filter field accepts a map where the Key is the tool's name and the Value is a boolean on whether the tool is allowed or not. True = Tool is allowed. False = Tool is NOT allowed.

  • Added Filter field to the Config struct.
  • Added filter field to the State struct.
  • Implemented filter logic in base_flow.go
  • Added tests for testing if filtered tools are still called.

Notes

I have decided to start on developer declared filter first as the use cases can include tool prohibition based on user roles. For example, if a user has no premium access account, developers could create a conditional check and initialize the agent without access to specific tools. The current implementation will impose a permanent tool filter on all requests after agent initialization, meaning we cannot change the filter once the agent has been initialized.

TODO

  • Implement filter changes per request.
  • Agent defined filters to pass to sub-agents.

This PR references this Issue

cs168898 avatar Dec 02 '25 13:12 cs168898

Summary of Changes

Hello @cs168898, I'm Gemini Code Assist[^1]! 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 introduces a significant enhancement to the LLM agent configuration by allowing developers to define a static filter for tools. This feature enables fine-grained control over an agent's capabilities, supporting scenarios such as restricting tool access based on user roles or premium features. The filtering is applied during agent initialization, providing a clear mechanism to manage tool availability.

Highlights

  • New Filter Field: A new Filter field (map[string]bool) has been added to the llmagent.Config and internal/llminternal.State structs, allowing explicit control over which tools an LLM agent can use.
  • Tool Filtering Logic: The core logic for filtering tools has been implemented in internal/llminternal/base_flow.go, ensuring that only allowed tools are presented to the LLM agent during processing.
  • New Test Case: A new test, TestToolFiltering, has been added to llmagent_test.go to verify that tools marked as disallowed in the filter are indeed not invoked by the agent.
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 by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

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 pull request 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 :thumbsup: and :thumbsdown: 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.

[^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.

gemini-code-assist[bot] avatar Dec 02 '25 13:12 gemini-code-assist[bot]