## Problem
Users attempting to filter results in a SQL query based on an array
parameter from a tool may intuitively write a `statement` using the `IN`
clause, like so:
```sql
SELECT * FROM flights WHERE preferred_airlines IN ($1);
```
When this query is executed with an array argument (e.g., `["Delta",
"United"]`), it fails with a cryptic error message from the database
driver:
```
Exception: error while invoking tool: unable to execute query: failed to encode args[0]: unable to encode []interface {}{"Delta", "United"} into text format for text (OID 25): cannot find encode plan
```
This error occurs because the driver does not automatically expand the
single `$1` placeholder into a list of values `('Delta', 'United')`.
Instead, it tries to encode the entire Go slice `[]interface{}` as a
single text value, which fails. This creates a point of friction, as the
correct syntax is not immediately obvious and can lead to user
frustration and debugging time.
## Solution
This PR updates our documentation and example usage to demonstrate the
correct SQL syntax for handling array parameters. The proper way to
check for a value's existence in an array parameter is by using
PostgreSQL's `ANY()` operator:
```sql
SELECT * FROM flights WHERE preferred_airlines = ANY($1);
```
When this syntax is used, the database driver correctly interprets the
Go slice passed as `$1` as a PostgreSQL array, and the query executes as
intended.
## Impact
Saves developers time they would otherwise spend troubleshooting a
non-obvious database driver behavior.
Add a `default` field to parameters, that enables users to specify a
default value.
e.g.
```
parameters:
- name: name
type: string
default: "some-default-value"
description: The name of the hotel.
```
if this parameter is invoked without specifying `name`, the parameter
would default to "some-default-value"
For parameter manifest, there will be an additional `Required` field.
The default `Required` field is true. If a `default` value is presented,
`Required: false`. Array parameter's item's `Required` field will
inherit the array's `Required` field.
Fixes#475
## Description
This PR enhances our documentation by integrating `toolbox-core` code
snippets into the quickstart examples on the docsite.
## Context
Previously, our client-facing documentation primarily showcased agent
implementations using third-party frameworks like LangChain, LlamaIndex,
and ADK. This created a documentation gap, as there were no baseline
examples demonstrating how to use our foundational `toolbox-core` SDK
directly. Users who wanted to build a custom integration without a
specific framework had no direct reference in the guides.
## Changes
This PR introduces a new "Core" tab to all relevant code examples within
the auth services and local quickstart (with BigQuery) documentations.
---------
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
`ToolboxTool` has been removed from `google-adk` package in
11ca528090
Instead `toolbox-core` should be used directly to remove the need for a
dependency on `toolbox-langchain` and `langchain`.
The new recommendation is to install `toolbox-core`.
```shell
pip install toolbox-core
```
And then load toolbox tools directly and pass it to the ADK agent.
```python
from google.adk.agents import Agent
# NEW IMPORT
from toolbox_core import ToolboxSyncClient
# Full control over MCP Toolbox
toolbox_client = ToolboxSyncClient("http://127.0.0.1:5000")
toolbox_tools = toolbox_client.load_toolset("my-toolset")
root_agent = Agent(
model="gemini-2.0-flash",
name="root_agent",
instruction=agent_instruction,
# Add Toolbox tools to ADK agent
tools=toolbox_tools,
)
```
This tool can be used across spanner sources.
`spanner-execute-sql` config is as below:
```
tools:
spanner_execute_sql_tool:
kind: "spanner-execute-sql"
source: my-spanner-source
description: Use this tool to execute sql.
```
The `spanner-execute-sql` tool takes one parameter. Example request as
follow:
```
curl -X POST -H "Content-Type: application/json" -d '{"sql": "SELECT 1"}' http://127.0.0.1:5000/api/tool/spanner_execute_sql_tool/invoke
```
---------
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
This tool can be used across mysql sources.
`mysql-execute-sql` config is as below:
```
tools:
mysql_execute_sql_tool:
kind: "mysql-execute-sql"
source: my-mysql-source
description: Use this tool to execute sql.
```
The `mysql-execute-sql` tool takes one parameter. Example request as
follow:
```
curl -X POST -H "Content-Type: application/json" -d '{"sql": "SELECT 1"}' http://127.0.0.1:5000/api/tool/mysql_execute_sql_tool/invoke
```
Allowing user to add `readOnly` field in spanner tools.
The existing tool doesn't work for reading schema tables since schema
tables can only be accessed through read-only transaction.
This PR also resolve#435 for Spanner tool.
---------
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
Fix for #517
This PR improves the Local Quickstart guide by adding troubleshooting
advice for common PostgreSQL connection issues in [step
1](https://googleapis.github.io/genai-toolbox/getting-started/local_quickstart/#step-1-set-up-your-database).
This reduces friction and improves the setup experience for users
following the local quickstart by addressing feedback in #517 regarding
difficulties in the initial database connection step.
### Problem
Users faced issues like password prompts or "role 'postgres' does not
exist" errors when trying to connect to PostgreSQL with `psql -h
127.0.0.1 -U postgres`.
### Solution
This PR adds a notice that provides solutions for common connection
errors, including guidance on using `sudo -i -u postgres` for peer
authentication.
---------
Co-authored-by: Averi Kitsch <akitsch@google.com>