hackathon / scripts /openai_responses_demo.py
suhaas-code
updated all files
d6c1540
from __future__ import annotations
import os
import sys
from pathlib import Path
from dotenv import load_dotenv
from openai import OpenAI
ROOT_DIR = Path(__file__).resolve().parents[1]
ENV_FILE = ROOT_DIR / ".env"
load_dotenv(ENV_FILE)
def require_env(name: str) -> str:
value = os.getenv(name, "").strip()
if not value:
raise RuntimeError(
f"Missing required environment variable '{name}'. "
f"Set it in {ENV_FILE}."
)
return value
def extract_output_text(response: object) -> str:
text = (getattr(response, "output_text", "") or "").strip()
if text:
return text
parts: list[str] = []
output_items = getattr(response, "output", None)
if output_items is None and hasattr(response, "model_dump"):
payload = response.model_dump()
output_items = payload.get("output", [])
for item in output_items or []:
if isinstance(item, dict):
content_items = item.get("content", [])
else:
content_items = getattr(item, "content", []) or []
for content in content_items:
if isinstance(content, dict):
chunk = content.get("text")
else:
chunk = getattr(content, "text", None)
if chunk:
parts.append(str(chunk))
return "\n".join(parts).strip()
def get_response_error_message(response: object) -> str | None:
error_obj = getattr(response, "error", None)
if not error_obj:
return None
if isinstance(error_obj, dict):
code = error_obj.get("code")
message = error_obj.get("message")
else:
code = getattr(error_obj, "code", None)
message = getattr(error_obj, "message", None)
if code and message:
return f"{code}: {message}"
if message:
return str(message)
return str(error_obj)
def select_client_config() -> tuple[str, str]:
base_url = os.getenv("API_BASE_URL", "https://api.openai.com/v1").strip()
openai_api_key = os.getenv("OPENAI_API_KEY", "").strip()
if "huggingface.co" in base_url.lower():
raise RuntimeError(
"Hugging Face router is disabled for LLM calls in this script. "
"Set API_BASE_URL to https://api.openai.com/v1"
)
if not openai_api_key:
raise RuntimeError(
"Missing OPENAI_API_KEY for the configured API_BASE_URL."
)
return base_url, openai_api_key
def main() -> None:
base_url, api_key = select_client_config()
model = os.getenv("MODEL_NAME", "gpt-5-nano").strip()
prompt = " ".join(sys.argv[1:]).strip() or "write a haiku about ai"
client = OpenAI(api_key=api_key, base_url=base_url)
response = client.responses.create(
model=model,
input=prompt,
store=True,
)
error_message = get_response_error_message(response)
if error_message:
raise RuntimeError(f"Responses API failed: {error_message}")
output_text = extract_output_text(response)
if not output_text:
raise RuntimeError("OpenAI response did not contain output text.")
print(output_text)
if __name__ == "__main__":
main()