|
6 | 6 | import pandas as pd |
7 | 7 | import requests |
8 | 8 | import streamlit as st |
9 | | -from clarifai.client.app import \ |
10 | | - App # New import to support list_model function |
| 9 | +from clarifai.client.app import App # New import to support list_model function |
11 | 10 | from clarifai.client.auth import V2Stub, create_stub |
12 | 11 | from clarifai.client.auth.helper import ClarifaiAuthHelper |
13 | 12 | from clarifai.client.input import Inputs |
14 | | -from clarifai.client.model import \ |
15 | | - Model # New import to support list_model function |
| 13 | +from clarifai.client.model import Model # New import to support list_model function |
16 | 14 | from clarifai.modules.css import ClarifaiStreamlitCSS |
17 | 15 | from clarifai_grpc.grpc.api import resources_pb2, service_pb2 |
18 | 16 | from clarifai_grpc.grpc.api.status import status_code_pb2 |
19 | 17 | from google.protobuf import json_format |
20 | 18 | from google.protobuf.json_format import MessageToDict |
21 | 19 | from google.protobuf.struct_pb2 import Struct |
22 | 20 | from typing import Dict |
| 21 | +from clarifai.utils.misc import BackoffIterator |
| 22 | +import time |
| 23 | + |
23 | 24 |
|
24 | 25 | st.set_page_config(layout="wide") |
25 | 26 | ClarifaiStreamlitCSS.insert_default_css(st) |
@@ -268,17 +269,29 @@ def delete_workflow(workflow_id: str): |
268 | 269 | @st.cache_resource |
269 | 270 | @st.cache_data |
270 | 271 | def run_workflow(input_text, workflow): |
271 | | - response = stub.PostWorkflowResults( |
272 | | - service_pb2.PostWorkflowResultsRequest( |
273 | | - user_app_id=userDataObject, |
274 | | - workflow_id=workflow.id, |
275 | | - inputs=[ |
276 | | - resources_pb2.Input( |
277 | | - data=resources_pb2.Data(text=resources_pb2.Text(raw=input_text,),),), |
278 | | - ], |
279 | | - )) |
280 | | - if response.status.code != status_code_pb2.SUCCESS: |
281 | | - raise Exception("PostWorkflowResults request failed: %r" % response) |
| 272 | + start_time = time.time() |
| 273 | + backoff_iterator = BackoffIterator() |
| 274 | + while True: |
| 275 | + response = stub.PostWorkflowResults( |
| 276 | + service_pb2.PostWorkflowResultsRequest( |
| 277 | + user_app_id=userDataObject, |
| 278 | + workflow_id=workflow.id, |
| 279 | + inputs=[ |
| 280 | + resources_pb2.Input( |
| 281 | + data=resources_pb2.Data(text=resources_pb2.Text(raw=input_text,),),), |
| 282 | + ], |
| 283 | + )) |
| 284 | + |
| 285 | + if response.status.code == status_code_pb2.MODEL_DEPLOYING and \ |
| 286 | + time.time() - start_time < 60 * 10: # 10 minutes |
| 287 | + st.info(f"Model is still deploying, please wait...") |
| 288 | + time.sleep(next(backoff_iterator)) |
| 289 | + continue |
| 290 | + |
| 291 | + if response.status.code != status_code_pb2.SUCCESS: |
| 292 | + raise Exception(f"PostWorkflowResults failed with response {response.status!r}") |
| 293 | + else: |
| 294 | + break |
282 | 295 |
|
283 | 296 | if DEBUG: |
284 | 297 | st.json(json_format.MessageToDict(response, preserving_proto_field_name=True)) |
|
0 commit comments