1package openai
 2
 3import (
 4	"github.com/charmbracelet/ai/ai"
 5	"github.com/openai/openai-go/v2"
 6)
 7
 8const ProviderOptionsKey = "openai"
 9
10type ReasoningEffort string
11
12const (
13	ReasoningEffortMinimal ReasoningEffort = "minimal"
14	ReasoningEffortLow     ReasoningEffort = "low"
15	ReasoningEffortMedium  ReasoningEffort = "medium"
16	ReasoningEffortHigh    ReasoningEffort = "high"
17)
18
19type ProviderMetadata struct {
20	Logprobs                 []openai.ChatCompletionTokenLogprob
21	AcceptedPredictionTokens int64
22	RejectedPredictionTokens int64
23}
24
25func (*ProviderMetadata) Options() {}
26
27type ProviderOptions struct {
28	LogitBias           map[string]int64
29	LogProbs            *bool
30	TopLogProbs         *int64
31	ParallelToolCalls   *bool
32	User                *string
33	ReasoningEffort     *ReasoningEffort
34	MaxCompletionTokens *int64
35	TextVerbosity       *string
36	Prediction          map[string]any
37	Store               *bool
38	Metadata            map[string]any
39	PromptCacheKey      *string
40	SafetyIdentifier    *string
41	ServiceTier         *string
42	StructuredOutputs   *bool
43}
44
45func (*ProviderOptions) Options() {}
46
47type ProviderFileOptions struct {
48	ImageDetail string
49}
50
51func (*ProviderFileOptions) Options() {}
52
53func ReasoningEffortOption(e ReasoningEffort) *ReasoningEffort {
54	return &e
55}
56
57func NewProviderOptions(opts *ProviderOptions) ai.ProviderOptions {
58	return ai.ProviderOptions{
59		ProviderOptionsKey: opts,
60	}
61}
62
63func NewProviderFileOptions(opts *ProviderFileOptions) ai.ProviderOptions {
64	return ai.ProviderOptions{
65		ProviderOptionsKey: opts,
66	}
67}