feat(copilot): managed profile testing and openaiCompatible provider support
- add native openaiCompatible provider type with flat baseUrl/apiKey/dialect config fields and declared per-model capabilities - add admin-only probeManagedCopilotProfile GraphQL mutation that dispatches real probe requests against server-managed copilot profiles, reusing the BYOK probe engine with an AllowPrivate egress policy for self-hosted endpoints (Vertex profiles rejected; use workspace BYOK instead) - expose providers.profiles app config descriptor to the admin console - add 'AI Providers' settings group with JSON editor and per-profile Test action that probes declared capabilities and reports verified/failed status per model and operation
This commit is contained in:
@@ -1467,6 +1467,237 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"providers.profiles": {
|
||||
"type": "array",
|
||||
"description": "The profile list for copilot providers.\n@default []",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"definitions": {
|
||||
"CopilotManagedCapabilityToken": {
|
||||
"enum": [
|
||||
"chat",
|
||||
"tools",
|
||||
"vision",
|
||||
"structured",
|
||||
"embedding",
|
||||
"rerank",
|
||||
"image"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"CopilotManagedModelConfigFile": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"capabilities": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/definitions/CopilotManagedCapabilityToken"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"enabled": {
|
||||
"default": false,
|
||||
"type": "boolean"
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"id"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"CopilotManagedProfileConfigFile": {
|
||||
"properties": {
|
||||
"apiKey": {
|
||||
"default": null,
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"baseUrl": {
|
||||
"default": null,
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"config": {
|
||||
"additionalProperties": true,
|
||||
"default": {},
|
||||
"description": "Legacy nested form. New configs use the flat baseUrl/apiKey/dialect fields.",
|
||||
"type": "object"
|
||||
},
|
||||
"dialect": {
|
||||
"default": null,
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"displayName": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"enabled": {
|
||||
"default": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"middleware": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/CopilotProviderMiddlewareConfigFile"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"models": {
|
||||
"items": {
|
||||
"$ref": "#/definitions/CopilotManagedModelConfigFile"
|
||||
},
|
||||
"type": [
|
||||
"array",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"priority": {
|
||||
"format": "double",
|
||||
"type": [
|
||||
"number",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"$ref": "#/definitions/CopilotManagedProvider"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"id",
|
||||
"type"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"CopilotManagedProvider": {
|
||||
"enum": [
|
||||
"anthropic",
|
||||
"anthropicVertex",
|
||||
"cloudflareWorkersAi",
|
||||
"fal",
|
||||
"gemini",
|
||||
"geminiVertex",
|
||||
"openai",
|
||||
"openaiCompatible"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"CopilotNodeMiddlewareConfigFile": {
|
||||
"properties": {
|
||||
"text": {
|
||||
"items": {
|
||||
"$ref": "#/definitions/CopilotNodeTextMiddleware"
|
||||
},
|
||||
"type": [
|
||||
"array",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"CopilotNodeTextMiddleware": {
|
||||
"enum": [
|
||||
"citation_footnote",
|
||||
"callout",
|
||||
"thinking_format"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"CopilotProviderMiddlewareConfigFile": {
|
||||
"properties": {
|
||||
"node": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/CopilotNodeMiddlewareConfigFile"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"rust": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/CopilotRustMiddlewareConfigFile"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"CopilotRustMiddlewareConfigFile": {
|
||||
"properties": {
|
||||
"request": {
|
||||
"items": {
|
||||
"$ref": "#/definitions/CopilotRustRequestMiddleware"
|
||||
},
|
||||
"type": [
|
||||
"array",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"stream": {
|
||||
"items": {
|
||||
"$ref": "#/definitions/CopilotRustStreamMiddleware"
|
||||
},
|
||||
"type": [
|
||||
"array",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"CopilotRustRequestMiddleware": {
|
||||
"enum": [
|
||||
"normalize_messages",
|
||||
"clamp_max_tokens",
|
||||
"tool_schema_rewrite",
|
||||
"openai_request_compat",
|
||||
"omit_tool_choice"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"CopilotRustStreamMiddleware": {
|
||||
"enum": [
|
||||
"stream_event_normalize",
|
||||
"citation_indexing"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"$ref": "#/definitions/CopilotManagedProfileConfigFile"
|
||||
},
|
||||
"title": "Array_of_CopilotManagedProfileConfigFile",
|
||||
"default": []
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user