Commit log

19e737f chore(taskfile): disable cache when running tests

Andrey Nering created

d3f8722 lint: fix linting

Andrey Nering created

f47a599 feat(gemini): implement streaming

Andrey Nering created

a4fd3fa feat: make google gemini work for basic + tool calls

Andrey Nering created

a446339 chore(go.mod): add `github.com/charmbracelet/x/exp/slice`

Andrey Nering created

5d03ea1 test: add google gemini to test matrix

Andrey Nering created

3f98c67 chore: `anthropic` -> `google`

Andrey Nering created

ff1a249 chore(go.mod): add `google.golang.org/genai`

Andrey Nering created

6c4d2f8 feat: initial google provider

Kujtim Hoxha created

e74fb3f chore: add options parser (#12)

Click to expand commit body
* chore: add options parser

* chore: add options key method

* refactor: rename `OptionKey` to `Name`

* refactor: rename `OptionsFromMap` to `ParseOptions`

* refactor: minimal code improvement

---------

Co-authored-by: Andrey Nering <andreynering@users.noreply.github.com>

Kujtim Hoxha and Andrey Nering created

2058c73 chore: add json tags to provider options

kujtimiihoxha created

624cb5b ci: add issue / pr labeler

Andrey Nering created

d1db2cb refactor: rename go module to `fantasy` (#11)

Andrey Nering created

b3b0f39 refactor: rename `ProviderOptionsKey` into `OptionsKey`

Andrey Nering created

5097f73 refactor: separate interface into its own type

Andrey Nering created

c6534e4 chore: remove unused lib

kujtimiihoxha created

cc3c955 chore: make provider options an interface

kujtimiihoxha created

2b4cfe6 chore: change how provider options work

kujtimiihoxha created

215059b Minor fixes (#8)

Click to expand commit body
* chore: remove unused headers

* feat: expose provider options

* fix: use mapstruct tag

* fix: thinking delta

* fix: agent prompt

* fix: fix reasoning metadata

fix: fix reasoning content

* fix: test

Kujtim Hoxha created

245142f refactor: simplify code a little bit

Andrey Nering created

2b2da24 chore(.gitattributes): do not show diffs for cassettes

Andrey Nering created

3f72650 test: add openai gpt o4 mini to the test matrix

Andrey Nering created

2acf7f7 test: make test less intermittent

Andrey Nering created

1aab862 test: add tests for stream with and without tool calls

Andrey Nering created

e00c28f test: add test with tool

Andrey Nering created

d3c849b chore: disable go-vcr's internal "sleep" to make tests much faster

Andrey Nering created

3340d64 test: setup go-vcr to start recording real providers interactions

Andrey Nering created

ef0ee71 fix: anthropic finish reason

Kujtim Hoxha created

7f1366b refactor: use json valid function from `charmbracelet/x/json`

Andrey Nering created

fb35cdf refactor: revert o use a single go module again

Click to expand commit body
I experimented with multiple Go modules, but the fact is that Go is smart
enough to strip out the uneeded modules from the user's `go.mod`, so this
is not in fact needed. Also, maintaining a single module is much easier.

Andrey Nering created

ba1c1fd refactor: move `providers/{openai|anthropic}` out of the `providers/` dir (#5)

Andrey Nering created

5337bf2 ci: configure workflows to be package-by-package

Click to expand commit body
Copied generate script from `charmbracelet/x`.

Andrey Nering created

67ff539 chore: make each package its own go module

Click to expand commit body
* `./ai` (previously root `/`)
* `./examples`
* `./providers/anthropic`
* `./providers/openai`

Andrey Nering created

36e9eae refactor: move root package into a sub-package `ai`

Andrey Nering created

87c1466 refactor: move json helper to live inside the `openai` package

Andrey Nering created

7712c19 refactor: use `cmp.Or` in more places

Andrey Nering created

1a32307 refactor: change provider options structs to be private / internal

Click to expand commit body
These struct types don't make sense to be part of the public API. They
are only used internally to map options to the actual provider SDKs.

Andrey Nering created

2e53c78 refactor: move each provider into its own package

Click to expand commit body
Reasoning for this is:

1. Users can import only those they want, and the Go compiler won't
  compile the external library the user don't need.
2. This simplify the API and makes it follow the Go conventions better:
  * `ai.NewOpenAiProvider` -> `openai.New`
  * `ai.WithOpenAiAPIKey` -> `openai.WithAPIKey`
  * etc.

Andrey Nering created

66fbbb0 refactor: json check func should not be part of the public api

Andrey Nering created

67080cf refactor: declare func types for agent callbacks

Andrey Nering created

6580e7f fix(examples): improve sdk examples

Click to expand commit body
* Check errors where we weren't checking them
* Exit with status 1 on errors

Andrey Nering created

bd29644 refactor: simplify code with `cmp.Or`

Andrey Nering created

7f1ec14 lint: temporarily disable some linters

Andrey Nering created

36ea7d1 lint: preallocate slices

Andrey Nering created

bca935d lint: fix `errcheck` issues

Andrey Nering created

97790da lint: fix uneeded conversion

Andrey Nering created

a40ebcf lint: fix auto-fixable issues

Andrey Nering created

27c1052 chore: add basic taskfile

Andrey Nering created

1c22f39 ci: initial setup for lint

Andrey Nering created

68fa858 ci: initial setup for build

Andrey Nering created