Migration Checker

OpenAI migration checker — paste-ready snippets for every stack

Pick your language and framework, and we generate a ready-to-paste code snippet that migrates you from OpenAI to Plugsky. Change one line, ship.

Your stack

See the full migration guide

Step-by-step OpenAI migration with samples for every language.

Full guide → Why Plugsky?
(function(){ var SNIPS = { 'python|chat': { lang: 'python', code: 'from openai import OpenAI\n\nclient = OpenAI(\n api_key="sk-live-PLUGSKY-...",\n base_url="https://api.plugsky.com/v1",\n)\n\nresp = client.chat.completions.create(\n model="plugsky-pro",\n messages=[{"role": "user", "content": "Hello!"}],\n)\nprint(resp.choices[0].message.content)' }, 'python|stream': { lang: 'python', code: 'from openai import OpenAI\n\nclient = OpenAI(\n api_key="sk-live-PLUGSKY-...",\n base_url="https://api.plugsky.com/v1",\n)\n\nstream = client.chat.completions.create(\n model="plugsky-pro",\n messages=[{"role": "user", "content": "Tell me a story"}],\n stream=True,\n)\nfor chunk in stream:\n if chunk.choices[0].delta.content:\n print(chunk.choices[0].delta.content, end="")' }, 'python|embed': { lang: 'python', code: 'from openai import OpenAI\n\nclient = OpenAI(\n api_key="sk-live-PLUGSKY-...",\n base_url="https://api.plugsky.com/v1",\n)\n\nemb = client.embeddings.create(\n model="plugsky-embed-large",\n input="text to embed",\n)\nvector = emb.data[0].embedding' }, 'python|functions': { lang: 'python', code: 'from openai import OpenAI\nimport json\n\nclient = OpenAI(\n api_key="sk-live-PLUGSKY-...",\n base_url="https://api.plugsky.com/v1",\n)\n\ntools = [{\n "type": "function",\n "function": {\n "name": "get_weather",\n "description": "Get current weather for a city",\n "parameters": {\n "type": "object",\n "properties": {"city": {"type": "string"}},\n "required": ["city"]\n }\n }\n}]\n\nresp = client.chat.completions.create(\n model="plugsky-pro",\n messages=[{"role": "user", "content": "What is the weather in Dubai?"}],\n tools=tools,\n)\nfor call in resp.choices[0].message.tool_calls or []:\n print(call.function.name, call.function.arguments)' }, 'python|vision': { lang: 'python', code: 'from openai import OpenAI\nimport base64\n\nclient = OpenAI(\n api_key="sk-live-PLUGSKY-...",\n base_url="https://api.plugsky.com/v1",\n)\n\nwith open("image.png", "rb") as f:\n b64 = base64.b64encode(f.read()).decode()\n\nresp = client.chat.completions.create(\n model="plugsky-vision",\n messages=[{\n "role": "user",\n "content": [\n {"type": "text", "text": "What is in this image?"},\n {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}}\n ]\n }]\n)' }, 'python-langchain|chat': { lang: 'python', code: 'from langchain_openai import ChatOpenAI\nfrom langchain_core.messages import HumanMessage\n\nllm = ChatOpenAI(\n api_key="sk-live-PLUGSKY-...",\n base_url="https://api.plugsky.com/v1",\n model="plugsky-pro",\n)\n\nresp = llm.invoke([HumanMessage(content="Hello!")])\nprint(resp.content)' }, 'python-llamaindex|chat': { lang: 'python', code: 'from llama_index.llms.openai import OpenAI\n\nllm = OpenAI(\n api_key="sk-live-PLUGSKY-...",\n api_base="https://api.plugsky.com/v1",\n model="plugsky-pro",\n)\n\nresp = llm.complete("Hello!")\nprint(resp.text)' }, 'node|chat': { lang: 'javascript', code: 'import OpenAI from "openai";\n\nconst client = new OpenAI({\n apiKey: process.env.PLUGSKY_KEY,\n baseURL: "https://api.plugsky.com/v1",\n});\n\nconst resp = await client.chat.completions.create({\n model: "plugsky-pro",\n messages: [{ role: "user", content: "Hello!" }],\n});\nconsole.log(resp.choices[0].message.content);' }, 'node|stream': { lang: 'javascript', code: 'import OpenAI from "openai";\n\nconst client = new OpenAI({\n apiKey: process.env.PLUGSKY_KEY,\n baseURL: "https://api.plugsky.com/v1",\n});\n\nconst stream = await client.chat.completions.create({\n model: "plugsky-pro",\n messages: [{ role: "user", content: "Tell me a story" }],\n stream: true,\n});\nfor await (const chunk of stream) {\n process.stdout.write(chunk.choices[0]?.delta?.content || "");\n}' }, 'node|embed': { lang: 'javascript', code: 'import OpenAI from "openai";\n\nconst client = new OpenAI({\n apiKey: process.env.PLUGSKY_KEY,\n baseURL: "https://api.plugsky.com/v1",\n});\n\nconst resp = await client.embeddings.create({\n model: "plugsky-embed-large",\n input: "text to embed",\n});\nconst vector = resp.data[0].embedding;' }, 'node|functions': { lang: 'javascript', code: 'import OpenAI from "openai";\n\nconst client = new OpenAI({\n apiKey: process.env.PLUGSKY_KEY,\n baseURL: "https://api.plugsky.com/v1",\n});\n\nconst tools = [{\n type: "function",\n function: {\n name: "get_weather",\n description: "Get current weather for a city",\n parameters: {\n type: "object",\n properties: { city: { type: "string" } },\n required: ["city"]\n }\n }\n}];\n\nconst resp = await client.chat.completions.create({\n model: "plugsky-pro",\n messages: [{ role: "user", content: "Weather in Dubai?" }],\n tools,\n});\nconsole.log(resp.choices[0].message.tool_calls);' }, 'node-vercel|chat': { lang: 'javascript', code: 'import { openai } from "@ai-sdk/openai";\nimport { generateText } from "ai";\n\nconst { text } = await generateText({\n model: openai("plugsky-pro", {\n baseURL: "https://api.plugsky.com/v1",\n apiKey: process.env.PLUGSKY_KEY,\n }),\n prompt: "Hello!",\n});\nconsole.log(text);' }, 'browser|chat': { lang: 'javascript', code: 'const r = await fetch("https://api.plugsky.com/v1/chat/completions", {\n method: "POST",\n headers: {\n "Authorization": `Bearer ${key}`,\n "Content-Type": "application/json"\n },\n body: JSON.stringify({\n model: "plugsky-pro",\n messages: [{ role: "user", content: "Hello!" }]\n })\n});\nconst data = await r.json();\nconsole.log(data.choices[0].message.content);' }, 'go|chat': { lang: 'go', code: 'package main\n\nimport (\n "context"\n openai "github.com/sashabaranov/go-openai"\n)\n\nfunc main() {\n config := openai.DefaultConfig("sk-live-PLUGSKY-...")\n config.BaseURL = "https://api.plugsky.com/v1"\n client := openai.NewClientWithConfig(config)\n\n resp, err := client.CreateChatCompletion(\n context.Background(),\n openai.ChatCompletionRequest{\n Model: "plugsky-pro",\n Messages: []openai.ChatCompletionMessage{\n {Role: "user", Content: "Hello!"},\n },\n },\n )\n // handle err\n println(resp.Choices[0].Message.Content)\n}' }, 'rust|chat': { lang: 'rust', code: 'use async_openai::{Client, types::{ChatCompletionRequest, ChatCompletionMessage, Role}};\n\n#[tokio::main]\nasync fn main() {\n let client = Client::new()\n .with_api_key("sk-live-PLUGSKY-...")\n .with_api_base("https://api.plugsky.com/v1");\n\n let req = ChatCompletionRequest {\n model: "plugsky-pro".to_string(),\n messages: vec![ChatCompletionMessage {\n role: Role::User,\n content: Some("Hello!".to_string()),\n ..Default::default()\n }],\n ..Default::default()\n };\n\n let resp = client.chat().create(req).await.unwrap();\n println!("{:?}", resp.choices[0].message.content);\n}' }, 'ruby|chat': { lang: 'ruby', code: 'require "openai"\n\nclient = OpenAI::Client.new(\n access_token: "sk-live-PLUGSKY-...",\n uri_base: "https://api.plugsky.com/v1"\n)\n\nresp = client.chat(\n parameters: {\n model: "plugsky-pro",\n messages: [{ role: "user", content: "Hello!" }]\n }\n)\nputs resp.dig("choices", 0, "message", "content")' }, 'php|chat': { lang: 'php', code: 'baseUrl("https://api.plugsky.com/v1");\n\n$response = $client->chat()->create([\n \'model\' => \'plugsky-pro\',\n \'messages\' => [\n [\'role\' => \'user\', \'content\' => \'Hello!\'],\n ],\n]);\necho $response->choices[0]->message->content;' }, 'curl|chat': { lang: 'bash', code: 'curl https://api.plugsky.com/v1/chat/completions \\\n -H "Authorization: Bearer $PLUGSKY_KEY" \\\n -H "Content-Type: application/json" \\\n -d \'{\n "model": "plugsky-pro",\n "messages": [{"role": "user", "content": "Hello!"}]\n }\' | jq .choices[0].message.content' }, 'curl|stream': { lang: 'bash', code: 'curl -N https://api.plugsky.com/v1/chat/completions \\\n -H "Authorization: Bearer $PLUGSKY_KEY" \\\n -H "Content-Type: application/json" \\\n -d \'{\n "model": "plugsky-pro",\n "messages": [{"role": "user", "content": "Tell me a story"}],\n "stream": true\n }\'' }, 'curl|embed': { lang: 'bash', code: 'curl https://api.plugsky.com/v1/embeddings \\\n -H "Authorization: Bearer $PLUGSKY_KEY" \\\n -H "Content-Type: application/json" \\\n -d \'{\n "model": "plugsky-embed-large",\n "input": "text to embed"\n }\' | jq .data[0].embedding' }, 'curl|functions': { lang: 'bash', code: 'curl https://api.plugsky.com/v1/chat/completions \\\n -H "Authorization: Bearer $PLUGSKY_KEY" \\\n -H "Content-Type: application/json" \\\n -d \'{\n "model": "plugsky-pro",\n "messages": [{"role": "user", "content": "Weather in Dubai?"}],\n "tools": [{\n "type": "function",\n "function": {\n "name": "get_weather",\n "description": "Get current weather for a city",\n "parameters": {\n "type": "object",\n "properties": {"city": {"type": "string"}},\n "required": ["city"]\n }\n }\n }]\n }\' | jq .choices[0].message.tool_calls' }, 'curl|vision': { lang: 'bash', code: 'B64=$(base64 -w 0 image.png)\ncurl https://api.plugsky.com/v1/chat/completions \\\n -H "Authorization: Bearer $PLUGSKY_KEY" \\\n -H "Content-Type: application/json" \\\n -d "{\n \"model\": \"plugsky-vision\",\n \"messages\": [{\n \"role\": \"user\",\n \"content\": [\n {\"type\": \"text\", \"text\": \"What is in this image?\"},\n {\"type\": \"image_url\", \"image_url\": {\"url\": \"data:image/png;base64,$B64\"}}\n ]\n }]\n }" | jq .choices[0].message.content' }, }; function gen() { var lang = document.getElementById('lang').value; var use = document.getElementById('useCase').value; var key = lang + '|' + use; var snip = SNIPS[key] || SNIPS[lang + '|chat']; document.getElementById('snippetLang').textContent = snip.lang; document.getElementById('snippetCode').textContent = snip.code; document.getElementById('snippet').style.display = 'block'; } document.getElementById('genBtn').onclick = gen; document.getElementById('lang').onchange = gen; document.getElementById('useCase').onchange = gen; gen(); })();