File size: 4,264 Bytes
9b5b26a c19d193 6aae614 18bf7da 9b5b26a 8c01ffb 18bf7da 8c01ffb 6aae614 e121372 18bf7da 13d500a 8c01ffb 9b5b26a 8c01ffb 861422e 9b5b26a 8c01ffb 8fe992b 18bf7da 8c01ffb 861422e 8fe992b 18bf7da 9b5b26a 18bf7da |
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 134 135 136 137 138 139 140 |
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:
# 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)}"
@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:
# Create birth chart
person = AstrologicalSubject(
name=name,
year=year,
month=month,
day=day,
hour=hour,
minute=minute,
city=city,
nation=nation,
)
# Create SVG file
chart = KerykeionChartSVG(person)
svg_path = f"charts/{name.lower().replace(' ', '_')}_birth_chart.svg"
chart.makeSVG(svg_path)
# Create astrological report
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,
)
# 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, 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:
# Send query to agent and get response
response = agent.run(text_input)
if isinstance(response, dict) and "svg_path" in response:
# Return SVG file and report
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)}"
# Create Gradio interface
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() |