1package openai
2
3import (
4 "github.com/charmbracelet/fantasy/ai"
5 "github.com/openai/openai-go/v2"
6)
7
8const Name = "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 Name: opts,
60 }
61}
62
63func NewProviderFileOptions(opts *ProviderFileOptions) ai.ProviderOptions {
64 return ai.ProviderOptions{
65 Name: opts,
66 }
67}