Saltar para o conteúdo principal
FlexInference aceita requisições compatíveis com OpenAI. Mantenha o SDK oficial do OpenAI ou curl, defina a URL base para FlexInference, autentique com sua chave flex_live_ e envie o campo start_within obrigatório em cada requisição. Omita-o e você receberá 400 missing_start_within.
FlexInference suporta quatro endpoints POST e traduz cada formato de chamada para a superfície do provedor selecionada pelo planejador:
  • POST /v1/responses: a API Responses
  • POST /v1/chat/completions: a API Chat Completions
  • POST /v1/interactions: a API Interactions (funciona com modelos OpenAI, Gemini e Anthropic)
  • POST /v1/messages: a API Anthropic Messages (funciona com qualquer modelo)
Cada endpoint também aceita o array provider opcional e ordenado para fixar a rota; veja Fixando a rota abaixo. O SDK do OpenAI cobre /v1/responses e /v1/chat/completions. Ele não expõe /v1/interactions ou /v1/messages, então acesse-os com curl ou os SDKs nativos do FlexInference (Python, TypeScript).

Configurar o cliente

Passando start_within

start_within informa ao FlexInference quanto tempo ele pode esperar para que a requisição comece a retornar. Use uma duração como 00h-01m-00s para um minuto. Uma duração executa a “flex race”: o planejador tenta um tier flex mais barato dentro desse orçamento, então escala para o padrão quando o flex não consegue iniciar a tempo. Os SDKs do OpenAI não tipam start_within, então passe-o com extra_body em Python e um objeto de requisição não tipado em Node.
Veja Deadline routing para o conjunto completo de valores.

Lendo o resultado do flex

Leia service_tier no corpo da resposta, além dos cabeçalhos de resposta x-flexinference-flex-*. x-flexinference-flex-applied indica se o flex atendeu à resposta. x-flexinference-flex-reason fornece o resultado legível por máquina, incluindo flex_committed e flex_lost_race. Uma duração que não pode executar uma “flex race” retorna 400 flex_unsupported_for_anthropic ou 400 flex_model_not_capable. Veja Deadline routing para saber como ler os cabeçalhos e Errors para a lista completa.

Streaming

Defina stream: true e consuma eventos como faria com o OpenAI. O streaming não altera o roteamento. O FlexInference se compromete com um tier primeiro, então transmite os tokens depois que esse tier começa a responder.

Timeouts

start_within limita quando a requisição começa, não o tempo total de geração. O FlexInference mantém a resposta HTTP até que um tier se comprometa. Depois que o flex se compromete, ele é executado até a conclusão; o FlexInference não muda uma requisição comprometida para o padrão porque a geração é lenta. Defina o timeout do seu cliente para cobrir a janela de espera mais o tempo que o modelo precisa para responder. O SDK do OpenAI tem um timeout padrão de 10 minutos, o que corresponde ao start_within mais longo permitido. Se a geração puder começar perto do final de uma janela longa, aumente o timeout acima do padrão. Um timeout mais curto pode cancelar a requisição antes que o FlexInference retorne um resultado. Veja client_closed_request.
Os SDKs nativos do FlexInference (Python, TypeScript) lidam com isso automaticamente. Eles dimensionam a espera da primeira resposta a partir de start_within, limitam streams travados com um timeout de inatividade e deixam streams sem um limite total para que respostas longas possam ser concluídas. Chamadas não-streaming mantêm um orçamento total. Cada timeout é configurável no cliente e por requisição.

Retentando falhas transitórias upstream

Adicione um objeto retry opcional para tentar novamente o tier que está atendendo à sua requisição quando ele falha ao iniciar com um 429 ou 5xx transitório. Passe-o da mesma forma que você passa start_within.
count varia de 1 a 5, backoff é "exponential" (padrão) ou "linear", e jitter é true por padrão. A retentativa ocorre apenas antes que a resposta se comprometa, respeita o Retry-After do provedor e se acumula com as próprias retentativas do SDK do seu cliente. Veja Deadline routing para o comportamento completo e o cabeçalho de resposta x-flexinference-retries.

Fixando a rota

Um array provider opcional e ordenado fixa qual rota de provedor atende à sua requisição. Ele se aplica a todos os endpoints: /v1/responses, /v1/chat/completions, /v1/interactions e /v1/messages. O elemento 0 é a rota primária e a única porta flex; os elementos 1 a n são a cadeia de fallback do mesmo modelo, tentada em ordem quando uma rota falha transitoriamente. Omita-o e o FlexInference usará a rota nativa do modelo. Passe-o da mesma forma que você passa start_within. Cada rota que você nomeia precisa ter sua chave configurada primeiro. Uma chave ausente retorna um 400 para essa rota e nunca passa para a próxima, então adicione a chave de cada rota no painel antes de nomeá-la. Veja provider routing.
google, openai e anthropic são rotas diretas. vertex (Gemini) e bedrock (Claude) são rotas de nuvem que servem o mesmo modelo no Google Vertex AI e Amazon Bedrock; cada uma precisa da própria chave BYOK dessa nuvem. Um array inválido retorna 400 invalid_provider_chain, uma rota que não pode servir o modelo retorna 400 provider_model_mismatch, e uma duração start_within com uma rota de nuvem primeiro retorna 400 flex_unsupported_on_cloud. Os SDKs nativos do FlexInference tipam provider e verificam seu formato localmente antes que a requisição saia do seu processo; o SDK do OpenAI não o tipa, então passe-o através de extra_body ou um objeto não tipado. Veja provider routing para a matriz de cadeias válidas.

Chat Completions

Chat Completions usa as mesmas regras de start_within. Uma duração executa a “flex race” quando a requisição pode ser roteada através de Responses canônicas. Requisições de Chat do OpenAI são roteadas através de Responses canônicas, a menos que um parâmetro de Chat nativo exija o passthrough de Chat do OpenAI; parâmetros de Chat apenas nativos não podem ser combinados com uma duração start_within.

Interactions

O endpoint Interactions é outro formato de chamada para modelos OpenAI, Gemini e Anthropic. start_within se aplica da mesma forma. Envie input como uma string, um array de conteúdo de partes ou uma lista de etapas multi-turn. system_instruction, tools e response_format mapeiam para os mesmos recursos upstream.
A resposta é um objeto interaction. A saída está em steps. usage divide as contagens de tokens entre input, output, thought, cached, tool-use e total.
status é requires_action quando uma etapa é uma function_call, incomplete quando a saída é truncada, failed em caso de erro e completed caso contrário. generation_config.thinking_level mapeia para reasoning.effort. Chaves generation_config.* extras são passadas para modelos Gemini. Em modelos não-Gemini, qualquer chave generation_config.* não mapeada falha com unsupported_generation_config. Um service_tier fornecido pelo chamador é recusado com service_tier_not_allowed; veja Errors. FlexInference deriva a seleção de tier de start_within. Se você enviar service_tier, a requisição falha com service_tier_not_allowed. Remova o campo e expresse o tier através de start_within. Veja Errors para a lista completa e exemplos de corpos.

Messages

O endpoint Messages usa o formato de requisição e resposta Anthropic Messages. Ele funciona com qualquer modelo porque o FlexInference traduz através do formato canônico. start_within é obrigatório. Anthropic requer max_tokens; o FlexInference o encaminha quando você o define e não sintetiza um padrão quando você o omite. Envie messages como turnos {role, content}, com content como uma string ou um array de blocos de conteúdo. system, tools, tool_choice e thinking mapeiam para os mesmos recursos upstream.
A resposta é um objeto message do Anthropic. A saída está em content como blocos text, thinking e tool_use. usage.service_tier é o tier servido, seja flex ou standard.
stop_reason é end_turn em uma finalização normal, max_tokens quando truncado, tool_use quando o modelo chama uma ferramenta e refusal quando ele recusa. thinking mapeia para reasoning.effort por modelo. Em modelos Claude, campos nativos do Anthropic como top_k, stop_sequences, blocos cache_control, citações e blocos de conteúdo document ou file são passados. Em modelos OpenAI ou Gemini, blocos de conteúdo document e file com fontes base64 são traduzidos para input_file canônico e não são rejeitados. Documentos de URL remotos ainda dependem do suporte do provedor de destino. Outros campos nativos do Anthropic, incluindo top_k, stop_sequences, blocos cache_control e citações, falham com unsupported_parameter entre provedores. Um service_tier fornecido pelo chamador sempre falha com service_tier_not_allowed; veja Errors.

Tudo o mais funciona inalterado

Chamada de ferramentas (tool calling), saídas estruturadas (response_format), visão e raciocínio são passados para o provedor selecionado. Use os campos normais do provedor para esses recursos.
Parâmetros nativos de Chat são passados em modelos OpenAI quando o passthrough nativo de Chat é necessário: presence_penalty, frequency_penalty, logit_bias, logprobs, top_logprobs, seed, stop, prediction, audio, modalities não-texto e web_search_options. Em modelos Gemini ou Claude, definir qualquer um desses campos para um valor real falha com unsupported_parameter. n > 1 em Chat Completions sempre falha com unsupported_value. Para pesquisa web no caminho canônico, use uma ferramenta web_search de Responses.