Skip to content

Commit b6af6b1

Browse files
authored
feat: improve OpenAI response handling and token usage reporting (#246)
- Ignore errors when determining if the config file exists before creating it - Add support for returning detailed prompt token usage in OpenAI responses - Use MaxCompletionTokens instead of MaxTokens when specifying completion limits - Remove redundant handling for O-series OpenAI models in completion requests Signed-off-by: appleboy <[email protected]>
1 parent 166cd70 commit b6af6b1

File tree

2 files changed

+15
-27
lines changed

2 files changed

+15
-27
lines changed

cmd/cmd.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,7 @@ func initConfig() {
7171
if cfgFile != "" {
7272
// Use config file from the flag.
7373
viper.SetConfigFile(cfgFile)
74-
exists, err := file.IsFile(cfgFile)
75-
if err != nil {
76-
// Config file status could not be determined; handle or ignore as needed
77-
// Optionally: log.Fatalf("failed to check if config file %s is a file: %v", cfgFile, err)
78-
}
74+
exists, _ := file.IsFile(cfgFile)
7975
if !exists {
8076
// Config file not found; ignore error if desired
8177
_, err := os.Create(cfgFile)

provider/openai/openai.go

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ func (c *Client) Completion(ctx context.Context, content string) (*core.Response
4949
CompletionTokens: resp.Usage.CompletionTokens,
5050
TotalTokens: resp.Usage.TotalTokens,
5151
CompletionTokensDetails: resp.Usage.CompletionTokensDetails,
52+
PromptTokensDetails: resp.Usage.PromptTokensDetails,
5253
},
5354
}, nil
5455
}
@@ -75,6 +76,7 @@ func (c *Client) GetSummaryPrefix(ctx context.Context, content string) (*core.Re
7576
CompletionTokens: resp.Usage.CompletionTokens,
7677
TotalTokens: resp.Usage.TotalTokens,
7778
CompletionTokensDetails: resp.Usage.CompletionTokensDetails,
79+
PromptTokensDetails: resp.Usage.PromptTokensDetails,
7880
}
7981
if len(msg.ToolCalls) == 0 {
8082
return &core.Response{
@@ -104,12 +106,12 @@ func (c *Client) CreateFunctionCall(
104106
}
105107

106108
req := openai.ChatCompletionRequest{
107-
Model: c.model,
108-
MaxTokens: c.maxTokens,
109-
Temperature: c.temperature,
110-
TopP: c.topP,
111-
FrequencyPenalty: c.frequencyPenalty,
112-
PresencePenalty: c.presencePenalty,
109+
Model: c.model,
110+
MaxCompletionTokens: c.maxTokens,
111+
Temperature: c.temperature,
112+
TopP: c.topP,
113+
FrequencyPenalty: c.frequencyPenalty,
114+
PresencePenalty: c.presencePenalty,
113115
Messages: []openai.ChatCompletionMessage{
114116
{
115117
Role: openai.ChatMessageRoleAssistant,
@@ -129,11 +131,6 @@ func (c *Client) CreateFunctionCall(
129131
},
130132
}
131133

132-
if checkOSeriesModels.MatchString(c.model) {
133-
req.MaxTokens = 0
134-
req.MaxCompletionTokens = c.maxTokens
135-
}
136-
137134
return c.client.CreateChatCompletion(ctx, req)
138135
}
139136

@@ -143,12 +140,12 @@ func (c *Client) CreateChatCompletion(
143140
content string,
144141
) (resp openai.ChatCompletionResponse, err error) {
145142
req := openai.ChatCompletionRequest{
146-
Model: c.model,
147-
MaxTokens: c.maxTokens,
148-
Temperature: c.temperature,
149-
TopP: c.topP,
150-
FrequencyPenalty: c.frequencyPenalty,
151-
PresencePenalty: c.presencePenalty,
143+
Model: c.model,
144+
MaxCompletionTokens: c.maxTokens,
145+
Temperature: c.temperature,
146+
TopP: c.topP,
147+
FrequencyPenalty: c.frequencyPenalty,
148+
PresencePenalty: c.presencePenalty,
152149
Messages: []openai.ChatCompletionMessage{
153150
{
154151
Role: openai.ChatMessageRoleAssistant,
@@ -161,11 +158,6 @@ func (c *Client) CreateChatCompletion(
161158
},
162159
}
163160

164-
if checkOSeriesModels.MatchString(c.model) {
165-
req.MaxTokens = 0
166-
req.MaxCompletionTokens = c.maxTokens
167-
}
168-
169161
return c.client.CreateChatCompletion(ctx, req)
170162
}
171163

0 commit comments

Comments
 (0)