Skip to content

Commit e2d606b

Browse files
committed
fix: repair coder branch checks
1 parent 2542a29 commit e2d606b

5 files changed

Lines changed: 32 additions & 26 deletions

File tree

‎.github/workflows/build.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ jobs:
55
build:
66
uses: charmbracelet/meta/.github/workflows/build.yml@main
77
with:
8-
go-version: ""
8+
go-version: "1.26.4"
99
go-version-file: ./go.mod
1010
secrets:
1111
gh_pat: "${{ secrets.PERSONAL_ACCESS_TOKEN }}"

‎go.mod‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ require (
6666
go.opentelemetry.io/otel/metric v1.39.0 // indirect
6767
go.opentelemetry.io/otel/trace v1.39.0 // indirect
6868
go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect
69-
golang.org/x/crypto v0.47.0 // indirect
70-
golang.org/x/net v0.49.0 // indirect
71-
golang.org/x/sync v0.19.0 // indirect
72-
golang.org/x/sys v0.40.0 // indirect
73-
golang.org/x/text v0.33.0 // indirect
69+
golang.org/x/crypto v0.51.0 // indirect
70+
golang.org/x/net v0.55.0 // indirect
71+
golang.org/x/sync v0.20.0 // indirect
72+
golang.org/x/sys v0.45.0 // indirect
73+
golang.org/x/text v0.37.0 // indirect
7474
golang.org/x/time v0.14.0 // indirect
7575
google.golang.org/api v0.264.0 // indirect
7676
google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 // indirect

‎go.sum‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -152,18 +152,18 @@ go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6
152152
go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA=
153153
go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go=
154154
go.yaml.in/yaml/v4 v4.0.0-rc.3/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0=
155-
golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8=
156-
golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A=
157-
golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o=
158-
golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8=
155+
golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
156+
golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
157+
golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
158+
golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
159159
golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
160160
golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
161-
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
162-
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
163-
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
164-
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
165-
golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
166-
golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
161+
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
162+
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
163+
golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
164+
golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
165+
golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
166+
golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
167167
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
168168
golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
169169
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=

‎providers/openai/responses_language_model.go‎

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ func (o responsesLanguageModel) prepareParams(call fantasy.Call) (*responses.Res
166166
params.Store = param.NewOpt(false)
167167
}
168168

169-
if openaiOptions != nil && openaiOptions.PreviousResponseID != nil && *openaiOptions.PreviousResponseID != "" {
169+
hasPreviousResponseID := openaiOptions != nil && openaiOptions.PreviousResponseID != nil && *openaiOptions.PreviousResponseID != ""
170+
if hasPreviousResponseID {
170171
if err := validatePreviousResponseIDPrompt(call.Prompt); err != nil {
171172
return nil, warnings, err
172173
}
@@ -177,7 +178,7 @@ func (o responsesLanguageModel) prepareParams(call fantasy.Call) (*responses.Res
177178
}
178179

179180
storeEnabled := openaiOptions != nil && openaiOptions.Store != nil && *openaiOptions.Store
180-
input, inputWarnings, err := toResponsesPrompt(call.Prompt, modelConfig.systemMessageMode, storeEnabled)
181+
input, inputWarnings, err := toResponsesPrompt(call.Prompt, modelConfig.systemMessageMode, storeEnabled, hasPreviousResponseID)
181182
warnings = append(warnings, inputWarnings...)
182183
if err != nil {
183184
return nil, warnings, err
@@ -400,9 +401,10 @@ func responsesUsage(resp responses.Response) fantasy.Usage {
400401
return usage
401402
}
402403

403-
func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string, store bool) (responses.ResponseInputParam, []fantasy.CallWarning, error) {
404+
func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string, store bool, allowOrphanFunctionOutputs ...bool) (responses.ResponseInputParam, []fantasy.CallWarning, error) {
404405
var input responses.ResponseInputParam
405406
var warnings []fantasy.CallWarning
407+
allowOrphanOutputs := len(allowOrphanFunctionOutputs) > 0 && allowOrphanFunctionOutputs[0]
406408

407409
// First pass: collect raw JSON for computer_call output items.
408410
// This enables faithful round-tripping via param.Override.
@@ -741,7 +743,7 @@ func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string, store bo
741743
}
742744
}
743745

744-
if err := validateResponsesInput(input); err != nil {
746+
if err := validateResponsesInput(input, allowOrphanOutputs); err != nil {
745747
return nil, warnings, err
746748
}
747749

@@ -753,14 +755,15 @@ func isResponsesWebSearchToolCall(toolCallPart fantasy.ToolCallPart) bool {
753755
toolCallPart.ToolName == "web_search_preview"
754756
}
755757

756-
func validateResponsesInput(input responses.ResponseInputParam) error {
757-
if err := validateResponsesFunctionCallOutputs(input); err != nil {
758+
func validateResponsesInput(input responses.ResponseInputParam, allowOrphanFunctionOutputs ...bool) error {
759+
allowOrphanOutputs := len(allowOrphanFunctionOutputs) > 0 && allowOrphanFunctionOutputs[0]
760+
if err := validateResponsesFunctionCallOutputs(input, allowOrphanOutputs); err != nil {
758761
return err
759762
}
760763
return validateResponsesItemReferences(input)
761764
}
762765

763-
func validateResponsesFunctionCallOutputs(input responses.ResponseInputParam) error {
766+
func validateResponsesFunctionCallOutputs(input responses.ResponseInputParam, allowOrphanOutputs bool) error {
764767
type callState struct {
765768
calls int
766769
outputs int
@@ -818,6 +821,9 @@ func validateResponsesFunctionCallOutputs(input responses.ResponseInputParam) er
818821
for _, callID := range outputIDs {
819822
state := states[callID]
820823
if state.calls == 0 {
824+
if allowOrphanOutputs {
825+
continue
826+
}
821827
return fmt.Errorf("openai responses prompt has function_call_output without function_call for call_id %q", callID)
822828
}
823829
if state.firstOutput < state.firstCall {

‎providertests/openai_computer_use_test.go‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func TestOpenAIComputerUse(t *testing.T) {
9595

9696
result, err := agent.Generate(t.Context(), fantasy.AgentCall{
9797
Prompt: "Take a screenshot of the desktop",
98-
MaxOutputTokens: new(int64(4000)),
98+
MaxOutputTokens: fantasy.Opt[int64](4000),
9999
ProviderOptions: providerOpts,
100100
})
101101
require.NoError(t, err)
@@ -134,7 +134,7 @@ func TestOpenAIComputerUse(t *testing.T) {
134134

135135
result, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{
136136
Prompt: "Take a screenshot of the desktop",
137-
MaxOutputTokens: new(int64(4000)),
137+
MaxOutputTokens: fantasy.Opt[int64](4000),
138138
ProviderOptions: providerOpts,
139139
})
140140
require.NoError(t, err)
@@ -238,7 +238,7 @@ func TestOpenAIComputerUse_AllActions(t *testing.T) {
238238

239239
result, err := agent.Generate(t.Context(), fantasy.AgentCall{
240240
Prompt: prompt,
241-
MaxOutputTokens: new(int64(16000)),
241+
MaxOutputTokens: fantasy.Opt[int64](16000),
242242
ProviderOptions: providerOpts,
243243
})
244244
require.NoError(t, err)

0 commit comments

Comments
 (0)