From 240271549278b77ea4c1da05e4497907ce22d98b Mon Sep 17 00:00:00 2001 From: CaIon Date: Tue, 22 Jul 2025 12:06:21 +0800 Subject: [PATCH] fix: add Think field to OllamaRequest and support extra parameters in GeneralOpenAIRequest. (close #1125 ) --- dto/openai_request.go | 2 ++ relay/channel/ollama/dto.go | 6 +++++- relay/channel/ollama/relay-ollama.go | 8 ++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/dto/openai_request.go b/dto/openai_request.go index 88d3bd6c..a35ee6b6 100644 --- a/dto/openai_request.go +++ b/dto/openai_request.go @@ -62,6 +62,8 @@ type GeneralOpenAIRequest struct { Reasoning json.RawMessage `json:"reasoning,omitempty"` // Ali Qwen Params VlHighResolutionImages json.RawMessage `json:"vl_high_resolution_images,omitempty"` + // 用匿名参数接收额外参数,例如ollama的think参数在此接收 + Extra map[string]json.RawMessage `json:"-"` } func (r *GeneralOpenAIRequest) ToMap() map[string]any { diff --git a/relay/channel/ollama/dto.go b/relay/channel/ollama/dto.go index 15c64cdc..317c2a4a 100644 --- a/relay/channel/ollama/dto.go +++ b/relay/channel/ollama/dto.go @@ -1,6 +1,9 @@ package ollama -import "one-api/dto" +import ( + "encoding/json" + "one-api/dto" +) type OllamaRequest struct { Model string `json:"model,omitempty"` @@ -19,6 +22,7 @@ type OllamaRequest struct { Suffix any `json:"suffix,omitempty"` StreamOptions *dto.StreamOptions `json:"stream_options,omitempty"` Prompt any `json:"prompt,omitempty"` + Think json.RawMessage `json:"think,omitempty"` } type Options struct { diff --git a/relay/channel/ollama/relay-ollama.go b/relay/channel/ollama/relay-ollama.go index 295349e3..cd899b83 100644 --- a/relay/channel/ollama/relay-ollama.go +++ b/relay/channel/ollama/relay-ollama.go @@ -50,7 +50,7 @@ func requestOpenAI2Ollama(request dto.GeneralOpenAIRequest) (*OllamaRequest, err } else { Stop, _ = request.Stop.([]string) } - return &OllamaRequest{ + ollamaRequest := &OllamaRequest{ Model: request.Model, Messages: messages, Stream: request.Stream, @@ -67,7 +67,11 @@ func requestOpenAI2Ollama(request dto.GeneralOpenAIRequest) (*OllamaRequest, err Prompt: request.Prompt, StreamOptions: request.StreamOptions, Suffix: request.Suffix, - }, nil + } + if think, ok := request.Extra["think"]; ok { + ollamaRequest.Think = think + } + return ollamaRequest, nil } func requestOpenAI2Embeddings(request dto.EmbeddingRequest) *OllamaEmbeddingRequest {