caf105e
test: re-record almost all fixtures (#167)
Andrey Nering created
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)
- 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()
Kyle Carberry created
fa02069
v0.12.2
Andrey Nering created
7ebd9b5
test: re-record all openrouter fixtures
Andrey Nering created
a3b8a69
fix(openrouter): preserve anthropic reasoning signature in streaming
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
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>
Andrey Nering created
50a1116
fix: improve default user-agent string
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
💘 Generated with Crush Assisted-by: Kimi K2.5 via Crush <crush@charm.land>
Christian Rocha created
522e026
fix(openai): propagate noDefaultUserAgent to responsesLanguageModel
💘 Generated with Crush Assisted-by: Kimi K2.5 via Crush <crush@charm.land>
Christian Rocha created
2e29858
fix(openrouter): avoid brittle User-Agent assertion
💘 Generated with Crush Assisted-by: Kimi K2.5 via Crush <crush@charm.land>
Christian Rocha created
182ba5f
docs(openai): correct grammar in comment
💘 Generated with Crush Assisted-by: Kimi K2.5 via Crush <crush@charm.land>
Christian Rocha created
96f0454
fix(openai): don't mutate shared languageModelOptions
💘 Generated with Crush Assisted-by: Kimi K2.5 via Crush <crush@charm.land>
Christian Rocha created
7dc3888
fix(openrouter): don't set User-Agent
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()
Christian Rocha created
04950be
v0.12.1
Andrey Nering created
5d76d7d
chore(examples): go mod tidy
Andrey Nering created
d9de5db
fix(errors): improve check for when to retry requests (#164)
* Follow OpenAI's Go SDK. * Check status code >= 500. * Check `x-should-retry` header. Co-authored-by: yuguorui <yuguorui@pku.edu.cn>
Andrey Nering and yuguorui created
b137f01
chore(deps): bump the all group across 1 directory with 4 updates (#162)
Bumps the all group with 4 updates in the / directory: [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), [golang.org/x/oauth2](https://github.com/golang/oauth2) and [google.golang.org/genai](https://github.com/googleapis/go-genai). Updates `github.com/aws/aws-sdk-go-v2` from 1.41.2 to 1.41.3 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.41.2...v1.41.3) Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.10 to 1.32.11 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.10...config/v1.32.11) Updates `golang.org/x/oauth2` from 0.35.0 to 0.36.0 - [Commits](https://github.com/golang/oauth2/compare/v0.35.0...v0.36.0) Updates `google.golang.org/genai` from 1.48.0 to 1.49.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.48.0...v1.49.0) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go-v2 dependency-version: 1.41.3 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.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: golang.org/x/oauth2 dependency-version: 0.36.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: google.golang.org/genai dependency-version: 1.49.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
13ad470
ci(dependabot): update kronk in a separate group
Andrey Nering created
ae2e22e
ci: fix govulncheck by updating go version (#161)
Andrey Nering created
422f954
v0.12.0
Andrey Nering created
1b0027b
feat: configurable user-agent (#152)
Note that the user agent defaults to Charm Fantasy/<version>, which means we need to maintain a const for the version number.
Christian Rocha created
0806f24
chore(deps): go mod tidy examples (#159)
Christian Rocha created
fb3643d
v0.11.1
Andrey Nering created
4747a08
chore: add support for gpt 5.4 (#158)
Andrey Nering created
0a0ed20
chore(deps): bump the all group with 3 updates (#155)
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.20.3 to 1.20.8 - [Release notes](https://github.com/ardanlabs/kronk/releases) - [Commits](https://github.com/ardanlabs/kronk/compare/v1.20.3...v1.20.8) Updates `github.com/aws/smithy-go` from 1.24.1 to 1.24.2 - [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.1...v1.24.2) Updates `github.com/kaptinlin/jsonschema` from 0.7.3 to 0.7.5 - [Commits](https://github.com/kaptinlin/jsonschema/compare/v0.7.3...v0.7.5) --- updated-dependencies: - dependency-name: github.com/ardanlabs/kronk dependency-version: 1.20.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/aws/smithy-go dependency-version: 1.24.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/kaptinlin/jsonschema dependency-version: 0.7.5 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>
dependabot[bot] and dependabot[bot] created
8d2ec4f
chore(deps): bump github.com/ardanlabs/kronk in the all group (#153)
Bumps the all group with 1 update: [github.com/ardanlabs/kronk](https://github.com/ardanlabs/kronk). Updates `github.com/ardanlabs/kronk` from 1.20.1 to 1.20.3 - [Release notes](https://github.com/ardanlabs/kronk/releases) - [Commits](https://github.com/ardanlabs/kronk/compare/v1.20.1...v1.20.3) --- updated-dependencies: - dependency-name: github.com/ardanlabs/kronk dependency-version: 1.20.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>
dependabot[bot] and dependabot[bot] created
5442a7f
v0.11.0
Andrey Nering created
8f24e95
chore(deps): bump the all group with 4 updates (#150)
Bumps the all group with 4 updates: [github.com/ardanlabs/kronk](https://github.com/ardanlabs/kronk), [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) and [google.golang.org/genai](https://github.com/googleapis/go-genai). Updates `github.com/ardanlabs/kronk` from 1.19.6 to 1.20.1 - [Release notes](https://github.com/ardanlabs/kronk/releases) - [Commits](https://github.com/ardanlabs/kronk/compare/v1.19.6...v1.20.1) Updates `github.com/aws/aws-sdk-go-v2` from 1.41.1 to 1.41.2 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.41.1...v1.41.2) Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.9 to 1.32.10 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.9...config/v1.32.10) Updates `google.golang.org/genai` from 1.47.0 to 1.48.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.47.0...v1.48.0) --- updated-dependencies: - dependency-name: github.com/ardanlabs/kronk dependency-version: 1.20.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: github.com/aws/aws-sdk-go-v2 dependency-version: 1.41.2 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.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: google.golang.org/genai dependency-version: 1.48.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
8a1457c
feat: add support for anthropic thinking effort (#147)
Co-authored-by: Andrey Nering <andreynering@users.noreply.github.com>
Kyle Carberry and Andrey Nering created
26a572c
v0.10.0
Andrey Nering created
cf3151e
lint: fix missing doc comment
Andrey Nering created
4e71eb6
test: unify gemini 2 and gemini 3 thinking tests
Andrey Nering created
bd6d47d
feat(google): add ThinkingLevel support for Gemini 3+ models
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.
Xavier Capaldi created
54b30ae
feat: detect context-too-large errors (#125)
mhpenta created
b802c67
chore: update anthropic-sdk-go from our fork (#148)
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)
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>
dependabot[bot] and dependabot[bot] created
b2eb8d1
v0.9.0
Andrey Nering created
dae536f
chore(deps): bump the all group with 3 updates (#144)
Bumps the all group with 3 updates: [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/kaptinlin/jsonschema](https://github.com/kaptinlin/jsonschema) and [google.golang.org/genai](https://github.com/googleapis/go-genai). Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.7 to 1.32.9 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.32.7...config/v1.32.9) Updates `github.com/kaptinlin/jsonschema` from 0.7.1 to 0.7.2 - [Commits](https://github.com/kaptinlin/jsonschema/compare/v0.7.1...v0.7.2) Updates `google.golang.org/genai` from 1.46.0 to 1.47.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.46.0...v1.47.0) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go-v2/config dependency-version: 1.32.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/kaptinlin/jsonschema dependency-version: 0.7.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: google.golang.org/genai dependency-version: 1.47.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
385607b
chore(deps): bump the all group in /examples with 2 updates (#143)
Bumps the all group in /examples with 2 updates: [github.com/charmbracelet/lipgloss/v2](https://github.com/charmbracelet/lipgloss) and [github.com/charmbracelet/x/term](https://github.com/charmbracelet/x). Updates `github.com/charmbracelet/lipgloss/v2` from 2.0.0-beta.3.0.20250917201909-41ff0bf215ea to 2.0.0-beta1 - [Release notes](https://github.com/charmbracelet/lipgloss/releases) - [Commits](https://github.com/charmbracelet/lipgloss/commits) Updates `github.com/charmbracelet/x/term` from 0.2.1 to 0.2.2 - [Commits](https://github.com/charmbracelet/x/compare/ansi/v0.2.1...ansi/v0.2.2) --- updated-dependencies: - dependency-name: github.com/charmbracelet/lipgloss/v2 dependency-version: 2.0.0-beta1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/charmbracelet/x/term dependency-version: 0.2.2 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>
dependabot[bot] and dependabot[bot] created
121d1a4
ci(dependabot): add `examples/` dir to be updated as well
Andrey Nering created
211a29e
feat: add kronk provider (#142)
Co-authored-by: William Kennedy <bill@ardanlabs.com>
Andrey Nering and William Kennedy created
720e86d
chore(deps): bump the all group with 3 updates (#141)
Bumps the all group with 3 updates: [cloud.google.com/go/auth](https://github.com/googleapis/google-cloud-go), [github.com/kaptinlin/jsonschema](https://github.com/kaptinlin/jsonschema) and [google.golang.org/genai](https://github.com/googleapis/go-genai). Updates `cloud.google.com/go/auth` from 0.18.1 to 0.18.2 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/auth/v0.18.1...auth/v0.18.2) Updates `github.com/kaptinlin/jsonschema` from 0.6.10 to 0.7.1 - [Commits](https://github.com/kaptinlin/jsonschema/compare/v0.6.10...v0.7.1) Updates `google.golang.org/genai` from 1.45.0 to 1.46.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.45.0...v1.46.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/auth dependency-version: 0.18.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/kaptinlin/jsonschema dependency-version: 0.7.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: google.golang.org/genai dependency-version: 1.46.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
ab99ce7
v0.8.1
Andrey Nering created
e1c26df
fix: normalize mcp tool schemas for openai compatibility (#138)
Convert JSON Schema type arrays to `anyOf` and ensure bare array types have items, preventing OpenAI "array schema missing items" errors. Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Andrey Nering created
070c5ec
fix(goreleaser): remove unneeded `npm_key` attribute
This was preventing releases to work trigger on new tags.
Andrey Nering created
b1ed877
v0.8.0
Andrey Nering created
29c0314
chore: fix lint
Andrey Nering created
7e79eab
ci: fix lint on ci
Andrey Nering created
25abf03
refactor: use our `jsonrepair` package and remove external package
Andrey Nering created
a54e123
feat: add `jsonrepair` package
Added `charm.land/jsonrepair` package, to repair malformed JSON output by LLM models. This was written by GPT 5.2 Codex based on the Python version: https://github.com/mangiucugna/json_repair Assisted-by: GPT 5.2 Codex via Crush <crush@charm.land>
Andrey Nering created