async def get_task_status(task_id: str) -> Dict[str, Any]:
"""
Get the status of a 3D model generation task.
IMPORTANT: This tool checks the status of a task started by create_3d_model_from_text.
You may need to call this tool MULTIPLE TIMES until the task completes.
Typical workflow:
1. Call this tool with the task_id from create_3d_model_from_text
2. Check the status in the response:
- If status is SUCCESS, the task is complete and you can use the pbr_model_url
- If status is FAILED, CANCELLED, BANNED, or EXPIRED, the task failed
- If status is anything else, the task is still in progress
3. If the task is still in progress, wait a moment and call this tool again
Args:
task_id: The ID of the task to check (obtained from create_3d_model_from_text).
Returns:
A dictionary containing the task status and other information.
"""
# Get the API key from environment variable
# api_key = os.environ.get("TRIPO_API_KEY")
get_blender_connection()
api_key = _tripo_apikey
if not api_key:
raise ValueError(
"It may take some more time to correctly re-enter the tripo function. You can first check the scene and then try the tripo function again later"
)
# Create the Tripo client
async with TripoClient(api_key=api_key) as client:
# Get task status
task = await client.get_task(task_id)
# Ensure task is not None
if task is None:
raise ValueError(
f"Failed to retrieve task information for task ID: {task_id}"
)
# Create result dictionary
result = {
"task_id": task_id,
"status": str(task.status),
"progress": task.progress,
}
# Add output fields if task is successful and output is available
if task.status == TaskStatus.SUCCESS and task.output:
result.update(
{
"base_model_url": task.output.base_model,
"model_url": task.output.model,
"pbr_model_url": task.output.pbr_model,
"rendered_image_url": task.output.rendered_image,
"message": "Task completed successfully! You can now use the pbr_model_url.",
"next_step": "Use the pbr_model_url to access the 3D model, download it through import_tripo_glb_model tool",
}
)
if not task.output.pbr_model:
result["warning"] = (
"Model generated but PBR model URL is not available."
)
elif task.status == TaskStatus.SUCCESS:
result["message"] = (
"Task completed successfully but no output data is available."
)
result["next_step"] = (
"Try creating a new model with a different description."
)
elif task.status in (
TaskStatus.FAILED,
TaskStatus.CANCELLED,
TaskStatus.BANNED,
TaskStatus.EXPIRED,
):
result["message"] = f"Task failed with status: {task.status}"
result["next_step"] = (
"Try creating a new model with a different description."
)
else:
result["message"] = (
f"Task is still in progress. Current status: {task.status}, Progress: {task.progress}%"
)
result["next_step"] = (
"IMPORTANT: You must call get_task_status again with this task_id to continue checking progress."
)
result["wait_message"] = (
"3D model generation typically takes 3-5 minutes. Please be patient and keep checking."
)
return result