Skip to content

Commit 88c1a8d

Browse files
authored
[ai] Upgrade openai-go SDK to v2 (#547)
## Summary - Upgrade openai-go SDK to v2 - Perform a few additional (minor version) upgrades as well - Upgrade model name constants to match latest SDKs ## How was it tested? Ran all unit tests. ## Community Contribution License All community contributions in this pull request are licensed to the project maintainers under the terms of the [Apache 2 License](https://www.apache.org/licenses/LICENSE-2.0). By creating this pull request I represent that I have the right to license the contributions to the project maintainers under the Apache 2 License as stated in the [Community Contribution License](https://github.com/jetify-com/opensource/blob/main/CONTRIBUTING.md#community-contribution-license).
1 parent c51e5ab commit 88c1a8d

File tree

16 files changed

+119
-69
lines changed

16 files changed

+119
-69
lines changed

default.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,26 @@ import (
44
"sync/atomic"
55

66
"go.jetify.com/ai/api"
7-
"go.jetify.com/ai/provider/anthropic"
7+
"go.jetify.com/ai/provider/openai"
88
)
99

10+
// modelWrapper wraps api.LanguageModel to ensure consistent type for atomic.Value
11+
type modelWrapper struct {
12+
model api.LanguageModel
13+
}
14+
1015
var defaultLanguageModel atomic.Value
1116

1217
func init() {
13-
model := anthropic.NewLanguageModel(anthropic.ModelClaude37Sonnet20250219)
14-
defaultLanguageModel.Store(model)
18+
model := openai.NewLanguageModel(openai.ChatModelGPT5)
19+
defaultLanguageModel.Store(&modelWrapper{model: model})
1520
}
1621

1722
func SetDefaultLanguageModel(lm api.LanguageModel) {
18-
defaultLanguageModel.Store(lm)
23+
defaultLanguageModel.Store(&modelWrapper{model: lm})
1924
}
2025

2126
func DefaultLanguageModel() api.LanguageModel {
22-
return defaultLanguageModel.Load().(api.LanguageModel)
27+
wrapper := defaultLanguageModel.Load().(*modelWrapper)
28+
return wrapper.model
2329
}

default_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package ai
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
"go.jetify.com/ai/provider/anthropic"
8+
"go.jetify.com/ai/provider/openai"
9+
)
10+
11+
func TestDefaultLanguageModel(t *testing.T) {
12+
// Get current model and verify provider and model ID match expected values
13+
originalModel := DefaultLanguageModel()
14+
assert.Equal(t, "openai", originalModel.ProviderName())
15+
assert.Equal(t, openai.ChatModelGPT5, originalModel.ModelID())
16+
17+
// Change model to different provider (Anthropic)
18+
anthropicModel := anthropic.NewLanguageModel(anthropic.ModelClaude3_5SonnetLatest)
19+
SetDefaultLanguageModel(anthropicModel)
20+
21+
currentModel := DefaultLanguageModel()
22+
assert.Equal(t, "anthropic", currentModel.ProviderName())
23+
assert.Equal(t, anthropic.ModelClaude3_5SonnetLatest, currentModel.ModelID())
24+
25+
// Restore model to original
26+
SetDefaultLanguageModel(originalModel)
27+
28+
restoredModel := DefaultLanguageModel()
29+
assert.Equal(t, "openai", restoredModel.ProviderName())
30+
assert.Equal(t, openai.ChatModelGPT5, restoredModel.ModelID())
31+
}

go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ module go.jetify.com/ai
33
go 1.24.0
44

55
require (
6-
github.com/anthropics/anthropic-sdk-go v1.6.2
6+
github.com/anthropics/anthropic-sdk-go v1.9.1
77
github.com/k0kubun/pp/v3 v3.5.0
88
github.com/modelcontextprotocol/go-sdk v0.2.0
9-
github.com/openai/openai-go v1.12.0
9+
github.com/openai/openai-go/v2 v2.0.2
1010
github.com/stretchr/testify v1.10.0
1111
github.com/tidwall/gjson v1.18.0
1212
go.jetify.com/pkg v0.0.0-20250813160509-523aa34a07bb
@@ -22,8 +22,8 @@ require (
2222
github.com/tidwall/match v1.1.1 // indirect
2323
github.com/tidwall/pretty v1.2.1 // indirect
2424
github.com/tidwall/sjson v1.2.5 // indirect
25-
golang.org/x/sys v0.34.0 // indirect
26-
golang.org/x/text v0.27.0 // indirect
25+
golang.org/x/sys v0.35.0 // indirect
26+
golang.org/x/text v0.28.0 // indirect
2727
gopkg.in/dnaeon/go-vcr.v4 v4.0.4 // indirect
2828
gopkg.in/yaml.v3 v3.0.1 // indirect
2929
)

go.sum

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
github.com/anthropics/anthropic-sdk-go v1.6.2 h1:oORA212y0/zAxe7OPvdgIbflnn/x5PGk5uwjF60GqXM=
2-
github.com/anthropics/anthropic-sdk-go v1.6.2/go.mod h1:3qSNQ5NrAmjC8A2ykuruSQttfqfdEYNZY5o8c0XSHB8=
1+
github.com/anthropics/anthropic-sdk-go v1.9.1 h1:raRhZKmayVSVZtLpLDd6IsMXvxLeeSU03/2IBTerWlg=
2+
github.com/anthropics/anthropic-sdk-go v1.9.1/go.mod h1:WTz31rIUHUHqai2UslPpw5CwXrQP3geYBioRV4WOLvE=
33
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
44
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
55
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -17,8 +17,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
1717
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
1818
github.com/modelcontextprotocol/go-sdk v0.2.0 h1:PESNYOmyM1c369tRkzXLY5hHrazj8x9CY1Xu0fLCryM=
1919
github.com/modelcontextprotocol/go-sdk v0.2.0/go.mod h1:0sL9zUKKs2FTTkeCCVnKqbLJTw5TScefPAzojjU459E=
20-
github.com/openai/openai-go v1.12.0 h1:NBQCnXzqOTv5wsgNC36PrFEiskGfO5wccfCWDo9S1U0=
21-
github.com/openai/openai-go v1.12.0/go.mod h1:g461MYGXEXBVdV5SaR/5tNzNbSfwTBBefwc+LlDCK0Y=
20+
github.com/openai/openai-go/v2 v2.0.2 h1:DlB9pnhhSRm2NuQNijB3j2U8fhDSk3sFX9ULK5hUs0o=
21+
github.com/openai/openai-go/v2 v2.0.2/go.mod h1:sIUkR+Cu/PMUVkSKhkk742PRURkQOCFhiwJ7eRSBqmk=
2222
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
2323
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
2424
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
@@ -40,10 +40,10 @@ go.jetify.com/pkg v0.0.0-20250813160509-523aa34a07bb/go.mod h1:8WpDzwfM71bfDaRFE
4040
go.jetify.com/sse v0.1.0 h1:zLIT5XFlUVuTl68bHalpFDYbfSfXJPkmAbtmBqIHl2Q=
4141
go.jetify.com/sse v0.1.0/go.mod h1:zFADPn3Z0aZJe3+PbArGMGwe3oTwHxPZIwNILoRCmU8=
4242
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
43-
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
44-
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
45-
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
46-
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
43+
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
44+
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
45+
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
46+
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
4747
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
4848
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
4949
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

provider/anthropic/constants.go

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,39 +3,33 @@ package anthropic
33
// ProviderName is the name of the Anthropic provider.
44
const ProviderName = "anthropic"
55

6+
// We use the same naming convention as the Anthropic SDK
7+
//
8+
//revive:disable:var-naming
69
const (
7-
// Claude 3.7 Models
8-
9-
ModelClaude3_7SonnetLatest = "claude-3-7-sonnet-latest"
10-
ModelClaude37Sonnet20250219 = "claude-3-7-sonnet-20250219"
11-
12-
// Claude 3.5 Models
13-
14-
ModelClaude35HaikuLatest = "claude-3-5-haiku-latest"
15-
ModelClaude35Haiku20241022 = "claude-3-5-haiku-20241022"
16-
17-
ModelClaude35SonnetLatest = "claude-3-5-sonnet-latest"
18-
ModelClaude35Sonnet20241022 = "claude-3-5-sonnet-20241022"
19-
ModelClaude35Sonnet20240620 = "claude-3-5-sonnet-20240620"
20-
21-
// Claude 3.0 Models
22-
23-
ModelClaude3OpusLatest = "claude-3-opus-latest"
24-
ModelClaude3Opus20240229 = "claude-3-opus-20240229"
25-
// Deprecated: Will reach end-of-life on July 21st, 2025. Please migrate to a newer
26-
// model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for
27-
// more information.
28-
ModelClaude3Sonnet20240229 = "claude-3-sonnet-20240229"
29-
ModelClaude3Haiku20240307 = "claude-3-haiku-20240307"
30-
31-
// Claude 2 Models
32-
33-
// Deprecated: Will reach end-of-life on July 21st, 2025. Please migrate to a newer
34-
// model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for
35-
// more information.
36-
ModelClaude21 = "claude-2.1"
37-
// Deprecated: Will reach end-of-life on July 21st, 2025. Please migrate to a newer
38-
// model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for
39-
// more information.
40-
ModelClaude20 = "claude-2.0"
10+
ModelClaude3_7SonnetLatest = "claude-3-7-sonnet-latest"
11+
ModelClaude3_7Sonnet20250219 = "claude-3-7-sonnet-20250219"
12+
ModelClaude3_5HaikuLatest = "claude-3-5-haiku-latest"
13+
ModelClaude3_5Haiku20241022 = "claude-3-5-haiku-20241022"
14+
ModelClaudeSonnet4_20250514 = "claude-sonnet-4-20250514"
15+
ModelClaudeSonnet4_0 = "claude-sonnet-4-0"
16+
ModelClaude4Sonnet20250514 = "claude-4-sonnet-20250514"
17+
ModelClaude3_5SonnetLatest = "claude-3-5-sonnet-latest"
18+
ModelClaude3_5Sonnet20241022 = "claude-3-5-sonnet-20241022"
19+
ModelClaude_3_5_Sonnet_20240620 = "claude-3-5-sonnet-20240620"
20+
ModelClaudeOpus4_0 = "claude-opus-4-0"
21+
ModelClaudeOpus4_20250514 = "claude-opus-4-20250514"
22+
ModelClaude4Opus20250514 = "claude-4-opus-20250514"
23+
ModelClaudeOpus4_1_20250805 = "claude-opus-4-1-20250805"
24+
// Deprecated: Will reach end-of-life on January 5th, 2026. Please migrate to a
25+
// newer model. Visit
26+
// https://docs.anthropic.com/en/docs/resources/model-deprecations for more
27+
// information.
28+
ModelClaude3OpusLatest = "claude-3-opus-latest"
29+
// Deprecated: Will reach end-of-life on January 5th, 2026. Please migrate to a
30+
// newer model. Visit
31+
// https://docs.anthropic.com/en/docs/resources/model-deprecations for more
32+
// information.
33+
ModelClaude_3_Opus_20240229 = "claude-3-opus-20240229"
34+
ModelClaude_3_Haiku_20240307 = "claude-3-haiku-20240307"
4135
)

provider/openai/constants.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,23 @@
11
package openai
22

33
const (
4+
ChatModelGPT5 = "gpt-5"
5+
ChatModelGPT5Mini = "gpt-5-mini"
6+
ChatModelGPT5Nano = "gpt-5-nano"
7+
ChatModelGPT5_2025_08_07 = "gpt-5-2025-08-07"
8+
ChatModelGPT5Mini2025_08_07 = "gpt-5-mini-2025-08-07"
9+
ChatModelGPT5Nano2025_08_07 = "gpt-5-nano-2025-08-07"
10+
ChatModelGPT5ChatLatest = "gpt-5-chat-latest"
11+
ChatModelGPT4_1 = "gpt-4.1"
12+
ChatModelGPT4_1Mini = "gpt-4.1-mini"
13+
ChatModelGPT4_1Nano = "gpt-4.1-nano"
14+
ChatModelGPT4_1_2025_04_14 = "gpt-4.1-2025-04-14"
15+
ChatModelGPT4_1Mini2025_04_14 = "gpt-4.1-mini-2025-04-14"
16+
ChatModelGPT4_1Nano2025_04_14 = "gpt-4.1-nano-2025-04-14"
17+
ChatModelO4Mini = "o4-mini"
18+
ChatModelO4Mini2025_04_16 = "o4-mini-2025-04-16"
19+
ChatModelO3 = "o3"
20+
ChatModelO3_2025_04_16 = "o3-2025-04-16"
421
ChatModelO3Mini = "o3-mini"
522
ChatModelO3Mini2025_01_31 = "o3-mini-2025-01-31"
623
ChatModelO1 = "o1"
@@ -16,13 +33,15 @@ const (
1633
ChatModelGPT4oAudioPreview = "gpt-4o-audio-preview"
1734
ChatModelGPT4oAudioPreview2024_10_01 = "gpt-4o-audio-preview-2024-10-01"
1835
ChatModelGPT4oAudioPreview2024_12_17 = "gpt-4o-audio-preview-2024-12-17"
36+
ChatModelGPT4oAudioPreview2025_06_03 = "gpt-4o-audio-preview-2025-06-03"
1937
ChatModelGPT4oMiniAudioPreview = "gpt-4o-mini-audio-preview"
2038
ChatModelGPT4oMiniAudioPreview2024_12_17 = "gpt-4o-mini-audio-preview-2024-12-17"
2139
ChatModelGPT4oSearchPreview = "gpt-4o-search-preview"
2240
ChatModelGPT4oMiniSearchPreview = "gpt-4o-mini-search-preview"
2341
ChatModelGPT4oSearchPreview2025_03_11 = "gpt-4o-search-preview-2025-03-11"
2442
ChatModelGPT4oMiniSearchPreview2025_03_11 = "gpt-4o-mini-search-preview-2025-03-11"
2543
ChatModelChatgpt4oLatest = "chatgpt-4o-latest"
44+
ChatModelCodexMiniLatest = "codex-mini-latest"
2645
ChatModelGPT4oMini = "gpt-4o-mini"
2746
ChatModelGPT4oMini2024_07_18 = "gpt-4o-mini-2024-07-18"
2847
ChatModelGPT4Turbo = "gpt-4-turbo"

provider/openai/internal/codec/decode.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"fmt"
66
"strings"
77

8-
"github.com/openai/openai-go/responses"
8+
"github.com/openai/openai-go/v2/responses"
99
"go.jetify.com/ai/api"
1010
)
1111

provider/openai/internal/codec/decode_stream.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import (
88
"iter"
99
"time"
1010

11-
"github.com/openai/openai-go/packages/param"
12-
"github.com/openai/openai-go/responses"
11+
"github.com/openai/openai-go/v2/packages/param"
12+
"github.com/openai/openai-go/v2/responses"
1313
"go.jetify.com/ai/api"
1414
)
1515

provider/openai/internal/codec/decode_stream_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"testing"
66
"time"
77

8-
"github.com/openai/openai-go/responses"
8+
"github.com/openai/openai-go/v2/responses"
99
"github.com/stretchr/testify/assert"
1010
"github.com/stretchr/testify/require"
1111
"go.jetify.com/ai/api"

provider/openai/internal/codec/decode_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"encoding/json"
55
"testing"
66

7-
"github.com/openai/openai-go/responses"
7+
"github.com/openai/openai-go/v2/responses"
88
"github.com/stretchr/testify/assert"
99
"github.com/stretchr/testify/require"
1010
"go.jetify.com/ai/aitesting"

0 commit comments

Comments
 (0)