@zuplo/lint-win32-x64 7.9.17 → 7.9.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -517,6 +517,131 @@
|
|
|
517
517
|
}
|
|
518
518
|
}
|
|
519
519
|
},
|
|
520
|
+
{
|
|
521
|
+
"if": {
|
|
522
|
+
"properties": {
|
|
523
|
+
"policyType": {
|
|
524
|
+
"enum": [
|
|
525
|
+
"ai-gateway-load-balancing",
|
|
526
|
+
"ai-gateway-load-balancing-inbound"
|
|
527
|
+
]
|
|
528
|
+
}
|
|
529
|
+
},
|
|
530
|
+
"required": ["policyType"]
|
|
531
|
+
},
|
|
532
|
+
"then": {
|
|
533
|
+
"properties": {
|
|
534
|
+
"handler": {
|
|
535
|
+
"properties": {
|
|
536
|
+
"options": {
|
|
537
|
+
"type": "object",
|
|
538
|
+
"additionalProperties": false,
|
|
539
|
+
"required": ["models"],
|
|
540
|
+
"properties": {
|
|
541
|
+
"strategy": {
|
|
542
|
+
"type": "string",
|
|
543
|
+
"title": "Strategy",
|
|
544
|
+
"description": "How the policy picks a model for each request. `round-robin` cycles through the list in order. `sticky` sends every request with the same key to the same model.",
|
|
545
|
+
"enum": ["round-robin", "sticky"],
|
|
546
|
+
"default": "round-robin"
|
|
547
|
+
},
|
|
548
|
+
"stickyBy": {
|
|
549
|
+
"type": "string",
|
|
550
|
+
"title": "Sticky By",
|
|
551
|
+
"description": "The key that `sticky` uses. `user` uses the authenticated caller, `request.user.sub`. `conversation` uses the conversation's system prompt and its first user message with text. `expression` uses the value that `expression` selects. Required when `strategy` is `sticky`, and not allowed with `round-robin`.",
|
|
552
|
+
"enum": ["user", "conversation", "expression"]
|
|
553
|
+
},
|
|
554
|
+
"expression": {
|
|
555
|
+
"type": "string",
|
|
556
|
+
"title": "Expression",
|
|
557
|
+
"description": "The value to key on, written like a {@link https://zuplo.com/docs/policies/ai-gateway-metering-inbound#budget-expressions|Metering budget expression}, such as `request.headers.get(\"x-end-user-id\")`. Required when `stickyBy` is `expression`, and not allowed otherwise.",
|
|
558
|
+
"minLength": 1
|
|
559
|
+
},
|
|
560
|
+
"models": {
|
|
561
|
+
"type": "object",
|
|
562
|
+
"title": "Models",
|
|
563
|
+
"description": "The models to spread requests across, by request type. Set at least one list.",
|
|
564
|
+
"additionalProperties": false,
|
|
565
|
+
"minProperties": 1,
|
|
566
|
+
"properties": {
|
|
567
|
+
"completions": {
|
|
568
|
+
"type": "array",
|
|
569
|
+
"title": "Completions Models",
|
|
570
|
+
"description": "Models for chat completions, Responses, Messages, and System One requests, as `providerName/model`. From 1 through 32 models, each listed once. Provider names aren't case-sensitive, so `openai/gpt-5` and `OpenAI/gpt-5` are the same model. Write each model ID exactly as your provider spells it.",
|
|
571
|
+
"minItems": 1,
|
|
572
|
+
"maxItems": 32,
|
|
573
|
+
"uniqueItems": true,
|
|
574
|
+
"items": {
|
|
575
|
+
"$ref": "#/$defs/ai-gateway-load-balancing/modelRef"
|
|
576
|
+
}
|
|
577
|
+
},
|
|
578
|
+
"embeddings": {
|
|
579
|
+
"type": "array",
|
|
580
|
+
"title": "Embeddings Models",
|
|
581
|
+
"description": "Models for embeddings requests, as `providerName/model`. From 1 through 32 models, each listed once. Provider names aren't case-sensitive. Write each model ID exactly as your provider spells it. Every entry must be the same embedding model, such as one model on several accounts.",
|
|
582
|
+
"minItems": 1,
|
|
583
|
+
"maxItems": 32,
|
|
584
|
+
"uniqueItems": true,
|
|
585
|
+
"items": {
|
|
586
|
+
"$ref": "#/$defs/ai-gateway-load-balancing/modelRef"
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
},
|
|
591
|
+
"fallbackTimeoutSeconds": {
|
|
592
|
+
"type": "integer",
|
|
593
|
+
"title": "Fallback Timeout Seconds",
|
|
594
|
+
"description": "How long to wait for a model to start responding before retrying the request on another model. Applies to chat completions and embeddings. The timeout ends when the response starts, so it doesn't cut off a long streaming response. A response that doesn't stream starts only when it's complete, so the timeout covers the whole response. From 1 through 300.",
|
|
595
|
+
"minimum": 1,
|
|
596
|
+
"maximum": 300,
|
|
597
|
+
"default": 60
|
|
598
|
+
}
|
|
599
|
+
},
|
|
600
|
+
"if": {
|
|
601
|
+
"required": ["strategy"],
|
|
602
|
+
"properties": {
|
|
603
|
+
"strategy": {
|
|
604
|
+
"const": "sticky"
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
},
|
|
608
|
+
"then": {
|
|
609
|
+
"required": ["stickyBy"],
|
|
610
|
+
"if": {
|
|
611
|
+
"required": ["stickyBy"],
|
|
612
|
+
"properties": {
|
|
613
|
+
"stickyBy": {
|
|
614
|
+
"const": "expression"
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
},
|
|
618
|
+
"then": {
|
|
619
|
+
"required": ["expression"]
|
|
620
|
+
},
|
|
621
|
+
"else": {
|
|
622
|
+
"not": {
|
|
623
|
+
"required": ["expression"]
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
},
|
|
627
|
+
"else": {
|
|
628
|
+
"not": {
|
|
629
|
+
"anyOf": [
|
|
630
|
+
{
|
|
631
|
+
"required": ["stickyBy"]
|
|
632
|
+
},
|
|
633
|
+
{
|
|
634
|
+
"required": ["expression"]
|
|
635
|
+
}
|
|
636
|
+
]
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
},
|
|
520
645
|
{
|
|
521
646
|
"if": {
|
|
522
647
|
"properties": {
|
|
@@ -9417,6 +9542,14 @@
|
|
|
9417
9542
|
}
|
|
9418
9543
|
}
|
|
9419
9544
|
},
|
|
9545
|
+
"ai-gateway-load-balancing": {
|
|
9546
|
+
"modelRef": {
|
|
9547
|
+
"type": "string",
|
|
9548
|
+
"title": "Provider and Model",
|
|
9549
|
+
"description": "A model reference in providerName/model form, split on the first slash.",
|
|
9550
|
+
"pattern": "^[^/\\s]+/.+$"
|
|
9551
|
+
}
|
|
9552
|
+
},
|
|
9420
9553
|
"ai-gateway-metering": {
|
|
9421
9554
|
"meteringBudgetRule": {
|
|
9422
9555
|
"type": "object",
|
package/bin/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
7.9.
|
|
1
|
+
7.9.18
|