File size: 4,429 Bytes
9b5b26a
 
 
 
c19d193
6aae614
8fe992b
9b5b26a
 
2ae5c92
9b5b26a
0a32ecc
 
9b5b26a
0a32ecc
 
 
9b5b26a
0a32ecc
 
 
 
 
 
 
 
ac4abb3
0a32ecc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
2dbcaf3
2ae5c92
3e98138
 
0cd59d5
3e98138
 
 
 
 
 
0cd59d5
 
 
 
3e98138
0cd59d5
 
3e98138
0cd59d5
 
 
 
 
 
 
 
 
 
 
3e98138
 
 
2dbcaf3
0cd59d5
9b5b26a
 
 
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
 
6aae614
4ffb6b0
e121372
400426f
05cd846
bf6d34c
a231c1f
b5fdc3d
a231c1f
fe328e0
13d500a
8c01ffb
db4c435
9b5b26a
db4c435
8c01ffb
861422e
 
9b5b26a
8c01ffb
8fe992b
3e98138
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
9b5b26a
400426f
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
129
130
131
132
133
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

# Fact check tool
@tool
def fact_checker(claim:str)-> str: #it's import to specify the return type
    """A tool that checks the validity of a claim by analyzing search results
    Args:
        claim: A statement or claim to fact-check
    Returns:
        A summarized analysis of search results indicating if the clam is likely true, false, or inconclusive.
    """
    search_tool = DuckDuckGoSearchTool(max_results=5)

    try:
        # Get Search results
        results = search_tool.forward(claim)

        # Analyze the results to check if the claim is mentioned
        lower_claim = claim.lower()
        positive_hits = sum(1 for result in results.split("\n") if lower_claim in result.lower())

        # Generate a response based on the number of positive hits
        if positive_hits >= 3:
            status = "likely true"
        elif positive_hits >= 1:
            status = "possibly true, but further verification is needed"
        else:
            status = "unliely or inconclusive"

        # Return a summary with confidence level
        summary = (
            f"Search results inicate taht the claim '{claim}' is {status}.\n"
            f"Number of positive hits: {positive_hits}\n\n"
            f"Here are the top results: \n{results}"
        )

        return summary

    except Exception as e:
        return f"Error during fact-checking: {str(e)}"
        

import re
# Stock price tool
@tool
def stock_price(symbol: str) -> str:
    """A tool that retrieves the current stock price for a given stock symbol.
    Args:
        symbol: The ticker symbol of the stock (e.g., AAPL for Apple Inc.).
    Returns:
        A summary indicating the current price of the stock or an error message if unavailable.
    """
    try:
        import yfinance as yf

        # Initialize the ticker for the given symbol
        ticker = yf.Ticker(symbol)
        
        # Try to get the current price from the ticker info
        price = ticker.info.get("currentPrice")
        
        # Fallback: if 'currentPrice' is not available, get the last closing price
        if price is None:
            history = ticker.history(period="1d")
            if not history.empty:
                price = history["Close"].iloc[-1]
            else:
                return f"Could not retrieve the current price for {symbol}. Please verify the ticker symbol."

        # Return the current price in a formatted string
        return f"The current price for {symbol} is ${price:.2f}."
    
    except Exception as e:
        return f"An error occurred while retrieving the stock price for {symbol}: {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()
#get_current_time_in_timezone = get_current_time_in_timezone()
model = HfApiModel(
max_tokens=2096,
#max_tokens=2046,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
#model_id='meta-llama/Meta-Llama-3-8B-Instruct',
#model_id='deepseak-ai/DeepSeek-R1-Distill-Qwen-32B',
custom_role_conversions=None,
)

# search_tool = DuckDuckGoSearchTool()
# 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=[fact_checker, stock_price, get_current_time_in_timezone, image_generation_tool, final_answer], ## 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(),