File size: 3,160 Bytes
3d42d61
9b5b26a
 
 
c19d193
6aae614
9b5b26a
 
 
 
3d42d61
9b5b26a
3d42d61
9b5b26a
 
 
 
3d42d61
9b5b26a
3d42d61
8c01ffb
3d42d61
6aae614
ae7a494
3d42d61
e121372
3d42d61
 
 
 
13d500a
8c01ffb
3d42d61
 
 
 
 
 
 
8c01ffb
3d42d61
 
8c01ffb
3d42d61
 
 
 
 
 
 
9b5b26a
3d42d61
 
 
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
8fe992b
3d42d61
 
 
8c01ffb
3d42d61
 
 
861422e
8fe992b
 
3d42d61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
3d42d61
 
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
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI

@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """Get current time in specified timezone.
    Args:
        timezone: Valid timezone (e.g., 'America/New_York')
    """
    try:
        tz = pytz.timezone(timezone)
        local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
        return f"Current time in {timezone}: {local_time}"
    except Exception as e:
        return f"Error: {str(e)}"

# Performance optimizations
final_answer = FinalAnswerTool()

# Try alternative model endpoint if main is overloaded
model = HfApiModel(
    max_tokens=1024,  # Reduced from 2096 to limit output length
    temperature=0.3,  # Reduced from 0.5 for more focused responses
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
    custom_role_conversions=None,
)

# Fallback model configuration
fallback_model = HfApiModel(
    max_tokens=1024,
    temperature=0.3,
    model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud',
    custom_role_conversions=None,
)

# Load image generation tool (only if needed)
# image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

# Optimized prompt templates
optimized_prompts = {
    "system": """You are a helpful coding assistant. Be concise and direct.
    Focus on the specific task. Avoid unnecessary explanations unless requested.""",
    "user": """Task: {task}
    
    Available tools: {tools}
    
    Provide a clear, step-by-step solution."""
}

# Try to load custom prompts, fallback to optimized ones
try:
    with open("prompts.yaml", 'r') as stream:
        prompt_templates = yaml.safe_load(stream)
        # Add length limits to existing prompts
        if 'system' in prompt_templates:
            prompt_templates['system'] = prompt_templates['system'][:500]  # Limit system prompt
except FileNotFoundError:
    prompt_templates = optimized_prompts

# Create agent with performance optimizations
agent = CodeAgent(
    model=model,
    tools=[final_answer, get_current_time_in_timezone],
    max_steps=3,  # Reduced from 6 to limit processing time
    verbosity_level=0,  # Reduced from 1 to minimize output
    grammar=None,
    planning_interval=2,  # Add planning interval for better step management
    name="OptimizedAgent",
    description="Fast, efficient coding assistant",
    prompt_templates=prompt_templates
)

# Add error handling and timeout
def launch_with_optimizations():
    try:
        # Try main model first
        GradioUI(agent).launch(
            share=False,  # Disable sharing for better performance
            server_name="127.0.0.1",
            server_port=7860,
            max_threads=4  # Limit concurrent threads
        )
    except Exception as e:
        print(f"Main model failed: {e}")
        print("Switching to fallback model...")
        agent.model = fallback_model
        GradioUI(agent).launch()

if __name__ == "__main__":
    launch_with_optimizations()