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
de6fbc01
authored
Jan 09, 2024
by
CaIon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: support Azure dall-e
parent
8207bf39
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
54 additions
and
7 deletions
+54
-7
controller/relay-audio.go
+16
-0
controller/relay-image.go
+15
-3
controller/relay-utils.go
+9
-0
controller/relay.go
+14
-4
No files found.
controller/relay-audio.go
View file @
de6fbc01
...
@@ -106,13 +106,29 @@ func relayAudioHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode
...
@@ -106,13 +106,29 @@ func relayAudioHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode
}
}
fullRequestURL
:=
getFullRequestURL
(
baseURL
,
requestURL
,
channelType
)
fullRequestURL
:=
getFullRequestURL
(
baseURL
,
requestURL
,
channelType
)
if
relayMode
==
RelayModeAudioTranscription
&&
channelType
==
common
.
ChannelTypeAzure
{
// https://learn.microsoft.com/en-us/azure/ai-services/openai/whisper-quickstart?tabs=command-line#rest-api
apiVersion
:=
GetAPIVersion
(
c
)
fullRequestURL
=
fmt
.
Sprintf
(
"%s/openai/deployments/%s/audio/transcriptions?api-version=%s"
,
baseURL
,
audioRequest
.
Model
,
apiVersion
)
}
requestBody
:=
c
.
Request
.
Body
requestBody
:=
c
.
Request
.
Body
req
,
err
:=
http
.
NewRequest
(
c
.
Request
.
Method
,
fullRequestURL
,
requestBody
)
req
,
err
:=
http
.
NewRequest
(
c
.
Request
.
Method
,
fullRequestURL
,
requestBody
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"new_request_failed"
,
http
.
StatusInternalServerError
)
return
errorWrapper
(
err
,
"new_request_failed"
,
http
.
StatusInternalServerError
)
}
}
if
relayMode
==
RelayModeAudioTranscription
&&
channelType
==
common
.
ChannelTypeAzure
{
// https://learn.microsoft.com/en-us/azure/ai-services/openai/whisper-quickstart?tabs=command-line#rest-api
apiKey
:=
c
.
Request
.
Header
.
Get
(
"Authorization"
)
apiKey
=
strings
.
TrimPrefix
(
apiKey
,
"Bearer "
)
req
.
Header
.
Set
(
"api-key"
,
apiKey
)
req
.
ContentLength
=
c
.
Request
.
ContentLength
}
else
{
req
.
Header
.
Set
(
"Authorization"
,
c
.
Request
.
Header
.
Get
(
"Authorization"
))
req
.
Header
.
Set
(
"Authorization"
,
c
.
Request
.
Header
.
Get
(
"Authorization"
))
}
req
.
Header
.
Set
(
"Content-Type"
,
c
.
Request
.
Header
.
Get
(
"Content-Type"
))
req
.
Header
.
Set
(
"Content-Type"
,
c
.
Request
.
Header
.
Get
(
"Content-Type"
))
req
.
Header
.
Set
(
"Accept"
,
c
.
Request
.
Header
.
Get
(
"Accept"
))
req
.
Header
.
Set
(
"Accept"
,
c
.
Request
.
Header
.
Get
(
"Accept"
))
...
...
controller/relay-image.go
View file @
de6fbc01
...
@@ -31,7 +31,7 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode
...
@@ -31,7 +31,7 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode
}
}
if
imageRequest
.
Model
==
""
{
if
imageRequest
.
Model
==
""
{
imageRequest
.
Model
=
"dall-e"
imageRequest
.
Model
=
"dall-e
-2
"
}
}
if
imageRequest
.
Size
==
""
{
if
imageRequest
.
Size
==
""
{
imageRequest
.
Size
=
"1024x1024"
imageRequest
.
Size
=
"1024x1024"
...
@@ -86,8 +86,14 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode
...
@@ -86,8 +86,14 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode
baseURL
=
c
.
GetString
(
"base_url"
)
baseURL
=
c
.
GetString
(
"base_url"
)
}
}
fullRequestURL
:=
getFullRequestURL
(
baseURL
,
requestURL
,
channelType
)
fullRequestURL
:=
getFullRequestURL
(
baseURL
,
requestURL
,
channelType
)
if
channelType
==
common
.
ChannelTypeAzure
&&
relayMode
==
RelayModeImagesGenerations
{
// https://learn.microsoft.com/en-us/azure/ai-services/openai/dall-e-quickstart?tabs=dalle3%2Ccommand-line&pivots=rest-api
apiVersion
:=
GetAPIVersion
(
c
)
// https://{resource_name}.openai.azure.com/openai/deployments/dall-e-3/images/generations?api-version=2023-06-01-preview
fullRequestURL
=
fmt
.
Sprintf
(
"%s/openai/deployments/%s/images/generations?api-version=%s"
,
baseURL
,
imageRequest
.
Model
,
apiVersion
)
}
var
requestBody
io
.
Reader
var
requestBody
io
.
Reader
if
isModelMapped
{
if
isModelMapped
||
channelType
==
common
.
ChannelTypeAzure
{
// make Azure channel request body
jsonStr
,
err
:=
json
.
Marshal
(
imageRequest
)
jsonStr
,
err
:=
json
.
Marshal
(
imageRequest
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"marshal_text_request_failed"
,
http
.
StatusInternalServerError
)
return
errorWrapper
(
err
,
"marshal_text_request_failed"
,
http
.
StatusInternalServerError
)
...
@@ -132,8 +138,14 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode
...
@@ -132,8 +138,14 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"new_request_failed"
,
http
.
StatusInternalServerError
)
return
errorWrapper
(
err
,
"new_request_failed"
,
http
.
StatusInternalServerError
)
}
}
req
.
Header
.
Set
(
"Authorization"
,
c
.
Request
.
Header
.
Get
(
"Authorization"
))
token
:=
c
.
Request
.
Header
.
Get
(
"Authorization"
)
if
channelType
==
common
.
ChannelTypeAzure
{
// Azure authentication
token
=
strings
.
TrimPrefix
(
token
,
"Bearer "
)
req
.
Header
.
Set
(
"api-key"
,
token
)
}
else
{
req
.
Header
.
Set
(
"Authorization"
,
token
)
}
req
.
Header
.
Set
(
"Content-Type"
,
c
.
Request
.
Header
.
Get
(
"Content-Type"
))
req
.
Header
.
Set
(
"Content-Type"
,
c
.
Request
.
Header
.
Get
(
"Content-Type"
))
req
.
Header
.
Set
(
"Accept"
,
c
.
Request
.
Header
.
Get
(
"Accept"
))
req
.
Header
.
Set
(
"Accept"
,
c
.
Request
.
Header
.
Get
(
"Accept"
))
...
...
controller/relay-utils.go
View file @
de6fbc01
...
@@ -301,3 +301,12 @@ func getFullRequestURL(baseURL string, requestURL string, channelType int) strin
...
@@ -301,3 +301,12 @@ func getFullRequestURL(baseURL string, requestURL string, channelType int) strin
}
}
return
fullRequestURL
return
fullRequestURL
}
}
func
GetAPIVersion
(
c
*
gin
.
Context
)
string
{
query
:=
c
.
Request
.
URL
.
Query
()
apiVersion
:=
query
.
Get
(
"api-version"
)
if
apiVersion
==
""
{
apiVersion
=
c
.
GetString
(
"api_version"
)
}
return
apiVersion
}
controller/relay.go
View file @
de6fbc01
...
@@ -99,7 +99,9 @@ const (
...
@@ -99,7 +99,9 @@ const (
RelayModeMidjourneyNotify
RelayModeMidjourneyNotify
RelayModeMidjourneyTaskFetch
RelayModeMidjourneyTaskFetch
RelayModeMidjourneyTaskFetchByCondition
RelayModeMidjourneyTaskFetchByCondition
RelayModeAudio
RelayModeAudioSpeech
RelayModeAudioTranscription
RelayModeAudioTranslation
)
)
// https://platform.openai.com/docs/api-reference/chat
// https://platform.openai.com/docs/api-reference/chat
...
@@ -291,14 +293,22 @@ func Relay(c *gin.Context) {
...
@@ -291,14 +293,22 @@ func Relay(c *gin.Context) {
relayMode
=
RelayModeImagesGenerations
relayMode
=
RelayModeImagesGenerations
}
else
if
strings
.
HasPrefix
(
c
.
Request
.
URL
.
Path
,
"/v1/edits"
)
{
}
else
if
strings
.
HasPrefix
(
c
.
Request
.
URL
.
Path
,
"/v1/edits"
)
{
relayMode
=
RelayModeEdits
relayMode
=
RelayModeEdits
}
else
if
strings
.
HasPrefix
(
c
.
Request
.
URL
.
Path
,
"/v1/audio"
)
{
}
else
if
strings
.
HasPrefix
(
c
.
Request
.
URL
.
Path
,
"/v1/audio/speech"
)
{
relayMode
=
RelayModeAudio
relayMode
=
RelayModeAudioSpeech
}
else
if
strings
.
HasPrefix
(
c
.
Request
.
URL
.
Path
,
"/v1/audio/transcriptions"
)
{
relayMode
=
RelayModeAudioTranscription
}
else
if
strings
.
HasPrefix
(
c
.
Request
.
URL
.
Path
,
"/v1/audio/translations"
)
{
relayMode
=
RelayModeAudioTranslation
}
}
var
err
*
OpenAIErrorWithStatusCode
var
err
*
OpenAIErrorWithStatusCode
switch
relayMode
{
switch
relayMode
{
case
RelayModeImagesGenerations
:
case
RelayModeImagesGenerations
:
err
=
relayImageHelper
(
c
,
relayMode
)
err
=
relayImageHelper
(
c
,
relayMode
)
case
RelayModeAudio
:
case
RelayModeAudioSpeech
:
fallthrough
case
RelayModeAudioTranslation
:
fallthrough
case
RelayModeAudioTranscription
:
err
=
relayAudioHelper
(
c
,
relayMode
)
err
=
relayAudioHelper
(
c
,
relayMode
)
default
:
default
:
err
=
relayTextHelper
(
c
,
relayMode
)
err
=
relayTextHelper
(
c
,
relayMode
)
...
...
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