tutorial

Migrar da OpenAI direta pra Tokia em 5 minutos (zero refactor)

Tutorial step-by-step pra trocar BASE_URL do SDK OpenAI/Anthropic. Mesma key estrutura, mesmas chamadas, billing BRL. Inclui código Python, Node, LangChain e Vercel AI SDK.

A migração da Tokia foi desenhada pra não exigir refactor. Se seu código já usa SDK OpenAI/Anthropic em qualquer linguagem, trocar 2 linhas já bota tudo funcionando contra Tokia. Vou mostrar 4 stacks comuns.

O que você precisa antes

  1. Conta Tokia (usetokia.com/dashboard)
  2. R$ 10 de saldo via PIX (recarga mínima)
  3. Uma API key sk-tokia-... (/docs/manual/02-criar-api-key)

Total: ~3 minutos.

Stack 1 — Python (SDK OpenAI oficial)

Antes (OpenAI direta):

from openai import OpenAI

client = OpenAI(api_key="sk-proj-...")

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "oi"}],
)
print(response.choices[0].message.content)

Depois (Tokia — 2 linhas mudam):

from openai import OpenAI

client = OpenAI(
    base_url="https://api.usetokia.com/v1",  # ← adiciona
    api_key="sk-tokia-...",                  # ← troca
)

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "oi"}],
)
print(response.choices[0].message.content)

Resto idêntico. Streaming, function calling, response format JSON, embeddings — tudo funciona igual.

Stack 2 — Node.js / TypeScript (SDK OpenAI oficial)

import OpenAI from "openai";

const tokia = new OpenAI({
  baseURL: "https://api.usetokia.com/v1",
  apiKey: process.env.TOKIA_API_KEY,
});

const response = await tokia.chat.completions.create({
  model: "claude-sonnet-46",
  messages: [{ role: "user", content: "oi" }],
});

console.log(response.choices[0]?.message.content);

Stack 3 — LangChain

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="claude-sonnet-46",
    base_url="https://api.usetokia.com/v1",
    api_key="sk-tokia-...",
)

result = llm.invoke("Resuma IA em 1 frase")
print(result.content)

Funciona com tools, structured output, callbacks — LangChain trata Tokia como se fosse OpenAI direto.

Stack 4 — Vercel AI SDK

import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";

const tokia = createOpenAI({
  baseURL: "https://api.usetokia.com/v1",
  apiKey: process.env.TOKIA_API_KEY,
});

const { text } = await generateText({
  model: tokia("gpt-4o-mini"),
  prompt: "oi",
});

Streaming SSE funciona out-of-the-boxstreamText em vez de generateText.

Stack 5 — curl puro (qualquer linguagem)

curl https://api.usetokia.com/v1/chat/completions \
  -H "Authorization: Bearer sk-tokia-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "oi"}]
  }'

O que NÃO precisa mudar

  • Estrutura de request/response — JSON é OpenAI-compatible literalmente
  • Streaming SSE — formato idêntico (data: {"choices":[{"delta":...}]})
  • Function calling — passa tools: [...], recebe tool_calls
  • Response format JSONresponse_format: { type: "json_object" }
  • Embeddings/v1/embeddings mesmo formato
  • Imagens/v1/images/generations mesmo formato

O que muda (ganhos)

  1. Cobrança BRL — fatura mensal em real, NF de serviço dedutível
  2. Multi-provider — mesma key acessa OpenRouter (300+ modelos), Anthropic, Fal.ai, Google
  3. Budget cap per-key — limita gasto de cada key
  4. Dashboard de uso — gráficos por modelo + por key
  5. Webhooks outbound — eventos quando saldo baixa, key suspendeu, top-up confirmou
  6. Markup decrescente — Llama/DeepSeek 3x, GPT-4o-mini 2x, Claude 1.5x

E se eu já tiver código complexo?

Não tem regra "tem que migrar tudo". Comum é:

  • Fase 1: pega 1 endpoint do seu SaaS (ex: chatbot atendimento), troca pra Tokia, mede 1 semana
  • Fase 2: se OK, migra rotas que dependem dele
  • Fase 3: deixa OpenAI direto pra casos específicos (ex: legacy integration com tooling proprietary)

Tokia tem ID Tokia (alias curto) e ID upstream completo. Pra fazer A/B test em uma rota só, basta:

import random

# 50% Tokia, 50% OpenAI direto
if random.random() < 0.5:
    response = tokia_client.chat.completions.create(...)
else:
    response = openai_client.chat.completions.create(...)

Loga ambos os custos e compara depois de 1 semana.

Erros comuns na migração

| Sintoma | Causa | Fix | |---|---|---| | 401 authentication_failed | Key sk-tokia-... revogada/expirada | Cria nova em /dashboard/keys | | 402 insufficient_balance | Saldo zerado | Recarrega PIX | | 404 model_not_found | Typo no model. GET /v1/models pra lista atual | Use test-free, gpt-4o-mini, claude-sonnet-46, etc | | 502 upstream_error | Provider upstream (OpenAI/Anthropic/etc) caiu | Tenta de novo em ~30s. Sentry alerta Tokia | | Latência maior que OpenAI direto | Tokia adiciona ~100ms (proxy + log) | Pra workload latency-critical mantém OpenAI direto |

Conclusão

Pra 95% dos casos a migração é trocar 2 linhas. O outro 5% (rate limiting custom, headers proprietários, beta features OpenAI) você pode rodar híbrido — Tokia pra produção, OpenAI direto pra integrações específicas.

Cria conta com R$ 10 PIX e testa →


Posts relacionados:

#openai#migracao#sdk#langchain#vercel-ai-sdk

Quer testar Tokia com R$ 10 via PIX?

Criar conta grátis →