Applied AI Engineering Workshop
One endpoint for every model in the workshop. It speaks the OpenAI API, so your existing code and tools work with a two-line change — point them at the URL below and use your key.
Use the exact model name in the left column. Default to
gpt-5.4-mini — switch to gpt-5.4 only when you need
the extra power; it uses your budget much faster.
| Model | Type | Best for |
|---|---|---|
| gpt-5.4 | chat | Flagship reasoning, hardest problems |
| gpt-5.4-mini | chat | Fast, economical default for most work |
| gpt-5.1 | chat | Strong general-purpose chat |
| llama-3.3-70b | chat | Open-weight model to compare against |
| text-embedding-3-small | embedding | RAG / semantic search · 1536-dim |
| text-embedding-3-large | embedding | Higher-quality embeddings · 3072-dim |
Set your key once, then send a request. Works in any terminal.
export YUKTI_API_KEY="sk-your-key-here"
curl https://gateway.yuktiai.in/v1/chat/completions \
-H "Authorization: Bearer $YUKTI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.4-mini","messages":[{"role":"user","content":"Say hello in one sentence."}]}'
Pick your setup. Everything below uses the same base URL and your key.
pip install openai
export YUKTI_API_KEY=sk-your-key-here # PowerShell: $env:YUKTI_API_KEY="sk-..."
import os
from openai import OpenAI
client = OpenAI(
base_url="https://gateway.yuktiai.in/v1",
api_key=os.environ["YUKTI_API_KEY"],
)
resp = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[
{"role": "system", "content": "You are a concise coding assistant."},
{"role": "user", "content": "Write a Python function to reverse a string."},
],
)
print(resp.choices[0].message.content)
stream = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "Explain async/await in 3 bullets."}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)
emb = client.embeddings.create(
model="text-embedding-3-small",
input=["What is retrieval-augmented generation?"],
)
vector = emb.data[0].embedding
print(len(vector), "dimensions")
Cursor uses the gateway for Chat and Cmd/Ctrl-K inline edits.
Cmd/Ctrl + Shift + J).https://gateway.yuktiai.in/v1.gpt-5.4-mini, gpt-5.4, gpt-5.1, llama-3.3-70b.https://gateway.yuktiai.in/v1 — no trailing slash, and don't drop the /v1.Cursor's Tab autocomplete and parts of Agent/Composer run on Cursor's own built-in models and won't route through the gateway — that's a Cursor limitation. Chat and inline edits with the models above use your key and budget.
opencode is a terminal AI coding agent. Add the gateway as a custom OpenAI-compatible provider.
export YUKTI_API_KEY=sk-your-key-hereopencode.json in your project root (or globally at ~/.config/opencode/opencode.json) with the config below.opencode, then switch models with the /models command and pick one under Yukti AI Gateway.{
"$schema": "https://opencode.ai/config.json",
"provider": {
"yukti": {
"npm": "@ai-sdk/openai-compatible",
"name": "Yukti AI Gateway",
"options": {
"baseURL": "https://gateway.yuktiai.in/v1",
"apiKey": "{env:YUKTI_API_KEY}"
},
"models": {
"gpt-5.4-mini": { "name": "GPT-5.4 Mini" },
"gpt-5.4": { "name": "GPT-5.4" },
"gpt-5.1": { "name": "GPT-5.1" },
"llama-3.3-70b":{ "name": "Llama 3.3 70B" }
}
}
},
"model": "yukti/gpt-5.4-mini"
}
Anything that accepts an OpenAI base URL + key works. Two common ones:
export OPENAI_BASE_URL="https://gateway.yuktiai.in/v1"
export OPENAI_API_KEY="sk-your-key-here"
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url="https://gateway.yuktiai.in/v1",
api_key="YOUR_API_KEY",
model="gpt-5.4-mini",
)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://gateway.yuktiai.in/v1",
apiKey: process.env.YUKTI_API_KEY,
});
Your key has a monthly budget and per-minute rate limits. The gateway enforces them and returns standard OpenAI-style errors.
| You'll see | Meaning | What to do |
|---|---|---|
| 429 RateLimit | Too many requests/tokens this minute | Wait, then retry with backoff |
| 400 budget exceeded | Monthly budget used up | Contact the organizers |
| 400 model not allowed | Model isn't on your allow-list | Use a model from section 01 |
| 401 Auth | Missing/wrong key or bad URL | Check Bearer <key> and the /v1 URL |
gpt-5.4-mini, keep prompts tight, and don't send large contexts you don't need.No. Only this gateway URL and your key — nothing else.
Yes. Same request/response format, so most OpenAI examples work by changing only the base URL and key.
Start with gpt-5.4-mini for everyday work. Reach for gpt-5.4 on hard reasoning tasks, and try llama-3.3-70b to compare an open-weight model.
You've most likely hit your budget or rate limit, or the key was rotated. Contact the workshop organizers.