Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
5ef44f68
authored
Feb 19, 2025
by
1808837298@qq.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: Improve image handling for Ollama channels
parent
604a5b1a
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
41 additions
and
5 deletions
+41
-5
dto/openai_request.go
+15
-0
relay/channel/ollama/adaptor.go
+1
-1
relay/channel/ollama/relay-ollama.go
+24
-2
relay/channel/zhipu_4v/relay-zhipu_v4.go
+1
-2
No files found.
dto/openai_request.go
View file @
5ef44f68
...
@@ -90,6 +90,8 @@ func (r GeneralOpenAIRequest) ParseInput() []string {
...
@@ -90,6 +90,8 @@ func (r GeneralOpenAIRequest) ParseInput() []string {
type
Message
struct
{
type
Message
struct
{
Role
string
`json:"role"`
Role
string
`json:"role"`
Content
json
.
RawMessage
`json:"content"`
Content
json
.
RawMessage
`json:"content"`
// parsedContent not json field
parsedContent
[]
MediaContent
Name
*
string
`json:"name,omitempty"`
Name
*
string
`json:"name,omitempty"`
Prefix
*
bool
`json:"prefix,omitempty"`
Prefix
*
bool
`json:"prefix,omitempty"`
ReasoningContent
string
`json:"reasoning_content,omitempty"`
ReasoningContent
string
`json:"reasoning_content,omitempty"`
...
@@ -160,6 +162,11 @@ func (m *Message) SetStringContent(content string) {
...
@@ -160,6 +162,11 @@ func (m *Message) SetStringContent(content string) {
m
.
Content
=
jsonContent
m
.
Content
=
jsonContent
}
}
func
(
m
*
Message
)
SetMediaContent
(
content
[]
MediaContent
)
{
jsonContent
,
_
:=
json
.
Marshal
(
content
)
m
.
Content
=
jsonContent
}
func
(
m
*
Message
)
IsStringContent
()
bool
{
func
(
m
*
Message
)
IsStringContent
()
bool
{
var
stringContent
string
var
stringContent
string
if
err
:=
json
.
Unmarshal
(
m
.
Content
,
&
stringContent
);
err
==
nil
{
if
err
:=
json
.
Unmarshal
(
m
.
Content
,
&
stringContent
);
err
==
nil
{
...
@@ -169,7 +176,15 @@ func (m *Message) IsStringContent() bool {
...
@@ -169,7 +176,15 @@ func (m *Message) IsStringContent() bool {
}
}
func
(
m
*
Message
)
ParseContent
()
[]
MediaContent
{
func
(
m
*
Message
)
ParseContent
()
[]
MediaContent
{
if
m
.
parsedContent
!=
nil
{
return
m
.
parsedContent
}
var
contentList
[]
MediaContent
var
contentList
[]
MediaContent
defer
func
()
{
if
len
(
contentList
)
>
0
{
m
.
parsedContent
=
contentList
}
}()
var
stringContent
string
var
stringContent
string
if
err
:=
json
.
Unmarshal
(
m
.
Content
,
&
stringContent
);
err
==
nil
{
if
err
:=
json
.
Unmarshal
(
m
.
Content
,
&
stringContent
);
err
==
nil
{
contentList
=
append
(
contentList
,
MediaContent
{
contentList
=
append
(
contentList
,
MediaContent
{
...
...
relay/channel/ollama/adaptor.go
View file @
5ef44f68
...
@@ -46,7 +46,7 @@ func (a *Adaptor) ConvertRequest(c *gin.Context, info *relaycommon.RelayInfo, re
...
@@ -46,7 +46,7 @@ func (a *Adaptor) ConvertRequest(c *gin.Context, info *relaycommon.RelayInfo, re
if
request
==
nil
{
if
request
==
nil
{
return
nil
,
errors
.
New
(
"request is nil"
)
return
nil
,
errors
.
New
(
"request is nil"
)
}
}
return
requestOpenAI2Ollama
(
*
request
)
,
nil
return
requestOpenAI2Ollama
(
*
request
)
}
}
func
(
a
*
Adaptor
)
ConvertRerankRequest
(
c
*
gin
.
Context
,
relayMode
int
,
request
dto
.
RerankRequest
)
(
any
,
error
)
{
func
(
a
*
Adaptor
)
ConvertRerankRequest
(
c
*
gin
.
Context
,
relayMode
int
,
request
dto
.
RerankRequest
)
(
any
,
error
)
{
...
...
relay/channel/ollama/relay-ollama.go
View file @
5ef44f68
...
@@ -9,14 +9,36 @@ import (
...
@@ -9,14 +9,36 @@ import (
"net/http"
"net/http"
"one-api/dto"
"one-api/dto"
"one-api/service"
"one-api/service"
"strings"
)
)
func
requestOpenAI2Ollama
(
request
dto
.
GeneralOpenAIRequest
)
*
OllamaRequest
{
func
requestOpenAI2Ollama
(
request
dto
.
GeneralOpenAIRequest
)
(
*
OllamaRequest
,
error
)
{
messages
:=
make
([]
dto
.
Message
,
0
,
len
(
request
.
Messages
))
messages
:=
make
([]
dto
.
Message
,
0
,
len
(
request
.
Messages
))
for
_
,
message
:=
range
request
.
Messages
{
for
_
,
message
:=
range
request
.
Messages
{
if
!
message
.
IsStringContent
()
{
mediaMessages
:=
message
.
ParseContent
()
for
j
,
mediaMessage
:=
range
mediaMessages
{
if
mediaMessage
.
Type
==
dto
.
ContentTypeImageURL
{
imageUrl
:=
mediaMessage
.
ImageUrl
.
(
dto
.
MessageImageUrl
)
// check if not base64
if
strings
.
HasPrefix
(
imageUrl
.
Url
,
"http"
)
{
fileData
,
err
:=
service
.
GetFileBase64FromUrl
(
imageUrl
.
Url
)
if
err
!=
nil
{
return
nil
,
err
}
imageUrl
.
Url
=
fmt
.
Sprintf
(
"data:%s;base64,%s"
,
fileData
.
MimeType
,
fileData
.
Base64Data
)
}
mediaMessage
.
ImageUrl
=
imageUrl
mediaMessages
[
j
]
=
mediaMessage
}
}
message
.
SetMediaContent
(
mediaMessages
)
}
messages
=
append
(
messages
,
dto
.
Message
{
messages
=
append
(
messages
,
dto
.
Message
{
Role
:
message
.
Role
,
Role
:
message
.
Role
,
Content
:
message
.
Content
,
Content
:
message
.
Content
,
ToolCalls
:
message
.
ToolCalls
,
ToolCallId
:
message
.
ToolCallId
,
})
})
}
}
str
,
ok
:=
request
.
Stop
.
(
string
)
str
,
ok
:=
request
.
Stop
.
(
string
)
...
@@ -42,7 +64,7 @@ func requestOpenAI2Ollama(request dto.GeneralOpenAIRequest) *OllamaRequest {
...
@@ -42,7 +64,7 @@ func requestOpenAI2Ollama(request dto.GeneralOpenAIRequest) *OllamaRequest {
Prompt
:
request
.
Prompt
,
Prompt
:
request
.
Prompt
,
StreamOptions
:
request
.
StreamOptions
,
StreamOptions
:
request
.
StreamOptions
,
Suffix
:
request
.
Suffix
,
Suffix
:
request
.
Suffix
,
}
}
,
nil
}
}
func
requestOpenAI2Embeddings
(
request
dto
.
EmbeddingRequest
)
*
OllamaEmbeddingRequest
{
func
requestOpenAI2Embeddings
(
request
dto
.
EmbeddingRequest
)
*
OllamaEmbeddingRequest
{
...
...
relay/channel/zhipu_4v/relay-zhipu_v4.go
View file @
5ef44f68
...
@@ -90,8 +90,7 @@ func requestOpenAI2Zhipu(request dto.GeneralOpenAIRequest) *dto.GeneralOpenAIReq
...
@@ -90,8 +90,7 @@ func requestOpenAI2Zhipu(request dto.GeneralOpenAIRequest) *dto.GeneralOpenAIReq
mediaMessages
[
j
]
=
mediaMessage
mediaMessages
[
j
]
=
mediaMessage
}
}
}
}
messageRaw
,
_
:=
json
.
Marshal
(
mediaMessages
)
message
.
SetMediaContent
(
mediaMessages
)
message
.
Content
=
messageRaw
}
}
messages
=
append
(
messages
,
dto
.
Message
{
messages
=
append
(
messages
,
dto
.
Message
{
Role
:
message
.
Role
,
Role
:
message
.
Role
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment