summaryrefslogtreecommitdiffhomepage
path: root/internal/llm/provider
diff options
context:
space:
mode:
authorKujtim Hoxha <[email protected]>2025-04-18 20:17:38 +0200
committerKujtim Hoxha <[email protected]>2025-04-21 13:42:27 +0200
commit333ea6ec4b2abfc2c1a9c3f6b0918ca5d296347f (patch)
treee0d456417368e8716c81ee43b82be3d6ed39c59e /internal/llm/provider
parent05d0e86f10369fd0e51a924ac88029fb92591499 (diff)
downloadopencode-333ea6ec4b2abfc2c1a9c3f6b0918ca5d296347f.tar.gz
opencode-333ea6ec4b2abfc2c1a9c3f6b0918ca5d296347f.zip
implement patch, update ui, improve rendering
Diffstat (limited to 'internal/llm/provider')
-rw-r--r--internal/llm/provider/openai.go49
1 files changed, 41 insertions, 8 deletions
diff --git a/internal/llm/provider/openai.go b/internal/llm/provider/openai.go
index 13ce934f2..6c6f74988 100644
--- a/internal/llm/provider/openai.go
+++ b/internal/llm/provider/openai.go
@@ -14,11 +14,13 @@ import (
"github.com/kujtimiihoxha/opencode/internal/message"
"github.com/openai/openai-go"
"github.com/openai/openai-go/option"
+ "github.com/openai/openai-go/shared"
)
type openaiOptions struct {
- baseURL string
- disableCache bool
+ baseURL string
+ disableCache bool
+ reasoningEffort string
}
type OpenAIOption func(*openaiOptions)
@@ -32,7 +34,9 @@ type openaiClient struct {
type OpenAIClient ProviderClient
func newOpenAIClient(opts providerClientOptions) OpenAIClient {
- openaiOpts := openaiOptions{}
+ openaiOpts := openaiOptions{
+ reasoningEffort: "medium",
+ }
for _, o := range opts.openaiOptions {
o(&openaiOpts)
}
@@ -138,12 +142,29 @@ func (o *openaiClient) finishReason(reason string) message.FinishReason {
}
func (o *openaiClient) preparedParams(messages []openai.ChatCompletionMessageParamUnion, tools []openai.ChatCompletionToolParam) openai.ChatCompletionNewParams {
- return openai.ChatCompletionNewParams{
- Model: openai.ChatModel(o.providerOptions.model.APIModel),
- Messages: messages,
- MaxTokens: openai.Int(o.providerOptions.maxTokens),
- Tools: tools,
+ params := openai.ChatCompletionNewParams{
+ Model: openai.ChatModel(o.providerOptions.model.APIModel),
+ Messages: messages,
+ Tools: tools,
}
+
+ if o.providerOptions.model.CanReason == true {
+ params.MaxCompletionTokens = openai.Int(o.providerOptions.maxTokens)
+ switch o.options.reasoningEffort {
+ case "low":
+ params.ReasoningEffort = shared.ReasoningEffortLow
+ case "medium":
+ params.ReasoningEffort = shared.ReasoningEffortMedium
+ case "high":
+ params.ReasoningEffort = shared.ReasoningEffortHigh
+ default:
+ params.ReasoningEffort = shared.ReasoningEffortMedium
+ }
+ } else {
+ params.MaxTokens = openai.Int(o.providerOptions.maxTokens)
+ }
+
+ return params
}
func (o *openaiClient) send(ctx context.Context, messages []message.Message, tools []tools.BaseTool) (response *ProviderResponse, err error) {
@@ -359,3 +380,15 @@ func WithOpenAIDisableCache() OpenAIOption {
}
}
+func WithReasoningEffort(effort string) OpenAIOption {
+ return func(options *openaiOptions) {
+ defaultReasoningEffort := "medium"
+ switch effort {
+ case "low", "medium", "high":
+ defaultReasoningEffort = effort
+ default:
+ logging.Warn("Invalid reasoning effort, using default: medium")
+ }
+ options.reasoningEffort = defaultReasoningEffort
+ }
+}