feat(sync): full code sync from release
This commit is contained in:
@@ -0,0 +1,357 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/tidwall/gjson"
|
||||
)
|
||||
|
||||
var (
|
||||
benchmarkToolContinuationBoolSink bool
|
||||
benchmarkWSParseStringSink string
|
||||
benchmarkWSParseMapSink map[string]any
|
||||
benchmarkUsageSink OpenAIUsage
|
||||
)
|
||||
|
||||
func BenchmarkToolContinuationValidationLegacy(b *testing.B) {
|
||||
reqBody := benchmarkToolContinuationRequestBody()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
benchmarkToolContinuationBoolSink = legacyValidateFunctionCallOutputContext(reqBody)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkToolContinuationValidationOptimized(b *testing.B) {
|
||||
reqBody := benchmarkToolContinuationRequestBody()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
benchmarkToolContinuationBoolSink = optimizedValidateFunctionCallOutputContext(reqBody)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkWSIngressPayloadParseLegacy(b *testing.B) {
|
||||
raw := benchmarkWSIngressPayloadBytes()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
eventType, model, promptCacheKey, previousResponseID, payload, err := legacyParseWSIngressPayload(raw)
|
||||
if err == nil {
|
||||
benchmarkWSParseStringSink = eventType + model + promptCacheKey + previousResponseID
|
||||
benchmarkWSParseMapSink = payload
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkWSIngressPayloadParseOptimized(b *testing.B) {
|
||||
raw := benchmarkWSIngressPayloadBytes()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
eventType, model, promptCacheKey, previousResponseID, payload, err := optimizedParseWSIngressPayload(raw)
|
||||
if err == nil {
|
||||
benchmarkWSParseStringSink = eventType + model + promptCacheKey + previousResponseID
|
||||
benchmarkWSParseMapSink = payload
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkOpenAIUsageExtractLegacy(b *testing.B) {
|
||||
body := benchmarkOpenAIUsageJSONBytes()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
usage, ok := legacyExtractOpenAIUsageFromJSONBytes(body)
|
||||
if ok {
|
||||
benchmarkUsageSink = usage
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkOpenAIUsageExtractOptimized(b *testing.B) {
|
||||
body := benchmarkOpenAIUsageJSONBytes()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
usage, ok := extractOpenAIUsageFromJSONBytes(body)
|
||||
if ok {
|
||||
benchmarkUsageSink = usage
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func benchmarkToolContinuationRequestBody() map[string]any {
|
||||
input := make([]any, 0, 64)
|
||||
for i := 0; i < 24; i++ {
|
||||
input = append(input, map[string]any{
|
||||
"type": "text",
|
||||
"text": "benchmark text",
|
||||
})
|
||||
}
|
||||
for i := 0; i < 10; i++ {
|
||||
callID := "call_" + strconv.Itoa(i)
|
||||
input = append(input, map[string]any{
|
||||
"type": "tool_call",
|
||||
"call_id": callID,
|
||||
})
|
||||
input = append(input, map[string]any{
|
||||
"type": "function_call_output",
|
||||
"call_id": callID,
|
||||
})
|
||||
input = append(input, map[string]any{
|
||||
"type": "item_reference",
|
||||
"id": callID,
|
||||
})
|
||||
}
|
||||
return map[string]any{
|
||||
"model": "gpt-5.3-codex",
|
||||
"input": input,
|
||||
}
|
||||
}
|
||||
|
||||
func benchmarkWSIngressPayloadBytes() []byte {
|
||||
return []byte(`{"type":"response.create","model":"gpt-5.3-codex","prompt_cache_key":"cache_bench","previous_response_id":"resp_prev_bench","input":[{"type":"message","role":"user","content":[{"type":"input_text","text":"hello"}]}]}`)
|
||||
}
|
||||
|
||||
func benchmarkOpenAIUsageJSONBytes() []byte {
|
||||
return []byte(`{"id":"resp_bench","object":"response","model":"gpt-5.3-codex","usage":{"input_tokens":3210,"output_tokens":987,"input_tokens_details":{"cached_tokens":456}}}`)
|
||||
}
|
||||
|
||||
func legacyValidateFunctionCallOutputContext(reqBody map[string]any) bool {
|
||||
if !legacyHasFunctionCallOutput(reqBody) {
|
||||
return true
|
||||
}
|
||||
previousResponseID, _ := reqBody["previous_response_id"].(string)
|
||||
if strings.TrimSpace(previousResponseID) != "" {
|
||||
return true
|
||||
}
|
||||
if legacyHasToolCallContext(reqBody) {
|
||||
return true
|
||||
}
|
||||
if legacyHasFunctionCallOutputMissingCallID(reqBody) {
|
||||
return false
|
||||
}
|
||||
callIDs := legacyFunctionCallOutputCallIDs(reqBody)
|
||||
return legacyHasItemReferenceForCallIDs(reqBody, callIDs)
|
||||
}
|
||||
|
||||
func optimizedValidateFunctionCallOutputContext(reqBody map[string]any) bool {
|
||||
validation := ValidateFunctionCallOutputContext(reqBody)
|
||||
if !validation.HasFunctionCallOutput {
|
||||
return true
|
||||
}
|
||||
previousResponseID, _ := reqBody["previous_response_id"].(string)
|
||||
if strings.TrimSpace(previousResponseID) != "" {
|
||||
return true
|
||||
}
|
||||
if validation.HasToolCallContext {
|
||||
return true
|
||||
}
|
||||
if validation.HasFunctionCallOutputMissingCallID {
|
||||
return false
|
||||
}
|
||||
return validation.HasItemReferenceForAllCallIDs
|
||||
}
|
||||
|
||||
func legacyHasFunctionCallOutput(reqBody map[string]any) bool {
|
||||
if reqBody == nil {
|
||||
return false
|
||||
}
|
||||
input, ok := reqBody["input"].([]any)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
for _, item := range input {
|
||||
itemMap, ok := item.(map[string]any)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
itemType, _ := itemMap["type"].(string)
|
||||
if itemType == "function_call_output" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func legacyHasToolCallContext(reqBody map[string]any) bool {
|
||||
if reqBody == nil {
|
||||
return false
|
||||
}
|
||||
input, ok := reqBody["input"].([]any)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
for _, item := range input {
|
||||
itemMap, ok := item.(map[string]any)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
itemType, _ := itemMap["type"].(string)
|
||||
if itemType != "tool_call" && itemType != "function_call" {
|
||||
continue
|
||||
}
|
||||
if callID, ok := itemMap["call_id"].(string); ok && strings.TrimSpace(callID) != "" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func legacyFunctionCallOutputCallIDs(reqBody map[string]any) []string {
|
||||
if reqBody == nil {
|
||||
return nil
|
||||
}
|
||||
input, ok := reqBody["input"].([]any)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
ids := make(map[string]struct{})
|
||||
for _, item := range input {
|
||||
itemMap, ok := item.(map[string]any)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
itemType, _ := itemMap["type"].(string)
|
||||
if itemType != "function_call_output" {
|
||||
continue
|
||||
}
|
||||
if callID, ok := itemMap["call_id"].(string); ok && strings.TrimSpace(callID) != "" {
|
||||
ids[callID] = struct{}{}
|
||||
}
|
||||
}
|
||||
if len(ids) == 0 {
|
||||
return nil
|
||||
}
|
||||
callIDs := make([]string, 0, len(ids))
|
||||
for id := range ids {
|
||||
callIDs = append(callIDs, id)
|
||||
}
|
||||
return callIDs
|
||||
}
|
||||
|
||||
func legacyHasFunctionCallOutputMissingCallID(reqBody map[string]any) bool {
|
||||
if reqBody == nil {
|
||||
return false
|
||||
}
|
||||
input, ok := reqBody["input"].([]any)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
for _, item := range input {
|
||||
itemMap, ok := item.(map[string]any)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
itemType, _ := itemMap["type"].(string)
|
||||
if itemType != "function_call_output" {
|
||||
continue
|
||||
}
|
||||
callID, _ := itemMap["call_id"].(string)
|
||||
if strings.TrimSpace(callID) == "" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func legacyHasItemReferenceForCallIDs(reqBody map[string]any, callIDs []string) bool {
|
||||
if reqBody == nil || len(callIDs) == 0 {
|
||||
return false
|
||||
}
|
||||
input, ok := reqBody["input"].([]any)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
referenceIDs := make(map[string]struct{})
|
||||
for _, item := range input {
|
||||
itemMap, ok := item.(map[string]any)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
itemType, _ := itemMap["type"].(string)
|
||||
if itemType != "item_reference" {
|
||||
continue
|
||||
}
|
||||
idValue, _ := itemMap["id"].(string)
|
||||
idValue = strings.TrimSpace(idValue)
|
||||
if idValue == "" {
|
||||
continue
|
||||
}
|
||||
referenceIDs[idValue] = struct{}{}
|
||||
}
|
||||
if len(referenceIDs) == 0 {
|
||||
return false
|
||||
}
|
||||
for _, callID := range callIDs {
|
||||
if _, ok := referenceIDs[callID]; !ok {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func legacyParseWSIngressPayload(raw []byte) (eventType, model, promptCacheKey, previousResponseID string, payload map[string]any, err error) {
|
||||
values := gjson.GetManyBytes(raw, "type", "model", "prompt_cache_key", "previous_response_id")
|
||||
eventType = strings.TrimSpace(values[0].String())
|
||||
if eventType == "" {
|
||||
eventType = "response.create"
|
||||
}
|
||||
model = strings.TrimSpace(values[1].String())
|
||||
promptCacheKey = strings.TrimSpace(values[2].String())
|
||||
previousResponseID = strings.TrimSpace(values[3].String())
|
||||
payload = make(map[string]any)
|
||||
if err = json.Unmarshal(raw, &payload); err != nil {
|
||||
return "", "", "", "", nil, err
|
||||
}
|
||||
if _, exists := payload["type"]; !exists {
|
||||
payload["type"] = "response.create"
|
||||
}
|
||||
return eventType, model, promptCacheKey, previousResponseID, payload, nil
|
||||
}
|
||||
|
||||
func optimizedParseWSIngressPayload(raw []byte) (eventType, model, promptCacheKey, previousResponseID string, payload map[string]any, err error) {
|
||||
payload = make(map[string]any)
|
||||
if err = json.Unmarshal(raw, &payload); err != nil {
|
||||
return "", "", "", "", nil, err
|
||||
}
|
||||
eventType = openAIWSPayloadString(payload, "type")
|
||||
if eventType == "" {
|
||||
eventType = "response.create"
|
||||
payload["type"] = eventType
|
||||
}
|
||||
model = openAIWSPayloadString(payload, "model")
|
||||
promptCacheKey = openAIWSPayloadString(payload, "prompt_cache_key")
|
||||
previousResponseID = openAIWSPayloadString(payload, "previous_response_id")
|
||||
return eventType, model, promptCacheKey, previousResponseID, payload, nil
|
||||
}
|
||||
|
||||
func legacyExtractOpenAIUsageFromJSONBytes(body []byte) (OpenAIUsage, bool) {
|
||||
var response struct {
|
||||
Usage struct {
|
||||
InputTokens int `json:"input_tokens"`
|
||||
OutputTokens int `json:"output_tokens"`
|
||||
InputTokenDetails struct {
|
||||
CachedTokens int `json:"cached_tokens"`
|
||||
} `json:"input_tokens_details"`
|
||||
} `json:"usage"`
|
||||
}
|
||||
if err := json.Unmarshal(body, &response); err != nil {
|
||||
return OpenAIUsage{}, false
|
||||
}
|
||||
return OpenAIUsage{
|
||||
InputTokens: response.Usage.InputTokens,
|
||||
OutputTokens: response.Usage.OutputTokens,
|
||||
CacheReadInputTokens: response.Usage.InputTokenDetails.CachedTokens,
|
||||
}, true
|
||||
}
|
||||
Reference in New Issue
Block a user