ContentAgent / app.py
yetessam's picture
Update app.py
a3ba8f9 verified
raw
history blame
3.32 kB
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import sys # Add this import to fix the error
import datetime
import time
import requests
from checks.failed_check import create_failed_gradio_ui
from checks.endpoint_check import check_public_endpoint
from checks.health_check import check_model_endpoint, should_launch_ui
import os
import pytz # Had to give it permission in Code agent
from tools.tools import load_tools
from agents.model import load_huggingface_model
from agents.prompts import load_prompts
from ContentGradio import ContentAgentUI
def initialize_agent(endpoint_uri: str):
# Load prompts
combined_prompts = load_prompts()
combined_tools = load_tools() ## from the tools folder (don't remove final answer)
"""Initialize and configure the CodeAgent"""
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id=endpoint_uri,
custom_role_conversions=None,
)
return CodeAgent(
model=model,
tools=combined_tools,
max_steps=6,
verbosity_level=3,
name="content_agent",
description="Evaluates whether text is polite or impolite.",
prompt_templates=combined_prompts(),
additional_authorized_imports=["pytz"]
)
def wake_up_endpoint(endpoint_uri, max_wait=30):
"""Poll the endpoint until it responds OK or timeout."""
# Get token from environment variable or secrets store
hf_token = os.environ.get("HF_TOKEN") # Or replace with your secret loading logic
headers = {"Authorization": f"Bearer {hf_token}"} if hf_token else {}
payload = {"inputs": "ping"} # Adjust to minimal valid input
start = time.time()
while time.time() - start < max_wait:
try:
print("Pinging endpoint...")
print(endpoint_uri)
response = requests.post(endpoint_uri, json=payload, timeout=5)
if response.ok:
print("✅ Endpoint is awake.")
return True
# If it's a 503 or 504, it's likely still warming up
print(f"Response: {response.status_code}, retrying...")
except requests.exceptions.RequestException as e:
print(f"Exception: {e}, retrying...")
time.sleep(3) # fixed short backoff; can be exponential if needed
print("❌ Timed out waiting for endpoint to wake up.")
return False
def main():
# Load endpoint and check health
# Prechecks
endpoint_uri = load_huggingface_model() # Get the URI for the endpoint
# Wake it up before health check
wake_up_successful = wake_up_endpoint(endpoint_uri)
if not wake_up_successful:
print("Warning: Could not wake up the endpoint. Exiting.")
exit(0)
is_healthy, status_info = check_model_endpoint(endpoint_uri) # Test the endpoint
if not is_healthy:
interface = create_failed_gradio_ui(status_info)
interface.launch(show_error=True, share=True)
return
# Initialize and run the agent
agent = initialize_agent(endpoint_uri)
# Create an instance of the ContentAgentUI class
ui = ContentAgentUI()
ui.pass_through_agent(agent) # Pass through the agent
if __name__ == "__main__":
main()