feat:Update AI21 OpenAPI: add endpoints and overhaul schemas#214
feat:Update AI21 OpenAPI: add endpoints and overhaul schemas#214
Conversation
WalkthroughUpdated src/libs/AI21/openapi.yaml to add new endpoints (assistants CRUD/run, MCP discovery, vector store fetch) and overhaul schemas for assistants, tools, MCP, retrieval, and Maestro run results, including new enums, defaults, and cross-references to a unified ToolDefinition model. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant C as Client
participant API as Studio API
participant AS as Assistant Service
participant EX as Execution Engine
participant M as Maestro
participant T as Tool Resource(s)
rect rgba(230,240,255,0.4)
note over C,API: Create or modify Assistant
C->>API: POST /studio/v1/assistants (CreateAssistantRequest)
API->>AS: Create assistant (schemas: Assistant, ToolDefinition)
AS-->>API: Assistant
C-->>API: PATCH /studio/v1/assistants/{id} (ModifyAssistantRequest)
API->>AS: Update assistant
AS-->>API: Assistant
end
rect rgba(235,255,235,0.4)
note over C,M: Run Assistant
C->>API: POST /studio/v1/assistants/{id}/run (RunAssistantRequest)
API->>M: Start run (optimization, retrieval, language)
M->>EX: Plan and execute
EX->>T: Invoke tools (HTTP/MCP/FileSearch/WebSearch)
T-->>EX: Tool outputs
EX-->>M: Aggregated results
alt success
M-->>API: MaestroRunResult (output)
else error
M-->>API: MaestroRunResult.error (MaestroRunError)
end
API-->>C: MaestroRunResult
end
sequenceDiagram
autonumber
participant C as Client
participant API as Studio API
participant MCP as MCP Discovery
rect rgba(255,245,230,0.5)
note over C,MCP: MCP Tool Discovery
C->>API: POST /studio/v1/mcp/discover (MCPDefinition)
API->>MCP: Discover tools
MCP-->>API: MCPDiscoveryResponse (tools)
API-->>C: MCPDiscoveryResponse
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Poem
Pre-merge checks and finishing touches❌ Failed checks (1 inconclusive)
✅ Passed checks (2 passed)
✨ Finishing touches🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (11)
src/libs/AI21/openapi.yaml (11)
1018-1043: Define a VectorStore schema and add 404 for missing IDsReturning a bare object hampers client generation and validation. Also add a 404 for non-existent IDs.
Apply:
responses: - '200': + '200': description: Successful Response content: application/json: schema: - title: Response Get Vector Store Studio V1 Demos Regulations Vector Store Vector Store Id Get - type: object + $ref: '#/components/schemas/VectorStore' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError'And add under components.schemas:
+ VectorStore: + title: VectorStore + type: object + required: [id] + properties: + id: + type: string + title: Id + name: + type: string + created_at: + type: string + format: date-time
1520-1541: Use 201 Created for resource creation (and Location header)Creation should return 201 and, ideally, Location.
- responses: - '200': + responses: + '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/Assistant' + headers: + Location: + description: URL of the created assistant + schema: + type: string + format: uri
1619-1647: Parity with Maestro: consider widening Run input typeRunAssistantRequest accepts only array of Message, while Maestro accepts string or array. Recommend aligning to reduce client branching.
See schema change on Lines 4118-4166 below.
1947-1969: Add 401/403 responses for auth failuresEndpoint is protected by bearer auth; reflect common error statuses.
responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MCPDiscoveryResponse' + '401': + description: Unauthorized + '403': + description: Forbidden '422':
2304-2307: Fix mismatched description (compliance vs RFI)The description says “RFI processing” but this payload is for compliance upload.
- description: Vector store ID to use for RFI processing + description: Vector store ID to use for compliance checking
2723-2728: Add bounds/defaults for max_documents; keep response_language consistentmax_documents lacks constraints; add sane bounds. response_language defaults look good.
max_documents: title: Max Documents type: integer + minimum: 1 + maximum: 1000 + default: 20Also applies to: 2753-2756
3307-3362: Expose max_documents in FileSearchToolResourceParitizes FileSearchToolResource with ConversationalRagConfig and Run payloads.
FileSearchToolResource: title: FileSearchToolResource type: object properties: + max_documents: + title: Max Documents + type: integer + minimum: 1 + maximum: 1000 + default: 20
3402-3494: HTTP tool schemas: add URI format and optional method fieldEndpoint.url should be a URI; consider optional method for future-proofing.
HTTPToolEndpoint: title: HTTPToolEndpoint required: - url type: object properties: url: title: Url - type: string + type: string + format: uri headers: title: Headers type: object + method: + title: Method + type: string + enum: [GET, POST, PUT, PATCH, DELETE] + default: POST
3674-3745: MCP schemas: add URI format; prefer snake_case for input_schemaUse format: uri and align casing with the rest of the spec.
MCPDefinition: properties: server_url: title: Server Url - type: string + type: string + format: uri ... MCPTool: required: - - name - - inputSchema + - name + - input_schema properties: name: title: Name type: string - inputSchema: - title: Inputschema + input_schema: + title: Input Schema type: object
4118-4166: Align RunAssistantRequest.input with MaestroAllow string or array for input (same as CreateMaestroRunsPayload) to simplify clients.
RunAssistantRequest: properties: - input: - title: Input - type: array - items: - $ref: '#/components/schemas/Message' + input: + title: Input + anyOf: + - type: array + items: + $ref: '#/components/schemas/Message' + - type: string
4478-4495: Add response_language to WebSearchToolResource (parity with FileSearch)Keeps behavior consistent across tool resources.
WebSearchToolResource: title: WebSearchToolResource type: object properties: type: title: Type enum: - web_search type: string default: web_search urls: title: Urls type: array items: type: string fallback_to_web: title: Fallback To Web type: boolean + response_language: + title: Response Language + type: string + enum: [arabic, dutch, english, french, german, hebrew, italian, portuguese, spanish, unset] + default: unset
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (136)
src/libs/AI21/Generated/AI21..JsonSerializerContext.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Ai21Api.GetVectorStoreStudioV1DemosRegulationsVectorStoreVectorStoreIdGet.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Ai21Api.McpToolDiscoveryStudioV1McpDiscoverPost.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Ai21Api.UploadCheckComplianceStudioV1DemosRegulationsUploadCheckCompliancePost.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Ai21Api.V1ConversationalRag.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Ai21Api.V1CreateAssistant.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Ai21Api.V1MaestroRun.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Ai21Api.V1ModifyAssistant.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Ai21Api.V1RunAssistant.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.IAi21Api.GetVectorStoreStudioV1DemosRegulationsVectorStoreVectorStoreIdGet.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.IAi21Api.McpToolDiscoveryStudioV1McpDiscoverPost.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.IAi21Api.UploadCheckComplianceStudioV1DemosRegulationsUploadCheckCompliancePost.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.IAi21Api.V1ConversationalRag.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.IAi21Api.V1CreateAssistant.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.IAi21Api.V1MaestroRun.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.IAi21Api.V1ModifyAssistant.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.IAi21Api.V1RunAssistant.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.IJambaCompleteClient.V1ChatComplete.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JambaCompleteClient.V1ChatComplete.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.AssistantResponseLanguage.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.AssistantResponseLanguageNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.AssistantType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.AssistantTypeNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.BudgetLevel.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.BudgetLevelNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.FileSearchToolResourceLabelsFilterMode.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.FileSearchToolResourceLabelsFilterModeNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.FileSearchToolResourceResponseLanguage.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.FileSearchToolResourceResponseLanguageNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.FileSearchToolResourceType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.FileSearchToolResourceTypeNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.HTTPToolFunctionParametersType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.HTTPToolFunctionParametersTypeNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.HTTPToolResourceType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.HTTPToolResourceTypeNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.LanguageStudioApiServerDataTypesChatToolDefinitionType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.LanguageStudioApiServerDataTypesChatToolDefinitionTypeNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.LanguageStudioApiServerDataTypesExecutionEngineToolDefinition.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.LanguageStudioApiServerDataTypesExecutionEngineToolDefinitionDiscriminatorType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.LanguageStudioApiServerDataTypesExecutionEngineToolDefinitionDiscriminatorTypeNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.MCPToolResourceType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.MCPToolResourceTypeNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.ModifyAssistantRequestResponseLanguage.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.ModifyAssistantRequestResponseLanguageNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.RunAssistantRequestResponseLanguage.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.RunAssistantRequestResponseLanguageNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.RunOptimization.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.RunOptimizationNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.Visibility.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.VisibilityNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.WebSearchToolResourceType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonConverters.WebSearchToolResourceTypeNullable.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.JsonSerializerContextTypes.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.Assistant.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.AssistantResponseLanguage.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.AssistantType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.BodyUploadCheckComplianceStudioV1DemosRegulationsUploadCheckCompliancePost.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.BudgetLevel.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.ChatRequest.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.ConversationalRagConfig.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.ConversationalRagConfigResponseLanguage.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.ConversationalRagConfigRetrievalStrategy.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.CreateAssistantRequest.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.CreateAssistantRequest.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.CreateAssistantRequestToolResources.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.CreateAssistantRequestToolResources.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.CreateMaestroRunsPayload.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.CreateMaestroRunsPayloadResponseLanguage.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.FileSearchToolResource.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.FileSearchToolResource.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.FileSearchToolResourceLabelsFilterMode.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.FileSearchToolResourceResponseLanguage.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.FileSearchToolResourceType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.GetVectorStoreStudioV1DemosRegulationsVectorStoreVectorStoreIdGetResponse.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.GetVectorStoreStudioV1DemosRegulationsVectorStoreVectorStoreIdGetResponse.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolEndpoint.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolEndpoint.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolEndpointHeaders.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolEndpointHeaders.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolFunction.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolFunction.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolFunctionParamProperties.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolFunctionParamProperties.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolFunctionParameters.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolFunctionParameters.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolFunctionParametersProperties.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolFunctionParametersProperties.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolFunctionParametersType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolResource.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolResource.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.HTTPToolResourceType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesAssistantRequirement.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesAssistantRequirement.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesChatToolDefinition.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesChatToolDefinition.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesChatToolDefinitionType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesExecutionEngineRequirement.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesExecutionEngineRequirement.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesExecutionEngineToolDefinition.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesExecutionEngineToolDefinition.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesExecutionEngineToolDefinitionDiscriminator.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesExecutionEngineToolDefinitionDiscriminator.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.LanguageStudioApiServerDataTypesExecutionEngineToolDefinitionDiscriminatorType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPDefinition.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPDefinition.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPDefinitionHeaders.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPDefinitionHeaders.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPDiscoveryResponse.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPDiscoveryResponse.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPTool.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPTool.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPToolInputSchema.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPToolInputSchema.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPToolResource.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPToolResource.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPToolResourceHeaders.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPToolResourceHeaders.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MCPToolResourceType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MaestroRunError.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MaestroRunError.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.MaestroRunResult.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.ModifyAssistantRequest.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.ModifyAssistantRequest.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.ModifyAssistantRequestResponseLanguage.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.RunAssistantRequest.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.RunAssistantRequest.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.RunAssistantRequestOutputType.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.RunAssistantRequestOutputType.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.RunAssistantRequestResponseLanguage.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.RunOptimization.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.ToolResource.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.ToolResource.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.Visibility.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.WebSearchToolResource.Json.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.WebSearchToolResource.g.csis excluded by!**/generated/**src/libs/AI21/Generated/AI21.Models.WebSearchToolResourceType.g.csis excluded by!**/generated/**
📒 Files selected for processing (1)
src/libs/AI21/openapi.yaml(23 hunks)
🔇 Additional comments (7)
src/libs/AI21/openapi.yaml (7)
1589-1617: LGTM on Modify Assistant endpointOperationId, request/response types, and 422 handling look consistent with the rest of the spec.
2343-2349: LGTM: BudgetLevel enumEnum and defaults used elsewhere are consistent.
2472-2472: LGTM: Chat tools ref to chat ToolDefinitionCorrect ref and discriminator for function tools.
2898-2901: Verify requirement type divergence (assistant vs execution_engine)CreateMaestroRunsPayload.requirements uses execution_engine.Requirement, while Assistant/requests use assistant.Requirement. If semantics are identical, prefer one type; if not, document the difference.
Would you like me to generate a follow-up patch to consolidate on one schema?
Also applies to: 2908-2909, 2954-2957
3753-3761: LGTM: MaestroRun error surfaceAdding MaestroRunError and wiring it into MaestroRunResult is clean and backwards-compatible.
Also applies to: 3790-3791
3907-3960: LGTM: ModifyAssistantRequestEnum, defaults, and refs look coherent; matches endpoints.
4638-4698: LGTM: Unified ToolDefinition with discriminatorGood use of oneOf + discriminator to unify tool resources.
| $ref: '#/components/schemas/language_studio_api_server__data_types__execution_engine__ToolDefinition' | ||
| tool_resources: | ||
| $ref: '#/components/schemas/AssistantToolResource' | ||
| requirements: | ||
| title: Requirements | ||
| type: array | ||
| items: | ||
| $ref: '#/components/schemas/language_studio_api_server__data_types__assistant__Requirement' | ||
| budget: | ||
| allOf: | ||
| - $ref: '#/components/schemas/BudgetLevel' | ||
| default: medium | ||
| visibility: | ||
| allOf: | ||
| - $ref: '#/components/schemas/Visibility' | ||
| default: public | ||
| assistant_type: | ||
| allOf: | ||
| - $ref: '#/components/schemas/AssistantType' | ||
| default: default | ||
| response_language: | ||
| title: Response Language | ||
| enum: | ||
| - arabic | ||
| - dutch | ||
| - english | ||
| - french | ||
| - german | ||
| - hebrew | ||
| - italian | ||
| - portuguese | ||
| - spanish | ||
| - unset | ||
| type: string | ||
| default: unset |
There was a problem hiding this comment.
Unify tool_resources type across Assistant and requests
Assistant.tool_resources uses AssistantToolResource; CreateAssistantRequest.tool_resources is an untyped object; CreateMaestroRunsPayload uses ToolResource. This inconsistency hurts DX and codegen.
Prefer referencing a single, structured schema. Minimal fix: make CreateAssistantRequest.tool_resources match Assistant:
tool_resources:
- title: Tool Resources
- type: object
+ $ref: '#/components/schemas/AssistantToolResource'Alternative: migrate Assistant.tool_resources to ToolResource and add plan_approval into ToolResource for parity.
Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In src/libs/AI21/openapi.yaml around lines 2132 to 2166, tool_resources is
defined on Assistant as AssistantToolResource while other request/ payload
schemas use different/untypeed shapes (CreateAssistantRequest has an untyped
object, CreateMaestroRunsPayload uses ToolResource); unify these by updating
CreateAssistantRequest.tool_resources to reference the same structured schema
used by Assistant (i.e., use $ref:
'#/components/schemas/AssistantToolResource'), and ensure any other places that
expect ToolResource are reconciled (either rename ToolResource to
AssistantToolResource or add AssistantToolResource as an alias referencing
ToolResource) so codegen and client types are consistent; after changing the
$ref, run schema validation and regenerate clients to pick up the unified type.
| title: CreateAssistantRequest | ||
| required: | ||
| - name | ||
| type: object | ||
| properties: | ||
| name: | ||
| title: Name | ||
| type: string | ||
| description: | ||
| title: Description | ||
| type: string | ||
| optimization: | ||
| title: Optimization | ||
| type: string | ||
| avatar: | ||
| title: Avatar | ||
| type: string | ||
| models: | ||
| title: Models | ||
| type: array | ||
| items: | ||
| type: string | ||
| tools: | ||
| title: Tools | ||
| type: array | ||
| items: | ||
| $ref: '#/components/schemas/language_studio_api_server__data_types__execution_engine__ToolDefinition' | ||
| tool_resources: | ||
| title: Tool Resources | ||
| type: object | ||
| requirements: | ||
| title: Requirements | ||
| type: array | ||
| items: | ||
| $ref: '#/components/schemas/language_studio_api_server__data_types__assistant__Requirement' | ||
| budget: | ||
| allOf: | ||
| - $ref: '#/components/schemas/BudgetLevel' | ||
| default: medium | ||
| assistant_type: | ||
| allOf: | ||
| - $ref: '#/components/schemas/AssistantType' | ||
| default: default |
There was a problem hiding this comment.
Make CreateAssistantRequest.optimization an enum; type tool_resources
Create uses plain string for optimization while Modify uses RunOptimization enum. Align now to avoid breaking later; also type tool_resources.
optimization:
- title: Optimization
- type: string
+ $ref: '#/components/schemas/RunOptimization'
...
tool_resources:
- title: Tool Resources
- type: object
+ $ref: '#/components/schemas/AssistantToolResource'📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| title: CreateAssistantRequest | |
| required: | |
| - name | |
| type: object | |
| properties: | |
| name: | |
| title: Name | |
| type: string | |
| description: | |
| title: Description | |
| type: string | |
| optimization: | |
| title: Optimization | |
| type: string | |
| avatar: | |
| title: Avatar | |
| type: string | |
| models: | |
| title: Models | |
| type: array | |
| items: | |
| type: string | |
| tools: | |
| title: Tools | |
| type: array | |
| items: | |
| $ref: '#/components/schemas/language_studio_api_server__data_types__execution_engine__ToolDefinition' | |
| tool_resources: | |
| title: Tool Resources | |
| type: object | |
| requirements: | |
| title: Requirements | |
| type: array | |
| items: | |
| $ref: '#/components/schemas/language_studio_api_server__data_types__assistant__Requirement' | |
| budget: | |
| allOf: | |
| - $ref: '#/components/schemas/BudgetLevel' | |
| default: medium | |
| assistant_type: | |
| allOf: | |
| - $ref: '#/components/schemas/AssistantType' | |
| default: default | |
| title: CreateAssistantRequest | |
| required: | |
| - name | |
| type: object | |
| properties: | |
| name: | |
| title: Name | |
| type: string | |
| description: | |
| title: Description | |
| type: string | |
| optimization: | |
| $ref: '#/components/schemas/RunOptimization' | |
| avatar: | |
| title: Avatar | |
| type: string | |
| models: | |
| title: Models | |
| type: array | |
| items: | |
| type: string | |
| tools: | |
| title: Tools | |
| type: array | |
| items: | |
| $ref: '#/components/schemas/language_studio_api_server__data_types__execution_engine__ToolDefinition' | |
| tool_resources: | |
| $ref: '#/components/schemas/AssistantToolResource' | |
| requirements: | |
| title: Requirements | |
| type: array | |
| items: | |
| $ref: '#/components/schemas/language_studio_api_server__data_types__assistant__Requirement' | |
| budget: | |
| allOf: | |
| - $ref: '#/components/schemas/BudgetLevel' | |
| default: medium | |
| assistant_type: | |
| allOf: | |
| - $ref: '#/components/schemas/AssistantType' | |
| default: default |
🤖 Prompt for AI Agents
In src/libs/AI21/openapi.yaml around lines 2830 to 2872, the
CreateAssistantRequest schema currently defines optimization as a plain string
while Modify uses a RunOptimization enum, and tool_resources is an untyped
object; change optimization to reference the existing RunOptimization enum (e.g.
replace the string type with an allOf/$ref to
'#/components/schemas/RunOptimization' and keep the same default as Modify if
present) and change tool_resources from type: object to an explicit type (set to
type: string or the correct schema reference used elsewhere for tool_resources)
so both Create and Modify align and the OpenAPI types are explicit.
| title: IgnestionBatchStatusCount | ||
| required: | ||
| - status | ||
| - count | ||
| type: object |
There was a problem hiding this comment.
Typo in schema name: IgnestionBatchStatusCount ➜ IngestionBatchStatusCount
Public schema naming typo; fix now and update references.
- IgnestionBatchStatusCount:
+ IngestionBatchStatusCount:
title: IgnestionBatchStatusCount
required:
- status
- countAlso update the reference in IngestionBatchStatusResponse.statuses.items:
# elsewhere in this file
items:
$ref: '#/components/schemas/IngestionBatchStatusCount'🤖 Prompt for AI Agents
In src/libs/AI21/openapi.yaml around lines 3496-3500, the schema name
"IgnestionBatchStatusCount" is misspelled; rename the schema to
"IngestionBatchStatusCount" and update all references to it (for example update
IngestionBatchStatusResponse.statuses.items to $ref:
'#/components/schemas/IngestionBatchStatusCount') so all $ref pointers use the
corrected schema name; ensure required/fields and capitalization remain
unchanged and run a YAML/schema validation after renaming to catch any remaining
references.
Summary by CodeRabbit