6462ab9
feat(openai): add web search tool support for Responses API (#173)
Click to expand commit body
Add OpenAI web search as a provider-defined tool, mirroring the
Anthropic web search implementation pattern.
New files:
- providers/openai/web_search.go: WebSearchTool() helper with
SearchContextSize, AllowedDomains, and UserLocation options.
- examples/openai-web-search/main.go: Example using the agent
pattern with web search.
Changes to existing files:
- responses_options.go: WebSearchCallMetadata, WebSearchAction,
and WebSearchSource types registered for JSON round-tripping.
- responses_language_model.go:
- toResponsesTools(): Route ProviderDefinedTool web_search to
the OpenAI SDK WebSearchToolParam.
- Generate(): Emit ToolCallContent + ToolResultContent pair for
web_search_call output items. Source citations come from
url_citation annotations on message text.
- Stream(): Emit ToolInputStart/ToolInputEnd/ToolCall/ToolResult
lifecycle events for web_search_call items.
- toResponsesPrompt(): Round-trip provider-executed tool calls
via item_reference; skip SourceContent and provider-executed
ToolResultPart (already handled by the reference).
- providertests/provider_registry_test.go: Add metadata test case.
df8bcd9
chore(deps): bump the all group with 4 updates (#171)
Click to expand commit body
Bumps the all group with 4 updates: [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/openai/openai-go/v3](https://github.com/openai/openai-go) and [google.golang.org/genai](https://github.com/googleapis/go-genai).
Updates `github.com/aws/aws-sdk-go-v2` from 1.41.3 to 1.41.4
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.41.3...v1.41.4)
Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.11 to 1.32.12
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.11...config/v1.32.12)
Updates `github.com/openai/openai-go/v3` from 3.26.0 to 3.28.0
- [Release notes](https://github.com/openai/openai-go/releases)
- [Changelog](https://github.com/openai/openai-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/openai/openai-go/compare/v3.26.0...v3.28.0)
Updates `google.golang.org/genai` from 1.49.0 to 1.50.0
- [Release notes](https://github.com/googleapis/go-genai/releases)
- [Changelog](https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md)
- [Commits](https://github.com/googleapis/go-genai/compare/v1.49.0...v1.50.0)
---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2
dependency-version: 1.41.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: all
- dependency-name: github.com/aws/aws-sdk-go-v2/config
dependency-version: 1.32.12
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: all
- dependency-name: github.com/openai/openai-go/v3
dependency-version: 3.28.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: all
- dependency-name: google.golang.org/genai
dependency-version: 1.50.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: all
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
dependabot[bot]
and
dependabot[bot]
created
eaa111e
chore(anthroipic): harden web_search coercion for json round-trips
Click to expand commit body
This guards against cases when web_search options could be silently
dropped when tool args pass through generic/JSON-shaped data, so domain
filters, max uses, and user location reliably reach Anthropic.
caf105e
test: re-record almost all fixtures (#167)
Andrey Nering
created
38eb77b
feat: add Anthropic web search tool support (server_tool_use + web_search_tool_result)
Click to expand commit body
- Handle ProviderDefinedTool with ID "web_search" in toTools(), mapping to
anthropic.WebSearchTool20250305Param with optional allowed/blocked domains
- Parse "server_tool_use" blocks in Generate() and Stream(), producing
ToolCallContent with ProviderExecuted=true
- Parse "web_search_tool_result" blocks, extracting SourceContent for each
search result and a ToolResultContent summary
- Stream server_tool_use via ToolInputStart/ToolInputEnd/ToolCall events
- Stream web_search_tool_result via Source events for each result item
- Skip provider-executed tool results and source content when building
Anthropic prompts (toPrompt) to avoid sending unrecognized block types
- Add ProviderExecuted field to ToolResultPart with JSON marshal/unmarshal
- Propagate ProviderExecuted from ToolResultContent to ToolResultPart in
agent's toResponseMessages()
a3b8a69
fix(openrouter): preserve anthropic reasoning signature in streaming
Click to expand commit body
Anthropic sends the reasoning signature chunk after tool_calls have
started. The streaming hook was ending reasoning prematurely on the
first tool_call chunk, so the late-arriving signature was lost. Track
the reasoning format and defer ending for anthropic streams until the
signature arrives. Also fix the agent stream assembler to not overwrite
provider metadata with nil on reasoning deltas.
💘 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Andrey Nering
created
152acfe
fix: guard against nil EncryptedContent dereference in reasoning details
Click to expand commit body
Reasoning metadata can exist without encrypted content, causing a nil
pointer panic when building prompt messages for openrouter and vercel.
💘 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
This change to be better follow the convention:
* App name should not have spaces: `Charm Fantasy` -> `Charm-Fantasy`.
* Add comment `()` with app site.
Andrey Nering
created
e8560e6
fix(openai): use noDefaultUserAgent in all responses API calls
Click to expand commit body
💘 Generated with Crush
Assisted-by: Kimi K2.5 via Crush <crush@charm.land>
Christian Rocha
created
522e026
fix(openai): propagate noDefaultUserAgent to responsesLanguageModel
Click to expand commit body
💘 Generated with Crush
Assisted-by: Kimi K2.5 via Crush <crush@charm.land>
OpenRouter rejects API calls using a custom User Agent. This workaround
skips OpenRouter when setting a user agent.
Note that we've added two new methods accordingly, as OpenRouter uses
the openai package:
openai.WithSkipUserAgent()
openai.WithLanguageModelSkipUserAgent()
4e71eb6
test: unify gemini 2 and gemini 3 thinking tests
Andrey Nering
created
bd6d47d
feat(google): add ThinkingLevel support for Gemini 3+ models
Click to expand commit body
Gemini 3+ uses thinking_level (LOW/MEDIUM/HIGH/MINIMAL) instead of
thinking_budget. The two are mutually exclusive per Google's API.
Maps to genai.ThinkingConfig.ThinkingLevel already available in v1.45.0.
b802c67
chore: update anthropic-sdk-go from our fork (#148)
Click to expand commit body
The `fantasy` branch was updated from upstream.
See:
* https://github.com/charmbracelet/anthropic-sdk-go/pull/1
* https://github.com/charmbracelet/fantasy/pull/147
Andrey Nering
created
7d7c4b3
chore(deps): bump the all group with 3 updates (#146)
Click to expand commit body
Bumps the all group with 3 updates: [github.com/ardanlabs/kronk](https://github.com/ardanlabs/kronk), [github.com/aws/smithy-go](https://github.com/aws/smithy-go) and [github.com/kaptinlin/jsonschema](https://github.com/kaptinlin/jsonschema).
Updates `github.com/ardanlabs/kronk` from 1.19.2 to 1.19.6
- [Release notes](https://github.com/ardanlabs/kronk/releases)
- [Commits](https://github.com/ardanlabs/kronk/compare/v1.19.2...v1.19.6)
Updates `github.com/aws/smithy-go` from 1.24.0 to 1.24.1
- [Release notes](https://github.com/aws/smithy-go/releases)
- [Changelog](https://github.com/aws/smithy-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws/smithy-go/compare/v1.24.0...v1.24.1)
Updates `github.com/kaptinlin/jsonschema` from 0.7.2 to 0.7.3
- [Commits](https://github.com/kaptinlin/jsonschema/compare/v0.7.2...v0.7.3)
---
updated-dependencies:
- dependency-name: github.com/ardanlabs/kronk
dependency-version: 1.19.6
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: all
- dependency-name: github.com/aws/smithy-go
dependency-version: 1.24.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: all
- dependency-name: github.com/kaptinlin/jsonschema
dependency-version: 0.7.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: all
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>