Migrando do openai para floopy-sdk
O pacote openai ja funciona contra o Floopy — basta apontar baseURL para https://api.floopy.ai/v1. Entao por que migrar?
floopy-sdk envolve o mesmo pacote openai por composicao (suas chamadas de chat/embeddings continuam usando o codigo upstream) e adiciona:
- metodos tipados para
decisions,experiments,constraints,export,evaluations,routing.explainefeedback; - headers
Floopy-*tipados viaoptionsem vez dedefaultHeadersbaseado em string; - hierarquia
FloopyErrorcom subclasses adequadas (FloopyAuthError,FloopyPlanError,FloopyRateLimitError, …).
Atualizacoes de seguranca do openai chegam num pnpm update — sem fork drift.
import OpenAI from "openai";const client = new OpenAI({ baseURL: "https://api.floopy.ai/v1", apiKey: process.env.FLOOPY_API_KEY,});import { Floopy } from "floopy-sdk";const client = new Floopy({ apiKey: process.env.FLOOPY_API_KEY!,});
const response = await client.chat.completions.create({ model: "gpt-4o", messages: [{ role: "user", content: "hello" }],});client.chat, client.embeddings e client.models retornam os recursos do openai-node, entao tipos e comportamento em runtime sao identicos.
Substituindo headers Floopy custom
Seção intitulada “Substituindo headers Floopy custom”Se voce usava defaultHeaders para ligar features do Floopy, troque por options tipado:
const client = new OpenAI({ apiKey: process.env.FLOOPY_API_KEY, baseURL: "https://api.floopy.ai/v1", defaultHeaders: { "Floopy-Cache-Enabled": "true", "Floopy-Cache-Bucket-Max-Size": "3", "Floopy-Prompt-Id": "cd4249d5-...", "floopy-llm-security-enabled": "true", },});const client = new Floopy({ apiKey: process.env.FLOOPY_API_KEY!, options: { cache: { enabled: true, bucketMaxSize: 3 }, promptId: "cd4249d5-...", llmSecurityEnabled: true, },});As chaves de options sao validadas pelo TypeScript, autocompletam, e o SDK serializa os headers. Voce ainda pode passar headers crus em defaultHeaders para qualquer caso nao coberto.
Substituindo fetch manual aos endpoints exclusivos
Seção intitulada “Substituindo fetch manual aos endpoints exclusivos”Tudo que voce fazia com fetch contra /v1/decisions, /v1/experiments, /v1/export/decisions, etc., agora tem metodo tipado. Veja a referencia do SDK Node.
const r = await fetch("https://api.floopy.ai/v1/decisions/" + id, { headers: { Authorization: `Bearer ${apiKey}` },});const decision = await r.json();const decision = await floopy.decisions.get(id);Fallback drop-in
Seção intitulada “Fallback drop-in”Se voce nao consegue migrar todos os call sites de uma vez, mantenha os dois clientes lado a lado:
import OpenAI from "openai";import { Floopy } from "floopy-sdk";
const legacy = new OpenAI({ baseURL: "https://api.floopy.ai/v1", apiKey: process.env.FLOOPY_API_KEY,});
const floopy = new Floopy({ apiKey: process.env.FLOOPY_API_KEY! });Ambos falam com o mesmo gateway — a unica coisa que voce perde no caminho legacy e o acesso tipado aos endpoints exclusivos do Floopy.