Ciclo de vida da tarefa
Todas as gerações APIs no Tripo API usam um padrão de tarefa assíncrona. Depois de enviar uma solicitação, API retorna um task_id. Você pode então pesquisar o status e o resultado da tarefa.
Máquina de estado
queued -> running -> success
-> failed
-> cancelled
Descrições de status
| Estado | Descrição | progresso |
|---|---|---|
queued |
A tarefa foi criada e está aguardando na fila | 0 |
running |
A tarefa está sendo processada | 0-100 |
success |
A tarefa foi concluída e o campo output está disponível |
100 |
failed |
A tarefa falhou, geralmente devido a um problema no servidor. Contate o suporte | - |
banned |
O conteúdo de entrada viola a política de conteúdo | - |
expired |
A tarefa expirou e os arquivos de saída não estão mais disponíveis | - |
cancelled |
A tarefa foi cancelada | - |
Fluxo de Tarefas
1. Create a task (POST /v3/generation/*)
|
v
2. Return task_id
|
v
3. Poll status (GET /v3/tasks/{task_id})
|
v
4a. status=success -> Get download links from output
4b. status=failed -> Check error details and contact support
4c. status=banned -> Modify the input content and submit again
Modelo de congelamento de crédito
Tripo usa um modelo de crédito “congelar e depois deduzir” para garantir que os usuários não sejam cobrados por tarefas com falha:
| Palco | Alteração de crédito | Descrição |
|---|---|---|
| Criação de tarefa | Congelar os créditos necessários | Os créditos são pré-autorizados a partir do saldo disponível e transferidos para um estado congelado |
| A tarefa foi bem-sucedida | Créditos congelados tornam-se créditos consumidos | Os créditos são formalmente deduzidos |
| A tarefa falha | Créditos congelados são liberados | Os créditos são devolvidos ao saldo disponível |
| A tarefa foi cancelada | Créditos congelados são liberados | Os créditos são devolvidos ao saldo disponível |
Consulta de saldo atual e créditos congelados:
Bash
-cmd">curl -X GET https://openapi.tripo3d.ai/v3/account/balance \
-H "Authorization: Bearer {api_key}"
JSON
{
"code": 0,
"data": {
"balance": 10000,
"frozen": 200
}
}
Recomendações de votação
- Intervalo de pesquisa: consulte uma vez a cada 1-2 segundos
- Use o campo
progresspara exibir o progresso: O valor é um número inteiro de 0 a 100 - Definir um tempo limite: recomendamos definir uma duração máxima de pesquisa, como 5 minutos. Se o tempo expirar, peça ao usuário para verificar novamente mais tarde
- Use
POST /v3/tasks/listpara tarefas em lote: reduza o número de solicitações
Exemplo de pesquisa Python
Python
import time
import requests
def wait_for_task(task_id, api_key, interval=2, timeout=300):
url = f"https://openapi.tripo3d.ai/v3/tasks/{task_id}"
headers = {"Authorization": f"Bearer {api_key}"}
start = time.time()
while time.time() - start < timeout:
response = requests.get(url, headers=headers)
task = response.json()["data"]
status = task["status"]
progress = task.get("progress", 0)
print(f"[{task_id}] {status} ({progress}%)")
if status == "success":
return task["output"]
if status in ("failed", "cancelled", "banned"):
raise Exception(f"Task terminated: {status}")
time.sleep(interval)
raise TimeoutError(f"Task {task_id} timed out")
Exemplo de pesquisa JavaScript
JavaScript
async function waitForTask(taskId, apiKey, interval = 2000, timeout = 300000) {
const url = `https://openapi.tripo3d.ai/v3/tasks/${taskId}`;
const headers = { "Authorization": `Bearer ${apiKey}` };
const start = Date.now();
while (Date.now() - start < timeout) {
const response = await fetch(url, { headers });
const { data: task } = await response.json();
const { status, progress = 0 } = task;
console.log(`[${taskId}] ${status} (${progress}%)`);
if (status === "success") return task.output;
if (["failed", "cancelled", "banned"].includes(status)) {
throw new Error(`Task terminated: ${status}`);
}
await new Promise(resolve => setTimeout(resolve, interval));
}
throw new Error(`Task ${taskId} timed out`);
}