provider_options.go

 1package openai
 2
 3import (
 4	"charm.land/fantasy"
 5	"github.com/openai/openai-go/v2"
 6)
 7
 8type ReasoningEffort string
 9
10const (
11	ReasoningEffortMinimal ReasoningEffort = "minimal"
12	ReasoningEffortLow     ReasoningEffort = "low"
13	ReasoningEffortMedium  ReasoningEffort = "medium"
14	ReasoningEffortHigh    ReasoningEffort = "high"
15)
16
17type ProviderMetadata struct {
18	Logprobs                 []openai.ChatCompletionTokenLogprob `json:"logprobs"`
19	AcceptedPredictionTokens int64                               `json:"accepted_prediction_tokens"`
20	RejectedPredictionTokens int64                               `json:"rejected_prediction_tokens"`
21}
22
23func (*ProviderMetadata) Options() {}
24
25type ProviderOptions struct {
26	LogitBias           map[string]int64 `json:"logit_bias"`
27	LogProbs            *bool            `json:"log_probs"`
28	TopLogProbs         *int64           `json:"top_log_probs"`
29	ParallelToolCalls   *bool            `json:"parallel_tool_calls"`
30	User                *string          `json:"user"`
31	ReasoningEffort     *ReasoningEffort `json:"reasoning_effort"`
32	MaxCompletionTokens *int64           `json:"max_completion_tokens"`
33	TextVerbosity       *string          `json:"text_verbosity"`
34	Prediction          map[string]any   `json:"prediction"`
35	Store               *bool            `json:"store"`
36	Metadata            map[string]any   `json:"metadata"`
37	PromptCacheKey      *string          `json:"prompt_cache_key"`
38	SafetyIdentifier    *string          `json:"safety_identifier"`
39	ServiceTier         *string          `json:"service_tier"`
40	StructuredOutputs   *bool            `json:"structured_outputs"`
41}
42
43func (*ProviderOptions) Options() {}
44
45type ProviderFileOptions struct {
46	ImageDetail string `json:"image_detail"`
47}
48
49func (*ProviderFileOptions) Options() {}
50
51func ReasoningEffortOption(e ReasoningEffort) *ReasoningEffort {
52	return &e
53}
54
55func NewProviderOptions(opts *ProviderOptions) fantasy.ProviderOptions {
56	return fantasy.ProviderOptions{
57		Name: opts,
58	}
59}
60
61func NewProviderFileOptions(opts *ProviderFileOptions) fantasy.ProviderOptions {
62	return fantasy.ProviderOptions{
63		Name: opts,
64	}
65}
66
67func ParseOptions(data map[string]any) (*ProviderOptions, error) {
68	var options ProviderOptions
69	if err := fantasy.ParseOptions(data, &options); err != nil {
70		return nil, err
71	}
72	return &options, nil
73}