Skip to content

Commit daec05b

Browse files
authored
Add support for building model with AzureBlobContentSource (#30234)
1 parent 1e54ffc commit daec05b

File tree

36 files changed

+161
-162
lines changed

36 files changed

+161
-162
lines changed

sdk/formrecognizer/azure-ai-formrecognizer-perf/src/main/java/com/azure/ai/formrecognizer/perf/BuildDocumentModelTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void run() {
3434
SyncPoller<DocumentOperationResult, DocumentModelDetails>
3535
syncPoller = documentModelAdministrationAsyncClient
3636
.beginBuildModel(FORM_RECOGNIZER_TRAINING_BLOB_CONTAINER_SAS_URL,
37-
DocumentModelBuildMode.TEMPLATE,
37+
DocumentModelBuildMode.TEMPLATE, null,
3838
new BuildModelOptions().setDescription("perf-training-model"))
3939
.getSyncPoller();
4040
modelId = syncPoller.getFinalResult().getModelId();
@@ -45,7 +45,7 @@ public void run() {
4545
public Mono<Void> runAsync() {
4646
return documentModelAdministrationAsyncClient
4747
.beginBuildModel(FORM_RECOGNIZER_TRAINING_BLOB_CONTAINER_SAS_URL,
48-
DocumentModelBuildMode.TEMPLATE,
48+
DocumentModelBuildMode.TEMPLATE, null,
4949
new BuildModelOptions().setDescription("perf-training-model"))
5050
.last()
5151
.flatMap(pollResponse -> {

sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@
44

55
### Features Added
66
- Add a constructor to create an instance of `CopyAuthorization` model.
7+
- Added BinaryData support to document analysis client using `beginAnalyzeDocument(String modelId, BinaryData document, long length)`
78

89
### Breaking Changes
9-
- Added BinaryData support to document analysis client using `beginAnalyzeDocument(String modelId, BinaryData document, long length)`
1010
- Renamed `beginCreateComposedModel` method to `beginComposeModel` on DocumentModelAdministrationClient and DocumentModelAdministrationAsyncClient.
1111
- Renamed `CreateComposedModelOptions` model to `ComposeModelOptions`
12-
- Renamed `DocumentModelInfo` model to `DocumentModelSummary`
13-
- Renamed `DocumentModelDetails` model to `DocumentModelInfo`
12+
- Renamed `DocumentModelInfo` model to `DocumentModelDetails`
1413
- Renamed `ModelOperation` model to `ModelOperationDetails`
1514
- Renamed `ModelOperationInfo` model to `ModelOperationSummary`
1615
- Renamed `getAccountProperties` method to `getResourceDetails`
@@ -20,6 +19,9 @@
2019
- Renamed `DocTypeInfo` model to `DocumentTypeDetails`
2120
- Renamed `docTypes` property on `DocumentModelDetails` model to `documentTypes`
2221
- Removed models `DocumentModelOperationException`, `DocumentModelOperationError` and `DocumentModelOperationInnerError`.
22+
- Renamed `trainingFilesUrl` to `blobContainerUrl` in `beginBuildModel` method
23+
- Changed method `beginBuildModel(String, DocumentModelBuildMode, BuildModelOptions)` to `beginBuildModel(String, DocumentModelBuildMode, String, BuildModelOptions)`
24+
- Removed `prefix` property on model `BuildModelOptions`
2325

2426
### Bugs Fixed
2527

sdk/formrecognizer/azure-ai-formrecognizer/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,10 +376,13 @@ More details on setting up a container and required file structure can be found
376376
// Build custom document analysis model
377377
String trainingFilesUrl = "{SAS_URL_of_your_container_in_blob_storage}";
378378
// The shared access signature (SAS) Url of your Azure Blob Storage container with your forms.
379+
String prefix = "{blob_name_prefix}}";
379380
SyncPoller<DocumentOperationResult, DocumentModelDetails> buildOperationPoller =
380381
documentModelAdminClient.beginBuildModel(trainingFilesUrl,
381382
DocumentModelBuildMode.TEMPLATE,
382-
new BuildModelOptions().setModelId("my-build-model").setDescription("model desc"), Context.NONE);
383+
prefix,
384+
new BuildModelOptions().setModelId("my-build-model").setDescription("model desc"),
385+
Context.NONE);
383386

384387
DocumentModelDetails documentModelDetails = buildOperationPoller.getFinalResult();
385388

sdk/formrecognizer/azure-ai-formrecognizer/migration-guide.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,10 +522,13 @@ Build a custom document model using 4.x.x `beginBuildModel`:
522522
// Build custom document analysis model
523523
String trainingFilesUrl = "{SAS_URL_of_your_container_in_blob_storage}";
524524
// The shared access signature (SAS) Url of your Azure Blob Storage container with your forms.
525+
String prefix = "{blob_name_prefix}}";
525526
SyncPoller<DocumentOperationResult, DocumentModelDetails> buildOperationPoller =
526527
documentModelAdminClient.beginBuildModel(trainingFilesUrl,
527528
DocumentModelBuildMode.TEMPLATE,
528-
new BuildModelOptions().setModelId("my-build-model").setDescription("model desc"), Context.NONE);
529+
prefix,
530+
new BuildModelOptions().setModelId("my-build-model").setDescription("model desc"),
531+
Context.NONE);
529532

530533
DocumentModelDetails documentModelDetails = buildOperationPoller.getFinalResult();
531534

sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/administration/DocumentModelAdministrationAsyncClient.java

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ DocumentAnalysisAudience getAudience() {
151151
* <p><strong>Code sample</strong></p>
152152
* <!-- src_embed com.azure.ai.formrecognizer.administration.DocumentModelAdministrationAsyncClient.beginBuildModel#String-DocumentModelBuildMode -->
153153
* <pre>
154-
* String trainingFilesUrl = &quot;&#123;SAS-URL-of-your-container-in-blob-storage&#125;&quot;;
155-
* documentModelAdministrationAsyncClient.beginBuildModel&#40;trainingFilesUrl,
154+
* String blobContainerUrl = &quot;&#123;SAS-URL-of-your-container-in-blob-storage&#125;&quot;;
155+
* documentModelAdministrationAsyncClient.beginBuildModel&#40;blobContainerUrl,
156156
* DocumentModelBuildMode.TEMPLATE
157157
* &#41;
158158
* &#47;&#47; if polling operation completed, retrieve the final result.
@@ -171,7 +171,7 @@ DocumentAnalysisAudience getAudience() {
171171
* </pre>
172172
* <!-- end com.azure.ai.formrecognizer.administration.DocumentModelAdministrationAsyncClient.beginBuildModel#String-DocumentModelBuildMode -->
173173
*
174-
* @param trainingFilesUrl an Azure Storage blob container's SAS URI. A container URI (without SAS)
174+
* @param blobContainerUrl an Azure Storage blob container's SAS URI. A container URI (without SAS)
175175
* can be used if the container is public or has a managed identity configured. For more information on
176176
* setting up a training data set, see: <a href="https://aka.ms/azsdk/formrecognizer/buildcustommodel">here</a>.
177177
* @param buildMode the preferred technique for creating models. For faster training of models use
@@ -180,12 +180,12 @@ DocumentAnalysisAudience getAudience() {
180180
* @return A {@link PollerFlux} that polls the building model operation until it has completed, has failed, or has
181181
* been cancelled. The completed operation returns the trained {@link DocumentModelDetails custom document analysis model}.
182182
* @throws HttpResponseException If building a model fails with {@link OperationStatus#FAILED} is created.
183-
* @throws NullPointerException If {@code trainingFilesUrl} is null.
183+
* @throws NullPointerException If {@code blobContainerUrl} is null.
184184
*/
185185
@ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
186-
public PollerFlux<DocumentOperationResult, DocumentModelDetails> beginBuildModel(String trainingFilesUrl,
186+
public PollerFlux<DocumentOperationResult, DocumentModelDetails> beginBuildModel(String blobContainerUrl,
187187
DocumentModelBuildMode buildMode) {
188-
return beginBuildModel(trainingFilesUrl, buildMode, null);
188+
return beginBuildModel(blobContainerUrl, buildMode, null, null);
189189
}
190190

191191
/**
@@ -199,17 +199,18 @@ public PollerFlux<DocumentOperationResult, DocumentModelDetails> beginBuildModel
199199
* for information on building your own administration data set.
200200
*
201201
* <p><strong>Code sample</strong></p>
202-
* <!-- src_embed com.azure.ai.formrecognizer.administration.DocumentModelAdministrationAsyncClient.beginBuildModel#String-DocumentModelBuildMode-BuildModelOptions -->
202+
* <!-- src_embed com.azure.ai.formrecognizer.administration.DocumentModelAdministrationAsyncClient.beginBuildModel#String-DocumentModelBuildMode-String-BuildModelOptions -->
203203
* <pre>
204-
* String trainingFilesUrl = &quot;&#123;SAS-URL-of-your-container-in-blob-storage&#125;&quot;;
204+
* String blobContainerUrl = &quot;&#123;SAS-URL-of-your-container-in-blob-storage&#125;&quot;;
205205
* String modelId = &quot;model-id&quot;;
206206
* Map&lt;String, String&gt; attrs = new HashMap&lt;String, String&gt;&#40;&#41;;
207207
* attrs.put&#40;&quot;createdBy&quot;, &quot;sample&quot;&#41;;
208+
* String prefix = &quot;Invoice&quot;;
208209
*
209-
* documentModelAdministrationAsyncClient.beginBuildModel&#40;trainingFilesUrl,
210+
* documentModelAdministrationAsyncClient.beginBuildModel&#40;blobContainerUrl,
210211
* DocumentModelBuildMode.TEMPLATE,
212+
* prefix,
211213
* new BuildModelOptions&#40;&#41;
212-
* .setPrefix&#40;&quot;Invoice&quot;&#41;
213214
* .setModelId&#40;modelId&#41;
214215
* .setDescription&#40;&quot;model desc&quot;&#41;
215216
* .setTags&#40;attrs&#41;&#41;
@@ -229,32 +230,35 @@ public PollerFlux<DocumentOperationResult, DocumentModelDetails> beginBuildModel
229230
* &#125;&#41;;
230231
* &#125;&#41;;
231232
* </pre>
232-
* <!-- end com.azure.ai.formrecognizer.administration.DocumentModelAdministrationAsyncClient.beginBuildModel#String-DocumentModelBuildMode-BuildModelOptions -->
233+
* <!-- end com.azure.ai.formrecognizer.administration.DocumentModelAdministrationAsyncClient.beginBuildModel#String-DocumentModelBuildMode-String-BuildModelOptions -->
233234
*
234-
* @param trainingFilesUrl an Azure Storage blob container's SAS URI. A container URI (without SAS)
235+
* @param blobContainerUrl an Azure Storage blob container's SAS URI. A container URI (without SAS)
235236
* can be used if the container is public or has a managed identity configured. For more information on
236237
* setting up a training data set, see: <a href="https://aka.ms/azsdk/formrecognizer/buildcustommodel">here</a>.
237238
* @param buildMode the preferred technique for creating models. For faster training of models use
238239
* {@link DocumentModelBuildMode#TEMPLATE}. See <a href="https://aka.ms/azsdk/formrecognizer/buildmode">here</a>
239240
* for more information on building mode for custom documents.
241+
* @param prefix case-sensitive prefix blob name prefix to filter documents for training.
240242
* @param buildModelOptions The configurable {@link BuildModelOptions options} to pass when
241243
* building a custom document analysis model.
242244
* @return A {@link PollerFlux} that polls the building model operation until it has completed, has failed, or has
243245
* been cancelled. The completed operation returns the trained {@link DocumentModelDetails custom document analysis model}.
244246
* @throws HttpResponseException If building a model fails with {@link OperationStatus#FAILED} is created.
245-
* @throws NullPointerException If {@code trainingFilesUrl} is null.
247+
* @throws NullPointerException If {@code blobContainerUrl} is null.
246248
*/
247249
@ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
248-
public PollerFlux<DocumentOperationResult, DocumentModelDetails> beginBuildModel(String trainingFilesUrl,
249-
DocumentModelBuildMode buildMode,
250-
BuildModelOptions buildModelOptions) {
251-
return beginBuildModel(trainingFilesUrl, buildMode, buildModelOptions, Context.NONE);
250+
public PollerFlux<DocumentOperationResult, DocumentModelDetails> beginBuildModel(String blobContainerUrl,
251+
DocumentModelBuildMode buildMode,
252+
String prefix,
253+
BuildModelOptions buildModelOptions) {
254+
return beginBuildModel(blobContainerUrl, buildMode, prefix, buildModelOptions, Context.NONE);
252255
}
253256

254-
PollerFlux<DocumentOperationResult, DocumentModelDetails> beginBuildModel(String trainingFilesUrl,
255-
DocumentModelBuildMode buildMode,
256-
BuildModelOptions buildModelOptions,
257-
Context context) {
257+
PollerFlux<DocumentOperationResult, DocumentModelDetails> beginBuildModel(String blobContainerUrl,
258+
DocumentModelBuildMode buildMode,
259+
String prefix,
260+
BuildModelOptions buildModelOptions,
261+
Context context) {
258262

259263
buildModelOptions = buildModelOptions == null ? new BuildModelOptions() : buildModelOptions;
260264
String modelId = buildModelOptions.getModelId();
@@ -263,7 +267,7 @@ PollerFlux<DocumentOperationResult, DocumentModelDetails> beginBuildModel(String
263267
}
264268
return new PollerFlux<DocumentOperationResult, DocumentModelDetails>(
265269
DEFAULT_POLL_INTERVAL,
266-
buildModelActivationOperation(trainingFilesUrl, buildMode, modelId, buildModelOptions, context),
270+
buildModelActivationOperation(blobContainerUrl, buildMode, modelId, prefix, buildModelOptions, context),
267271
createModelPollOperation(context),
268272
(activationResponse, pollingContext) -> Mono.error(new RuntimeException("Cancellation is not supported")),
269273
fetchModelResultOperation(context));
@@ -928,18 +932,18 @@ PagedFlux<ModelOperationSummary> listOperations(Context context) {
928932

929933
private Function<PollingContext<DocumentOperationResult>, Mono<DocumentOperationResult>>
930934
buildModelActivationOperation(
931-
String trainingFilesUrl, DocumentModelBuildMode buildMode, String modelId,
932-
BuildModelOptions buildModelOptions, Context context) {
935+
String blobContainerUrl, DocumentModelBuildMode buildMode, String modelId,
936+
String prefix, BuildModelOptions buildModelOptions, Context context) {
933937
return (pollingContext) -> {
934938
try {
935-
Objects.requireNonNull(trainingFilesUrl, "'trainingFilesUrl' cannot be null.");
939+
Objects.requireNonNull(blobContainerUrl, "'blobContainerUrl' cannot be null.");
936940
BuildDocumentModelRequest buildDocumentModelRequest = new BuildDocumentModelRequest()
937941
.setModelId(modelId)
938942
.setBuildMode(com.azure.ai.formrecognizer.implementation.models.DocumentBuildMode
939943
.fromString(buildMode.toString()))
940944
.setAzureBlobSource(new AzureBlobContentSource()
941-
.setContainerUrl(trainingFilesUrl)
942-
.setPrefix(buildModelOptions.getPrefix()))
945+
.setContainerUrl(blobContainerUrl)
946+
.setPrefix(prefix))
943947
.setDescription(buildModelOptions.getDescription())
944948
.setTags(buildModelOptions.getTags());
945949

0 commit comments

Comments
 (0)