|
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 |
|
|
|
from skyfield.api import load, Topos |
|
from skyfield.almanac import find_discrete, moon_phase_fraction |
|
import gradio as gr |
|
|
|
|
|
planets = load('de421.bsp') |
|
ts = load.timescale() |
|
|
|
|
|
ZODIAC_SIGNS = [ |
|
("Aries", 0, 30), |
|
("Taurus", 30, 60), |
|
("Gemini", 60, 90), |
|
("Cancer", 90, 120), |
|
("Leo", 120, 150), |
|
("Virgo", 150, 180), |
|
("Libra", 180, 210), |
|
("Scorpio", 210, 240), |
|
("Sagittarius", 240, 270), |
|
("Capricorn", 270, 300), |
|
("Aquarius", 300, 330), |
|
("Pisces", 330, 360), |
|
] |
|
|
|
def get_moon_position(): |
|
"""Calculate the current Moon position in the Zodiac.""" |
|
now = datetime.datetime.now(pytz.utc) |
|
t = ts.from_datetime(now) |
|
|
|
|
|
earth = planets['earth'] |
|
moon = planets['moon'] |
|
astrometric = earth.at(t).observe(moon) |
|
ra, dec, distance = astrometric.radec() |
|
|
|
|
|
ra_in_degrees = ra._degrees |
|
|
|
|
|
for sign, start, end in ZODIAC_SIGNS: |
|
if start <= ra_in_degrees < end: |
|
return f"{sign} ({start}° - {end}°)" |
|
|
|
return "Unknown" |
|
|
|
def create_gradio_interface(): |
|
"""Create a Gradio interface for the Moon position tool.""" |
|
def predict(): |
|
moon_pos = get_moon_position() |
|
return f"The Moon is currently in {moon_pos}." |
|
|
|
iface = gr.Interface( |
|
fn=predict, |
|
inputs=None, |
|
outputs="text", |
|
title="Moon Position in Zodiac", |
|
description="This tool calculates the current position of the Moon in the Zodiac.", |
|
) |
|
return iface |
|
|
|
if __name__ == "__main__": |
|
|
|
interface = create_gradio_interface() |
|
interface.launch() |
|
|
|
|
|
|
|
@tool |
|
def my_custom_tool(arg1:str, arg2:int)-> str: |
|
|
|
"""A tool that does nothing yet |
|
Args: |
|
arg1: the first argument |
|
arg2: the second argument |
|
""" |
|
return "What magic will you build ?" |
|
|
|
@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: |
|
|
|
tz = pytz.timezone(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() |
|
|
|
|
|
|
|
|
|
model = HfApiModel( |
|
max_tokens=2096, |
|
temperature=0.5, |
|
model_id='Qwen/Qwen2.5-Coder-32B-Instruct', |
|
custom_role_conversions=None, |
|
) |
|
|
|
|
|
|
|
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], |
|
max_steps=6, |
|
verbosity_level=1, |
|
grammar=None, |
|
planning_interval=None, |
|
name=None, |
|
description=None, |
|
prompt_templates=prompt_templates |
|
) |
|
|
|
|
|
GradioUI(agent).launch() |