Spaces:
Sleeping
Sleeping
File size: 3,399 Bytes
c8f24dd 9b5b26a c19d193 1f6beae e89c595 6aae614 9b5b26a 1f6beae 6c99dee 1f6beae c8f24dd 9b5b26a 1f6beae c8f24dd 6c99dee 1f6beae 9b5b26a 1f6beae e89c595 1f6beae e89c595 6c99dee 1f6beae 6c99dee 1f6beae 9b5b26a c8f24dd 9b5b26a c8f24dd 9b5b26a c8f24dd 9b5b26a c8f24dd 9b5b26a c8f24dd 9b5b26a 8c01ffb c8f24dd 6aae614 ae7a494 c8f24dd 13d500a 8c01ffb c8f24dd 861422e e89c595 8c01ffb 8fe992b c8f24dd 8c01ffb c8f24dd 861422e 8fe992b c8f24dd |
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 |
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import datetime
import requests
import pytz
import yaml
import io
import base64
import schemdraw
from schemdraw import flow
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI
@tool
def text_to_flowchart(steps_text: str) -> str:
"""
Generates a flowchart diagram from pre-processed text that lists sequential process steps.
The input should be a text with each step on a new line (optionally prefixed by bullet markers).
Args:
steps_text: A string containing the process steps.
Returns:
A data URL for a PNG image of the generated flowchart.
"""
# Parse steps from the input text
parsed_steps = []
for line in steps_text.splitlines():
line = line.strip()
if line.startswith(("-", "*", "•")):
line = line[1:].strip()
elif line and line[0].isdigit():
dot_index = line.find('.')
if dot_index != -1:
line = line[dot_index+1:].strip()
if line:
parsed_steps.append(line)
if not parsed_steps:
parsed_steps = ["No steps provided."]
# Create the flowchart using SchemDraw's flow module
d = schemdraw.Drawing(unit=0.5, fontsize=10)
d += flow.Terminal().label("Start")
for step in parsed_steps:
d += flow.Arrow()
d += flow.Process().label(step)
d += flow.Arrow()
d += flow.Terminal().label("End")
# Render diagram to PNG and encode as a data URL
buf = io.BytesIO()
d.draw()
d.fig.savefig(buf, format='png', bbox_inches='tight')
buf.seek(0)
encoded_image = base64.b64encode(buf.getvalue()).decode('utf-8')
data_url = f"data:image/png;base64,{encoded_image}"
return data_url
@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()
# If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder:
# model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud'
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',# it is possible that this model may be overloaded
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], ## 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() |