|
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool |
|
import datetime |
|
import requests |
|
import pytz |
|
import yaml |
|
from tools.final_answer import FinalAnswerTool |
|
from PIL import Image |
|
from io import BytesIO |
|
|
|
from Gradio_UI import GradioUI |
|
|
|
@tool |
|
def company_logos(company_name: str) -> Image.Image: |
|
"""A tool that retrieves the logo of a given company using the Clearbit Logo API. |
|
|
|
Args: |
|
company_name: The name of the company. |
|
|
|
Returns: |
|
The URL of the company's logo or an error message if retrieval fails. |
|
""" |
|
|
|
company_domain = company_name.lower().replace(" ", "") + ".com" |
|
|
|
|
|
logo_url = f"https://logo.clearbit.com/{company_domain}?token=sk_VoU5zjclT8Ot9RoyAbAh9g" |
|
|
|
try: |
|
|
|
response = requests.get(logo_url) |
|
if response.status_code == 200: |
|
|
|
image = Image.open(BytesIO(response.content)) |
|
return image |
|
else: |
|
return f"Could not find a logo for {company_name}." |
|
except Exception as e: |
|
return f"Error fetching logo for {company_name}: {str(e)}" |
|
|
|
@tool |
|
def company_description(company_name: str) -> str: |
|
"""Fetches a company description using DuckDuckGo's Instant Answer API. |
|
|
|
Args: |
|
company_name: The name of the company. |
|
|
|
Returns: |
|
A short description of the company. |
|
""" |
|
url = f"https://api.duckduckgo.com/?q={company_name}+company&format=json" |
|
|
|
try: |
|
response = requests.get(url) |
|
if response.status_code == 200: |
|
data = response.json() |
|
return data.get("AbstractText", "No description available.") |
|
else: |
|
return "Company description not found." |
|
except Exception as e: |
|
return f"Error fetching company description: {str(e)}" |
|
|
|
|
|
final_answer = FinalAnswerTool() |
|
|
|
|
|
|
|
|
|
model = HfApiModel( |
|
max_tokens=2096, |
|
temperature=0.5, |
|
model_id='Qwen/Qwen2.5-Coder-32B-Instruct', |
|
custom_role_conversions=None, |
|
) |
|
|
|
|
|
|
|
|
|
|
|
with open("prompts.yaml", 'r') as stream: |
|
prompt_templates = yaml.safe_load(stream) |
|
|
|
agent = CodeAgent( |
|
model=model, |
|
tools=[final_answer, company_logos, company_description], |
|
max_steps=6, |
|
verbosity_level=1, |
|
grammar=None, |
|
planning_interval=None, |
|
name=None, |
|
description=None, |
|
prompt_templates=prompt_templates |
|
) |
|
|
|
|
|
GradioUI(agent).launch() |