1package openai
 2
 3import (
 4	"github.com/charmbracelet/fantasy/ai"
 5	"github.com/openai/openai-go/v2"
 6)
 7
 8const OptionsKey = "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 `json:"logprobs"`
21	AcceptedPredictionTokens int64                               `json:"accepted_prediction_tokens"`
22	RejectedPredictionTokens int64                               `json:"rejected_prediction_tokens"`
23}
24
25func (*ProviderMetadata) Options() {}
26
27type ProviderOptions struct {
28	LogitBias           map[string]int64 `json:"logit_bias"`
29	LogProbs            *bool            `json:"log_probs"`
30	TopLogProbs         *int64           `json:"top_log_probs"`
31	ParallelToolCalls   *bool            `json:"parallel_tool_calls"`
32	User                *string          `json:"user"`
33	ReasoningEffort     *ReasoningEffort `json:"reasoning_effort"`
34	MaxCompletionTokens *int64           `json:"max_completion_tokens"`
35	TextVerbosity       *string          `json:"text_verbosity"`
36	Prediction          map[string]any   `json:"prediction"`
37	Store               *bool            `json:"store"`
38	Metadata            map[string]any   `json:"metadata"`
39	PromptCacheKey      *string          `json:"prompt_cache_key"`
40	SafetyIdentifier    *string          `json:"safety_identifier"`
41	ServiceTier         *string          `json:"service_tier"`
42	StructuredOutputs   *bool            `json:"structured_outputs"`
43}
44
45func (*ProviderOptions) Options() {}
46
47type ProviderFileOptions struct {
48	ImageDetail string `json:"image_detail"`
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		OptionsKey: opts,
60	}
61}
62
63func NewProviderFileOptions(opts *ProviderFileOptions) ai.ProviderOptions {
64	return ai.ProviderOptions{
65		OptionsKey: opts,
66	}
67}