| import os |
| import requests |
| from security import is_safe_input, sanitize_input |
|
|
| OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY") |
|
|
| API_URL = "https://openrouter.ai/api/v1/chat/completions" |
|
|
| |
| MODEL = os.getenv("OPENROUTER_MODEL", "nvidia/nemotron-3-super-120b-a12b") |
|
|
|
|
| def run_agent(user_input: str): |
| if not is_safe_input(user_input): |
| return "β Blocked for safety." |
|
|
| user_input = sanitize_input(user_input) |
|
|
| if not OPENROUTER_API_KEY: |
| return "β Missing OPENROUTER_API_KEY in Space secrets." |
|
|
| headers = { |
| "Authorization": f"Bearer {OPENROUTER_API_KEY}", |
| "Content-Type": "application/json", |
| "HTTP-Referer": "https://huggingface.co", |
| "X-Title": "Nemoclaw HF Agent", |
| } |
|
|
| payload = { |
| "model": MODEL, |
| "messages": [ |
| { |
| "role": "system", |
| "content": "You are a safe AI assistant. Do not execute code or access system resources.", |
| }, |
| {"role": "user", "content": user_input}, |
| ], |
| "temperature": 0.7, |
| "max_tokens": 500, |
| } |
|
|
| try: |
| response = requests.post(API_URL, headers=headers, json=payload, timeout=120) |
| data = response.json() |
|
|
| if response.status_code >= 400: |
| err = data.get("error", data) if isinstance(data, dict) else {} |
| msg = err.get("message", str(data)) if isinstance(err, dict) else str(data) |
| return f"β OpenRouter ({response.status_code}): {msg}" |
|
|
| return data["choices"][0]["message"]["content"] |
|
|
| except (KeyError, TypeError, ValueError) as e: |
| return f"β Bad API response: {e}" |
| except requests.RequestException as e: |
| return f"β Request failed: {e}" |
| |