Lab 2 — Your First API Call¶
⏱️ ~20 min
Call an LLM from code and watch temperature change the output. Open in Colab, or run locally with Python 3.11+.
In [ ]:
Copied!
# Setup
import os, getpass
PROVIDER = "openai" # or "anthropic"
if PROVIDER == "openai":
!pip install -q openai
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API key: ")
else:
!pip install -q anthropic
if not os.environ.get("ANTHROPIC_API_KEY"):
os.environ["ANTHROPIC_API_KEY"] = getpass.getpass("Anthropic API key: ")
print(f"Provider set to: {PROVIDER}")
# Setup
import os, getpass
PROVIDER = "openai" # or "anthropic"
if PROVIDER == "openai":
!pip install -q openai
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API key: ")
else:
!pip install -q anthropic
if not os.environ.get("ANTHROPIC_API_KEY"):
os.environ["ANTHROPIC_API_KEY"] = getpass.getpass("Anthropic API key: ")
print(f"Provider set to: {PROVIDER}")
In [ ]:
Copied!
def chat(messages, temperature=0.7, model=None):
if PROVIDER == "openai":
from openai import OpenAI
client = OpenAI()
resp = client.chat.completions.create(
model=model or "gpt-4o-mini", messages=messages, temperature=temperature)
return resp.choices[0].message.content
else:
from anthropic import Anthropic
client = Anthropic()
system = "".join(m["content"] for m in messages if m["role"] == "system")
turns = [m for m in messages if m["role"] != "system"]
resp = client.messages.create(
model=model or "claude-3-5-haiku-20241022", max_tokens=1024,
temperature=temperature, system=system or None, messages=turns)
return resp.content[0].text
def chat(messages, temperature=0.7, model=None):
if PROVIDER == "openai":
from openai import OpenAI
client = OpenAI()
resp = client.chat.completions.create(
model=model or "gpt-4o-mini", messages=messages, temperature=temperature)
return resp.choices[0].message.content
else:
from anthropic import Anthropic
client = Anthropic()
system = "".join(m["content"] for m in messages if m["role"] == "system")
turns = [m for m in messages if m["role"] != "system"]
resp = client.messages.create(
model=model or "claude-3-5-haiku-20241022", max_tokens=1024,
temperature=temperature, system=system or None, messages=turns)
return resp.content[0].text
A first call¶
In [ ]:
Copied!
print(chat([{"role": "user", "content": "Give me a one-line tip for code reviews."}]))
print(chat([{"role": "user", "content": "Give me a one-line tip for code reviews."}]))
Temperature: 0 is repeatable, high is creative¶
Run each a few times and compare the variation.
In [ ]:
Copied!
prompt = [{"role": "user", "content": "Invent a name for a coffee shop for programmers."}]
print("temp=0.0 :", chat(prompt, temperature=0.0))
print("temp=0.0 :", chat(prompt, temperature=0.0))
print("temp=1.0 :", chat(prompt, temperature=1.0))
print("temp=1.0 :", chat(prompt, temperature=1.0))
prompt = [{"role": "user", "content": "Invent a name for a coffee shop for programmers."}]
print("temp=0.0 :", chat(prompt, temperature=0.0))
print("temp=0.0 :", chat(prompt, temperature=0.0))
print("temp=1.0 :", chat(prompt, temperature=1.0))
print("temp=1.0 :", chat(prompt, temperature=1.0))
Try it: change PROVIDER, swap the model, push temperature to 1.5.
Notice temp=0 barely changes between runs; temp=1 varies a lot.
✅ Did it work?¶
- You saw a one-line code-review tip printed from a live model call.
- The two
temp=0.0coffee-shop names were identical (or nearly so), while the twotemp=1.0names differed — temperature visibly drove the variation.