Applied AI Engineering Workshop

Yukti AI Gateway

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.

Base URL
https://gateway.yuktiai.in/v1
API key
🔑 shared with you separately Keep it private — never commit it to Git or paste it in screenshots.

01 Available models

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.

ModelTypeBest for
gpt-5.4chatFlagship reasoning, hardest problems
gpt-5.4-minichatFast, economical default for most work
gpt-5.1chatStrong general-purpose chat
llama-3.3-70bchatOpen-weight model to compare against
text-embedding-3-smallembeddingRAG / semantic search · 1536-dim
text-embedding-3-largeembeddingHigher-quality embeddings · 3072-dim

02 First call in 30 seconds

Set your key once, then send a request. Works in any terminal.

bash
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."}]}'

03 Connect your tool

Pick your setup. Everything below uses the same base URL and your key.

Install & configure

bash
pip install openai
export YUKTI_API_KEY=sk-your-key-here   # PowerShell: $env:YUKTI_API_KEY="sk-..."

Chat completion

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

Streaming

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

Embeddings (for RAG)

python
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.

  1. Open Settings → Models (Cmd/Ctrl + Shift + J).
  2. In the OpenAI API Key section, paste your key.
  3. Enable Override OpenAI Base URL and set it to https://gateway.yuktiai.in/v1.
  4. Under Models, click + Add model and add these exact names: gpt-5.4-mini, gpt-5.4, gpt-5.1, llama-3.3-70b.
  5. Turn off the default models you won't use, then click Verify.
!
The base URL must be exactly 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.

  1. Export your key: export YUKTI_API_KEY=sk-your-key-here
  2. Create opencode.json in your project root (or globally at ~/.config/opencode/opencode.json) with the config below.
  3. Run opencode, then switch models with the /models command and pick one under Yukti AI Gateway.
opencode.json
{
  "$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:

Environment variables (many libraries auto-detect these)

bash
export OPENAI_BASE_URL="https://gateway.yuktiai.in/v1"
export OPENAI_API_KEY="sk-your-key-here"

LangChain

python
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    base_url="https://gateway.yuktiai.in/v1",
    api_key="YOUR_API_KEY",
    model="gpt-5.4-mini",
)

Node / TypeScript

typescript
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://gateway.yuktiai.in/v1",
  apiKey: process.env.YUKTI_API_KEY,
});

04 Limits & errors

Your key has a monthly budget and per-minute rate limits. The gateway enforces them and returns standard OpenAI-style errors.

You'll seeMeaningWhat to do
429 RateLimitToo many requests/tokens this minuteWait, then retry with backoff
400 budget exceededMonthly budget used upContact the organizers
400 model not allowedModel isn't on your allow-listUse a model from section 01
401 AuthMissing/wrong key or bad URLCheck Bearer <key> and the /v1 URL
Save your budget: default to gpt-5.4-mini, keep prompts tight, and don't send large contexts you don't need.

05 FAQ

Do I need an OpenAI account?

No. Only this gateway URL and your key — nothing else.

Is it really OpenAI-compatible?

Yes. Same request/response format, so most OpenAI examples work by changing only the base URL and key.

Which model should I use?

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.

My key stopped working.

You've most likely hit your budget or rate limit, or the key was rotated. Contact the workshop organizers.