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
efd7ea07
authored
Oct 07, 2024
by
1808837298@qq.com
Committed by
CalciumIon
Nov 05, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: azure realtime
(cherry picked from commit 75ff3d98f06103dc2df1f8817bd3fcbf433e0f20)
parent
1307a23f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
30 additions
and
11 deletions
+30
-11
relay/channel/openai/relay-openai.go
+15
-11
service/token_counter.go
+15
-0
No files found.
relay/channel/openai/relay-openai.go
View file @
efd7ea07
...
...
@@ -478,6 +478,18 @@ func OpenaiRealtimeHandler(c *gin.Context, info *relaycommon.RelayInfo) (*dto.Op
usage
.
InputTokenDetails
.
TextTokens
+=
realtimeUsage
.
InputTokenDetails
.
TextTokens
usage
.
OutputTokenDetails
.
AudioTokens
+=
realtimeUsage
.
OutputTokenDetails
.
AudioTokens
usage
.
OutputTokenDetails
.
TextTokens
+=
realtimeUsage
.
OutputTokenDetails
.
TextTokens
}
else
{
textToken
,
audioToken
,
err
:=
service
.
CountTokenRealtime
(
info
,
*
realtimeEvent
,
info
.
UpstreamModelName
)
if
err
!=
nil
{
errChan
<-
fmt
.
Errorf
(
"error counting text token: %v"
,
err
)
return
}
log
.
Printf
(
"type: %s, textToken: %d, audioToken: %d"
,
realtimeEvent
.
Type
,
textToken
,
audioToken
)
localUsage
.
TotalTokens
+=
textToken
+
audioToken
info
.
IsFirstRequest
=
false
localUsage
.
InputTokens
+=
textToken
+
audioToken
localUsage
.
InputTokenDetails
.
TextTokens
+=
textToken
localUsage
.
InputTokenDetails
.
AudioTokens
+=
audioToken
}
}
else
if
realtimeEvent
.
Type
==
dto
.
RealtimeEventTypeSessionUpdated
||
realtimeEvent
.
Type
==
dto
.
RealtimeEventTypeSessionCreated
{
realtimeSession
:=
realtimeEvent
.
Session
...
...
@@ -494,17 +506,9 @@ func OpenaiRealtimeHandler(c *gin.Context, info *relaycommon.RelayInfo) (*dto.Op
}
log
.
Printf
(
"type: %s, textToken: %d, audioToken: %d"
,
realtimeEvent
.
Type
,
textToken
,
audioToken
)
localUsage
.
TotalTokens
+=
textToken
+
audioToken
if
realtimeEvent
.
Type
==
dto
.
RealtimeEventTypeResponseDone
{
info
.
IsFirstRequest
=
false
localUsage
.
InputTokens
+=
textToken
+
audioToken
localUsage
.
InputTokenDetails
.
TextTokens
+=
textToken
localUsage
.
InputTokenDetails
.
AudioTokens
+=
audioToken
}
else
{
localUsage
.
OutputTokens
+=
textToken
+
audioToken
localUsage
.
OutputTokenDetails
.
TextTokens
+=
textToken
localUsage
.
OutputTokenDetails
.
AudioTokens
+=
audioToken
}
localUsage
.
OutputTokens
+=
textToken
+
audioToken
localUsage
.
OutputTokenDetails
.
TextTokens
+=
textToken
localUsage
.
OutputTokenDetails
.
AudioTokens
+=
audioToken
}
err
=
service
.
WssString
(
c
,
clientConn
,
string
(
message
))
...
...
service/token_counter.go
View file @
efd7ea07
...
...
@@ -225,6 +225,21 @@ func CountTokenRealtime(info *relaycommon.RelayInfo, request dto.RealtimeEvent,
return
0
,
0
,
fmt
.
Errorf
(
"error counting audio token: %v"
,
err
)
}
audioToken
+=
atk
case
dto
.
RealtimeEventConversationItemCreated
:
if
request
.
Item
!=
nil
{
switch
request
.
Item
.
Type
{
case
"message"
:
for
_
,
content
:=
range
request
.
Item
.
Content
{
if
content
.
Type
==
"input_text"
{
tokens
,
err
:=
CountTextToken
(
content
.
Text
,
model
)
if
err
!=
nil
{
return
0
,
0
,
err
}
textToken
+=
tokens
}
}
}
}
case
dto
.
RealtimeEventTypeResponseDone
:
// count tools token
if
!
info
.
IsFirstRequest
{
...
...
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