簡體   English   中英

Google Document AI - 不一致的長期運行操作的元數據 JSON 表示

[英]Google Document AI - Inconsistent Long Running Operation's metadata JSON representation

在檢查 Document AI - Long Running Operation (Form processor) 的狀態時, decodedOperation.metadata的 JSON 表示在執行期間似乎有所不同。 我懷疑盡管在checkBatchProcessDocumentsProgress(operation.name)上使用了then() ,但operation響應並沒有立即解決。

使用 Google Speech 的 LRO 的類似代碼不會發生此行為。

語境:

console.log已實現代碼的第 24 行(下方),如預期的那樣decodedOperation.metadata解析為

{
   "state":"RUNNING",
   "createTime":{
      "seconds":"1669278029",
      "nanos":500249000
   },
   "updateTime":{
      "seconds":"1669278029",
      "nanos":500249000
   }
}

當前行為:

console.log第 27 行, decodedOperation.metadata.state返回2 (??)

預期行為:

decodedOperation.metadata.state應該返回RUNNING

下面代碼中輸出的更多細節。

再現細節:

環境: node.js 12.02

包.json:

{
    "dependencies": {
        "@google-cloud/documentai": "latest",
    }
}

代碼:

function run() {

    const documentai = require('@google-cloud/documentai').v1;

    // Create a promise on object
    let options = {
        credentials: {
            client_email: ** ** ** ,
            private_key: ** ** * ,
        },
        projectId: ** ** *
    };

    return async (async callback => {

        const client = new documentai.DocumentProcessorServiceClient(options);
        client.checkBatchProcessDocumentsProgress(properties.operation)
            .then(
                (decodedOperation) => {

                    console.log("METADATA " + JSON.stringify(decodedOperation.metadata));
                    /* logs to console:  
                        {
                           "state":"RUNNING",
                           "createTime":{
                              "seconds":"1669278029",
                              "nanos":500249000
                           },
                           "updateTime":{
                              "seconds":"1669278029",
                              "nanos":500249000
                           }
                        }
                    /// then 
                        {
                         "state":"SUCCEEDED",
                         "createTime":{
                            "seconds":"1669278029",
                            "nanos":500249000
                         },
                         "updateTime":{
                            "seconds":"1669278048",
                            "nanos":758825000
                         },
                         "individualProcessStatuses":[
                            {
                               "inputGcsSource":"gs://bucket/intake-form.pdf",
                               "status":{

                               },
                               "outputGcsDestination":"gs://bucket/ocr/7371120297544371692/0",
                               "humanReviewStatus":{
                                  "state":"SKIPPED",
                                  "stateMessage":"HumanReviewConfig is DISABLED, skipping human review."
                               }
                            }
                         ]
                      }
                      */
                    console.log("STATE " + JSON.stringify(decodedOperation.metadata.state));
                    /* log to console: 2 
                     when above is "RUNNING" */

                    /* log to console: 3
                    when above is "SUCCEEDED" */

                    if (decodedOperation.metadata.state == "SUCCEEDED") { // Never triggers as decodedOperation.metadata.state evaluates to an integer at this line

                    };
                    let response = {
                        "operationStatus": decodedOperation.metadata.state
                    };
                    callback(undefined, response);
                })
            .catch(
                (err) => {
                    callback(err);
                });
    })
} 

調查更新

util.inspect(decodedOperation.metadata, { showHidden: false })返回:

BatchProcessMetadata {
   {
      "individualProcessStatuses":[
         "IndividualProcessStatus"{
            "inputGcsSource":"gs://bucketxxx/intake-form.pdf",
            "status":[
               "Status"
            ],
            "outputGcsDestination":"gs://bucketxxx/ocr/7999521463088838887/0",
            "humanReviewStatus":[
               "HumanReviewStatus"
            ]
         }
      ],
      "state":3,
      "createTime":"Timestamp"{
         "seconds":"Long"{
            "low":1670011754,
            "high":0,
            "unsigned":false
         },
         "nanos":105214000
      },
      "updateTime":"Timestamp"{
         "seconds":"Long"{
            "low":1670011773,
            "high":0,
            "unsigned":false
         },
         "nanos":489028000
      }
   }

util.inspect(decodedOperation.metadata, { showHidden: true })返回(僅感興趣的部分):

[...] [root]: [Getter], [fullName]: [Getter] }, State: { STATE_UNSPECIFIED: 0, WAITING: 1, RUNNING: 2, SUCCEEDED: 3, CANCELLING: 4, CANCELLED: 5, FAILED: 6, '0': 'STATE_UNSPECIFIED', '1': 'WAITING', '2': 'RUNNING', '3': 'SUCCEEDED', '4': 'CANCELLING', '5': 'CANCELLED', '6': 'FAILED' }, encode: <ref *5> [Function: BatchProcessMetadata$encode] [...]

要解決此問題,您可以使用 documentai.v1.BatchProcessMetadata.State 對象訪問狀態枚舉值的字符串表示形式。 例如:

console.log("STATE " + documentai.v1.BatchProcessMetadata.State[decodedOperation.metadata.state]);

代替

console.log("STATE " + JSON.stringify(decodedOperation.metadata.state));

閱讀更多相關信息。 https://cloud.google.com/php/docs/reference/cloud-document-ai/latest/V1.BatchProcessMetadata.State

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM