Chat24-7 / app.py
MuhammadQASIM111's picture
Update app.py
35229a1 verified
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
import pandas as pd
import fitz # PyMuPDF for PDF parsing
from io import StringIO, BytesIO
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI
@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)}"
@tool
def cash_flow_forecast(doc_bytes: bytes, file_type: str) -> str:
"""Forecasts monthly cash flow from a financial document.
Args:
doc_bytes: File bytes (PDF, CSV, or Excel).
file_type: One of 'pdf', 'csv', 'xlsx'.
"""
try:
if file_type == 'pdf':
doc = fitz.open(stream=doc_bytes, filetype='pdf')
text = " ".join([page.get_text() for page in doc])
return f"PDF processed. Extracted text: {text[:300]}..."
elif file_type == 'csv':
df = pd.read_csv(BytesIO(doc_bytes))
elif file_type in ['xls', 'xlsx']:
df = pd.read_excel(BytesIO(doc_bytes))
else:
return "Unsupported file format."
df.columns = df.columns.str.lower()
if 'amount' not in df.columns:
df['amount'] = df.iloc[:, -1] # Assume last column is amount if not named
if 'date' not in df.columns:
df['date'] = pd.date_range(start='2023-01-01', periods=len(df))
df['date'] = pd.to_datetime(df['date'], errors='coerce')
monthly = df.resample('M', on='date').sum(numeric_only=True)
trend = monthly['amount'].rolling(window=3).mean().iloc[-1]
return f"Predicted average cash flow for next month: ${trend:.2f}"
except Exception as e:
return f"Error analyzing file: {str(e)}"
@tool
def report_generator(doc_bytes: bytes, file_type: str) -> str:
"""Creates a business report from financial data.
Args:
doc_bytes: File bytes (PDF, CSV, or Excel).
file_type: File format type.
"""
try:
if file_type == 'pdf':
doc = fitz.open(stream=doc_bytes, filetype='pdf')
return "\n".join([page.get_text() for page in doc][:2])
elif file_type == 'csv':
df = pd.read_csv(BytesIO(doc_bytes))
elif file_type in ['xls', 'xlsx']:
df = pd.read_excel(BytesIO(doc_bytes))
else:
return "Unsupported file format."
summary = df.describe(include='all').to_string()
return f"Business Report:\n{summary}"
except Exception as e:
return f"Failed to generate report: {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,
get_current_time_in_timezone,
my_custom_tool,
cash_flow_forecast,
report_generator,
image_generation_tool
],
max_steps=6,
verbosity_level=1,
grammar=None,
planning_interval=None,
name=None,
description=None,
prompt_templates=prompt_templates
)
GradioUI(agent).launch()