provider_options.go

 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}