Commit 2565e70
authored
feat(google): add support for image search, replace obsolete google_search_retrieval implementation (#12926)
## Background
Google introduced image search to their API, which can be used for
grounding when generating images (e.g. with
`gemini-3.1-flash-image-preview`):
https://ai.google.dev/gemini-api/docs/image-generation#image-search
In the current AI SDK implementation, the `googleSearch` tool had `mode`
and `dynamicThreshold` parameters, which were actually from the
`google_search_retrieval` tool that Google defines, which only worked
with Gemini 1.5 models. Since those models are retired and can no longer
be accessed, these parameters were effectively dead code — silently
ignored for all Gemini 2.0+ models. Meanwhile, the current Google Search
API supports new capabilities (`searchTypes` for image search,
`timeRangeFilter`) that the SDK didn't support.
## Summary
Replaces the obsolete `google_search_retrieval` code paths with support
for the current `googleSearch` API parameters:
- **`searchTypes`**: Enables web and/or image search grounding (e.g. `{
imageSearch: {} }`)
- **`timeRangeFilter`**: Restricts search results to a time range via
`startTime`/`endTime`
The `googleSearchRetrieval` logic and `supportsDynamicRetrieval`
variable are removed entirely. Since they were impossible to use in
practice, this is effectively not a breaking change (because such code
would already be broken).
The grounding metadata schema and source extraction are extended to
handle `image` grounding chunks (with `sourceUri`, `imageUri`, `title`,
`domain`), enabling proper source attribution for image search results.
## Manual Verification
Ran the new examples against the Google API:
- `examples/ai-functions/src/generate-text/google/search-types.ts` —
verified `searchTypes` and `timeRangeFilter` pass through correctly
- `examples/ai-functions/src/generate-text/google/image-search.ts` —
verified image search grounding returns image results with proper source
attribution
- `examples/ai-functions/src/stream-text/google/search-types.ts` —
verified streaming with search types
- `examples/ai-functions/src/stream-text/google/image-search.ts` —
verified streaming image search
## Checklist
- [x] Tests have been added / updated (for bug fixes / features)
- [x] Documentation has been added / updated (for bug fixes / features)
- [x] A _patch_ changeset for relevant packages has been added (for bug
fixes / features - run `pnpm changeset` in the project root)
- [x] I have reviewed this pull request (self-review)
## Future Work
Consider adding a dedicated source type in v7 to include both `imageUri`
and `sourceUri` separately for image grounding chunks. In the PR
implementation, we cannot surface both because our spec does not support
it.1 parent 3884335 commit 2565e70
File tree
11 files changed
+502
-138
lines changed- .changeset
- content/providers/01-ai-sdk-providers
- examples/ai-functions/src
- generate-text/google
- stream-text/google
- packages/google/src
- tool
11 files changed
+502
-138
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
Lines changed: 22 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
505 | 505 | | |
506 | 506 | | |
507 | 507 | | |
508 | | - | |
509 | | - | |
510 | | - | |
| 508 | + | |
| 509 | + | |
511 | 510 | | |
512 | 511 | | |
513 | 512 | | |
| |||
535 | 534 | | |
536 | 535 | | |
537 | 536 | | |
538 | | - | |
| 537 | + | |
539 | 538 | | |
540 | | - | |
| 539 | + | |
541 | 540 | | |
542 | | - | |
543 | | - | |
| 541 | + | |
| 542 | + | |
544 | 543 | | |
545 | | - | |
| 544 | + | |
546 | 545 | | |
547 | | - | |
| 546 | + | |
548 | 547 | | |
549 | | - | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
550 | 562 | | |
551 | 563 | | |
552 | 564 | | |
| |||
Lines changed: 44 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
Lines changed: 34 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
Lines changed: 62 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
Lines changed: 47 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
0 commit comments