1// Package openai provides an implementation of the fantasy AI SDK for OpenAI's language models.
2package openai
3
4import (
5 "charm.land/fantasy"
6 "github.com/openai/openai-go/v2"
7)
8
9// ReasoningEffort represents the reasoning effort level for OpenAI models.
10type ReasoningEffort string
11
12const (
13 // ReasoningEffortMinimal represents minimal reasoning effort.
14 ReasoningEffortMinimal ReasoningEffort = "minimal"
15 // ReasoningEffortLow represents low reasoning effort.
16 ReasoningEffortLow ReasoningEffort = "low"
17 // ReasoningEffortMedium represents medium reasoning effort.
18 ReasoningEffortMedium ReasoningEffort = "medium"
19 // ReasoningEffortHigh represents high reasoning effort.
20 ReasoningEffortHigh ReasoningEffort = "high"
21)
22
23// ProviderMetadata represents additional metadata from OpenAI provider.
24type ProviderMetadata struct {
25 Logprobs []openai.ChatCompletionTokenLogprob `json:"logprobs"`
26 AcceptedPredictionTokens int64 `json:"accepted_prediction_tokens"`
27 RejectedPredictionTokens int64 `json:"rejected_prediction_tokens"`
28}
29
30// Options implements the ProviderOptions interface.
31func (*ProviderMetadata) Options() {}
32
33// ProviderOptions represents additional options for OpenAI provider.
34type ProviderOptions struct {
35 LogitBias map[string]int64 `json:"logit_bias"`
36 LogProbs *bool `json:"log_probs"`
37 TopLogProbs *int64 `json:"top_log_probs"`
38 ParallelToolCalls *bool `json:"parallel_tool_calls"`
39 User *string `json:"user"`
40 ReasoningEffort *ReasoningEffort `json:"reasoning_effort"`
41 MaxCompletionTokens *int64 `json:"max_completion_tokens"`
42 TextVerbosity *string `json:"text_verbosity"`
43 Prediction map[string]any `json:"prediction"`
44 Store *bool `json:"store"`
45 Metadata map[string]any `json:"metadata"`
46 PromptCacheKey *string `json:"prompt_cache_key"`
47 SafetyIdentifier *string `json:"safety_identifier"`
48 ServiceTier *string `json:"service_tier"`
49 StructuredOutputs *bool `json:"structured_outputs"`
50}
51
52// Options implements the ProviderOptions interface.
53func (*ProviderOptions) Options() {}
54
55// ProviderFileOptions represents file options for OpenAI provider.
56type ProviderFileOptions struct {
57 ImageDetail string `json:"image_detail"`
58}
59
60// Options implements the ProviderOptions interface.
61func (*ProviderFileOptions) Options() {}
62
63// ReasoningEffortOption creates a pointer to a ReasoningEffort value.
64func ReasoningEffortOption(e ReasoningEffort) *ReasoningEffort {
65 return &e
66}
67
68// NewProviderOptions creates new provider options for OpenAI.
69func NewProviderOptions(opts *ProviderOptions) fantasy.ProviderOptions {
70 return fantasy.ProviderOptions{
71 Name: opts,
72 }
73}
74
75// NewProviderFileOptions creates new file options for OpenAI.
76func NewProviderFileOptions(opts *ProviderFileOptions) fantasy.ProviderOptions {
77 return fantasy.ProviderOptions{
78 Name: opts,
79 }
80}
81
82// ParseOptions parses provider options from a map.
83func ParseOptions(data map[string]any) (*ProviderOptions, error) {
84 var options ProviderOptions
85 if err := fantasy.ParseOptions(data, &options); err != nil {
86 return nil, err
87 }
88 return &options, nil
89}