Свой код
Чужой сайт подключается своим кодом к шлюзу. Замените base_url в OpenAI-совместимом SDK на https://llmcode.org/v1. Ключ из кабинета кладут в окружение сервера сайта. В HTML, который видит гость, ключ не вставляют. Шлюз не смотрит на Origin: верный ключ принимается и из браузера, но тогда секрет виден гостю. Эта версия отвечает на POST /v1/chat/completions, POST /v1/messages, POST /v1/responses, POST /v1/embeddings, GET /v1/models и GET /v1/models/:id. Стриминг в примерах показан, потому что его требует таблица 7; вызов со stream:true получает 400 stream_not_enabled. Картинки, звук и видео эта версия не обслуживает.
Создайте ключ в кабинете на https://llmcode.org: секрет показывается один раз. На сервере чужого сайта запишите его в переменную LLMCODE_API_KEY. Не кладите секрет в скрипт, который скачивает браузер гостя. В коде сайта замените base_url на https://llmcode.org/v1 и вызовите chat.completions. Список моделей для интерфейса этого сайта сервер берёт так: GET https://llmcode.org/v1/models с тем же ключом.
cURL
curl https://llmcode.org/v1/chat/completions \
-H "Authorization: Bearer $LLMCODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"demo","messages":[{"role":"user","content":"hi"}]}'Python, openai SDK
import os
from openai import OpenAI
client = OpenAI(
base_url="https://llmcode.org/v1",
api_key=os.environ["LLMCODE_API_KEY"],
)
reply = client.chat.completions.create(
model="demo",
messages=[{"role": "user", "content": "hi"}],
)
print(reply.choices[0].message.content)Python, anthropic SDK
# Messages на том же ключе. ANTHROPIC_BASE_URL без окончания /v1.
import os
from anthropic import Anthropic
client = Anthropic(
base_url="https://llmcode.org",
api_key=os.environ["LLMCODE_API_KEY"],
)Node, openai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://llmcode.org/v1",
apiKey: process.env.LLMCODE_API_KEY,
});
const reply = await client.chat.completions.create({
model: "demo",
messages: [{ role: "user", content: "hi" }],
});Node, @anthropic-ai/sdk
// Messages на том же ключе. ANTHROPIC_BASE_URL без окончания /v1.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://llmcode.org",
apiKey: process.env.LLMCODE_API_KEY,
});Go
body := bytes.NewBufferString(`{"model":"demo","messages":[{"role":"user","content":"hi"}]}`)
req, err := http.NewRequest(http.MethodPost, "https://llmcode.org/v1/chat/completions", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("LLMCODE_API_KEY"))
req.Header.Set("Content-Type", "application/json")Стриминг
# Эта версия отвечает 400 stream_not_enabled.
curl https://llmcode.org/v1/chat/completions \
-H "Authorization: Bearer $LLMCODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"demo","messages":[{"role":"user","content":"hi"}],"stream":true}'Список моделей
curl https://llmcode.org/v1/models \
-H "Authorization: Bearer $LLMCODE_API_KEY"