Restrict call_v2 to explicit code snippets and omit session_hash from call payloads

This commit is contained in:
Luxferre
2026-09-07 16:14:26 +03:00
parent 36bbe2bf86
commit 2a0fd63676
2 changed files with 140 additions and 15 deletions
+9 -10
View File
@@ -2594,6 +2594,7 @@ type SpaceDiscovery struct {
PrimaryModel string `json:"primary_model"`
TotalInputs int `json:"total_inputs"`
RawTotalInputs int `json:"raw_total_inputs,omitempty"`
RawDefaultInputs []interface{} `json:"raw_default_inputs,omitempty"`
ParamMappings []SpaceParamMapping `json:"param_mappings"`
DefaultInputs []interface{} `json:"default_inputs"`
MessageIsMultimodal bool `json:"message_is_multimodal"`
@@ -3215,18 +3216,13 @@ func InspectSpace(client *http.Client, rawURL, userAgent string) (*SpaceDiscover
// Select protocol
isCallV2 := false
hasSnippet := false
if bestEndpointInfo != nil && bestEndpointInfo.CodeSnippets != nil {
if bashSnippet, ok := bestEndpointInfo.CodeSnippets["bash"].(string); ok && bashSnippet != "" {
hasSnippet = true
if strings.Contains(bashSnippet, "/call/v2/") {
isCallV2 = true
}
}
}
if !hasSnippet && strings.HasPrefix(discovery.GradioVersion, "6.") {
isCallV2 = true
}
if strings.HasPrefix(discovery.GradioVersion, "3.") {
@@ -3358,6 +3354,8 @@ func InspectSpace(client *http.Client, rawURL, userAgent string) (*SpaceDiscover
}
}
}
discovery.RawDefaultInputs = make([]interface{}, len(discovery.DefaultInputs))
copy(discovery.RawDefaultInputs, discovery.DefaultInputs)
// If the endpoint has canonical parameters exposed via /gradio_api/info,
// and trailing inputs in bestMatchingDep.Inputs are unexposed server-side state components,
@@ -4467,7 +4465,9 @@ func (g *GradioGateway) executePredictCompletion(w http.ResponseWriter, r *http.
if disc.RawTotalInputs > len(predictData) {
for i := len(predictData); i < disc.RawTotalInputs; i++ {
var defVal interface{}
if i < len(disc.DefaultInputs) {
if i < len(disc.RawDefaultInputs) {
defVal = disc.RawDefaultInputs[i]
} else if i < len(disc.DefaultInputs) {
defVal = disc.DefaultInputs[i]
}
predictData = append(predictData, defVal)
@@ -4579,7 +4579,9 @@ func (g *GradioGateway) executeQueueCompletion(w http.ResponseWriter, r *http.Re
if disc.RawTotalInputs > len(queueData) {
for i := len(queueData); i < disc.RawTotalInputs; i++ {
var defVal interface{}
if i < len(disc.DefaultInputs) {
if i < len(disc.RawDefaultInputs) {
defVal = disc.RawDefaultInputs[i]
} else if i < len(disc.DefaultInputs) {
defVal = disc.DefaultInputs[i]
}
queueData = append(queueData, defVal)
@@ -5036,9 +5038,6 @@ func (g *GradioGateway) ExecuteChatCompletion(w http.ResponseWriter, r *http.Req
payloadMap := map[string]interface{}{
"data": gradioData,
}
if !disc.IsHunyuan3 {
payloadMap["session_hash"] = GenerateUUID()
}
return json.Marshal(payloadMap)
}