Skip to content

Commit 2b1c62a

Browse files
committed
refactor: change provider options structs to be private / internal
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.
1 parent a2e5c49 commit 2b1c62a

4 files changed

Lines changed: 65 additions & 62 deletions

File tree

providers/anthropic/anthropic.go

Lines changed: 6 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,6 @@ import (
1616
"github.com/charmbracelet/ai"
1717
)
1818

19-
type ProviderOptions struct {
20-
SendReasoning *bool `json:"send_reasoning,omitempty"`
21-
Thinking *ThinkingProviderOption `json:"thinking,omitempty"`
22-
DisableParallelToolUse *bool `json:"disable_parallel_tool_use,omitempty"`
23-
}
24-
25-
type ThinkingProviderOption struct {
26-
BudgetTokens int64 `json:"budget_tokens"`
27-
}
28-
29-
type ReasoningMetadata struct {
30-
Signature string `json:"signature"`
31-
RedactedData string `json:"redacted_data"`
32-
}
33-
34-
type CacheControlProviderOptions struct {
35-
Type string `json:"type"`
36-
}
37-
type FilePartProviderOptions struct {
38-
EnableCitations bool `json:"enable_citations"`
39-
Title string `json:"title"`
40-
Context string `json:"context"`
41-
}
42-
4319
type options struct {
4420
baseURL string
4521
apiKey string
@@ -147,7 +123,7 @@ func (a languageModel) Provider() string {
147123

148124
func (a languageModel) prepareParams(call ai.Call) (*anthropic.MessageNewParams, []ai.CallWarning, error) {
149125
params := &anthropic.MessageNewParams{}
150-
providerOptions := &ProviderOptions{}
126+
providerOptions := &providerOptions{}
151127
if v, ok := call.ProviderOptions["anthropic"]; ok {
152128
err := ai.ParseOptions(v, providerOptions)
153129
if err != nil {
@@ -246,19 +222,19 @@ func (a languageModel) prepareParams(call ai.Call) (*anthropic.MessageNewParams,
246222
return params, warnings, nil
247223
}
248224

249-
func getCacheControl(providerOptions ai.ProviderOptions) *CacheControlProviderOptions {
225+
func getCacheControl(providerOptions ai.ProviderOptions) *cacheControlProviderOptions {
250226
if anthropicOptions, ok := providerOptions["anthropic"]; ok {
251227
if cacheControl, ok := anthropicOptions["cache_control"]; ok {
252228
if cc, ok := cacheControl.(map[string]any); ok {
253-
cacheControlOption := &CacheControlProviderOptions{}
229+
cacheControlOption := &cacheControlProviderOptions{}
254230
err := ai.ParseOptions(cc, cacheControlOption)
255231
if err != nil {
256232
return cacheControlOption
257233
}
258234
}
259235
} else if cacheControl, ok := anthropicOptions["cacheControl"]; ok {
260236
if cc, ok := cacheControl.(map[string]any); ok {
261-
cacheControlOption := &CacheControlProviderOptions{}
237+
cacheControlOption := &cacheControlProviderOptions{}
262238
err := ai.ParseOptions(cc, cacheControlOption)
263239
if err != nil {
264240
return cacheControlOption
@@ -269,9 +245,9 @@ func getCacheControl(providerOptions ai.ProviderOptions) *CacheControlProviderOp
269245
return nil
270246
}
271247

272-
func getReasoningMetadata(providerOptions ai.ProviderOptions) *ReasoningMetadata {
248+
func getReasoningMetadata(providerOptions ai.ProviderOptions) *reasoningMetadata {
273249
if anthropicOptions, ok := providerOptions["anthropic"]; ok {
274-
reasoningMetadata := &ReasoningMetadata{}
250+
reasoningMetadata := &reasoningMetadata{}
275251
err := ai.ParseOptions(anthropicOptions, reasoningMetadata)
276252
if err != nil {
277253
return reasoningMetadata
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package anthropic
2+
3+
type providerOptions struct {
4+
SendReasoning *bool `json:"send_reasoning,omitempty"`
5+
Thinking *thinkingProviderOption `json:"thinking,omitempty"`
6+
DisableParallelToolUse *bool `json:"disable_parallel_tool_use,omitempty"`
7+
}
8+
9+
type thinkingProviderOption struct {
10+
BudgetTokens int64 `json:"budget_tokens"`
11+
}
12+
13+
type reasoningMetadata struct {
14+
Signature string `json:"signature"`
15+
RedactedData string `json:"redacted_data"`
16+
}
17+
18+
type cacheControlProviderOptions struct {
19+
Type string `json:"type"`
20+
}
21+
22+
type filePartProviderOptions struct {
23+
EnableCitations bool `json:"enable_citations"`
24+
Title string `json:"title"`
25+
Context string `json:"context"`
26+
}

providers/openai/openai.go

Lines changed: 5 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,33 +19,6 @@ import (
1919
"github.com/openai/openai-go/v2/shared"
2020
)
2121

22-
type ReasoningEffort string
23-
24-
const (
25-
ReasoningEffortMinimal ReasoningEffort = "minimal"
26-
ReasoningEffortLow ReasoningEffort = "low"
27-
ReasoningEffortMedium ReasoningEffort = "medium"
28-
ReasoningEffortHigh ReasoningEffort = "high"
29-
)
30-
31-
type ProviderOptions struct {
32-
LogitBias map[string]int64 `json:"logit_bias"`
33-
LogProbs *bool `json:"log_probes"`
34-
TopLogProbs *int64 `json:"top_log_probs"`
35-
ParallelToolCalls *bool `json:"parallel_tool_calls"`
36-
User *string `json:"user"`
37-
ReasoningEffort *ReasoningEffort `json:"reasoning_effort"`
38-
MaxCompletionTokens *int64 `json:"max_completion_tokens"`
39-
TextVerbosity *string `json:"text_verbosity"`
40-
Prediction map[string]any `json:"prediction"`
41-
Store *bool `json:"store"`
42-
Metadata map[string]any `json:"metadata"`
43-
PromptCacheKey *string `json:"prompt_cache_key"`
44-
SafetyIdentifier *string `json:"safety_identifier"`
45-
ServiceTier *string `json:"service_tier"`
46-
StructuredOutputs *bool `json:"structured_outputs"`
47-
}
48-
4922
type provider struct {
5023
options options
5124
}
@@ -179,7 +152,7 @@ func (o languageModel) Provider() string {
179152
func (o languageModel) prepareParams(call ai.Call) (*openai.ChatCompletionNewParams, []ai.CallWarning, error) {
180153
params := &openai.ChatCompletionNewParams{}
181154
messages, warnings := toPrompt(call.Prompt)
182-
providerOptions := &ProviderOptions{}
155+
providerOptions := &providerOptions{}
183156
if v, ok := call.ProviderOptions["openai"]; ok {
184157
err := ai.ParseOptions(v, providerOptions)
185158
if err != nil {
@@ -273,13 +246,13 @@ func (o languageModel) prepareParams(call ai.Call) (*openai.ChatCompletionNewPar
273246

274247
if providerOptions.ReasoningEffort != nil {
275248
switch *providerOptions.ReasoningEffort {
276-
case ReasoningEffortMinimal:
249+
case reasoningEffortMinimal:
277250
params.ReasoningEffort = shared.ReasoningEffortMinimal
278-
case ReasoningEffortLow:
251+
case reasoningEffortLow:
279252
params.ReasoningEffort = shared.ReasoningEffortLow
280-
case ReasoningEffortMedium:
253+
case reasoningEffortMedium:
281254
params.ReasoningEffort = shared.ReasoningEffortMedium
282-
case ReasoningEffortHigh:
255+
case reasoningEffortHigh:
283256
params.ReasoningEffort = shared.ReasoningEffortHigh
284257
default:
285258
return nil, nil, fmt.Errorf("reasoning model `%s` not supported", *providerOptions.ReasoningEffort)
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package openai
2+
3+
type reasoningEffort string
4+
5+
const (
6+
reasoningEffortMinimal reasoningEffort = "minimal"
7+
reasoningEffortLow reasoningEffort = "low"
8+
reasoningEffortMedium reasoningEffort = "medium"
9+
reasoningEffortHigh reasoningEffort = "high"
10+
)
11+
12+
type providerOptions struct {
13+
LogitBias map[string]int64 `json:"logit_bias"`
14+
LogProbs *bool `json:"log_probes"`
15+
TopLogProbs *int64 `json:"top_log_probs"`
16+
ParallelToolCalls *bool `json:"parallel_tool_calls"`
17+
User *string `json:"user"`
18+
ReasoningEffort *reasoningEffort `json:"reasoning_effort"`
19+
MaxCompletionTokens *int64 `json:"max_completion_tokens"`
20+
TextVerbosity *string `json:"text_verbosity"`
21+
Prediction map[string]any `json:"prediction"`
22+
Store *bool `json:"store"`
23+
Metadata map[string]any `json:"metadata"`
24+
PromptCacheKey *string `json:"prompt_cache_key"`
25+
SafetyIdentifier *string `json:"safety_identifier"`
26+
ServiceTier *string `json:"service_tier"`
27+
StructuredOutputs *bool `json:"structured_outputs"`
28+
}

0 commit comments

Comments
 (0)