Pular para o conteúdo

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.explain e feedback;
  • headers Floopy-* tipados via options em vez de defaultHeaders baseado em string;
  • hierarquia FloopyError com 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.

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);

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.