File size: 7,682 Bytes
b7c9e47
a3d79ae
b7c9e47
 
 
 
a3d79ae
b7c9e47
 
 
80e33f1
b7c9e47
 
 
 
 
 
 
 
 
 
 
 
 
 
80e33f1
 
b7c9e47
 
 
 
80e33f1
b7c9e47
 
80e33f1
b7c9e47
 
 
 
 
a3d79ae
b7c9e47
a3d79ae
b7c9e47
 
80e33f1
3efc897
 
b7c9e47
a3d79ae
80e33f1
b7c9e47
 
 
a3d79ae
b7c9e47
a3d79ae
b7c9e47
a3d79ae
80e33f1
a3d79ae
80e33f1
b7c9e47
80e33f1
 
b7c9e47
 
80e33f1
b7c9e47
 
 
 
a3d79ae
b7c9e47
 
 
80e33f1
 
a3d79ae
80e33f1
 
 
 
 
 
b7c9e47
 
 
 
 
 
 
 
 
a3d79ae
b7c9e47
 
 
 
 
 
 
a3d79ae
80e33f1
 
a3d79ae
80e33f1
3efc897
 
80e33f1
b7c9e47
 
80e33f1
3efc897
b7c9e47
 
 
 
80e33f1
 
 
a3d79ae
b7c9e47
 
 
 
57bbc18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>OpenAI SDK → Modelflare</title>
  <meta name="description" content="One-line OpenAI SDK switch to Modelflare. Python, Node, curl, and streaming examples." />
  <style>
    :root {
      --bg:#0b1020; --card:#121a2f; --text:#e8ecf7; --muted:#9aa6c2;
      --accent:#8b5cf6; --accent2:#ec4899; --border:rgba(255,255,255,.08); --ok:#34d399; --warn:#fbbf24;
    }
    *{box-sizing:border-box}
    body{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:radial-gradient(1000px 500px at 0% 0%,#2a1850 0%,transparent 50%),var(--bg);color:var(--text);line-height:1.55}
    .wrap{max-width:820px;margin:0 auto;padding:40px 18px 72px}
    .lang{display:flex;gap:8px;margin-bottom:18px}
    .lang button{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:999px;padding:6px 12px;cursor:pointer}
    .lang button.on{color:#fff;border-color:rgba(139,92,246,.5);background:rgba(139,92,246,.2)}
    h1{font-size:clamp(26px,4.5vw,36px);margin:0 0 10px;line-height:1.2}
    .lead{color:var(--muted);margin:0 0 22px;font-size:17px}
    .cta{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 28px}
    a.btn{display:inline-flex;align-items:center;padding:11px 16px;border-radius:12px;text-decoration:none;font-weight:600}
    a.primary{background:linear-gradient(135deg,var(--accent),var(--accent2));color:#fff}
    a.ghost{border:1px solid var(--border);color:var(--text)}
    h2{font-size:18px;margin:28px 0 10px}
    ol,ul{color:var(--muted);padding-left:1.2em}
    ol li,ul li{margin:6px 0}
    pre{background:#070b16;border:1px solid var(--border);border-radius:14px;padding:14px 16px;overflow:auto;font-size:12.5px;color:#d7def0;position:relative}
    .copy{position:absolute;top:8px;right:8px;font-size:11px;border:1px solid var(--border);background:#121a2f;color:var(--muted);border-radius:8px;padding:4px 8px;cursor:pointer}
    .note{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:14px 16px;color:var(--muted);font-size:14px;margin-top:16px}
    .note strong{color:var(--ok)}
    .tip{border-left:3px solid var(--warn);padding-left:12px;margin:12px 0;color:var(--muted);font-size:14px}
    code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
    .hidden{display:none}
    a{color:#c4b5fd}
  </style>
</head>
<body>
  <div class="wrap">

    <section id="en">
      <h1>One-line switch: OpenAI SDK → Modelflare</h1>
      <p class="lead">Create a key, then set <code>base_url</code>. One key for text, image, and video — with group failover and per-request cost tracking.</p>
      <div class="cta">
        <a class="btn primary" href="https://modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=sdk_guide" target="_blank" rel="noopener">Open Console → Get API Key</a>
        <a class="btn ghost" href="https://docs.modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=sdk_guide" target="_blank" rel="noopener">Docs</a>
        <a class="btn ghost" href="https://huggingface.co/spaces/Modelflare/coding-agents" target="_blank" rel="noopener">Coding Agents</a>
        <a class="btn ghost" href="https://huggingface.co/spaces/Modelflare/api-recipes" target="_blank" rel="noopener">API Recipes</a>
        <a class="btn ghost" href="https://huggingface.co/collections/Modelflare/modelflare-getting-started" target="_blank" rel="noopener">Getting Started collection</a>
        <a class="btn ghost" href="https://huggingface.co/spaces/Modelflare/blog" target="_blank" rel="noopener">Blog</a>
        <a class="btn ghost" href="https://huggingface.co/spaces/Modelflare/start" target="_blank" rel="noopener">Landing</a>
      </div>
      <h2>Three steps</h2>
      <ol>
        <li>Create an API key in the console, in a non-default group that lists the model you want to call.</li>
        <li>Point your OpenAI client at <code>https://modelflare.dev/v1</code>.</li>
        <li>Use an exact model ID enabled on your group (the Quickstart uses <code>gpt-5.6-sol</code>).</li>
      </ol>
      <div class="tip">Model ids must be enabled on the key’s group — otherwise the request fails even when the JSON is valid (a <code>403</code> means the key cannot use that model or group). Live prices and availability live in the console.</div>
      <h2>Environment variable (recommended)</h2>
      <pre><button class="copy" type="button">Copy</button><code>export MODELFLARE_API_KEY="YOUR_MODELFLARE_API_KEY"
# base_url is always https://modelflare.dev/v1</code></pre>
      <h2>Python</h2>
      <pre><button class="copy" type="button">Copy</button><code>import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["MODELFLARE_API_KEY"],
    base_url="https://modelflare.dev/v1",
)

r = client.chat.completions.create(
    model="gpt-5.6-sol",
    messages=[{"role": "user", "content": "Hello from Hugging Face"}],
)
print(r.choices[0].message.content)</code></pre>
      <h2>Streaming (Python)</h2>
      <pre><button class="copy" type="button">Copy</button><code>stream = client.chat.completions.create(
    model="gpt-5.6-sol",
    messages=[{"role": "user", "content": "Say hi in one line"}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content or ""
    print(delta, end="", flush=True)</code></pre>
      <h2>Node.js / TypeScript</h2>
      <pre><button class="copy" type="button">Copy</button><code>import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.MODELFLARE_API_KEY,
  baseURL: "https://modelflare.dev/v1",
});

const r = await client.chat.completions.create({
  model: "gpt-5.6-sol",
  messages: [{ role: "user", content: "Hello from Hugging Face" }],
});
console.log(r.choices[0].message.content);</code></pre>
      <h2>curl</h2>
      <pre><button class="copy" type="button">Copy</button><code>curl https://modelflare.dev/v1/chat/completions \
  -H "Authorization: Bearer $MODELFLARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.6-sol","messages":[{"role":"user","content":"ping"}]}'</code></pre>
      <h2>Troubleshooting</h2>
      <ul>
        <li><strong>401</strong>: the key is missing, malformed, or revoked.</li><li><strong>403</strong>: the key is valid but the selected model or group is not allowed.</li>
        <li><strong>Model unavailable</strong>: switch to an id enabled on that group, or change groups in the console.</li>
        <li><strong>Image / video</strong>: same key, native request fields — see <a href="https://huggingface.co/spaces/Modelflare/api-recipes">api-recipes</a> and Image / Video docs.</li>
        <li><strong>Coding agents</strong>: Codex / Claude Code / Gemini CLI → <a href="https://huggingface.co/spaces/Modelflare/coding-agents">coding-agents</a> Space.</li>
      </ul>
      <div class="note">
        <strong>HF visitors:</strong> sign up on the console for pricing, keys, and usage.
        Interactive Chat Spaces need HF PRO; use the console + API for now.
        More recipes: <a href="https://huggingface.co/spaces/Modelflare/api-recipes">api-recipes</a>.
      </div>
    </section>
  </div>
  <script>
    document.querySelectorAll('pre .copy').forEach(btn=>{
      btn.addEventListener('click',async()=>{
        const code=btn.parentElement.querySelector('code').innerText;
        try{await navigator.clipboard.writeText(code);const t=btn.textContent;btn.textContent='Copied';setTimeout(()=>btn.textContent=t,1200)}catch(_){}
      });
    });
  </script>
</body>
</html>