Skip to content

Commit e1a0748

Browse files
authored
Merge pull request #734 from realpython/how-to-use-openrouter-to-access-multiple-ai-models-in-one-python-script
Add requirements for python-dotenv and requests
2 parents 1558b79 + a392727 commit e1a0748

File tree

7 files changed

+130
-0
lines changed

7 files changed

+130
-0
lines changed

openrouter-api/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# How to Use the OpenRouter API to Access Multiple AI Models via Python
2+
3+
This folder contains supporting materials for the Real Python tutorial [How to Use the OpenRouter API to Access Multiple AI Models via Python](https://realpython.com/openrouter-api/).

openrouter-api/ask_auto_model.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import os
2+
import requests
3+
4+
OPENROUTER_API_URL = "https://openrouter.ai/api/v1/chat/completions"
5+
6+
api_key = os.getenv("OPENROUTER_API_KEY")
7+
8+
headers = {
9+
"Authorization": f"Bearer {api_key}",
10+
"Content-Type": "application/json",
11+
}
12+
payload = {
13+
"model": "openrouter/auto",
14+
"messages": [{"role": "user", "content": "Say hello in one sentence."}],
15+
}
16+
response = requests.post(OPENROUTER_API_URL, headers=headers, json=payload)
17+
data = response.json()
18+
19+
print(f"Model: {data.get('model')}")
20+
print(f"Response: {data['choices'][0]['message']['content']}")
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import os
2+
import requests
3+
4+
OPENROUTER_API_URL = "https://openrouter.ai/api/v1/chat/completions"
5+
6+
api_key = os.getenv("OPENROUTER_API_KEY")
7+
8+
headers = {
9+
"Authorization": f"Bearer {api_key}",
10+
"Content-Type": "application/json",
11+
}
12+
payload = {
13+
"model": "openai/gpt-3.5-turbo",
14+
"messages": [{"role": "user", "content": "Say hello in one sentence."}],
15+
}
16+
response = requests.post(OPENROUTER_API_URL, headers=headers, json=payload)
17+
data = response.json()
18+
19+
if model := data.get("model"):
20+
print(f"Model: {model} by {data['provider']}")
21+
print(f"Response: {data['choices'][0]['message']['content']}")
22+
else:
23+
print("No model found in the response.")
24+
print(f"Response: {data}")

openrouter-api/fallback_models.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import os
2+
import requests
3+
4+
OPENROUTER_API_URL = "https://openrouter.ai/api/v1/chat/completions"
5+
6+
api_key = os.getenv("OPENROUTER_API_KEY")
7+
8+
9+
def make_request_with_fallback(models_list, messages):
10+
headers = {
11+
"Authorization": f"Bearer {api_key}",
12+
"Content-Type": "application/json",
13+
}
14+
payload = {"models": models_list, "messages": messages}
15+
16+
return requests.post(OPENROUTER_API_URL, headers=headers, json=payload)
17+
18+
19+
response = make_request_with_fallback(
20+
models_list=[
21+
"openai/gpt-5",
22+
"openai/gpt-3.5-turbo",
23+
"openai/gpt-3.5-turbo-16k",
24+
],
25+
messages=[{"role": "user", "content": "What is the capital of France?"}],
26+
)
27+
28+
data = response.json()
29+
if model := data.get("model"):
30+
print(f"Model: {model} by {data['provider']}")
31+
print(f"Response: {data['choices'][0]['message']['content']}")
32+
else:
33+
print("No model found in the response.")
34+
print(f"Response: {data}")

openrouter-api/get_models.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import os
2+
import requests
3+
4+
OPENROUTER_MODELS_URL = "https://openrouter.ai/api/v1/models"
5+
6+
api_key = os.getenv("OPENROUTER_API_KEY")
7+
8+
headers = {"Authorization": f"Bearer {api_key}"}
9+
response = requests.get(OPENROUTER_MODELS_URL, headers=headers)
10+
data = response.json()
11+
12+
models = data.get("data", [])
13+
print(f"Success! Found {len(models)} models via OpenRouter.")
14+
print(f"Examples: {', '.join(m['id'] for m in models[:5])}")

openrouter-api/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
requests

openrouter-api/route_requests.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import os
2+
import requests
3+
4+
OPENROUTER_API_URL = "https://openrouter.ai/api/v1/chat/completions"
5+
6+
api_key = os.getenv("OPENROUTER_API_KEY")
7+
8+
9+
def make_request(model, messages, provider_config=None):
10+
headers = {
11+
"Authorization": f"Bearer {api_key}",
12+
"Content-Type": "application/json",
13+
}
14+
payload = {"model": model, "messages": messages}
15+
if provider_config:
16+
payload["provider"] = provider_config
17+
18+
response = requests.post(OPENROUTER_API_URL, headers=headers, json=payload)
19+
response.raise_for_status()
20+
return response.json()
21+
22+
23+
data = make_request(
24+
model="meta-llama/llama-3.1-70b-instruct",
25+
messages=[{"role": "user", "content": "Explain AI in one sentence."}],
26+
provider_config={"sort": "price"},
27+
)
28+
29+
if model := data.get("model"):
30+
print(f"Model: {model} by {data['provider']}")
31+
print(f"Response: {data['choices'][0]['message']['content']}")
32+
else:
33+
print("No model found in the response.")
34+
print(f"Response: {data}")

0 commit comments

Comments
 (0)