Skip to main content

#!/usr/bin/env python3 """ Execute GPT - Standardized OpenAI GPT-4 Execution Script

Executes tasks using OpenAI GPT-4 via API.

Usage: echo '{"task_id": "TASK-001", ...}' | python execute_gpt.py

Input (stdin): JSON task specification Output (stdout): JSON execution result Exit Codes: 0 - Success 1 - Execution error 2 - Configuration error (missing API key) 3 - Task specification error

Copyright (c) 2025 AZ1.AI INC. All rights reserved. Developer: Hal Casteel, CEO/CTO Email: 1@az1.ai """

import json import os import sys import time from datetime import datetime from typing import Dict, Any, Optional

def read_task_from_stdin() -> Dict[str, Any]: """Read task specification from stdin.""" try: task_data = json.load(sys.stdin) return task_data except json.JSONDecodeError as e: print(json.dumps({ "status": "failed", "error": f"Invalid JSON input: {e}", "exit_code": 3 }), file=sys.stderr) sys.exit(3)

def validate_task_spec(task: Dict[str, Any]) -> Optional[str]: """Validate task specification has required fields.""" required_fields = ["task_id", "title", "description", "agent"]

for field in required_fields:
if field not in task or not task[field]:
return f"Missing required field: {field}"

return None

def execute_gpt_api(task: Dict[str, Any]) -> Dict[str, Any]: """ Execute task using OpenAI GPT-4 API.

Args:
task: Task data dictionary

Returns:
Execution result dictionary
"""
start_time = time.time()
task_id = task["task_id"]

# Check for API key
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
return {
"status": "failed",
"error": "OPENAI_API_KEY environment variable not set",
"task_id": task_id,
"exit_code": 2,
"timestamp": datetime.now().isoformat(),
}

try:
# Import OpenAI library (v1.99.9+ / 2025 SDK)
try:
from openai import OpenAI
except ImportError:
return {
"status": "failed",
"error": "openai library not installed. Install with: pip install openai",
"task_id": task_id,
"exit_code": 2,
"timestamp": datetime.now().isoformat(),
}

# Initialize OpenAI client (2025 SDK)
client = OpenAI(api_key=api_key)

# Get model from task or use default (gpt-4o is latest as of 2025)
model = task.get("model", "gpt-4o")

# Build system prompt
system_prompt = f"""You are an AI agent executing a specific task for project orchestration.

Task ID: {task_id} Title: {task['title']}

Your goal is to complete this task according to the specifications provided. """

    # Build user prompt with complete task specification
user_prompt = f"""Please complete the following task:

{task['description']}

"""

    if task.get("deliverables"):
user_prompt += "\nExpected Deliverables:\n"
for deliverable in task["deliverables"]:
user_prompt += f"- {deliverable}\n"

if task.get("success_criteria"):
user_prompt += "\nSuccess Criteria:\n"
for criteria in task["success_criteria"]:
user_prompt += f"- {criteria}\n"

# Display execution info
print(f"\n> Executing with GPT-4", file=sys.stderr)
print(f" Task ID: {task_id}", file=sys.stderr)
print(f" Model: {model}", file=sys.stderr)
print(f" Calling OpenAI API...\n", file=sys.stderr)

# Call GPT-4 API (2025 SDK format)
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
],
temperature=task.get("temperature", 0.7),
max_tokens=task.get("max_tokens", 4000),
)

# Extract response
output = response.choices[0].message.content

# Calculate execution time
execution_time = time.time() - start_time

# Calculate tokens used
tokens_used = response.usage.total_tokens
prompt_tokens = response.usage.prompt_tokens
completion_tokens = response.usage.completion_tokens

print(f"\n GPT-4 completed task", file=sys.stderr)
print(f" Tokens used: {tokens_used} (prompt: {prompt_tokens}, completion: {completion_tokens})", file=sys.stderr)
print(f" Execution time: {execution_time:.2f}s\n", file=sys.stderr)

return {
"status": "success",
"output": output,
"error": None,
"task_id": task_id,
"agent": task.get("agent", "gpt-4"),
"model": model,
"execution_time_seconds": execution_time,
"tokens_used": tokens_used,
"prompt_tokens": prompt_tokens,
"completion_tokens": completion_tokens,
"timestamp": datetime.now().isoformat(),
"exit_code": 0,
}

except Exception as e:
from openai import AuthenticationError, RateLimitError, APIError

# Handle specific OpenAI exceptions (2025 SDK format)
if isinstance(e, AuthenticationError):
return {
"status": "failed",
"error": "Invalid OpenAI API key",
"task_id": task_id,
"exit_code": 2,
"timestamp": datetime.now().isoformat(),
}

elif isinstance(e, RateLimitError):
return {
"status": "failed",
"error": "OpenAI API rate limit exceeded. Please try again later.",
"task_id": task_id,
"exit_code": 1,
"timestamp": datetime.now().isoformat(),
}

elif isinstance(e, APIError):
return {
"status": "failed",
"error": f"OpenAI API error: {str(e)}",
"task_id": task_id,
"exit_code": 1,
"timestamp": datetime.now().isoformat(),
}

except Exception as e:
return {
"status": "failed",
"error": f"Unexpected error: {str(e)}",
"task_id": task_id,
"exit_code": 1,
"timestamp": datetime.now().isoformat(),
}

def main(): """Main execution entry point.""" try: # Read task from stdin task = read_task_from_stdin()

    # Validate task specification
error = validate_task_spec(task)
if error:
result = {
"status": "failed",
"error": error,
"exit_code": 3
}
print(json.dumps(result), file=sys.stderr)
sys.exit(3)

# Execute with GPT-4 API
result = execute_gpt_api(task)

# Output result to stdout
print(json.dumps(result, indent=2))

# Exit with appropriate code
exit_code = result.get("exit_code", 0)
sys.exit(exit_code)

except Exception as e:
result = {
"status": "failed",
"error": str(e),
"exit_code": 1
}
print(json.dumps(result), file=sys.stderr)
sys.exit(1)

if name == "main": main()