2727import com .azure .ai .textanalytics .implementation .models .TasksStateTasksEntityRecognitionPiiTasksItem ;
2828import com .azure .ai .textanalytics .implementation .models .TasksStateTasksEntityRecognitionTasksItem ;
2929import com .azure .ai .textanalytics .implementation .models .TasksStateTasksKeyPhraseExtractionTasksItem ;
30+ import com .azure .ai .textanalytics .implementation .models .TextAnalyticsError ;
3031import com .azure .ai .textanalytics .models .AnalyzeBatchActionsOperationDetail ;
3132import com .azure .ai .textanalytics .models .AnalyzeBatchActionsOptions ;
3233import com .azure .ai .textanalytics .models .AnalyzeBatchActionsResult ;
3334import com .azure .ai .textanalytics .models .ExtractKeyPhrasesActionResult ;
3435import com .azure .ai .textanalytics .models .RecognizeEntitiesActionResult ;
3536import com .azure .ai .textanalytics .models .RecognizePiiEntitiesActionResult ;
37+ import com .azure .ai .textanalytics .models .TextAnalyticsActionResult ;
3638import com .azure .ai .textanalytics .models .TextAnalyticsActions ;
39+ import com .azure .ai .textanalytics .models .TextAnalyticsErrorCode ;
3740import com .azure .ai .textanalytics .models .TextDocumentBatchStatistics ;
3841import com .azure .ai .textanalytics .models .TextDocumentInput ;
3942import com .azure .core .http .rest .PagedFlux ;
5154import com .azure .core .util .polling .PollingContext ;
5255import reactor .core .publisher .Mono ;
5356
57+ import java .util .ArrayList ;
5458import java .util .Arrays ;
5559import java .util .List ;
5660import java .util .Map ;
5761import java .util .function .Function ;
62+ import java .util .regex .Matcher ;
63+ import java .util .regex .Pattern ;
5864import java .util .stream .Collectors ;
5965import java .util .stream .StreamSupport ;
6066
7177import static com .azure .core .util .tracing .Tracer .AZ_TRACING_NAMESPACE_KEY ;
7278
7379class AnalyzeBatchActionsAsyncClient {
80+ private static final String REGEX_ACTION_ERROR_TARGET =
81+ "#/tasks/(keyPhraseExtractionTasks|entityRecognitionPiiTasks|entityRecognitionTasks)/(\\ d+)" ;
82+
7483 private final ClientLogger logger = new ClientLogger (AnalyzeBatchActionsAsyncClient .class );
7584 private final TextAnalyticsClientImpl service ;
7685
@@ -311,45 +320,71 @@ private AnalyzeBatchActionsResult toAnalyzeTasks(AnalyzeJobState analyzeJobState
311320 tasksStateTasks .getEntityRecognitionTasks ();
312321 final List <TasksStateTasksKeyPhraseExtractionTasksItem > keyPhraseExtractionTasks =
313322 tasksStateTasks .getKeyPhraseExtractionTasks ();
314- IterableStream <RecognizeEntitiesActionResult > recognizeEntitiesActionResults = null ;
315- IterableStream <RecognizePiiEntitiesActionResult > recognizePiiEntitiesActionResults = null ;
316- IterableStream <ExtractKeyPhrasesActionResult > extractKeyPhrasesActionResults = null ;
323+
324+ List <RecognizeEntitiesActionResult > recognizeEntitiesActionResults = new ArrayList <>();
325+ List <RecognizePiiEntitiesActionResult > recognizePiiEntitiesActionResults = new ArrayList <>();
326+ List <ExtractKeyPhrasesActionResult > extractKeyPhrasesActionResults = new ArrayList <>();
317327 if (!CoreUtils .isNullOrEmpty (entityRecognitionTasksItems )) {
318- recognizeEntitiesActionResults = IterableStream .of (entityRecognitionTasksItems .stream ()
319- .map (taskItem -> {
320- RecognizeEntitiesActionResult actionResult = new RecognizeEntitiesActionResult ();
321- RecognizeEntitiesActionResultPropertiesHelper .setResult (actionResult ,
322- toRecognizeEntitiesResultCollectionResponse (taskItem .getResults ()));
323- TextAnalyticsActionResultPropertiesHelper .setCompletedAt (actionResult ,
324- taskItem .getLastUpdateDateTime ());
325- return actionResult ;
326- })
327- .collect (Collectors .toList ()));
328+ for (int i = 0 ; i < entityRecognitionTasksItems .size (); i ++) {
329+ final TasksStateTasksEntityRecognitionTasksItem taskItem = entityRecognitionTasksItems .get (i );
330+ final RecognizeEntitiesActionResult actionResult = new RecognizeEntitiesActionResult ();
331+ RecognizeEntitiesActionResultPropertiesHelper .setResult (actionResult ,
332+ toRecognizeEntitiesResultCollectionResponse (taskItem .getResults ()));
333+ TextAnalyticsActionResultPropertiesHelper .setCompletedAt (actionResult ,
334+ taskItem .getLastUpdateDateTime ());
335+ recognizeEntitiesActionResults .add (actionResult );
336+ }
328337 }
329338 if (!CoreUtils .isNullOrEmpty (piiTasksItems )) {
330- recognizePiiEntitiesActionResults = IterableStream .of (piiTasksItems .stream ()
331- .map (taskItem -> {
332- RecognizePiiEntitiesActionResult actionResult = new RecognizePiiEntitiesActionResult ();
333- RecognizePiiEntitiesActionResultPropertiesHelper .setResult (actionResult ,
334- toRecognizePiiEntitiesResultCollection (taskItem .getResults ()));
335- TextAnalyticsActionResultPropertiesHelper .setCompletedAt (actionResult ,
336- taskItem .getLastUpdateDateTime ());
337- return actionResult ;
338- })
339- .collect (Collectors .toList ()));
339+ for (int i = 0 ; i < piiTasksItems .size (); i ++) {
340+ final TasksStateTasksEntityRecognitionPiiTasksItem taskItem = piiTasksItems .get (i );
341+ final RecognizePiiEntitiesActionResult actionResult = new RecognizePiiEntitiesActionResult ();
342+ RecognizePiiEntitiesActionResultPropertiesHelper .setResult (actionResult ,
343+ toRecognizePiiEntitiesResultCollection (taskItem .getResults ()));
344+ TextAnalyticsActionResultPropertiesHelper .setCompletedAt (actionResult ,
345+ taskItem .getLastUpdateDateTime ());
346+ recognizePiiEntitiesActionResults .add (actionResult );
347+ }
340348 }
341349 if (!CoreUtils .isNullOrEmpty (keyPhraseExtractionTasks )) {
342- extractKeyPhrasesActionResults = IterableStream .of (keyPhraseExtractionTasks .stream ()
343- .map (taskItem -> {
344- ExtractKeyPhrasesActionResult actionResult = new ExtractKeyPhrasesActionResult ();
345- ExtractKeyPhrasesActionResultPropertiesHelper .setResult (actionResult ,
346- toExtractKeyPhrasesResultCollection (taskItem .getResults ()));
347- TextAnalyticsActionResultPropertiesHelper .setCompletedAt (actionResult ,
348- taskItem .getLastUpdateDateTime ());
349- return actionResult ;
350- })
351- .collect (Collectors .toList ()));
350+ for (int i = 0 ; i < keyPhraseExtractionTasks .size (); i ++) {
351+ final TasksStateTasksKeyPhraseExtractionTasksItem taskItem = keyPhraseExtractionTasks .get (i );
352+ final ExtractKeyPhrasesActionResult actionResult = new ExtractKeyPhrasesActionResult ();
353+ ExtractKeyPhrasesActionResultPropertiesHelper .setResult (actionResult ,
354+ toExtractKeyPhrasesResultCollection (taskItem .getResults ()));
355+ TextAnalyticsActionResultPropertiesHelper .setCompletedAt (actionResult ,
356+ taskItem .getLastUpdateDateTime ());
357+ extractKeyPhrasesActionResults .add (actionResult );
358+ }
359+ }
360+
361+ final List <TextAnalyticsError > errors = analyzeJobState .getErrors ();
362+ if (!CoreUtils .isNullOrEmpty (errors )) {
363+ for (TextAnalyticsError error : errors ) {
364+ final String [] targetPair = parseActionErrorTarget (error .getTarget ());
365+ final String taskName = targetPair [0 ];
366+ final Integer taskIndex = Integer .valueOf (targetPair [1 ]);
367+ final TextAnalyticsActionResult actionResult ;
368+ if ("entityRecognitionTasks" .equals (taskName )) {
369+ actionResult = recognizeEntitiesActionResults .get (taskIndex );
370+ } else if ("entityRecognitionPiiTasks" .equals (taskName )) {
371+ actionResult = recognizePiiEntitiesActionResults .get (taskIndex );
372+ } else if ("keyPhraseExtractionTasks" .equals (taskName )) {
373+ actionResult = extractKeyPhrasesActionResults .get (taskIndex );
374+ } else {
375+ throw logger .logExceptionAsError (new RuntimeException (
376+ "Invalid task name in target reference, " + taskName ));
377+ }
378+
379+ TextAnalyticsActionResultPropertiesHelper .setIsError (actionResult , true );
380+ TextAnalyticsActionResultPropertiesHelper .setError (actionResult ,
381+ new com .azure .ai .textanalytics .models .TextAnalyticsError (
382+ TextAnalyticsErrorCode .fromString (
383+ error .getCode () == null ? null : error .getCode ().toString ()),
384+ error .getMessage (), null ));
385+ }
352386 }
387+
353388 final AnalyzeBatchActionsResult analyzeBatchActionsResult = new AnalyzeBatchActionsResult ();
354389
355390 final RequestStatistics requestStatistics = analyzeJobState .getStatistics ();
@@ -363,11 +398,11 @@ private AnalyzeBatchActionsResult toAnalyzeTasks(AnalyzeJobState analyzeJobState
363398
364399 AnalyzeBatchActionsResultPropertiesHelper .setStatistics (analyzeBatchActionsResult , batchStatistics );
365400 AnalyzeBatchActionsResultPropertiesHelper .setRecognizeEntitiesActionResults (analyzeBatchActionsResult ,
366- recognizeEntitiesActionResults );
401+ IterableStream . of ( recognizeEntitiesActionResults ) );
367402 AnalyzeBatchActionsResultPropertiesHelper .setRecognizePiiEntitiesActionResults (analyzeBatchActionsResult ,
368- recognizePiiEntitiesActionResults );
403+ IterableStream . of ( recognizePiiEntitiesActionResults ) );
369404 AnalyzeBatchActionsResultPropertiesHelper .setExtractKeyPhrasesActionResults (analyzeBatchActionsResult ,
370- extractKeyPhrasesActionResults );
405+ IterableStream . of ( extractKeyPhrasesActionResults ) );
371406 return analyzeBatchActionsResult ;
372407 }
373408
@@ -425,4 +460,20 @@ private AnalyzeBatchActionsOptions getNotNullAnalyzeBatchActionsOptions(AnalyzeB
425460 private String getNotNullModelVersion (String modelVersion ) {
426461 return modelVersion == null ? "latest" : modelVersion ;
427462 }
463+
464+ private String [] parseActionErrorTarget (String targetReference ) {
465+ if (CoreUtils .isNullOrEmpty (targetReference )) {
466+ throw logger .logExceptionAsError (new RuntimeException (
467+ "Expected an error with a target field referencing an action but did not get one" ));
468+ }
469+ // action could be failed and the target reference is "#/tasks/keyPhraseExtractionTasks/0";
470+ final Pattern pattern = Pattern .compile (REGEX_ACTION_ERROR_TARGET , Pattern .MULTILINE );
471+ final Matcher matcher = pattern .matcher (targetReference );
472+ String [] taskNameIdPair = new String [2 ];
473+ while (matcher .find ()) {
474+ taskNameIdPair [0 ] = matcher .group (1 );
475+ taskNameIdPair [1 ] = matcher .group (2 );
476+ }
477+ return taskNameIdPair ;
478+ }
428479}
0 commit comments