feat:Update AI21 OpenAPI: Assistant endpoints, MCP API, vector GET, tools#223
feat:Update AI21 OpenAPI: Assistant endpoints, MCP API, vector GET, tools#223
Conversation
WalkthroughAdds new Assistant management endpoints and schemas, MCP discovery API and types, a vector-store GET path, extensive tool-definition refactors with discriminator-based ToolDefinition, new enums, Assistant schema fields, Maestro run error surface, and structured RAG/requirements fields, all within src/libs/AI21/openapi.yaml. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor Client
participant API as Studio API
participant Store as Assistant Store
participant Runner as Maestro Runner
rect rgb(237, 245, 253)
note over Client,API: Create Assistant
Client->>API: POST /studio/v1/assistants (CreateAssistantRequest)
API->>Store: Persist assistant (models/tools/resources/requirements)
Store-->>API: Assistant
API-->>Client: 200 Assistant / 422 HTTPValidationError
end
rect rgb(241, 250, 238)
note over Client,API: Modify Assistant
Client->>API: PATCH /studio/v1/assistants/{assistant_id} (ModifyAssistantRequest)
API->>Store: Update fields (name, visibility, budget, tools, ...)
Store-->>API: Assistant
API-->>Client: 200 Assistant / 422 HTTPValidationError
end
rect rgb(253, 243, 237)
note over Client,Runner: Run Assistant
Client->>API: POST /assistants/{assistant_id}/run (RunAssistantRequest)
API->>Runner: Start run (options: structured_rag, planning, language)
alt success
Runner-->>API: MaestroRunResult (output)
API-->>Client: 200 MaestroRunResult
else error
Runner-->>API: MaestroRunResult.error (MaestroRunError)
API-->>Client: 200 MaestroRunResult (error populated)
end
end
sequenceDiagram
autonumber
actor Client
participant API as Studio API
participant MCP as MCP Server
rect rgb(245, 240, 255)
note over Client,API: MCP Discovery
Client->>API: POST /studio/v1/mcp/discover (MCPDefinition)
API->>MCP: Discover tools/resources (server_url, headers)
MCP-->>API: MCPDiscoveryResponse (tools, resources)
API-->>Client: 200 MCPDiscoveryResponse / 422 HTTPValidationError
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60–90 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: 1
🧹 Nitpick comments (12)
src/libs/AI21/openapi.yaml (12)
1018-1043: Define a concrete schema and add a tag for the new Vector Store GET.200 returns an untyped object and the path lacks tags. Please reference a schema and tag the operation.
Apply this diff in-path:
'/studio/v1/demos/regulations/vector-store/{vector_store_id}': get: + tags: + - Regulations summary: Get Vector Store description: Get a vector store by ID. @@ responses: '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 + schema: + $ref: '#/components/schemas/VectorStore'And add this schema under components/schemas (placement anywhere under components):
VectorStore: title: VectorStore type: object required: [id] properties: id: type: string title: Id name: type: string status: type: string created_at: type: string format: date-time
1521-1541: Add tags to Create Assistant for doc consistency.Most endpoints are tagged; add one here.
/studio/v1/assistants: get: @@ - post: + post: + tags: + - Assistants summary: Create Assistant
1590-1617: Add tags to Modify Assistant.'/studio/v1/assistants/{assistant_id}': @@ - patch: + patch: + tags: + - Assistants summary: Modify Assistant
1619-1647: Add tags to Run Assistant.'/studio/v1/assistants/{assistant_id}/run': - post: + post: + tags: + - Assistants summary: Run Assistant
1948-1969: Add tags to MCP discovery./studio/v1/mcp/discover: post: + tags: + - MCP summary: Mcp Tool Discovery
2304-2307: Fix copy: vector_store_id description mentions “RFI” on a Regulations endpoint.- description: Vector store ID to use for RFI processing + description: Vector store ID to use for regulations compliance processing
2282-2286: Normalize budget typing to BudgetLevel.Bodies use free-form string defaults like MEDIUM while BudgetLevel enum exists (low/medium/high). Align for consistency and strong typing.
# Body_process_rfi_document... - budget: - title: Budget - type: string - description: 'Budget level: LOW, MEDIUM, or HIGH' - default: MEDIUM + budget: + allOf: + - $ref: '#/components/schemas/BudgetLevel' + default: medium # Body_upload_check_compliance... - budget: - title: Budget - type: string - default: MEDIUM + budget: + allOf: + - $ref: '#/components/schemas/BudgetLevel' + default: mediumAlso applies to: 2301-2304, 2344-2349
3496-3500: Rename “IgnestionBatchStatusCount” ➜ “IngestionBatchStatusCount”.Public typo. Rename the schema and update its reference.
- IgnestionBatchStatusCount: + IngestionBatchStatusCount: title: IgnestionBatchStatusCount @@ - items: - $ref: '#/components/schemas/IgnestionBatchStatusCount' + items: + $ref: '#/components/schemas/IngestionBatchStatusCount'Also applies to: 3528-3528
2830-2873: CreateAssistantRequest gaps: add visibility/response_language and type tool_resources.
- Missing ability to set visibility and response_language at creation.
- tool_resources should reference the same schema used in Assistant (or ToolResource if you adopt that).
CreateAssistantRequest: @@ - tool_resources: - title: Tool Resources - type: object + tool_resources: + $ref: '#/components/schemas/ToolResource' @@ budget: allOf: - $ref: '#/components/schemas/BudgetLevel' default: medium + visibility: + allOf: + - $ref: '#/components/schemas/Visibility' + default: public + response_language: + title: Response Language + enum: [arabic,dutch,english,french,german,hebrew,italian,portuguese,spanish,unset] + type: string + default: unset
2103-2105: Make “optimization” consistently typed.Assistant and CreateAssistantRequest use string; ModifyAssistantRequest uses RunOptimization enum. Standardize on RunOptimization everywhere.
# Assistant.properties.optimization -optimization: - title: Optimization - type: string +optimization: + $ref: '#/components/schemas/RunOptimization' # CreateAssistantRequest.properties.optimization -optimization: - title: Optimization - type: string +optimization: + $ref: '#/components/schemas/RunOptimization'Also applies to: 3917-3918, 2842-2844
4118-4166: Document allowed values for include[].include defaults to nested keys (e.g., requirements_result.metadata). Expose the allowed set in description to avoid guesswork for clients.
include: title: Include type: array items: type: string + description: Allowed values: data_sources, requirements_result, requirements_result.metadata default: - data_sources - requirements_result - requirements_result.metadata
3307-3363: Add descriptions for new ToolResource fields.A few fields (e.g., labels_filter, urls, fallback_to_web) lack concise descriptions, which hurts SDK docs quality.
Example:
FileSearchToolResource: @@ labels_filter: - $ref: '#/components/schemas/QueryFilter' + $ref: '#/components/schemas/QueryFilter' + description: Structured filter over file labels; supports logical/comparison operators. WebSearchToolResource: @@ urls: title: Urls type: array items: type: string + description: Whitelist of domains/URLs to prefer when searching. fallback_to_web: title: Fallback To Web type: boolean + description: If true, run a general web search when no whitelisted URL matches.Also applies to: 4478-4495
📜 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 (2)
src/libs/AI21/openapi.yaml (2)
3487-3495: Confirm single HTTPValidationError definition.You reintroduced HTTPValidationError here. Ensure no duplicate conflicting definitions exist in downstream bundles.
2472-2472: oneOf+discriminator ToolDefinition — verify SDK codegenConfirmed: components/schemas/language_studio_api_server__data_types__execution_engine__ToolDefinition uses oneOf + discriminator (≈lines 4684–4697); chat's tools array references the chat ToolDefinition at line 2472. Run openapi-generator validate/generate for your target SDKs (e.g., typescript-fetch, java, python) and inspect generated models/serializers — some generators mishandle oneOf+discriminator or external $ref on OAS 3.0.x.
| $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.
❓ Verification inconclusive
Unify tool_resources typing and confirm response_language default.
- Assistant.tool_resources references AssistantToolResource, while Create/Run surfaces use ToolResource. Pick one public shape to avoid client confusion; prefer ToolResource if that’s the intended typed surface.
- response_language defaulting to 'unset' is fine but ensure clients accept the literal 'unset' value vs omission.
Proposed change (Assistant):
tools:
title: Tools
type: array
items:
$ref: '#/components/schemas/language_studio_api_server__data_types__execution_engine__ToolDefinition'
- tool_resources:
- $ref: '#/components/schemas/AssistantToolResource'
+ tool_resources:
+ $ref: '#/components/schemas/ToolResource'To verify SDK impact and spec validity:
🏁 Script executed:
#!/bin/bash
pip -q install openapi-spec-validator pyyaml
python - <<'PY'
from openapi_spec_validator import validate_spec
import yaml, sys
with open("src/libs/AI21/openapi.yaml") as f:
spec=yaml.safe_load(f)
validate_spec(spec)
print("Spec OK")
# Check operationId uniqueness
seen=set(); dup=[]
for p in spec.get('paths',{}).values():
for m,o in p.items():
if not isinstance(o,dict): continue
oid=o.get('operationId')
if not oid: continue
if oid in seen: dup.append(oid)
seen.add(oid)
print("Duplicate operationIds:", dup if dup else "None")
PYLength of output: 787
Fix duplicate operationId; then unify tool_resources typing and confirm response_language default.
- Spec validation fails: Duplicate operationId 'v1_library_management' for GET /studio/v1/library/files/{file_id}. Resolve the duplicate(s) and re-run openapi-spec-validator before applying schema changes.
- Unify tool_resources typing — prefer ToolResource over AssistantToolResource to avoid client confusion. Change in src/libs/AI21/openapi.yaml (around lines 2132–2166):
tools:
title: Tools
type: array
items:
$ref: '#/components/schemas/language_studio_api_server__data_types__execution_engine__ToolDefinition'
- tool_resources:
- $ref: '#/components/schemas/AssistantToolResource'
+ tool_resources:
+ $ref: '#/components/schemas/ToolResource'- response_language defaulting to 'unset' is acceptable; ensure clients/SDKs accept the literal 'unset' value vs omission.
📝 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.
| $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 | |
| $ref: '#/components/schemas/language_studio_api_server__data_types__execution_engine__ToolDefinition' | |
| tool_resources: | |
| $ref: '#/components/schemas/ToolResource' | |
| 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 |
🤖 Prompt for AI Agents
In src/libs/AI21/openapi.yaml around lines 2132–2166: remove the duplicate
operationId 'v1_library_management' for GET /studio/v1/library/files/{file_id}
by locating the other operation with the same id and renaming one to a unique,
descriptive id (e.g., v1_library_get_file or similar), then re-run
openapi-spec-validator until no duplicates remain; change the tool_resources
schema reference from AssistantToolResource to ToolResource (update the $ref to
point to the canonical ToolResource schema and run schema/type-checks and client
regen); and confirm response_language default 'unset' is intentionally a literal
enum member—if clients/SDKs cannot accept the literal, either remove the default
or make the property nullable/optional and update clients accordingly, then
re-run validation and client generation.
Summary by CodeRabbit