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}