fix gateway loopback validation chains

This commit is contained in:
2026-05-11 08:48:02 +08:00
parent ff666b1ece
commit ca7e76e815
42 changed files with 1641 additions and 129 deletions
+24 -4
View File
@@ -34,7 +34,8 @@ func (c SimulationClient) Run(ctx context.Context, request Request) (Response, e
}
}
responseFinishedAt := time.Now()
if profile == "retryable_failure" {
switch profile {
case "retryable_failure":
return Response{}, &ClientError{
Code: "server_error",
Message: "simulated retryable failure",
@@ -44,8 +45,27 @@ func (c SimulationClient) Run(ctx context.Context, request Request) (Response, e
ResponseDurationMS: responseDurationMS(responseStartedAt, responseFinishedAt),
Retryable: true,
}
}
if profile == "fatal_failure" || profile == "non_retryable_failure" {
case "rate_limit", "overloaded":
return Response{}, &ClientError{
Code: profile,
Message: "simulated " + profile,
RequestID: "simulated-request",
ResponseStartedAt: responseStartedAt,
ResponseFinishedAt: responseFinishedAt,
ResponseDurationMS: responseDurationMS(responseStartedAt, responseFinishedAt),
Retryable: true,
}
case "invalid_api_key":
return Response{}, &ClientError{
Code: "invalid_api_key",
Message: "simulated invalid_api_key",
RequestID: "simulated-request",
ResponseStartedAt: responseStartedAt,
ResponseFinishedAt: responseFinishedAt,
ResponseDurationMS: responseDurationMS(responseStartedAt, responseFinishedAt),
Retryable: false,
}
case "fatal_failure", "non_retryable_failure":
return Response{}, &ClientError{
Code: "bad_request",
Message: "simulated non-retryable failure",
@@ -184,7 +204,7 @@ func simulatedVideoData(request Request) []any {
}
func simulatedUsage(request Request) Usage {
if request.ModelType == "chat" || request.Kind == "responses" {
if request.ModelType == "chat" || request.ModelType == "text_generate" || request.Kind == "responses" {
return Usage{InputTokens: 12, OutputTokens: 8, TotalTokens: 20}
}
return Usage{}
+11 -2
View File
@@ -251,9 +251,18 @@ func buildVolcesContentFromBody(body map[string]any) []map[string]any {
}
}
appendURLContent("image_url", "first_frame", firstNonEmptyStringValue(body, "first_frame", "firstFrame"))
firstFrame := firstNonEmptyStringValue(body, "first_frame", "firstFrame")
appendURLContent("image_url", "first_frame", firstFrame)
appendURLContent("image_url", "last_frame", firstNonEmptyStringValue(body, "last_frame", "lastFrame"))
for _, url := range firstNonEmptyStringListFromAny(body["image"], body["images"], body["image_url"], body["imageUrl"], body["image_urls"], body["imageUrls"], body["reference_image"], body["referenceImage"]) {
imageURLs := firstNonEmptyStringListFromAny(body["image"], body["images"], body["image_url"], body["imageUrl"], body["image_urls"], body["imageUrls"])
if firstFrame == "" && len(imageURLs) > 0 {
appendURLContent("image_url", "first_frame", imageURLs[0])
imageURLs = imageURLs[1:]
}
for _, url := range imageURLs {
appendURLContent("image_url", "reference_image", url)
}
for _, url := range firstNonEmptyStringListFromAny(body["reference_image"], body["referenceImage"]) {
appendURLContent("image_url", "reference_image", url)
}
for _, url := range firstNonEmptyStringListFromAny(body["video"], body["video_url"], body["videoUrl"], body["reference_video"], body["referenceVideo"]) {