File size: 3,822 Bytes
959296e
c92c3bf
d93dbdd
9b5b26a
4bfe53e
9b5b26a
4bfe53e
df15652
 
0f61d7b
2764a1c
5d06296
1c61c68
4c2a00d
d4578f1
4db54a2
e55e264
67c8f73
7686479
ed36d14
95de6d7
2945906
5d06296
 
95c49b7
5d06296
 
 
0e921e3
0f61d7b
5d06296
4999ab5
 
 
5d06296
a22a330
 
5d06296
 
4999ab5
f01a417
4999ab5
 
351e87d
5d06296
 
4999ab5
5d06296
df15652
5d06296
a6d6fb8
dac4869
6621a08
a6d6fb8
 
 
6621a08
 
 
 
dac4869
 
 
 
 
4e76bca
 
 
a6ef072
dac4869
4e76bca
dac4869
 
 
4e76bca
dac4869
4e76bca
dac4869
 
 
4e76bca
dac4869
5d06296
 
df15652
1b320e9
 
 
df15652
 
1b320e9
df15652
 
5d06296
b356cef
df15652
5d06296
1b320e9
 
 
5d06296
1b320e9
dac4869
 
4e76bca
1b320e9
dac4869
1b320e9
fa5610e
1b320e9
 
5d06296
 
 
 
a3ba8f9
5d06296
 
 
 
b356cef
 
5d06296
4999ab5
1c61c68
5d06296
f679506
1b320e9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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.check_gui import StatusUI

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, ui, max_wait=300):
    """Poll the endpoint until it responds OK or timeout."""

    
    # Enforce minimum wait time of 60 seconds
    max_wait = max(max_wait, 60)
    # 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:
            ui.append("Pinging endpoint...")
            ui.append(endpoint_uri)
            response = requests.post(endpoint_uri, headers=headers, json=payload, timeout=5)
            
            if response.ok:
                ui.append("✅ Endpoint is awake.")
                return True

            # If it's a 503 or 504, it's likely still warming up
            ui.append(f"Response: {response.status_code}, retrying...")
        except requests.exceptions.RequestException as e:
            ui.append(f"Exception: {e}, retrying...")

        time.sleep(3)  # fixed short backoff; can be exponential if needed

    ui.append("❌ Timed out waiting for endpoint to wake up.")
    return False

def main():
    
    ui = StatusUI(" Content Agent ")
    ui.launch()
     
# Elsewhere in your code:
#ui.append("Checking endpoint…")

#ui.shutdown()   
    
    # Load endpoint and check health

    
    # Prechecks 
    ui.append("Starting prechecks...")
    ui.append("Checking endpoint..")
    
    endpoint_uri = load_huggingface_model() # Get the URI for the endpoint 
    ui.append(endpoint_uri)   

    # Wake it up before health check
    wake_up_successful = wake_up_endpoint(endpoint_uri, ui)
    
    if not wake_up_successful:
        ui.append("Warning: Could not wake up the endpoint.  Continuing.")
    else:     
        ui.append("✅ End point responded OK.")
    
    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()