Orçamentos de sessão
Limite os gastos de uma sessão com um orçamento rígido em dólares, aplicado com base nas tarifas públicas de lista.
Um “session budget” (orçamento de sessão) é um teto rígido e opcional de gastos que você define ao criar uma sessão. A plataforma precifica continuamente tudo o que a sessão consome com base nos preços de tabela públicos (o list cost (custo de tabela) da sessão) e para de emitir novas requisições ao modelo assim que esse custo atinge o orçamento. A requisição em andamento no momento em que o limite é ultrapassado ainda é concluída, portanto o custo de tabela final pode ficar uma fração acima do orçamento. Uma sessão que atinge seu orçamento é pausada e fica ociosa em vez de ser encerrada; alterar ou remover o orçamento retoma o trabalho que o orçamento pausou. Implantações aceitam o mesmo orçamento e o aplicam a cada sessão que iniciam; consulte Orçamentos em implantações.
Definir um orçamento na criação da sessão
Passe o campo opcional budget ao criar a sessão:
session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
budget={
"type": "limit",
"max_list_cost": {"amount": "125", "currency": "USD"},
},
)
print(session.id, session.budget.max_list_cost.amount) # sesn_01... 125O objeto budget tem dois campos:
typeé sempre"limit".max_list_costé o próprio limite:amounté um número inteiro de centavos de dólar americano escrito como string, sem zeros à esquerda ("125"equivale a $1,25 USD e"50"equivale a 50 centavos), e deve ser maior que zero. Formas decimais como"25.00"são rejeitadas. O valor é uma string em vez de um número para que nenhum arredondamento de ponto flutuante seja aplicado a ele.currencyé um código de moeda ISO-4217 em letras maiúsculas;USDé a única moeda suportada.
Um orçamento só pode ser anexado quando a sessão é criada. Adicionar um orçamento a uma sessão existente que não tem um é rejeitado com um erro 400. O teto de uma sessão com orçamento pode ser alterado ou removido a qualquer momento.
Como o custo de lista é medido
A plataforma precifica o que a sessão consome, continuamente, às tarifas públicas de lista:
- Tokens do modelo, ao preço de lista de cada modelo servido
- Pesquisas na web, a $10 USD por 1.000 pesquisas
- Tempo de execução da sessão, a $0,08 USD por hora
Esse total acumulado em dólares é o custo de lista da sessão, e é com ele que o orçamento é comparado. O custo de lista não é o seu preço contratado: se sua organização negociou descontos, a sessão atinge seu teto quando o total a preço de lista o atinge, e seu gasto faturado pode ser menor que o teto.
A aplicação do teto usa o custo de lista exato, sem arredondamento. Os valores de list_cost informados na sessão e em seus eventos são centavos inteiros, arredondados para o centavo mais próximo, então um valor informado pode diferir em até meio centavo, para mais ou para menos, do valor exato usado na aplicação do teto.
Quando uma sessão atinge seu orçamento
O limite é aplicado entre requisições ao modelo, não no meio de uma requisição. Antes de cada requisição ao modelo, a plataforma verifica o custo de tabela consumido pela sessão e, assim que esse total atinge o limite, cada thread é pausada antes de sua próxima requisição. A requisição que levou o total além do limite foi admitida enquanto a sessão ainda estava abaixo dele e é executada até o fim. Como resultado, o list_cost registrado de uma sessão pausada fica igual ou uma fração acima de max_list_cost. Por exemplo, uma sessão limitada a "50" (50 centavos) pode ser pausada com um list_cost de "53". Isso é esperado, não é um erro de cobrança. O gasto com o modelo além do limite é, no máximo, o custo de uma requisição ao modelo para cada thread. As chamadas de ferramentas na resposta dessa requisição ainda são executadas, e suas pesquisas na web e seu tempo de execução também contam para o custo de tabela. Trate o orçamento como um limite para novos trabalhos, e não como um ponto de parada exato, e dimensione o limite levando essa margem em conta.
Uma sessão que atinge seu orçamento fica ociosa com um stop_reason de budget_reached; ela não é encerrada, e seu histórico e sandbox são preservados como os de qualquer outra sessão ociosa. No fluxo de eventos você verá, nesta ordem:
- Um evento
session.thread_status_idlecom umstop_reasondebudget_reachedà medida que cada thread é pausada. - Um evento
session.usagecom o uso acumulado e o custo de lista da sessão. - Um evento
session.status_idlecom umstop_reasondebudget_reached. O evento de uso sempre precede imediatamente esse evento de ociosidade.
Se houver execuções de workflow abertas, cada uma que ainda não esteja ociosa também recebe um evento workflow_run.status_idle.
Uma thread cuja requisição final tanto ultrapassa o teto quanto conclui seu turno informa end_turn em seu próprio evento session.thread_status_idle, enquanto a sessão ainda informa budget_reached; trate o stop_reason no nível da sessão como o sinal de que a sessão foi pausada em seu orçamento.
Eventos aceitos no teto
Enquanto a sessão está no orçamento ou acima dele, ela aceita apenas eventos que resolvem trabalho já em andamento:
user.tool_confirmationuser.tool_resultuser.custom_tool_resultuser.interrupt
Qualquer evento que iniciaria novo trabalho, como user.message, é rejeitado com um erro 400 que nomeia essa lista. Resultados resolvidos são registrados sem disparar uma nova requisição ao modelo; a sessão permanece pausada em seu orçamento.
Um user.interrupt enviado enquanto a sessão está pausada em seu orçamento (todas as threads pausadas no teto) é aceito e não aparece na lista de eventos. Ele não para nenhuma thread, porque todas as threads já estão pausadas. Altere ou remova o orçamento para continuar.
Se a sessão tiver execuções de workflow abertas, a interrupção pode pausá-las, como uma interrupção em qualquer outro momento pode. Uma execução pausada por uma interrupção não é retomada quando você altera ou remove o orçamento. Para continuá-la, altere ou remova o orçamento e, em seguida, envie um user.message pedindo ao agente que continue suas execuções. Consulte Interromper uma sessão com execuções abertas.
Retomar uma sessão em seu orçamento
Altere ou remova o orçamento com uma atualização da sessão. Uma atualização aceita retoma automaticamente o trabalho que o orçamento pausou; nenhuma ação adicional do cliente é necessária.
Cada execução de workflow que o orçamento pausou também recebe um evento workflow_run.status_running. Uma execução que uma interrupção pausou, mesmo uma interrupção enviada enquanto a sessão estava em seu orçamento, permanece pausada e não recebe nenhum evento workflow_run.status_running como resultado da atualização. Para continuá-la, envie uma user.message pedindo ao agente que continue suas execuções. Consulte Interromper uma sessão com execuções abertas.
Alterar o orçamento
Atualize a sessão com um novo max_list_cost. O novo valor pode ser maior ou menor que o teto atual, mas deve ser estritamente maior que o custo de lista consumido pela sessão; caso contrário, a atualização é rejeitada com um erro 400: budget.max_list_cost must be greater than the session's consumed list cost. Como o custo consumido geralmente fica uma fração acima do teto antigo quando a sessão é pausada, baseie o novo valor no usage.list_cost informado pela sessão, e não no max_list_cost antigo. Defina-o um centavo ou mais acima desse valor: o valor informado é arredondado e pode ficar uma fração abaixo do custo consumido exato que a verificação usa.
updated_session = client.beta.sessions.update(
session.id,
budget={
"type": "limit",
"max_list_cost": {"amount": "500", "currency": "USD"},
},
)
print(updated_session.budget.max_list_cost.amount) # 500Remover o orçamento
Passe budget=None para remover o teto completamente. O trabalho que o orçamento pausou é retomado, e o evento session.updated resultante traz budget definido como null.
unbudgeted_session = client.beta.sessions.update(session.id, budget=None)
print(unbudgeted_session.budget) # NoneMonitorar o gasto
O objeto da sessão traz seu budget e um objeto usage com os gastos rastreados: usage.list_cost é o custo de tabela consumido pela sessão, e usage.active_seconds é o tempo de execução sobre o qual seu custo de execução é calculado. Em uma sessão pausada em budget_reached, espere que usage.list_cost fique igual ou uma fração acima de max_list_cost: a requisição que ultrapassou o limite foi concluída antes da pausa. O active_seconds no nível da sessão conta uma única vez a atividade sobreposta de threads concorrentes. As respostas de recuperação de threads trazem os mesmos dois campos no próprio usage da thread, precificados para cada thread. Os valores por thread são arredondados de forma independente e excluem o custo de tempo de execução da sessão, portanto não somam exatamente o list_cost da sessão; o valor da sessão é aquele com base no qual o orçamento é aplicado.
O evento session.usage é um snapshot do uso acumulado e do custo de lista rastreado da sessão. Ele traz os totais de tokens da sessão, list_cost, active_seconds, as contagens de requisições de server_tool_use (web_search_requests, precificado no custo de lista por requisição, e web_fetch_requests, que mostra 0 porque requisições de web fetch não têm cobrança por requisição e não são medidas) e o budget da sessão, se a sessão tiver um. Ele aparece na lista de eventos e no stream da sessão. A sessão emite um imediatamente antes de ficar ociosa, qualquer que seja o motivo da parada, então uma sessão que atinge seu orçamento sempre emite um imediatamente antes do evento de ociosidade por orçamento atingido.
Para ler o uso a partir do stream e do objeto da sessão, consulte Acompanhar o uso.
Orçamentos em sessões multiagente
Uma sessão multiagente tem um único orçamento compartilhado entre todas as suas threads; não há limites por thread. O consumo de cada thread é precificado pelo modelo que ela utiliza, e as threads são pausadas de forma independente à medida que o limite compartilhado é atingido. As consultas ao Advisor contam para o mesmo orçamento, precificadas pelos preços do modelo advisor. Uma thread pode ser pausada em budget_reached enquanto outra conclui sua requisição em andamento.
Uma solicitação pendente tem precedência sobre o teto: uma sessão com uma thread aguardando em requires_action e outra pausada em budget_reached reporta requires_action no nível da sessão. A requisição pendente ainda precisa de uma resposta, e respondê-la é um evento de resolução que o orçamento não bloqueia.
Orçamentos em implantações
Uma “deployment” (implantação) aceita o mesmo objeto budget quando você a cria ou atualiza:
{
"budget": {
"type": "limit",
"max_list_cost": { "amount": "2000", "currency": "USD" }
}
}O teto é copiado para cada sessão que a implantação inicia, então ele limita cada execução separadamente, e não o gasto acumulado da implantação. Alterar o orçamento da implantação se aplica às sessões que a implantação iniciar depois, não às sessões já em execução. Diferentemente de uma sessão, o orçamento de uma implantação pode ser removido com budget=None e definido novamente mais tarde. Consulte Definir um orçamento em cada execução.
Modelos sem preço de lista
Um orçamento só pode rastrear o consumo que a plataforma consegue precificar. A criação de uma sessão com orçamento é rejeitada com um erro 400 se qualquer um dos itens a seguir usar um modelo sem preço de tabela público:
- O agente da sessão
- Qualquer agente listado na lista
predefined_agentsdesubagentsouworkflows - O advisor definido na configuração multiagente do agente
O erro informa que não há preço de tabela disponível para o modelo.
Se o uso de uma sessão com orçamento passar a incluir um modelo sem preço de lista, o orçamento não consegue mais medir os gastos da sessão: a sessão pode ser pausada com um stop_reason de budget_reached, e a alteração do orçamento é rejeitada. Remova o orçamento para retomar a sessão.
Referência de erros
Requisições relacionadas a orçamento são rejeitadas nos seguintes casos:
| Condição | Status |
|---|---|
Um evento que inicia trabalho (por exemplo, user.message) é enviado enquanto a sessão está no orçamento ou acima dele; o erro nomeia os eventos de resolução aceitos | 400 |
| O orçamento é definido com um valor igual ou inferior ao custo de lista consumido pela sessão | 400 |
| Um orçamento é adicionado a uma sessão criada sem um, ou readicionado após a remoção | 400 |
amount não é um número inteiro de centavos (por exemplo, "25.00"), é zero ou negativo, ou currency não é USD | 400 |
| Uma criação com orçamento referencia um modelo sem preço público de lista | 400 |
Disponibilidade
Claude API
- Status
- Beta
- APIs
- Managed Agents
- Messages API Não compatível
- Cabeçalho beta
- Requer
- Modelos
- Todos os modelos
Claude Platform on AWS
- Status
- Beta
- APIs
- Managed Agents
- Messages API Não compatível
- Cabeçalho beta
- Requer
- Modelos
- Todos os modelos
Claude Models on Google Cloud (Anthropic managed)
- Status
- Beta
- APIs
- Managed Agents
- Messages API Não compatível
- Cabeçalho beta
- Requer
- Modelos
- Todos os modelos
Tratamento de dados
Visão geral do tratamento de dadosEndpoints aplicáveis
/v1/agents/v1/sessions/v1/environments
Sessões são recursos com estado; as transcrições persistem até que você as exclua. Aplica-se a todos os sub-recursos do Managed Agents, incluindo Sandboxes auto-hospedados.
Aplica-se a todos os sub-recursos do Managed Agents, incluindo Sandboxes auto-hospedados.
Esta página foi útil?