Lesson 27 — Beginner

First API Calls & Conversation State

Pehli API call ka scene simple hai — messages bhejo, model jawab deta hai. Lekin asli cheezein response object, usage metadata aur conversation state hain. Is lesson mein hum SDK se call lagana, roles samajhna, response inspect karna aur history khud sambhalna seekhenge.

⏱ 20 min• Beginner• Basic computer usage

Pehla chat completion call

WHAT

Chat completion API tum messages array bhejte ho, wapas aata hai model ka jawab — plain string nahi, ek object jisme choices, usage aur metadata hota hai. Har message ka role hota hai: system, user ya assistant.

WHEN

Jab bhi app ko model se baat karwani ho — chatbot, summarizer, classifier, draft generator. Har AI feature apni shuruaat isi ek call se karta hai.

WHERE

Python backend, Node service, CLI scripts — jagah koi bhi ho pattern wahi hai: client banao, messages banao, call karo, response parse karo.

import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

resp = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "Tum ek madadgar assistant ho — Hinglish mein jawab do."},
        {"role": "user", "content": "Barish ke baare mein chhoti si poem likho."},
    ],
    temperature=0.7,
)

print(resp.choices[0].message.content)

Call ka skeleton hamesha same rehta hai: client → messages → response. System message app ka behavior set karta hai, user message is waqt ka sawaal hai. Jawab resp.choices[0].message ke andar milta hai — string seedhi nahi milti.

Yaad rakho: Har provider ka SDK alag-alag syntax deta hai (OpenAI, Anthropic, Google) — lekin messages + roles wala pattern sab mein lagbhag same hai. Anthropic mein system alag parameter mein jaata hai; idea wahi rehta hai.

Response object ko inspect karo

resp = client.chat.completions.create(model="gpt-4o-mini", messages=messages)

print(resp.id)                        # request ka unique id
print(resp.model)                     # kaunsa model actually chala
print(resp.choices[0].finish_reason)   # stop | length | tool_calls
print(resp.usage.prompt_tokens)        # input tokens
print(resp.usage.completion_tokens)    # output tokens
print(resp.usage.total_tokens)         # dono ka total — bill yahin se banti hai

Bahut se log API ko prompt → string function samajh kar sirf content padh lete hain. Production mein yeh enough nahi — finish_reason, usage aur id batate hain ki request poori hui ya beech mein kahin atak gayi.

Rule: Har call ke baad teeno check karo: content (kya aaya), finish_reason (poora hua ya nahi), usage (kitna kharcha hua). Teenon ke bina tum andhe chal rahe ho.

API stateless hai — history tum sambhalo

history = [
    {"role": "system", "content": "Tum ek booking assistant ho."},
]

def ask(user_text):
    history.append({"role": "user", "content": user_text})
    resp = client.chat.completions.create(model="gpt-4o-mini", messages=history)
    reply = resp.choices[0].message.content
    history.append({"role": "assistant", "content": reply})  # yaad rakhna TUMHARA kaam hai
    return reply

print(ask("Mera naam Rahul hai."))
print(ask("Mujhe yaad hai kya?"))   # "Haan, Rahul" — kyunki history bheji thi
Funda: Statelessness ka matlab freedom hai — history ka shape tum decide karte ho. Iska doosra side effect: har request ke saath poora history jaata hai, aur tokens/uska bill usi hisaab se badhta hai.

API keys safely manage karo

# GALAT — key code mein hardcode, git pe chali jaayegi
client = OpenAI(api_key="sk-proj-xxxxxxxx")

# SAHI — environment variable / .env file
import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()          # .env padh lo
client = OpenAI()      # key khud env se utha lega

# .env file (gitignored):
# OPENAI_API_KEY=sk-...
# shell se direct chalana ho
export OPENAI_API_KEY="sk-..."
python app.py
Interview line: Browser se seedha provider API call karna = key public karna. Sahi architecture: backend key rakhta hai, frontend sirf tumhare backend ko call karta hai.

Exercise

Question: Model ke purane jawab ko history mein kis role se bhejte hain?

Question: Response object mein input aur output tokens kis field ke andar aate hain?

Question: finish_reason kaunsa aata hai jab model ne jawab khud poora kar ke rok diya?

Question: API key ko code mein hardcode ki jagah kahan rakhna chahiye? (ek phrase)

Common mistakes

Desi example: Sabziwale ka kanta — usage metadata

Sabziwale ko sirf daam nahi, wazan bhi batata hai — bill usi wazan se banta hai. API bhi har call ka wazan batati hai: kitna input gaya, kitna output aaya. Yehi tumhara asli bill hai:

python
usage = resp.usage
# wazan (input)  : tumhara prompt + poora history
# wazan (output) : model ka jawab
bill = usage["prompt_tokens"] * rate_in + usage["completion_tokens"] * rate_out
# rate tumhare account ke rate table se aata hai (config mein rakho)
Interview angle — yahan se sawaal aate hain
  • Q: LLM API stateless kyun hoti hai? — Provider conversation store nahi karta; har request apne aap contained hai, history tum bhejte ho — isliye scaling aasaan.
  • Q: messages array mein system role ka kya kaam hai? — App ka stable behavior/persona set karna; user role is-call ka sawaal aur data laata hai.
  • Q: finish_reason "length" ka kya matlab hai? — Model token limit ki wajah se ruka, jawab adhoora ho sakta hai; max_tokens badhao ya summary step lagao.
  • Q: Frontend se seedha provider API call kyun nahi karni chahiye? — API key browser mein expose ho jaayegi; backend proxy rakho.
Lesson complete?

Pehli call aur state ka funda clear. Agla lesson — Streaming LLM Responses — mein dekhenge output ko token-by-token kaise render karte hain aur TTFT kya hota hai.

Popular courses: Data Science Course in Lucknow · AI Course in Lucknow · Python Course in Lucknow · Power BI Course · Data Analytics Course