File size: 3,235 Bytes
f1c8621
9b5b26a
 
 
c19d193
6aae614
5c199d7
 
f1c8621
9b5b26a
 
d9fff49
9b5b26a
4cf532c
cd3ce02
f1c8621
4cf532c
9b5b26a
7d110d3
4cf532c
 
 
 
 
 
cd3ce02
 
4cf532c
d9fff49
cd3ce02
 
 
4cf532c
cd3ce02
 
 
 
 
 
4cf532c
cd3ce02
d9fff49
cd3ce02
 
 
d9fff49
4cf532c
b23408e
cd3ce02
b23408e
9b5b26a
 
f1c8621
 
 
 
9b5b26a
f1c8621
 
 
 
 
 
 
 
8c01ffb
 
6aae614
ae7a494
f1c8621
 
ae7a494
5c199d7
f0564d8
 
 
5c199d7
13d500a
8c01ffb
f1c8621
f0564d8
f1c8621
9b5b26a
8c01ffb
861422e
 
f1c8621
8c01ffb
8fe992b
d9fff49
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
f1c8621
 
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
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from smolagents import LiteLLMModel


from Gradio_UI import GradioUI

#S&P500 Sentiment StoryTeller
@tool
def market_sentiment_story(index: str) -> str:
    """Fetches market data for a stock index and returns a prompt for generating a story.
    Args:
        index: One of 'sp500', 'dowjones', or 'nasdaq'.
    """
    # 1. Map user input to Yahoo Finance symbols (Can create another tool down the line)
    symbols = {
        "sp500": "^GSPC",
        "dowjones": "^DJI",
        "nasdaq": "^IXIC"
    }

    # 2. Get the correct symbol for the requested index
    symbol = symbols.get(index.lower())

    try:
        # 3. Fetch data from Yahoo Finance
        url = f"https://query1.finance.yahoo.com/v8/finance/chart/{symbol}"
        data = requests.get(url).json()

        # 4. Extract current and previous prices
        result = data["chart"]["result"][0]["meta"]
        current = result["regularMarketPrice"]
        previous = result["chartPreviousClose"]
        change = current - previous
        percent = (change / previous) * 100

        # 5. Return a prompt for the LLM to generate a story
        return (
            f"The {index.upper()} is currently at {current:.2f}, "
            f"which is a change of {percent:.2f}% from the previous close. "
            f"Write a short, realistic story that explains why it moved in this direction."
        )

    except Exception as e:
        return f"Error: {str(e)}"


@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """A tool that fetches the current local time in a specified timezone.
    Args:
        timezone: A string representing a valid timezone (e.g., 'America/New_York').
    """
    try:
        # Create timezone object
        tz = pytz.timezone(timezone)
        # Get current time in that timezone
        local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
        return f"The current local time in {timezone} is: {local_time}"
    except Exception as e:
        return f"Error fetching time for timezone '{timezone}': {str(e)}"


final_answer = FinalAnswerTool()

# If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder:
# model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud' 

model = LiteLLMModel(
    model_id="qwen2:7b",
    api_base="http://localhost:11434",  # Or 127.0.0.1
    model_provider="ollama",            # 👈 THIS is the key fix!
    num_ctx=8192,
)



# Import tool from Hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)
    
agent = CodeAgent(
    model=model,
    tools=[final_answer, market_sentiment_story], ## add your tools here (don't remove final answer)
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)


GradioUI(agent).launch()