Skip to content

chore: 🐝 Update SDK - Generate SDK 0.5.1#307

Open
mattapperson wants to merge 1 commit into
mainfrom
speakeasy-sdk-regen-1782223808
Open

chore: 🐝 Update SDK - Generate SDK 0.5.1#307
mattapperson wants to merge 1 commit into
mainfrom
speakeasy-sdk-regen-1782223808

Conversation

@mattapperson

@mattapperson mattapperson commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

SDK update

Versioning

Version Bump Type: [patch] - 🤖 (automated)

Tip

If updates to your OpenAPI document introduce breaking changes, be sure to update the info.version field to trigger the correct version bump.
Speakeasy supports manual control of SDK versioning through multiple methods.

Go SDK Changes:

  • OpenRouter.Benchmarks.GetBenchmarks(): Added
  • OpenRouter.Classifications.GetTaskClassifications(): Added
  • OpenRouter.Images.Generate(): Added
  • OpenRouter.Images.ListModels(): Added
  • OpenRouter.Images.ListModelEndpoints(): Added
  • OpenRouter.Workspaces.ListBudgets(): Added
  • OpenRouter.Workspaces.DeleteBudget(): Added
  • OpenRouter.Workspaces.SetBudget(): Added
  • OpenRouter.Datasets.GetBenchmarksArtificialAnalysis(): Removed (Breaking ⚠️)
  • OpenRouter.Datasets.GetBenchmarksDesignArena(): Removed (Breaking ⚠️)
  • OpenRouter.Beta.Analytics.QueryAnalytics(): response.Data.Warnings Added
  • OpenRouter.Beta.Responses.Send():
    • request.ResponsesRequest Changed
    • response Changed
  • OpenRouter.Tts.CreateSpeech():
    • request.Request.Provider.Options.Tenstorrent Added
  • OpenRouter.Stt.CreateTranscription():
    • request.Request.Provider.Options.Tenstorrent Added
  • OpenRouter.Byok.List():
    • request.Provider Changed
    • response.Data[].Provider.Enum(tenstorrent) Added
  • OpenRouter.Byok.Create():
    • request.Request.Provider.Enum(tenstorrent) Added
    • response.Data.Provider.Enum(tenstorrent) Added
  • OpenRouter.Byok.Get(): response.Data.Provider.Enum(tenstorrent) Added
  • OpenRouter.Byok.Update(): response.Data.Provider.Enum(tenstorrent) Added
  • OpenRouter.Chat.Send():
    • request.ChatRequest Changed
    • response Changed
  • OpenRouter.Embeddings.Generate():
    • request.Request.Provider.Ignore[].union(ProviderName).Enum(tenstorrent) Added
    • response.Usage Changed
  • OpenRouter.Embeddings.ListModels(): response.Data[].Reasoning Added
  • OpenRouter.Endpoints.ListZdrEndpoints(): response.Data[].ProviderName.Enum(tenstorrent) Added
  • OpenRouter.Endpoints.List(): response.Data.Endpoints[].ProviderName.Enum(tenstorrent) Added
  • OpenRouter.Generations.GetGeneration(): response.Data.ProviderResponses[].ProviderName.Enum(tenstorrent) Added
  • OpenRouter.Models.Get(): response.Data.Reasoning Added
  • OpenRouter.Models.List(): response.Data[].Reasoning Added
  • OpenRouter.Models.ListForUser(): response.Data[].Reasoning Added
  • OpenRouter.Presets.CreatePresetsChatCompletions(): request.ChatRequest Changed
  • OpenRouter.Presets.CreatePresetsMessages(): request.MessagesRequest Changed
  • OpenRouter.Presets.CreatePresetsResponses(): request.ResponsesRequest Changed
  • OpenRouter.Rerank.Rerank():
    • request.Request.Provider.Ignore[].union(ProviderName).Enum(tenstorrent) Added
  • OpenRouter.VideoGeneration.Generate():
    • request.Request.Provider.Options.Tenstorrent Added

View full SDK changelog

OpenAPI Change Summary
├─┬Paths
│ ├──[-] path (23924:3)❌ 
│ ├──[-] path (23840:3)❌ 
│ ├──[+] path (27817:3)
│ ├──[+] path (33345:3)
│ ├──[+] path (33409:3)
│ ├──[+] path (23961:3)
│ ├──[+] path (27863:3)
│ ├──[+] path (24829:3)
│ ├──[+] path (27675:3)
│ ├─┬/byok
│ │ └─┬GET
│ │   └─┬Parameters
│ │     └─┬Schema
│ │       └──[+] enum (24214:17)
│ ├─┬/analytics/query
│ │ └─┬POST
│ │   ├─┬Responses
│ │   │ └─┬200
│ │   │   └─┬application/json
│ │   │     └─┬Schema
│ │   │       └─┬data
│ │   │         └──[+] properties (23347:23)
│ │   └─┬Requestbody
│ │     └─┬application/json
│ │       └─┬Schema
│ │         ├─┬filters
│ │         │ └─┬Schema
│ │         │   ├─┬value
│ │         │   │ └──[🔀] description (23247:38)
│ │         │   └─┬field
│ │         │     └──[🔀] description (23229:38)
│ │         └─┬dimensions
│ │           └─┬Schema
│ │             └──[🔀] description (23220:34)
│ ├─┬/embeddings
│ │ └─┬POST
│ │   └─┬Responses
│ │     └─┬200
│ │       └─┬application/json
│ │         └─┬Schema
│ │           └─┬usage
│ │             ├──[+] properties (25554:23)
│ │             ├──[+] properties (25576:23)
│ │             ├─┬total_tokens
│ │             │ └──[🔀] description (25580:38)
│ │             ├─┬prompt_tokens
│ │             │ ├──[+] required (25574:29)❌ 
│ │             │ ├──[+] required (25573:29)❌ 
│ │             │ ├──[🔀] type (25575:31)❌ 
│ │             │ ├──[🔀] description (25555:38)
│ │             │ ├──[+] nullable (25560:35)❌ 
│ │             │ ├──[🔀] example (25557:27)
│ │             │ ├──[+] properties (25562:27)
│ │             │ ├──[+] properties (25565:27)
│ │             │ └──[+] properties (25569:27)
│ │             └─┬prompt_tokens_details
│ │               ├──[🔀] type (25578:31)❌ 
│ │               ├──[🔀] description (25577:38)
│ │               ├──[-] properties (24356:27)❌ 
│ │               ├──[-] properties (24359:27)❌ 
│ │               ├──[-] properties (24362:27)❌ 
│ │               ├──[-] properties (24366:27)❌ 
│ │               └──[-] properties (24370:27)❌ 
│ └─┬/models
│   └─┬GET
│     └─┬Responses
│       └─┬200
│         └─┬application/json
│           └──[🔀] example (29893:17)
├─┬Tags
│ └──[+] Images (33779:5)
├─┬Tags
│ └──[+] Benchmarks (33759:5)
├─┬Tags
│ └──[+] Classifications (33763:5)
└─┬Components
  ├──[-] schemas (3761:7)❌ 
  ├──[-] schemas (3623:7)❌ 
  ├──[-] schemas (3642:7)❌ 
  ├──[-] schemas (3924:7)❌ 
  ├──[-] schemas (3851:7)❌ 
  ├──[-] schemas (3732:7)❌ 
  ├──[-] schemas (3689:7)❌ 
  ├──[+] schemas (21368:7)
  ├──[+] schemas (21143:7)
  ├──[+] schemas (21819:7)
  ├──[+] schemas (21831:7)
  ├──[+] schemas (22847:7)
  ├──[+] schemas (7080:7)
  ├──[+] schemas (1152:7)
  ├──[+] schemas (9675:7)
  ├──[+] schemas (22796:7)
  ├──[+] schemas (9864:7)
  ├──[+] schemas (21312:7)
  ├──[+] schemas (12855:7)
  ├──[+] schemas (3677:7)
  ├──[+] schemas (21162:7)
  ├──[+] schemas (9271:7)
  ├──[+] schemas (10798:7)
  ├──[+] schemas (2200:7)
  ├──[+] schemas (9241:7)
  ├──[+] schemas (9549:7)
  ├──[+] schemas (9652:7)
  ├──[+] schemas (20786:7)
  ├──[+] schemas (20844:7)
  ├──[+] schemas (20817:7)
  ├──[+] schemas (9128:7)
  ├──[+] schemas (9715:7)
  ├──[+] schemas (9394:7)
  ├──[+] schemas (6961:7)
  ├──[+] schemas (18935:7)
  ├──[+] schemas (9771:7)
  ├──[+] schemas (9834:7)
  ├──[+] schemas (9877:7)
  ├──[+] schemas (20717:7)
  ├──[+] schemas (4060:7)
  ├──[+] schemas (7262:7)
  ├──[+] schemas (20698:7)
  ├──[+] schemas (9910:7)
  ├──[+] schemas (21216:7)
  ├──[+] schemas (9737:7)
  ├─┬Inputs
  │ └─┬ANYOF
  │   └─┬Schema
  │     ├──[+] anyOf (10362:7)
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (16143:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (15777:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (17012:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (10849:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (10910:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (19872:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (19919:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (11027:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (10937:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (10965:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (10992:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (6835:20)❌ 
  │     ├─┬ANYOF
  │     │ └──[🔀] $ref (6869:9)❌ 
  │     └─┬ANYOF
  │       └──[🔀] $ref (5744:20)❌ 
  ├─┬WebSearchConfig
  │ └─┬max_results
  │   └──[🔀] description (22411:24)
  ├─┬AdvisorReasoning
  │ └─┬effort
  │   └──[+] enum (171:15)
  ├─┬ResponsesRequest
  │ ├──[+] properties (19535:9)
  │ ├─┬image_config
  │ │ └──[🔀] $ref (19538:11)❌ 
  │ ├─┬metadata
  │ │ └──[🔀] $ref (19557:11)❌ 
  │ ├─┬trace
  │ │ └──[🔀] $ref (19716:11)❌ 
  │ ├─┬models
  │ │ ├──[-] items (18967:13)❌ 
  │ │ └──[🔀] type (19570:17)❌ 
  │ ├─┬safety_identifier
  │ │ └──[🔀] $ref (7104:19)❌ 
  │ ├─┬plugins
  │ │ ├──[-] items (18975:13)❌ 
  │ │ ├──[🔀] type (19577:17)❌ 
  │ │ ├──[-] description (18973:24)
  │ │ └──[+] nullable (19576:21)❌ 
  │ ├─┬prompt_cache_key
  │ │ └──[🔀] $ref (20206:9)❌ 
  │ ├─┬top_p
  │ │ ├──[🔀] type (19714:17)❌ 
  │ │ └──[-] format (19110:19)❌ 
  │ ├─┬top_k
  │ │ ├──[+] items (19661:13)❌ 
  │ │ └──[🔀] type (19709:17)❌ 
  │ ├─┬route
  │ │ └──[🔀] $ref (19039:9)❌ 
  │ ├─┬text
  │ │ └──[🔀] $ref (19652:11)❌ 
  │ ├─┬service_tier
  │ │ ├──[-] enum (19022:15)❌ 
  │ │ ├──[-] enum (19023:15)❌ 
  │ │ ├──[-] enum (19024:15)❌ 
  │ │ ├──[-] enum (19025:15)❌ 
  │ │ ├──[-] enum (19026:15)❌ 
  │ │ ├──[-] enum (19027:15)❌ 
  │ │ ├──[-] default (19020:20)❌ 
  │ │ └─┬Extensions
  │ │   └──[-] x-speakeasy-unknown-values (19030:39)❌ 
  │ ├─┬session_id
  │ │ ├──[+] enum (19628:15)
  │ │ ├──[+] enum (19629:15)
  │ │ ├──[+] enum (19630:15)
  │ │ ├──[+] enum (19631:15)
  │ │ ├──[+] enum (19632:15)
  │ │ ├──[+] enum (19633:15)
  │ │ ├──[-] maxLength (19034:22)❌ 
  │ │ ├──[-] description (19032:24)
  │ │ ├──[+] default (19626:20)❌ 
  │ │ ├──[+] nullable (19634:21)❌ 
  │ │ └─┬Extensions
  │ │   └──[+] x-speakeasy-unknown-values (19636:39)
  │ ├─┬presence_penalty
  │ │ ├──[+] items (19581:13)❌ 
  │ │ ├──[🔀] type (19603:17)❌ 
  │ │ ├──[-] format (18999:19)❌ 
  │ │ ├──[+] description (19579:24)
  │ │ └──[-] nullable (19000:21)❌ 
  │ ├─┬tools
  │ │ └──[🔀] $ref (15328:9)❌ 
  │ ├─┬previous_response_id
  │ │ ├──[🔀] type (19607:17)❌ 
  │ │ └──[+] format (19605:19)❌ 
  │ ├─┬model
  │ │ ├──[+] items (19567:13)❌ 
  │ │ ├──[🔀] type (19568:17)❌ 
  │ │ ├──[+] description (19562:24)
  │ │ └──[+] example (19564:13)
  │ ├─┬frequency_penalty
  │ │ └──[🔀] $ref (4352:20)❌ 
  │ ├─┬tool_choice
  │ │ └──[🔀] $ref (20953:9)❌ 
  │ ├─┬modalities
  │ │ └──[🔀] $ref (19340:9)❌ 
  │ ├─┬user
  │ │ └──[🔀] $ref (15380:9)❌ 
  │ ├─┬input
  │ │ └──[🔀] $ref (19544:11)❌ 
  │ ├─┬parallel_tool_calls
  │ │ ├──[+] items (19573:13)❌ 
  │ │ ├──[🔀] type (19574:17)❌ 
  │ │ └──[-] nullable (18970:21)❌ 
  │ ├─┬stream
  │ │ └──[+] const (19645:18)❌ 
  │ ├─┬top_logprobs
  │ │ └──[-] nullable (19107:21)❌ 
  │ ├─┬store
  │ │ └──[🔀] $ref (20091:20)❌ 
  │ ├─┬instructions
  │ │ └──[🔀] $ref (10163:9)❌ 
  │ ├─┬include
  │ │ └──[🔀] $ref (9114:9)❌ 
  │ ├─┬truncation
  │ │ └──[🔀] $ref (21076:9)❌ 
  │ ├─┬max_output_tokens
  │ │ └──[🔀] type (19552:17)❌ 
  │ ├─┬prompt
  │ │ └──[🔀] $ref (19609:11)❌ 
  │ ├─┬stop_server_tools_when
  │ │ └──[🔀] $ref (19638:11)❌ 
  │ ├─┬reasoning
  │ │ └──[🔀] $ref (18352:29)❌ 
  │ ├─┬temperature
  │ │ ├──[🔀] type (19650:17)❌ 
  │ │ ├──[-] format (19046:19)❌ 
  │ │ ├──[+] default (19649:20)❌ 
  │ │ └──[-] nullable (19047:21)❌ 
  │ └─┬provider
  │   └──[🔀] $ref (19614:11)❌ 
  ├─┬SubagentReasoning
  │ └─┬effort
  │   └──[+] enum (20626:15)
  ├─┬AnthropicDocumentBlockParam
  │ └─┬source
  │   └──[+] oneOf (1152:7)
  ├─┬FusionPlugin
  │ ├──[+] properties (8181:9)
  │ └─┬tools
  │   ├──[+] enum (8186:15)
  │   ├──[+] enum (8185:15)
  │   ├──[-] items (8334:13)❌ 
  │   ├──[🔀] type (8188:17)❌ 
  │   ├──[-] maxItems (8370:21)❌ 
  │   ├──[🔀] description (8182:24)
  │   ├──[🔀] example (8187:20)
  │   └─┬Extensions
  │     └──[+] x-speakeasy-unknown-values (8189:39)
  ├─┬WebSearchServerTool
  │ └─┬max_results
  │   └──[🔀] description (22541:24)
  ├─┬ProviderResponse
  │ └─┬provider_name
  │   └──[+] enum (18620:15)
  ├─┬ReasoningEffort
  │ └──[+] enum (19169:11)
  ├─┬Preview_WebSearchServerTool
  │ └─┬max_results
  │   └──[🔀] description (17696:24)
  ├─┬MessagesErrorEvent
  │ ├──[🔀] example (11485:9)
  │ ├──[+] properties (11503:9)
  │ ├─┬type
  │ │ └──[🔀] $ref (15624:9)❌ 
  │ └─┬error
  │   ├──[+] properties (11493:13)
  │   └─┬message
  │     └──[🔀] $ref (2200:20)❌ 
  ├─┬ObservabilityArizeDestination
  │ └─┬config
  │   └─┬modelId
  │     └──[+] description (13138:28)
  ├─┬MessagesErrorDetail
  │ ├──[🔀] example (11468:9)
  │ ├──[+] properties (11472:9)
  │ └─┬message
  │   └──[🔀] $ref (2200:20)❌ 
  ├─┬MessagesStartEvent
  │ └─┬message
  │   └─┬provider
  │     └──[+] enum (12455:19)
  ├─┬FusionServerToolConfig
  │ ├──[+] properties (8280:9)
  │ ├─┬model
  │ │ ├──[🔀] type (8293:17)❌ 
  │ │ ├──[+] maximum (8291:20)❌ 
  │ │ ├──[+] minimum (8292:20)❌ 
  │ │ ├──[🔀] description (8288:24)
  │ │ └──[🔀] example (8290:20)
  │ ├─┬reasoning
  │ │ └─┬effort
  │ │   └──[+] enum (8306:19)
  │ ├─┬max_completion_tokens
  │ │ └──[🔀] $ref (502:20)❌ 
  │ ├─┬max_tool_calls
  │ │ ├──[-] maximum (8423:20)❌ 
  │ │ ├──[-] minimum (8424:20)❌ 
  │ │ ├──[🔀] description (8283:24)
  │ │ └──[🔀] example (8285:20)
  │ ├─┬temperature
  │ │ ├──[🔀] type (8319:17)❌ 
  │ │ ├──[-] format (8455:19)❌ 
  │ │ ├──[🔀] description (8300:24)
  │ │ ├──[-] example (8454:20)
  │ │ ├──[+] properties (8303:13)
  │ │ └──[+] properties (8315:13)
  │ └─┬tools
  │   ├──[-] items (8467:13)❌ 
  │   ├──[🔀] type (8325:17)❌ 
  │   ├──[+] format (8324:19)❌ 
  │   ├──[-] maxItems (8479:21)❌ 
  │   ├──[🔀] description (8321:24)
  │   └──[🔀] example (8323:20)
  ├─┬ProviderOptions
  │ ├──[🔀] description (17841:20)
  │ └──[+] properties (18267:9)
  ├─┬ChatRequest
  │ ├─┬reasoning
  │ │ └─┬effort
  │ │   └──[+] enum (4804:19)
  │ └─┬reasoning_effort
  │   └──[+] enum (4823:15)
  ├─┬BYOKProviderSlug
  │ └──[+] enum (4047:11)
  ├─┬ChatStreamChunk
  │ └─┬error
  │   ├──[🔀] example (5096:13)
  │   └──[+] properties (5110:13)
  ├─┬WebSearchServerToolConfig
  │ └─┬max_results
  │   └──[🔀] description (22598:24)
  ├─┬ProviderName
  │ └──[+] enum (17827:11)
  ├─┬Model
  │ ├──[🔀] example (12592:9)
  │ ├──[+] properties (12688:9)
  │ ├─┬top_provider
  │ │ └──[🔀] $ref (12696:11)❌ 
  │ ├─┬supported_parameters
  │ │ └──[🔀] $ref (12855:20)❌ 
  │ └─┬supported_voices
  │   ├──[🔀] description (12691:24)
  │   ├──[-] nullable (12163:21)❌ 
  │   ├──[-] example (12160:20)
  │   └─┬Schema
  │     └──[🔀] $ref (17193:9)❌ 
  ├─┬Preview_20250311_WebSearchServerTool
  │ └─┬max_results
  │   └──[🔀] description (17671:24)
  ├─┬ChatWebSearchShorthand
  │ └─┬max_results
  │   └──[🔀] description (5606:24)
  ├─┬StreamEvents
  │ ├──[+] oneOf (6961:7)
  │ └──Discriminator
  ├─┬OpenResponsesResult
  │ └─┬ALLOF
  │   ├──[+] properties (15556:13)
  │   ├─┬usage
  │   │ └──[🔀] $ref (20953:9)❌ 
  │   ├─┬output
  │   │ └──[🔀] $ref (15624:9)❌ 
  │   ├─┬text
  │   │ └──[🔀] $ref (15565:15)❌ 
  │   ├─┬openrouter_metadata
  │   │ └──[🔀] $ref (2200:20)❌ 
  │   └─┬service_tier
  │     ├──[+] items (15562:17)❌ 
  │     ├──[🔀] type (15563:21)❌ 
  │     └──[-] nullable (14988:25)❌ 
  ├─┬Legacy_WebSearchServerTool
  │ └─┬max_results
  │   └──[🔀] description (10459:24)
  └─┬ChatUsage
    ├──[🔀] example (5457:9)
    ├──[+] properties (5528:9)
    └─┬total_tokens
      ├──[🔀] type (5546:17)❌ 
      ├──[🔀] description (5529:24)
      ├──[+] nullable (5530:21)❌ 
      ├──[+] properties (5532:13)
      ├──[+] properties (5536:13)
      └──[+] properties (5541:13)
Document Element Total Changes Breaking Changes
paths 34 12
tags 3 0
components 221 117

View full report

Linting Report 0 errors, 1 warnings, 0 hints

View full report

GO CHANGELOG

core: 3.13.40 - 2026-03-23

🐛 Bug Fixes

  • reserve baseURL as an SDK keyword to prevent request body name collisions (commit by @danielkov)

core: 3.13.39 - 2026-03-23

🐛 Bug Fixes

  • avoid data variable redeclaration in union UnmarshalJSON when member type is named Data (commit by @danielkov)

core: 3.13.38 - 2026-03-23

🐛 Bug Fixes

  • normalize float literals in generated Go usage examples to ensure valid syntax (commit by @danielkov)

core: 3.13.37 - 2026-03-23

🐛 Bug Fixes

  • return nil for response-stream zero values instead of invalid composite literal (commit by @danielkov)

core: 3.13.36 - 2026-03-12

🐛 Bug Fixes

  • reserve s as an SDK keyword to prevent path parameter name collisions (commit by @danielkov)

core: 3.13.35 - 2026-03-12

🐛 Bug Fixes

  • avoid double-pointer wrapping for nullable optional const getters (commit by @danielkov)

core: 3.13.34 - 2026-03-11

🐛 Bug Fixes

  • resolve field/method name collision when property name starts with Get (commit by @danielkov)

core: 3.13.23 - 2026-03-11

🐛 Bug Fixes

  • use go run instead of go install for staticcheck to avoid toolchain version mismatch (commit by @danielkov)

core: 3.13.21 - 2026-03-04

🐛 Bug Fixes

  • include global security in SDK Example Usage snippets and per-operation docs (commit by @mfbx9da4)

core: 3.13.20 - 2026-02-27

🐛 Bug Fixes

  • make serverURL optional when operations define their own servers (commit by @danielkov)

core: 3.13.19 - 2026-02-27

🐛 Bug Fixes

  • derive installation URL from repo URL for monorepo subdirectory support (commit by @bradcypert)

core: 3.13.33 - 2026-02-24

🐛 Bug Fixes

  • prevent duplicate enum values after name normalization in generated Go models (commit by @danielkov)

core: 3.13.22 - 2026-02-24

🐛 Bug Fixes

  • deduplicate OAuth2 password security operations to prevent duplicate getCredentials methods (commit by @danielkov)

core: 3.13.17 - 2026-02-23

🐛 Bug Fixes

  • prevent model file name collisions with reserved SDK package names (commit by @danielkov)

core: 3.13.16 - 2026-02-21

🐛 Bug Fixes

  • prevent model file name collisions with reserved SDK package names (commit by @danielkov)

core: 3.13.15 - 2026-02-19

🐛 Bug Fixes

  • defer res.Body.Close in ConsumeRawBody to prevent resource leaks on error (commit by @vishalg0wda)

core: 3.13.14 - 2026-02-18

🐛 Bug Fixes

  • deduplicate OAuth2 scope enum members, handle pointer result fields in flat response format, truncate long filenames (commit by @danielkov)

core: 3.13.13 - 2026-02-18

🐛 Bug Fixes

  • close HTTP response body for no-content responses to prevent connection pool exhaustion (commit by @vishalg0wda)

core: 3.13.12 - 2026-01-29

🐛 Bug Fixes

  • avoid overwriting SubSDK comments with empty comments when same SubSDK is referenced by multiple tags (commit by @mfbx9da4)

core: 3.13.11 - 2026-01-23

🐛 Bug Fixes

  • discriminated union errors used in both successful and error response (commit by @mfbx9da4)

core: 3.13.10 - 2026-01-11

🐛 Bug Fixes

  • handle integer:string tags in nested structs without custom MarshalJSON/UnmarshalJSON (commit by @tristanspeakeasy)

core: 3.13.9 - 2026-01-07

🐛 Bug Fixes

  • properly escape quotes in struct tags when defaults contain backticks (commit by @mfbx9da4)

core: 3.13.8 - 2026-01-03

🐛 Bug Fixes

  • union query parameters now inherit the parent's parameter name when using inline serialization (commit by @subomi)

core: 3.13.7 - 2025-12-18

🐛 Bug Fixes

  • fixed escaping of template braces in defaults, consts, and comments (commit by @tristanspeakeasy)

core: 3.13.6 - 2025-12-02

🐛 Bug Fixes

  • do not enforce required fields unless gen.yaml explicitly defines it or union strategy depends on it (commit by @mfbx9da4)

core: 3.13.4 - 2025-11-25

🐝 New Features

  • allow inclusion of empty array query parameter (commit by @idbentley)

core: 3.13.3 - 2025-11-24

🐝 New Features

  • union discriminators are inferred for oneOfs missing the explicit OpenAPI discriminator mapping. Configure via inferUnionDiscriminators: true in gen.yaml (commit by @mfbx9da4)

core: 3.13.2 - 2025-11-10

🐛 Bug Fixes

  • handle application/* encoding in multipart forms (commit by @danielkov)

core: 3.13.5 - 2025-11-06

🐛 Bug Fixes

  • multi-part arrays now serialized according to RFC7578 (commit by @danielkov)

core: 3.13.1 - 2025-11-05

🐝 New Features

  • support body field name configuration via requestBodyFieldName in gen.yaml (commit by @subomi)

core: 3.12.1 - 2025-10-30

🐛 Bug Fixes

  • make security scheme resolution case-insensitive (commit by @vishalg0wda)

core: 3.13.0 - 2025-10-24

🐝 New Features

  • add configuration option for empty object serialization in Go SDKs (commit by @BlakeTheAwesome)

core: 3.12.0 - 2025-10-13

🐝 New Features

  • add config option for deep merging allOf nodes in OpenAPI specs (commit by @BlakeTheAwesome)

core: 3.11.1 - 2025-09-23

🐛 Bug Fixes

  • allow input/output models without suffixes (commit by @disintegrator)

core: 3.11.0 - 2025-09-17

🐝 New Features

  • Support Go module vendoring during compilation (commit by @bflad)

core: 3.10.1 - 2025-09-15

🔧 Chores

  • properly populate form values for union types (commit by @subomi)

core: 3.9.7 - 2025-09-10

🐛 Bug Fixes

core: 3.10.0 - 2025-09-09

🐝 New Features

  • add support for Go module retractions in go.mod (commit by @AshGodfrey)

core: 3.9.6 - 2025-09-02

🐛 Bug Fixes

  • enabled empty strings to be used as end cursor values in pagination (commit by @GorshkovIvan)

core: 3.9.5 - 2025-09-01

🔧 Chores

  • added support for lowercase Bearer tokens in Authorization headers (commit by @GorshkovIvan)

core: 3.9.4 - 2025-08-27

🔧 Chores

  • fixed go target to respect required fields instead of using zero values (commit by @subomi)

core: 3.9.3 - 2025-07-31

🐛 Bug Fixes

  • Always prefer generation configuration for README installation instructions (commit by @bflad)

core: 3.9.2 - 2025-07-31

🐛 Bug Fixes

  • Ensure empty string modulePath and packageName pass configuration validation (commit by @bflad)

core: 3.9.1 - 2025-07-24

🔧 Chores

core: 3.9.0 - 2025-07-15

🐝 New Features

  • Support modulePath, sdkPackageAlias, and sdkPackageName configurations (commit by @bflad)

core: 3.8.1 - 2025-06-09

🐛 Bug Fixes

core: 3.8.0 - 2025-06-05

🐝 New Features

  • Upgrade Go module minimum version to 1.22 (commit by @bflad)

core: 3.7.5 - 2025-05-07

🐛 Bug Fixes

  • fixed stability of generated examples using operation and field seeds, including fixes to union examples (commit by @tristanspeakeasy)

core: 3.7.4 - 2025-04-11

🐛 Bug Fixes

  • increase stability of generator model file names (commit by @vishalg0wda)

core: 3.7.3 - 2025-04-03

🐛 Bug Fixes

  • improve performance of generation on multicore machines and various fixes to correctness based on order of generation (commit by @tristanspeakeasy)

core: 3.7.2 - 2025-02-21

🐛 Bug Fixes

  • handle usage snippet templating when no servers are defined in the spec (commit by @vishalg0wda)

core: 3.7.1 - 2025-02-14

🐛 Bug Fixes

  • circular reference handling in usage snippets (commit by @vishalg0wda)

core: 3.7.0 - 2025-02-04

🐝 New Features

core: 3.6.12 - 2025-01-31

🐛 Bug Fixes

  • fixed handling of default fields in usage snippets and tests, fixed validation of required schema property (commit by @tristanspeakeasy)

core: 3.6.11 - 2025-01-29

🐛 Bug Fixes

  • use separate namespaces per ruleset (commit by @vishalg0wda)

core: 3.6.10 - 2025-01-27

🐛 Bug Fixes

  • sort subresponses based on the worst scoring response in the group to ensure that no unreachable code paths are created (commit by @idbentley)

core: 3.6.9 - 2025-01-20

🐛 Bug Fixes

core: 3.6.8 - 2025-01-20

🐛 Bug Fixes

  • fixed handling of any fields in tests and usage snippets (commit by @tristanspeakeasy)

core: 3.6.7 - 2025-01-20

🐛 Bug Fixes

core: 3.6.5 - 2025-01-14

🐛 Bug Fixes

  • avoid setting Content-Type: */* request header for relevant operations (commit by @tristanspeakeasy)

core: 3.6.4 - 2025-01-14

🐛 Bug Fixes

core: 3.6.6 - 2025-01-13

🐛 Bug Fixes

  • handle 4XX and 5XX error ranges seperately (commit by @idbentley)

core: 3.6.3 - 2025-01-13

🐛 Bug Fixes

  • generate valid deprecated comments in Go (commit by @vishalg0wda)

core: 3.6.2 - 2024-12-16

🐛 Bug Fixes

  • flattening with hidden parameters (commit by @mfbx9da4)

core: 3.6.1 - 2024-12-13

🐛 Bug Fixes

  • Support OAS references under multipart/form-data file properties (commit by @bflad)

core: 3.6.0 - 2024-12-12

🐝 New Features

  • support passing extra request headers in sdk method calls (commit by @disintegrator)

core: 3.5.18 - 2024-12-06

🐛 Bug Fixes

  • support property names solely comprised of illegal characters (commit by @mfbx9da4)

core: 3.5.17 - 2024-11-22

🐛 Bug Fixes

  • handle circular references through unions correctly (commit by @disintegrator)

core: 3.5.16 - 2024-11-12

🐛 Bug Fixes

core: 3.5.15 - 2024-10-31

🐛 Bug Fixes

  • Prevent panic with invalid implicit discriminator mappings with propertyName within allOf object (commit by @bflad)

core: 3.5.14 - 2024-10-09

🐛 Bug Fixes

  • update readme handling of empty custom types section (commit by @adaam2)

core: 3.5.13 - 2024-10-07

🐛 Bug Fixes

  • ensure response body is closed after reading (commit by @disintegrator)

core: 3.5.12 - 2024-09-27

🐛 Bug Fixes

  • update readme formatting (commit by @adaam2)

core: 3.5.11 - 2024-09-25

🐛 Bug Fixes

  • update readme generation to replace welcome to new sdk section with new markdown notice (commit by @adaam2)

core: 3.5.10 - 2024-09-25

🐛 Bug Fixes

  • fixes to missing examples and improvements to number examples (commit by @tristanspeakeasy)

core: 3.5.9 - 2024-09-18

🐛 Bug Fixes

core: 3.5.8 - 2024-09-11

🔧 Chores

core: 3.5.7 - 2024-09-10

🔧 Chores

core: 3.5.6 - 2024-09-05

🐛 Bug Fixes

  • ensure generated examples are stable generation to generation (commit by @tristanspeakeasy)

core: 3.5.5 - 2024-08-16

🐛 Bug Fixes

core: 3.5.4 - 2024-08-13

🐛 Bug Fixes

core: 3.5.3 - 2024-08-01

🐛 Bug Fixes

core: 3.5.2 - 2024-07-23

🐛 Bug Fixes

  • avoid injecting empty 2xx sub-response if default status code is available and considered succesful (commit by @disintegrator)

core: 3.5.1 - 2024-07-23

🐛 Bug Fixes

  • fixed usage snippet generation not showing examples for oneOf/anyOf schemas (commit by @tristanspeakeasy)

core: 3.4.16 - 2024-07-16

🔧 Chores

core: 3.5.0 - 2024-07-11

🐝 New Features

core: 3.4.15 - 2024-07-09

🐛 Bug Fixes

  • Use 0666 file mode for writing configuration and lock files (commit by @bflad)

core: 3.4.14 - 2024-06-21

🔧 Chores

core: 3.4.13 - 2024-06-20

🐛 Bug Fixes

  • test response status codes in sdk methods in order of specificity (commit by @disintegrator)

core: 3.4.12 - 2024-06-17

🐛 Bug Fixes

core: 3.4.11 - 2024-06-03

🐛 Bug Fixes

core: 3.4.10 - 2024-05-21

🐛 Bug Fixes

core: 3.4.9 - 2024-05-21

🐛 Bug Fixes

core: 3.4.8 - 2024-05-09

🐛 Bug Fixes

core: 3.4.7 - 2024-04-25

🐛 Bug Fixes

core: 3.4.6 - 2024-04-07

♻️ Refactors

core: 3.4.5 - 2024-03-22

🐛 Bug Fixes

  • do not crash when an enum value has a quote " within (commit by @ThomasRooney)

core: 3.4.4 - 2024-03-06

🐛 Bug Fixes

  • fixes to security header handling to be compatible with hooks (commit by @tristanspeakeasy)

core: 3.4.3 - 2024-02-23

🐛 Bug Fixes

  • example generation for complex objects (commit by @ThomasRooney)

core: 3.4.2 - 2024-02-22

🐛 Bug Fixes

core: 3.4.1 - 2024-02-15

♻️ Refactors

core: 3.3.3 - 2024-02-13

🔧 Chores

  • improvements to example generation for usage snippets (commit by @TristanSpeakeasy)

core: 3.4.0 - 2024-02-12

🐝 New Features

core: 3.3.2 - 2024-02-02

🐛 Bug Fixes

core: 3.3.1 - 2024-01-16

🔧 Chores

core: 3.3.0 - 2023-12-19

🐝 New Features

core: 3.2.2 - 2023-12-14

🐛 Bug Fixes

  • fixed potential conflicts with enum consts and class names (commit by @TristanSpeakeasy)

core: 3.2.1 - 2023-12-14

🐛 Bug Fixes

  • fixed merging of allOf/oneOf schemas with their parents (commit by @TristanSpeakeasy)

core: 3.1.6 - 2023-12-06

🐛 Bug Fixes

🔧 Chores

core: 3.2.0 - 2023-12-05

🐝 New Features

  • add ability to use type name when available for selecting field name for untitled array schemas (commit by @TristanSpeakeasy)

core: 3.1.5 - 2023-11-14

🐛 Bug Fixes

  • ensure operation models don't collide with component models (commit by @TristanSpeakeasy)

core: 3.1.4 - 2023-11-09

🔧 Chores

core: 3.1.3 - 2023-11-09

🐛 Bug Fixes

core: 3.1.2 - 2023-11-08

🔧 Chores

  • improve README grammar by removing possessive adjectives (commit by @ThomasRooney)

core: 3.1.1 - 2023-11-07

🐛 Bug Fixes

core: 3.1.0 - 2023-11-01

🐝 New Features

core: 3.0.1 - 2023-11-01

🐛 Bug Fixes

core: 3.0.0 - 2023-10-24

🐝 New Features

core: 2.94.0 - 2023-10-20

🐝 New Features

core: 2.93.3 - 2023-10-20

🐛 Bug Fixes

  • retain configuration passed in on CLI for future gen runs (commit by @TristanSpeakeasy)

core: 2.93.2 - 2023-10-19

🐛 Bug Fixes

  • ensure complex allOfs are handle correctly with circular reference tracking (commit by @TristanSpeakeasy)

core: 2.93.1 - 2023-10-19

🐛 Bug Fixes

  • handling of circular references in allOf using inline schemas (commit by @TristanSpeakeasy)

core: 2.93.0 - 2023-10-18

🐝 New Features

core: 2.91.6 - 2023-10-18

🐛 Bug Fixes

  • additionalProperties not currently supported for parameter serialization so fall back to maps (commit by @TristanSpeakeasy)

core: 2.91.5 - 2023-10-13

🐛 Bug Fixes

  • catch literal nil derefs when mashaling models to JSON (commit by @disintegrator)

core: 2.91.4 - 2023-10-06

🐛 Bug Fixes

  • better handling of option fields when generating usage snippets (commit by @TristanSpeakeasy)

core: 2.91.3 - 2023-10-05

🐛 Bug Fixes

  • don't generate sub types for oneOf/anyOf if unions not support in language (commit by @TristanSpeakeasy)

core: 2.91.2 // globalSecurity: 2.82.2 - 2023-10-04

🐛 Bug Fixes

core: 2.91.1 - 2023-10-01

🐛 Bug Fixes

  • fix handling of allOf circular references when arrays and non-referenced schemas are involved (commit by @TristanSpeakeasy)

core: 2.91.0 - 2023-09-29

🐝 New Features

  • collapse primitive oneOf single sub schema type and fix handling of null and any types (commit by @TristanSpeakeasy)

core: 2.90.0 - 2023-09-26

🐝 New Features

  • added sdk package name to user-agent string in http requests (commit by @disintegrator)

core: 2.89.3 - 2023-09-26

🐛 Bug Fixes

  • deserialization of zero-valued date and time pointers in Go (commit by @anuraagnalluri)

core: 2.89.2 - 2023-09-26

🐛 Bug Fixes

core: 2.89.1 - 2023-09-25

🐛 Bug Fixes

core: 2.88.4 - 2023-09-21

🐛 Bug Fixes

  • fixes for regressions when dealing with consts and defaults (commit by @TristanSpeakeasy)

core: 2.89.0 - 2023-09-20

🐝 New Features

core: 2.88.3 - 2023-09-18

🔧 Chores

core: 2.88.2 - 2023-09-15

🐛 Bug Fixes

core: 2.88.1 - 2023-09-13

🐛 Bug Fixes

  • fixed handling of import paths when major version bumped (commit by @TristanSpeakeasy)

core: 2.88.0 - 2023-09-06

🐝 New Features

  • add support for nullable+required object properties (commit by @2ynn)

core: 2.86.4 - 2023-09-04

🐛 Bug Fixes

core: 2.86.3 - 2023-09-01

🐛 Bug Fixes

core: 2.86.2 - 2023-08-31

🐛 Bug Fixes

  • allow schemas that use enums with base types speakeasy doesn't support to still generate fields based on the base type (commit by @TristanSpeakeasy)

core: 2.86.1 - 2023-08-30

🐛 Bug Fixes

  • undefined accept header options in go methods (commit by @anuraagnalluri)

core: 2.86.0 - 2023-08-29

🐝 New Features

core: 2.85.0 - 2023-08-29

🐝 New Features

core: 2.84.2 - 2023-08-28

🐛 Bug Fixes

core: 2.84.1 - 2023-08-25

🐛 Bug Fixes

core: 2.84.0 - 2023-08-24

🐝 New Features

core: 2.83.1 - 2023-08-23

🐛 Bug Fixes

  • edge case which could cause conflicted names under some circumstances (commit by @ThomasRooney)

core: 2.83.0 - 2023-08-14

🐝 New Features

  • selectable accept headers in go (commit by @idbentley)

core: 2.82.0 - 2023-08-07

🐝 New Features

  • implement granular versioning to aid in generating relevant changelogs (commit by @TristanSpeakeasy)

pagination: 2.82.6 - 2026-02-21

🐛 Bug Fixes

  • handle cursor-based pagination when cursor input is inside a nested request body object (commit by @danielkov)

pagination: 2.82.5 - 2025-10-15

🐛 Bug Fixes

pagination: 2.82.4 - 2025-03-06

🐛 Bug Fixes

  • Fixed passing of arguments correctly within the next function (commit by @Kanwardeep)

pagination: 2.82.3 - 2025-02-19

🐛 Bug Fixes

  • handle paginated union response (commit by @2ynn)

pagination: 2.82.2 - 2024-12-20

🐛 Bug Fixes

  • respect pagination defaults from OpenAPI spec (commit by @disintegrator)

pagination: 2.82.1 - 2024-03-25

🐛 Bug Fixes

  • gracefully fail when pagination input is not defined on paginated operations (commit by @disintegrator)

pagination: 2.82.0 - 2024-02-28

🐝 New Features

  • handle non-numeric cursors (commit by @idbentley)

pagination: 2.81.2 - 2023-10-17

🐛 Bug Fixes

serverEvents: 0.1.7 - 2026-03-10

🐛 Bug Fixes

  • skip SSE events with no data field when data is required to prevent deserialization crashes (commit by @bradcypert)

serverEvents: 0.1.6 - 2026-03-03

🐛 Bug Fixes

  • SSE streaming no longer crashes on non-JSON event data in union types (commit by @tristanspeakeasy)

serverEvents: 0.1.5 - 2026-02-13

🐛 Bug Fixes

  • skip standalone SSE comment blocks between discriminated union events (commit by @vishalg0wda)

serverEvents: 0.1.4 - 2026-02-02

🐛 Bug Fixes

  • ensure compliance with HTML Living Standard and Web Platform Tests (commit by @2ynn)

serverEvents: 0.1.3 - 2025-02-02

🐛 Bug Fixes

  • support context cancellation in event streams (commit by @2ynn)

serverEvents: 0.1.2 - 2024-02-15

🐛 Bug Fixes

  • allow string enums to be used in SSE data (commit by @disintegrator)

serverEvents: 0.1.1 - 2024-02-05

🐛 Bug Fixes

serverEvents: 0.1.0 - 2024-01-17

🐝 New Features

unions: 2.87.6 - 2026-03-12

🐝 New Features

  • add x-speakeasy-discriminator extension for clean identifier names on discriminator mappings (commit by @mfbx9da4)

unions: 2.87.5 - 2026-02-24

🐛 Bug Fixes

  • handle nullable discriminator fields in union factory functions (commit by @danielkov)

unions: 2.87.4 - 2026-02-12

🐝 New Features

  • add open (forward-compatible) unions with raw JSON fallback for unknown variants (commit by @vishalg0wda)

unions: 2.87.3 - 2026-02-02

🐛 Bug Fixes

  • respect title and x-speakeasy-name-override for primitive union members (controlled by gen.yaml flag respectTitlesForPrimitiveUnionMembers) (commit by @mfbx9da4)

unions: 2.87.2 - 2025-11-20

🔧 Fixes

  • consider inexact count of open enums when deserializing unions (commit by @idbentley)

unions: 2.87.1 - 2025-11-10

🐛 Bug Fixes

  • prevent name collisions in getter methods due to discriminator mapping (commit by @2ynn)

unions: 2.87.0 - 2025-10-23

🐝 New Features

  • introduce a smarter union deserialization strategy (commit by @ThomasRooney)

unions: 2.86.0 - 2025-10-01

🐝 New Features

  • support nested discriminated unions (commit by @vishalg0wda)

unions: 2.85.14 - 2025-08-29

🐛 Bug Fixes

  • properly support union types in query parameters (commit by @subomi)

unions: 2.85.13 - 2025-08-26

🐛 Bug Fixes

  • fixed deserialization of weak unions to better match field requiredness and support forward compatibility (commit by @tristanspeakeasy)

unions: 2.85.12 - 2025-07-03

🐛 Bug Fixes

  • fixed issues with enum names potentially conflicting with other types (commit by @tristanspeakeasy)

unions: 2.85.11 - 2025-06-09

🐛 Bug Fixes

unions: 2.85.10 - 2024-11-05

🐛 Bug Fixes

  • improved handling of complex allOf schemas that merge multiple types (commit by @tristanspeakeasy)

unions: 2.85.9 - 2024-08-09

🐛 Bug Fixes

unions: 2.85.8 - 2024-05-17

🔧 Chores

  • better error logs when failing to unmarshal bytes into union types (commit by @ThomasRooney)

unions: 2.85.7 - 2024-05-16

🐛 Bug Fixes

unions: 2.85.6 - 2024-05-14

🐛 Bug Fixes

  • more flexible types (allow unknown fields) if an anyOf child is used with a discriminant (commit by @ThomasRooney)

unions: 2.85.5 - 2024-05-02

🐛 Bug Fixes

  • handle unions in flat response format (commit by @idbentley)

unions: 2.85.4 - 2024-02-29

🐛 Bug Fixes

  • null-enums are treated as switch a oneOf field to nullable (commit by @disintegrator)

unions: 2.85.3 - 2024-02-07

🐛 Bug Fixes

  • handling of discriminator fields with non standard names (commit by @TristanSpeakeasy)

unions: 2.85.2 - 2023-12-14

🐛 Bug Fixes

unions: 2.85.1 - 2023-12-14

🐛 Bug Fixes

  • fixed merging of allOf/oneOf schemas with their parents (commit by @TristanSpeakeasy)

unions: 2.84.1 - 2023-10-31

🐛 Bug Fixes

  • support unions (oneOf) containing bigint and decimal members (commit by @disintegrator)

unions: 2.85.0 - 2023-10-24

🐝 New Features

  • Add tests to support complex unions in go (commit by @idbentley)

unions: 2.84.0 - 2023-10-18

🐝 New Features

  • support complex types in unions (commit by @idbentley)

unions: 2.83.1 - 2023-09-30

🐛 Bug Fixes

unions: 2.83.0 - 2023-09-15

🐝 New Features

  • add support for nullable unions (commit by @2ynn)

unions: 2.82.0 - 2023-09-04

🐝 New Features

  • create input and output unions when appropriate (commit by @idbentley)

unions: 2.81.2 - 2023-08-07

🐛 Bug Fixes

Based on Speakeasy CLI 1.761.1

Last updated by Speakeasy workflow

@github-actions github-actions Bot added the patch Patch version bump label Jun 23, 2026
@github-actions github-actions Bot force-pushed the speakeasy-sdk-regen-1782223808 branch from 1f6a651 to 52902f8 Compare June 23, 2026 19:06

@perry-the-pr-reviewer perry-the-pr-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perry's Review

Speakeasy regen bumping the Go SDK 0.5.0 → 0.5.1 (new Benchmarks/Classifications/Images services, workspace-budget + task-classification models), but it ships on a downgraded generator that reintroduces a confirmed union-deserialization panic and deletes the test that catches it.

Verdict: 🔁 Needs changes

Details

Risk: 🔴 High — human approval required

CI: no checks configured on this repo (status pending, 0 check-runs) — not a gate.

Findings (see inline comments):

  • 🔴 internal/utils/union.go:132.Elem()/.IsNil() panic on non-pointer union variants (49 such members: 17 any, 32 slices). Empirically reproduced at this head: reflect: call of reflect.Value.Elem on slice Value. Reachable via /responses (InputsUnionInputsUnion1InputsMessage.Content) and chat content unions.
  • 🔴 internal/utils/union_test.go:589 — the deleted TestPickBestUnionCandidate_NonPointerUnionVariants was the only guard for this exact panic; suite is green only because it's gone.
  • 🟡 .speakeasy/gen.lock:6 — root cause: generator downgrade (speakeasyVersion 1.778.0→1.761.1, unions 2.87.7→2.87.6) re-emits the crash-prone scorer. Regenerate from the newer generator.
  • nit: 326-file regen also removes 216 exported funcs/methods incl. Datasets.GetBenchmarksArtificialAnalysis/GetBenchmarksDesignArena (replaced by unified Benchmarks.GetBenchmarks). Breaking API change under a patch bump — acceptable pre-1.0 per SemVer, but worth a minor bump and a RELEASES note for consumers.
  • nit: generated quickstart in README.md:84/USAGE.md calls the management-key-only GetUserActivity with OPENROUTER_API_KEY — fails for a normal inference key. Fix via an x-speakeasy-usage-example override in the spec (recurs on every regen otherwise). [codex]

Codex (gpt-5.5): flagged the datasets.go:235 nil-request pagination deref and limit/offset default drift — verified pre-existing generated code (this PR only adds 2 status-code lines to that file), so out of scope. README/USAGE management-key example folded in above.

Research: confirmed root cause against golang/go#36523 (Elem() panics on slice Values) and reflect.Value.Elem docs (panics unless Interface/Pointer kind). Speakeasy versions its CLI and generator separately (changelog); the downgrade reverts the pointer-safe union scorer that 0.5.0 shipped.

Security: no concerns — no credential/auth/streaming code touched; secret-pattern grep on added lines clean. Only note: the auto-generated README example uses a management endpoint with a regular API key (doc-quality, not exploitable).

Test coverage: regression test for the union panic was removed, not added — the central problem. The build and the internal utils test package both pass, masking the defect.

Blast radius: countFieldsRecursive is on the hot path of every non-discriminated union UnmarshalJSON across the SDK (PickBestUnionCandidate has 20+ callers). Any response/request payload activating a non-pointer union variant crashes the consumer.

Unresolved threads: none (first review of this PR).

Scope: first review (full)
Review: tier=large · model=claude-opus-latest · score=183.6

Comment thread internal/utils/union.go
if activeVariant != nil {
countFieldsRecursive(candidate, activeVariant.Type, variantVal, raw)
if activeVariant != nil && !variantVal.IsNil() {
countFieldsRecursive(candidate, activeVariant.Type.Elem(), variantVal.Elem(), raw)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[blocker] variantVal.IsNil() / .Type.Elem() / variantVal.Elem() panic whenever the active union variant is a non-pointer member — empirically reproduced.

Details

Why: the new comment at line 256 asserts "All union variants are pointers", but that invariant does not hold. 49 generated union:"member" fields in this SDK are non-pointers — 17 any interfaces and 32 slices ([]string, []ChatContentItems, []InputsContent1, …). For those, reflect.Value.Elem() panics on a slice and reflect.Type.Elem() panics on an interface, and reflect.Value.IsNil() is only valid for chan/func/interface/map/pointer/slice (a struct value would also panic).

Reproduced against this exact head in a throwaway test in the real package:

PANIC: reflect: call of reflect.Value.Elem on slice Value         (slice variant)
PANIC: reflect: Elem of invalid type interface {}                 (any variant)

Production trigger: ResponsesRequest.Input *InputsUnionInputsUnion (scored, non-discriminated) → []InputsUnion1 → candidate *InputsMessage whose Content *InputsContent2 union has the ArrayOfInputsContent1 []… (non-pointer) variant active. When PickBestUnionCandidate scores ≥2 candidates and countFieldsRecursive walks that nested union, it panics — crashing UnmarshalJSON for a normal /responses payload. The same shape recurs across chat content unions, Stop, AllowedToolsUnion, System, etc.

This is the same defect previously flagged on #303; it has been reintroduced here and its regression test (TestPickBestUnionCandidate_NonPointerUnionVariants, line 589) was deleted in the same diff, so the suite is green only because the test that catches it is gone.

Fix: guard the dereference on Kind, only unwrapping pointers (and bailing on nil) before recursing:

if activeVariant != nil && variantVal.Kind() == reflect.Ptr {
    if variantVal.IsNil() {
        return
    }
    countFieldsRecursive(candidate, activeVariant.Type.Elem(), variantVal.Elem(), raw)
} else if activeVariant != nil {
    // non-pointer member (slice / interface / etc.) — recurse without Elem()
    countFieldsRecursive(candidate, activeVariant.Type, variantVal, raw)
}

The correct upstream fix is to stop shipping the downgraded unions 2.87.6 generator (see the .speakeasy/gen.lock comment) — but the code as generated here is crash-prone and must not ship.

Ref: golang/go#36523 — Elem() on a slice reflect.Value panics; pkg.go.dev reflect.Value.Elem ("It panics if v's Kind is not Interface or Pointer").

Prompt for agents
In internal/utils/union.go:131-132 (func countFieldsRecursive, the union branch), the code calls variantVal.IsNil(), activeVariant.Type.Elem() and variantVal.Elem() assuming every union member is a pointer. That invariant is false: 49 generated union:"member" fields are non-pointers (any and []T slices). reflect.Value.Elem()/reflect.Type.Elem() panic on slice/interface kinds, crashing UnmarshalJSON for normal /responses and chat payloads (verified: "reflect: call of reflect.Value.Elem on slice Value"). Fix: only deref when variantVal.Kind()==reflect.Ptr (returning early if IsNil), and for non-pointer members recurse with the original activeVariant.Type and variantVal (no Elem()). Also restore the deleted regression test TestPickBestUnionCandidate_NonPointerUnionVariants in internal/utils/union_test.go. The root cause is the downgraded unions generator (2.87.7 -> 2.87.6) in .speakeasy/gen.lock; prefer regenerating with the newer generator that emits the pointer-safe scorer.

Reviewed at 52902f8

@@ -585,73 +585,3 @@ func TestPickBestUnionCandidate_AnyFieldType(t *testing.T) {
require.NotNil(t, result)
assert.IsType(t, B{}, result.Type)
}

func TestPickBestUnionCandidate_NonPointerUnionVariants(t *testing.T) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[blocker] Deleting TestPickBestUnionCandidate_NonPointerUnionVariants removes the only regression guard for the union.go panic — the suite now passes because the catching test is gone.

Details

Why: this test exercised exactly the slice/map/any non-pointer union-variant cases that the line-132 change panics on. With it deleted, go test ./internal/utils/ is green even though PickBestUnionCandidate crashes on real payloads. Removing the test that proves a known regression is fixed — in the same diff that reintroduces the regression — is how #303's defect silently returns.

Fix: restore this test (and keep it passing once the line-132 guard is fixed). It should cover at least: slice-typed variant active, map-typed variant active, and any-typed variant active.

Ref: prior review of #303 flagged the identical "generator downgrade reverts the fix and deletes its test" pattern.

Prompt for agents
Restore the deleted test TestPickBestUnionCandidate_NonPointerUnionVariants in internal/utils/union_test.go (it was removed in this PR at original line 589). The test must construct UnionCandidate values whose Value is a struct with non-pointer union:"member" fields (a []string slice variant, a map variant, and an `any` variant) active, call PickBestUnionCandidate, and assert it returns the expected variant without panicking. Keep it green only after fixing the Elem() guard in union.go:131-132.

Reviewed at 52902f8

Comment thread .speakeasy/gen.lock
generationVersion: 2.904.2
releaseVersion: 0.5.0
configChecksum: a8cd011d0fa84720f7c3504347addacc
speakeasyVersion: 1.761.1

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[suggestion] Generator downgrade is the root cause — speakeasyVersion 1.778.0→1.761.1, generationVersion 2.904.2→2.879.6, unions 2.87.7→2.87.6 — which re-emits the crash-prone union scorer and drops its test.

Details

Why: this regen went backwards on the generator (and the unions feature specifically, 2.87.7→2.87.6). The older generator produces the countFieldsRecursive union branch that assumes all members are pointers (see the union.go:132 blocker). The newer generator that produced 0.5.0 emitted the pointer-safe scorer and shipped the now-deleted regression test. Shipping 0.5.1 off the downgraded generator reintroduces a confirmed runtime panic.

Fix: regenerate from the newer Speakeasy generator (≥ the 2.904.2 / unions 2.87.7 that produced 0.5.0) rather than 2.879.6, so the union deserializer and its test come back. Pin the generator version in CI to prevent silent downgrades on future regens.

Ref: Speakeasy versions the CLI and the code generator separately — see Speakeasy SDK changelog.

Prompt for agents
The .speakeasy/gen.lock shows a generator downgrade (speakeasyVersion 1.778.0->1.761.1, generationVersion 2.904.2->2.879.6, unions 2.87.7->2.87.6) that reintroduces the union.go Elem() panic and deleted its regression test. Re-run the Speakeasy generation pinned to the newer generator (the one that produced 0.5.0, generationVersion 2.904.2 / unions 2.87.7) so the pointer-safe union scorer and TestPickBestUnionCandidate_NonPointerUnionVariants are regenerated. Add a CI guard that fails the regen workflow if generationVersion or the unions feature version decreases relative to main.

Reviewed at 52902f8

@github-actions github-actions Bot force-pushed the speakeasy-sdk-regen-1782223808 branch from 52902f8 to 32e9366 Compare June 23, 2026 21:50
@perry-the-pr-reviewer perry-the-pr-reviewer Bot dismissed their stale review June 23, 2026 22:03

Superseded by updated Perry review

perry-the-pr-reviewer[bot]

This comment was marked as outdated.

* `OpenRouter.Benchmarks.GetBenchmarks()`: **Added**
* `OpenRouter.Classifications.GetTaskClassifications()`: **Added**
* `OpenRouter.Images.Generate()`: **Added**
* `OpenRouter.Images.ListModels()`: **Added**
* `OpenRouter.Images.ListModelEndpoints()`: **Added**
* `OpenRouter.Workspaces.ListBudgets()`: **Added**
* `OpenRouter.Workspaces.DeleteBudget()`: **Added**
* `OpenRouter.Workspaces.SetBudget()`: **Added**
* `OpenRouter.Datasets.GetBenchmarksArtificialAnalysis()`: **Removed** (Breaking ⚠️)
* `OpenRouter.Datasets.GetBenchmarksDesignArena()`: **Removed** (Breaking ⚠️)
* `OpenRouter.Beta.Analytics.QueryAnalytics()`:  `response.Data.Warnings` **Added**
* `OpenRouter.Beta.Responses.Send()`: 
  *  `request.ResponsesRequest` **Changed**
  *  `response` **Changed**
* `OpenRouter.Tts.CreateSpeech()`: 
  *  `request.Request.Provider.Options.Tenstorrent` **Added**
* `OpenRouter.Stt.CreateTranscription()`: 
  *  `request.Request.Provider.Options.Tenstorrent` **Added**
* `OpenRouter.Byok.List()`: 
  *  `request.Provider` **Changed**
  *  `response.Data[].Provider.Enum(tenstorrent)` **Added**
* `OpenRouter.Byok.Create()`: 
  *  `request.Request.Provider.Enum(tenstorrent)` **Added**
  *  `response.Data.Provider.Enum(tenstorrent)` **Added**
* `OpenRouter.Byok.Get()`:  `response.Data.Provider.Enum(tenstorrent)` **Added**
* `OpenRouter.Byok.Update()`:  `response.Data.Provider.Enum(tenstorrent)` **Added**
* `OpenRouter.Chat.Send()`: 
  *  `request.ChatRequest` **Changed**
  *  `response` **Changed**
* `OpenRouter.Embeddings.Generate()`: 
  *  `request.Request.Provider.Ignore[].union(ProviderName).Enum(tenstorrent)` **Added**
  *  `response.Usage` **Changed**
* `OpenRouter.Embeddings.ListModels()`:  `response.Data[].Reasoning` **Added**
* `OpenRouter.Endpoints.ListZdrEndpoints()`:  `response.Data[].ProviderName.Enum(tenstorrent)` **Added**
* `OpenRouter.Endpoints.List()`:  `response.Data.Endpoints[].ProviderName.Enum(tenstorrent)` **Added**
* `OpenRouter.Generations.GetGeneration()`:  `response.Data.ProviderResponses[].ProviderName.Enum(tenstorrent)` **Added**
* `OpenRouter.Models.Get()`:  `response.Data.Reasoning` **Added**
* `OpenRouter.Models.List()`:  `response.Data[].Reasoning` **Added**
* `OpenRouter.Models.ListForUser()`:  `response.Data[].Reasoning` **Added**
* `OpenRouter.Presets.CreatePresetsChatCompletions()`:  `request.ChatRequest` **Changed**
* `OpenRouter.Presets.CreatePresetsMessages()`:  `request.MessagesRequest` **Changed**
* `OpenRouter.Presets.CreatePresetsResponses()`:  `request.ResponsesRequest` **Changed**
* `OpenRouter.Rerank.Rerank()`: 
  *  `request.Request.Provider.Ignore[].union(ProviderName).Enum(tenstorrent)` **Added**
* `OpenRouter.VideoGeneration.Generate()`: 
  *  `request.Request.Provider.Options.Tenstorrent` **Added**
@github-actions github-actions Bot force-pushed the speakeasy-sdk-regen-1782223808 branch from 32e9366 to c791355 Compare June 24, 2026 00:41
@mattapperson mattapperson changed the title chore: 🐝 Update SDK - Generate SDK (spec change merged) 0.5.1 chore: 🐝 Update SDK - Generate SDK 0.5.1 Jun 24, 2026

@perry-the-pr-reviewer perry-the-pr-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perry's Review

Speakeasy SDK regen to v0.5.1 — re-review at commit c791355. The substantive Go code is unchanged since my prior review (this push only refreshed lock files plus a rebase onto main); both prior blockers still reproduce.

Verdict: 🔁 Needs changes

Details

Risk: 🔴 High — human approval required

CI: no checks are configured on this PR (combined status empty) — neither the union panic nor the failing example test would be caught by CI. The full Go test suite is red at this head (see below).

Findings — all four were already raised on this PR and remain unresolved. I re-verified each still holds at this head rather than re-posting duplicate inline comments:

  • 🔴 union.go (around L132) — the new activeVariant.Type.Elem() / variantVal.Elem() / variantVal.IsNil() calls panic when the active union variant is a non-pointer member. Empirically reproduced at this head by unmarshalling a realistic role=user content-array payload into BaseInputsUnion1: "panic: reflect: call of reflect.Value.Elem on slice Value". 48 non-pointer union members (string slices, float slices, any, slices of structs) exist across core models, reachable from ~76 UnmarshalJSON sites (chat, embeddings, responses, rerank, …). The code comment "All union variants are pointers" is false.
  • 🔴 union_test.go — this PR deletes TestPickBestUnionCandidate_NonPointerUnionVariants, the only regression test covering the panicking path. It passes on main and would have gone red here; removing it is what lets the suite stay green over a live crash.
  • 🟡 gen.lock — root cause: the generator is downgraded (speakeasyVersion 1.778.0 to 1.761.1, generationVersion 2.904.2 to 2.879.6, unions 2.87.7 to 2.87.6), which re-emits the older crash-prone union scorer and drops its test. Regenerating with the generator version on main should fix both blockers. Independently flagged by Codex plus the correctness lane.
  • 🟡 openrouter.go — bumping SDKVersion to 0.5.1 leaves the committed example test asserting 0.5.0, so ExampleNew fails. The example and doc files are not in this diff, but the version bump here is what breaks them.

Codex (heavy second opinion): corroborated the generator-downgrade blocker; its "AnthropicUsageIteration undiscriminated anyOf" note is a pre-existing spec shape, not introduced by this diff.

Research: reflect Value.Elem() is only valid on pointers and interfaces — calling it on a slice value panics ("call of reflect.Value.Elem on slice Value"); on an interface type, Type.Elem() panics too. The correct generated form guards on Kind() before dereferencing. The generator on main (generationVersion ≥ 2.904.2) emits the guarded code; this PR's downgrade reintroduces the unguarded form.

Security: no concerns — pure generated SDK; secret scan clean; no hand-written auth or key handling in the diff. The new tenstorrent provider enum is benign.

Breaking changes: Datasets.GetBenchmarksArtificialAnalysis() and GetBenchmarksDesignArena() are removed (intentional upstream spec change, flagged in the PR body).

Test coverage: the one test that covered the panicking path was deleted; the components package has no test files, so nothing else guards it.

Unresolved threads: 4 — all four findings above already have open Perry threads at this head; the prior CHANGES_REQUESTED review keeps the merge gate. Not re-posting to avoid duplicate noise.

Scope: incremental — substantive Go code unchanged since prior review; only lock-file plus rebase delta this push.
Review: tier=large · model=claude-opus-latest · score=184.5

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

patch Patch version bump

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants