diff --git a/specification/ai-foundry/data-plane/Foundry/client.java.tsp b/specification/ai-foundry/data-plane/Foundry/client.java.tsp index ad4fd401ad4c..273e918dd258 100644 --- a/specification/ai-foundry/data-plane/Foundry/client.java.tsp +++ b/specification/ai-foundry/data-plane/Foundry/client.java.tsp @@ -7,7 +7,9 @@ import "./src/models/routes.tsp"; import "./src/deployments/routes.tsp"; import "./src/red-teams/routes.tsp"; import "./src/evaluation-rules/routes.tsp"; -// Don't import openai-evaluations, we'll use Stainless SDK like in AgentsV2 +// Don't import openai-evaluations routes, we'll use Stainless SDK like in AgentsV2. +// Import only the models so Java codegen can expose Azure-specific eval extensions. +import "./src/openai-evaluations/models.tsp"; // import "./openai-evaluations/routes.tsp"; import "./src/evaluation-taxonomies/routes.tsp"; import "./src/evaluators/routes.tsp"; @@ -109,6 +111,16 @@ namespace Azure.AI.Projects; @@clientName(Models.startPendingUpload, "startModelPendingUpload"); @@clientName(Models.getCredentials, "getModelCredentials"); +//Evaluator generation jobs +@@clientName(EvaluatorGenerationJobs.create, "createEvaluatorGenerationJob"); +@@clientName(EvaluatorGenerationJobs.get, "getEvaluatorGenerationJob"); +@@clientName(EvaluatorGenerationJobs.list, "listEvaluatorGenerationJobs"); +@@clientName(EvaluatorGenerationJobs.cancel, "cancelEvaluatorGenerationJob"); +@@clientName(EvaluatorGenerationJobs.delete, "deleteEvaluatorGenerationJob"); + +//Routines +@@clientName(Routines.dispatchRoutineAsync, "dispatchRoutine"); + // -------------------------------------------------------------------------------- // Renames - models // -------------------------------------------------------------------------------- @@ -117,6 +129,8 @@ namespace Azure.AI.Projects; @@clientName(Sku, "ModelDeploymentSku"); @@clientName(SasCredential, "BlobReferenceSasCredential"); // Not to be confused with class "SASCredentials" +@@clientName(Skill, "SkillDetails"); + // // More accurate naming @@clientName(AssetCredentialResponse, "DatasetCredential"); @@ -131,9 +145,6 @@ namespace Azure.AI.Projects; @@clientName(EvalRunResultComparison, "EvaluationRunResultComparison"); @@clientName(EvalRunResultSummary, "EvaluationRunResultSummary"); -@@clientName(SkillObject, "SkillDetails"); -@@clientName(SkillObject.has_blob, "blobPresent"); - @@clientName(Index, "AIProjectIndex", "java"); @@clientName(Azure.Core.Foundations.ResourceBody.resource, "schedule"); @@ -143,12 +154,27 @@ namespace Azure.AI.Projects; @@clientName(DatasetVersion.dataUri, "dataUrl"); @@clientName(FolderDatasetVersion.dataUri, "dataUrl"); @@clientName(CodeBasedEvaluatorDefinition.blob_uri, "blobUrl"); +@@clientName(ModelVersion.blobUri, "blobUrl"); +@@clientName(ModelCredentialRequest.blobUri, "blobUrl"); +@@clientName(EvaluatorCredentialRequest.blob_uri, "blobUrl"); // Rename OpenAI.Error to avoid conflict with Azure.Core.Foundations.Error. // OpenAI.Error is the object type of the `error` properties in `ApiErrorResponse` // and `MemoryStoreUpdateResponse`. @@clientName(OpenAI.Error, "ApiError"); +@@clientName(RedTeamTargetConfig, "TargetConfig"); + +// *Request → *Input renames for public body models +@@clientName(UpdateModelVersionRequest, "UpdateModelVersionInput"); +@@clientName(ModelPendingUploadRequest, "ModelPendingUploadInput"); +@@clientName(ModelCredentialRequest, "ModelCredentialInput"); +@@clientName(EvaluatorCredentialRequest, "EvaluatorCredentialInput"); + +// *Response → *Result renames for public response models +@@clientName(ModelPendingUploadResponse, "ModelPendingUploadResult"); +@@clientName(DispatchRoutineResponse, "DispatchRoutineResult"); + // -------------------------------------------------------------------------------- // Usage / Public accessibility overrides // -------------------------------------------------------------------------------- @@ -156,6 +182,18 @@ namespace Azure.AI.Projects; // Needs forceful exposition @@access(FoundryFeaturesOptInKeys, Access.public); +// Azure-specific OpenAI eval extensions used with the Stainless OpenAI SDK. +@@usage(GraderAzureAIEvaluator, + Usage.input | Usage.output | Usage.json, + "java" +); +@@access(GraderAzureAIEvaluator, Access.public, "java"); +@@usage(TestingCriterionAzureAIEvaluator, + Usage.input | Usage.output | Usage.json, + "java" +); +@@access(TestingCriterionAzureAIEvaluator, Access.public, "java"); + // Default name produces a style violation @@clientName(SASCredentials, "SasCredential", "java"); @@clientName(SasCredential, "BlobReferenceSasCredential"); @@ -190,11 +228,46 @@ namespace Azure.AI.Projects; // Disabled convenient API generation and make private to provide a custom shim returning `void` in the client @@convenientAPI(Skills.deleteSkill, false, "java"); +@@convenientAPI(Skills.deleteSkillVersion, false, "java"); + +//making delete methods internal to add public shims that return void +@@access(Skills.deleteSkill, Access.internal); +@@clientName(Skills.deleteSkill, "internalDeleteSkill"); +@@access(Skills.deleteSkillVersion, Access.internal); +@@clientName(Skills.deleteSkillVersion, "internalDeleteSkillVersion"); // -------------------------------------------------------------------------------- // Type replacements / encodings // -------------------------------------------------------------------------------- +// OpenAI de-dup: suppress ComparisonFilter & CompoundFilter (and their anonymous +// enum types FileSearchToolFiltersType / FileSearchToolFiltersType1) in favour of +// the equivalent openai-java models. +@@alternateType(OpenAI.ComparisonFilter, + { + identity: "com.openai.models.ComparisonFilter", + }, + "java" +); +@@alternateType(OpenAI.CompoundFilter, + { + identity: "com.openai.models.CompoundFilter", + }, + "java" +); + +// GrammarSyntax1 → expandable GrammarSyntax enum +// The OpenAI TypeSpec names this enum "GrammarSyntax1"; replace with an open union +// so it generates as the extensible "GrammarSyntax" string enum in Java. +union GrammarSyntaxExpandable { + string, + lark: "lark", + regex: "regex", +} + +@@clientName(GrammarSyntaxExpandable, "GrammarSyntax", "java"); +@@alternateType(OpenAI.GrammarSyntax1, GrammarSyntaxExpandable, "java"); + @@alternateType(DayOfWeek, { identity: "java.time.DayOfWeek", @@ -209,6 +282,9 @@ namespace Azure.AI.Projects; "java" ); +//Suppress the OpenAI.Tool type to prevent from emitting entire tool model tree +@@alternateType(OpenAI.Tool, unknown, "java"); + // SasCredential (BlobReferenceSasCredential) type field should use the shared CredentialType enum @@alternateType(SasCredential.type, CredentialType, "java"); @@ -236,10 +312,12 @@ model TimeZoneType {} @@alternateType(RecurrenceTrigger.timeZone, TimeZoneType, "java"); // -------------------------------------------------------------------------------- -// Javadoc / Documentation overrides +// Relocate EvaluatorGenerationJobs, EvaluationSuites, and +// EvaluationSuiteGenerationJobs onto the Evaluators sub-client // -------------------------------------------------------------------------------- -@@clientDoc(Skills.downloadSkill, - "Downloads a skill package as a ZIP archive containing {@code SKILL.md}. Returns the original uploaded archive for skills created via {@code createSkillFromPackage}; materializes a ZIP from stored instructions for skills created via {@code createSkill}.", - DocumentationMode.replace -); +@@clientLocation(EvaluatorGenerationJobs.create, Evaluators); +@@clientLocation(EvaluatorGenerationJobs.get, Evaluators); +@@clientLocation(EvaluatorGenerationJobs.list, Evaluators); +@@clientLocation(EvaluatorGenerationJobs.cancel, Evaluators); +@@clientLocation(EvaluatorGenerationJobs.delete, Evaluators); diff --git a/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/client.tsp b/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/client.tsp index aa7e13604857..469570ccc86d 100644 --- a/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/client.tsp +++ b/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/client.tsp @@ -70,6 +70,19 @@ using Azure.AI.Projects; @@clientName(MemorySearchPreviewTool.update_delay, "updateDelaySeconds"); +@@clientName(AgentObject.blueprint, "blueprintIdentity"); + +@@clientName(CodeConfiguration.content_hash, "contentSha256"); + +@@clientName(OptimizationCandidate.avg_score, "averageScore"); +@@clientName(OptimizationCandidate.avg_tokens, "averageTokens"); +@@clientName(OptimizationCandidate.eval_id, "evaluationId"); +@@clientName(OptimizationCandidate.eval_run_id, "evaluationRunId"); + +@@clientName(PromoteCandidateRequest, "PromoteCandidateInput"); +@@clientName(PromoteCandidateResponse, "PromoteCandidateResult"); +@@clientName(SessionFileWriteResponse, "SessionFileWriteResult"); + @@clientName(OpenAI.ResponseFormatJsonSchemaSchema, "ResponseFormatJsonSchemaInner" ); @@ -143,6 +156,37 @@ using Azure.AI.Projects; @@clientName(ToolboxObject, "ToolboxDetails", "java"); @@clientName(WorkIQPreviewTool, "WorkIqPreviewTool", "java"); +@@clientName(FabricIQPreviewTool, "FabricIqPreviewTool", "java"); + +@@clientName(AgentOptimizationJobs.create, "createOptimizationJob", "java"); +@@clientName(AgentOptimizationJobs.get, "getOptimizationJob", "java"); +@@clientName(AgentOptimizationJobs.list, "listOptimizationJobs", "java"); +@@clientName(AgentOptimizationJobs.cancel, "cancelOptimizationJob", "java"); +@@clientName(AgentOptimizationJobs.delete, "deleteOptimizationJob", "java"); +@@clientName(AgentOptimizationJobs.listCandidates, + "listOptimizationCandidates", + "java" +); +@@clientName(AgentOptimizationJobs.getCandidate, + "getOptimizationCandidate", + "java" +); +@@clientName(AgentOptimizationJobs.getCandidateConfig, + "getOptimizationCandidateConfig", + "java" +); +@@clientName(AgentOptimizationJobs.getCandidateResults, + "getOptimizationCandidateResults", + "java" +); +@@clientName(AgentOptimizationJobs.promoteCandidate, + "promoteOptimizationCandidate", + "java" +); +@@clientName(AgentOptimizationJobs.getCandidateFile, + "getOptimizationCandidateFile", + "java" +); // -------------------------------------------------------------------------------- // Usage / Public accessibility overrides @@ -152,6 +196,7 @@ using Azure.AI.Projects; @@access(Agents.updateAgent, Access.internal); @@access(Agents.createAgentFromManifest, Access.internal); @@access(Agents.updateAgentFromManifest, Access.internal); +@@access(Agents.createAgentFromCode, Access.internal); // making methods private to add a public shim using the OpenAI types. @@access(MemoryStores.searchMemories, Access.internal); @@ -164,20 +209,90 @@ using Azure.AI.Projects; @@convenientAPI(Agents.deleteAgentVersion, false, "java"); @@convenientAPI(MemoryStores.deleteMemoryStore, false, "java"); @@convenientAPI(MemoryStores.deleteScope, false, "java"); +@@convenientAPI(MemoryStores.deleteMemory, false, "java"); //making delete methods internal to add public shims that return void @@access(Agents.deleteAgentVersion, Access.internal); @@access(Agents.deleteAgent, Access.internal); @@access(MemoryStores.deleteMemoryStore, Access.internal); @@access(MemoryStores.deleteScope, Access.internal); +@@access(MemoryStores.deleteMemory, Access.internal); @@clientName(Agents.deleteAgentVersion, "internalDeleteAgentVersion"); @@clientName(Agents.deleteAgent, "internalDeleteAgent"); @@clientName(MemoryStores.deleteMemoryStore, "internalDeleteMemoryStore"); @@clientName(MemoryStores.deleteScope, "internalDeleteScope"); +@@clientName(MemoryStores.deleteMemory, "internalDeleteMemory"); @@access(MemoryStoreSearchResponse, Access.public); @@usage(MemoryStoreSearchResponse, Usage.output); +// Emit Azure-specific OutputItem subtypes as public Java classes +@@access(BingGroundingToolCall, Access.public); +@@usage(BingGroundingToolCall, Usage.input); + +@@access(BingGroundingToolCallOutput, Access.public); +@@usage(BingGroundingToolCallOutput, Usage.input); + +@@access(SharepointGroundingToolCall, Access.public); +@@usage(SharepointGroundingToolCall, Usage.input); + +@@access(SharepointGroundingToolCallOutput, Access.public); +@@usage(SharepointGroundingToolCallOutput, Usage.input); + +@@access(AzureAISearchToolCall, Access.public); +@@usage(AzureAISearchToolCall, Usage.input); + +@@access(AzureAISearchToolCallOutput, Access.public); +@@usage(AzureAISearchToolCallOutput, Usage.input); + +@@access(BingCustomSearchToolCall, Access.public); +@@usage(BingCustomSearchToolCall, Usage.input); + +@@access(BingCustomSearchToolCallOutput, Access.public); +@@usage(BingCustomSearchToolCallOutput, Usage.input); + +@@access(OpenApiToolCall, Access.public); +@@usage(OpenApiToolCall, Usage.input); + +@@access(OpenApiToolCallOutput, Access.public); +@@usage(OpenApiToolCallOutput, Usage.input); + +@@access(BrowserAutomationToolCall, Access.public); +@@usage(BrowserAutomationToolCall, Usage.input); + +@@access(BrowserAutomationToolCallOutput, Access.public); +@@usage(BrowserAutomationToolCallOutput, Usage.input); + +@@access(FabricDataAgentToolCall, Access.public); +@@usage(FabricDataAgentToolCall, Usage.input); + +@@access(FabricDataAgentToolCallOutput, Access.public); +@@usage(FabricDataAgentToolCallOutput, Usage.input); + +@@access(AzureFunctionToolCall, Access.public); +@@usage(AzureFunctionToolCall, Usage.input); + +@@access(AzureFunctionToolCallOutput, Access.public); +@@usage(AzureFunctionToolCallOutput, Usage.input); + +@@access(A2AToolCall, Access.public); +@@usage(A2AToolCall, Usage.input); + +@@access(A2AToolCallOutput, Access.public); +@@usage(A2AToolCallOutput, Usage.input); + +@@access(MemorySearchToolCall, Access.public); +@@usage(MemorySearchToolCall, Usage.input); + +@@access(MemoryCommandToolCall, Access.public); +@@usage(MemoryCommandToolCall, Usage.input); + +@@access(MemoryCommandToolCallOutput, Access.public); +@@usage(MemoryCommandToolCallOutput, Usage.input); + +@@access(ToolCallStatus, Access.public); +@@usage(ToolCallStatus, Usage.input); + @@access(FoundryFeaturesOptInKeys, Access.public); @@access(AgentDefinitionOptInKeys, Access.public); @@ -205,7 +320,6 @@ using Azure.AI.Projects; @@usage(CreateAgentVersionRequest, Usage.input); @@access(CreateAgentVersionRequest, Access.public); - // Ensure SessionLogEvent and SessionLogEventType are emitted @@usage(SessionLogEvent, Usage.output); @@access(SessionLogEvent, Access.public); @@ -258,6 +372,9 @@ using Azure.AI.Projects; "java" ); +@@alternateType(OpenAI.OutputItem, unknown, "java"); +@@alternateType(OpenAI.InputItem, unknown, "java"); + // TimeZone property override via model indirection @alternateType( { @@ -513,3 +630,19 @@ union WebSearchToolSearchContextSizeExpandable { // of our own, to prevent confusion. @@clientName(Conversations.listConversations, "listAgentConversations", "java"); @@clientLocation(Conversations.listConversations, Agents); + +// -------------------------------------------------------------------------------- +// AgentOptimizationJobs: relocate operations onto the Agents sub-client +// -------------------------------------------------------------------------------- + +@@clientLocation(AgentOptimizationJobs.create, Agents); +@@clientLocation(AgentOptimizationJobs.get, Agents); +@@clientLocation(AgentOptimizationJobs.list, Agents); +@@clientLocation(AgentOptimizationJobs.cancel, Agents); +@@clientLocation(AgentOptimizationJobs.delete, Agents); +@@clientLocation(AgentOptimizationJobs.listCandidates, Agents); +@@clientLocation(AgentOptimizationJobs.getCandidate, Agents); +@@clientLocation(AgentOptimizationJobs.getCandidateConfig, Agents); +@@clientLocation(AgentOptimizationJobs.getCandidateResults, Agents); +@@clientLocation(AgentOptimizationJobs.promoteCandidate, Agents); +@@clientLocation(AgentOptimizationJobs.getCandidateFile, Agents); diff --git a/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/main.tsp b/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/main.tsp index d5389c00723f..d4ed52fdc342 100644 --- a/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/main.tsp +++ b/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/main.tsp @@ -5,6 +5,7 @@ import "../agents/routes.tsp"; import "../memory-stores/routes.tsp"; import "../toolboxes/routes.tsp"; import "../agents-session-files/routes.tsp"; +import "../agents-optimization/routes.tsp"; // We don't need the operations for these subclients, just the models // so we can customize visibility where necessary. import "../openai-responses/models.tsp"; diff --git a/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/tspconfig.yaml b/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/tspconfig.yaml index d084ed52c043..4d4e69ddbb4a 100644 --- a/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/tspconfig.yaml +++ b/specification/ai-foundry/data-plane/Foundry/src/sdk-agents/tspconfig.yaml @@ -20,6 +20,7 @@ options: AzureFunctionDefinitionFunction: AzureFunctionDefinitionDetails MCPToolConnectorId: McpToolConnectorId UpdateAgentDetailsPatchRequest: UpdateAgentDetailsOptions + AgentsPagedResultOptimizationCandidate: OptimizationCandidatePagedResult customization-class: customizations/src/main/java/AgentsCustomizations.java flavor: azure "@typespec/json-schema": @@ -53,6 +54,7 @@ imports: - "@azure-tools/typespec-azure-core/experimental" - "@azure-tools/typespec-client-generator-core" # Note: Imports for OpenAI types may use alternate views per tspconfig.yaml + - "@azure-tools/openai-typespec/models/evals" - "@azure-tools/openai-typespec/models/responses" linter: extends: diff --git a/specification/ai-foundry/data-plane/Foundry/tspconfig.yaml b/specification/ai-foundry/data-plane/Foundry/tspconfig.yaml index 483384e74fc1..e03e763e36b3 100644 --- a/specification/ai-foundry/data-plane/Foundry/tspconfig.yaml +++ b/specification/ai-foundry/data-plane/Foundry/tspconfig.yaml @@ -53,6 +53,8 @@ options: generate-samples: false custom-types-subpackage: "implementation.models" customization-class: customizations/src/main/java/ProjectsCustomizations.java + rename-model: + FilesFileDetails: SkillFileDetails flavor: azure "@typespec/json-schema": emitAllModels: true