@("Bearer " + (string)context.Variables["msi-access-token"]) 0)" count="50" interval="0"> ("isThrottling") && DateTime.Now >= backend.Value("retryAfter")) { backend["isThrottling"] = false; backend["retryAfter"] = DateTime.MinValue; } } return backends; }" /> availableBackends = new List(); for (int i = 0; i < backends.Count; i++) { JObject backend = (JObject)backends[i]; if (!backend.Value("isThrottling")) { int backendPriority = backend.Value("priority"); if (backendPriority < selectedPriority) { selectedPriority = backendPriority; availableBackends.Clear(); availableBackends.Add(i); } else if (backendPriority == selectedPriority) { availableBackends.Add(i); } } } if (availableBackends.Count == 1) { return availableBackends[0]; } if (availableBackends.Count > 0) { //Returns a random backend from the list if we have more than one available with the same priority return availableBackends[new Random().Next(0, availableBackends.Count)]; } else { //If there are no available backends, the request will be sent to the first one return 0; } }" /> ("url") + "/openai")" /> ("backendIndex"); int retryAfter = Convert.ToInt32(context.Response.Headers.GetValueOrDefault("Retry-After", "-1")); if (retryAfter == -1) { retryAfter = Convert.ToInt32(context.Response.Headers.GetValueOrDefault("x-ratelimit-reset-requests", "-1")); } if (retryAfter == -1) { retryAfter = Convert.ToInt32(context.Response.Headers.GetValueOrDefault("x-ratelimit-reset-tokens", "10")); } JObject backend = (JObject)backends[currentBackendIndex]; backend["isThrottling"] = true; backend["retryAfter"] = DateTime.Now.AddSeconds(retryAfter); return backends; }" /> ("isThrottling")) { remainingBackends++; } } return remainingBackends; }" /> @(context.Variables.GetValueOrDefault("backendUrl", "none"))