|
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool |
|
import datetime |
|
import requests |
|
import pytz |
|
import yaml |
|
from tools.final_answer import FinalAnswerTool |
|
from typing import Any, Optional |
|
import duckduckgo_search |
|
from kerykeion import AstrologicalSubject, Report, KerykeionChartSVG |
|
import gradio as gr |
|
from Gradio_UI import GradioUI |
|
|
|
@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)}" |
|
|
|
@tool |
|
def create_birth_chart(name: str, year: int, month: int, day: int, hour: int, minute: int, city: str, nation: str) -> str: |
|
"""Creates an astrological birth chart based on user's birth information. |
|
|
|
Args: |
|
name: Person's name |
|
year: Birth year |
|
month: Birth month |
|
day: Birth day |
|
hour: Birth hour |
|
minute: Birth minute |
|
city: Birth city |
|
nation: Birth country |
|
|
|
Returns: |
|
str: Path to the generated SVG file and astrological report |
|
""" |
|
try: |
|
|
|
person = AstrologicalSubject( |
|
name=name, |
|
year=year, |
|
month=month, |
|
day=day, |
|
hour=hour, |
|
minute=minute, |
|
city=city, |
|
nation=nation, |
|
) |
|
|
|
|
|
chart = KerykeionChartSVG(person) |
|
svg_path = f"charts/{name.lower().replace(' ', '_')}_birth_chart.svg" |
|
chart.makeSVG(svg_path) |
|
|
|
|
|
report = Report(person) |
|
report_text = report.get_full_report() |
|
|
|
return { |
|
"svg_path": svg_path, |
|
"report": report_text |
|
} |
|
|
|
except Exception as e: |
|
return f"Error occurred: {str(e)}" |
|
|
|
final_answer = FinalAnswerTool() |
|
model = HfApiModel( |
|
max_tokens=2096, |
|
temperature=0.5, |
|
model_id='https://wxknx1kg971u7k1n.us-east-1.aws.endpoints.huggingface.cloud', |
|
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, create_birth_chart], |
|
max_steps=6, |
|
verbosity_level=1, |
|
grammar=None, |
|
planning_interval=None, |
|
name=None, |
|
description=None, |
|
prompt_templates=prompt_templates |
|
) |
|
|
|
def process_birth_chart(text_input: str): |
|
"""Processes user input to create a birth chart.""" |
|
try: |
|
|
|
response = agent.run(text_input) |
|
|
|
if isinstance(response, dict) and "svg_path" in response: |
|
|
|
return gr.Image(value=response["svg_path"]), response["report"] |
|
else: |
|
return None, "Sorry, couldn't create the birth chart." |
|
|
|
except Exception as e: |
|
return None, f"An error occurred: {str(e)}" |
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("# 🌟 Astrological Birth Chart Generator") |
|
|
|
with gr.Row(): |
|
text_input = gr.Textbox( |
|
label="Enter Your Birth Information", |
|
placeholder="Example: My name is John Doe, I was born on May 5, 1990 at 15:30 in Istanbul, Turkey." |
|
) |
|
|
|
with gr.Row(): |
|
submit_btn = gr.Button("Generate Birth Chart") |
|
|
|
with gr.Row(): |
|
chart_output = gr.Image(label="Birth Chart") |
|
report_output = gr.Textbox(label="Astrological Report", lines=10) |
|
|
|
submit_btn.click( |
|
fn=process_birth_chart, |
|
inputs=[text_input], |
|
outputs=[chart_output, report_output] |
|
) |
|
|
|
if __name__ == "__main__": |
|
demo.launch() |