Spaces:
Runtime error
Runtime error
File size: 4,795 Bytes
b1b672f 9b5b26a 7491053 3570264 7491053 9b5b26a c19d193 6aae614 de66793 8fe992b 9b5b26a de66793 5df72d6 9b5b26a 3d1237b 9b5b26a de66793 cd19df6 de66793 b94b14f de66793 7491053 b1b672f 809ef31 b1b672f 809ef31 b1b672f 9b5b26a 8c01ffb 6aae614 ae7a494 e121372 bf6d34c 9a5a804 fe328e0 13d500a 8c01ffb 9b5b26a 8c01ffb 861422e 9b5b26a 8c01ffb 8fe992b de66793 8c01ffb 861422e 8fe992b 9b5b26a 8c01ffb |
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
from requests.exceptions import RequestException
import re, os
from markdownify import markdownify
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from mistralai import Mistral
from Gradio_UI import GradioUI
api_key = os.environ["OCR_API_KEY"]
# Below is an example of a tool that does nothing. Amaze us with your creativity !
@tool
def my_custom_tool(arg1:str, arg2:int)-> str: #it's import to specify the return type
#Keep this format for the description / args / args description but feel free to modify the tool
"""A tool that does nothing yet
Args:
arg1: the first argument
arg2: the second argument
"""
return "What magic will you build ?"
# Below is an example of a tool that does nothing. Amaze us with your creativity !
@tool
def ocr_pdf_img_document(pdf_or_img_url:str)-> str:
"""A tool that does ocr on a pdf document or image and returns its contents as markdown
Args:
pdf_or_img_url: the url address of the pdf to ocr
"""
client = Mistral(api_key=api_key)
ocr_model ="mistral-ocr-latest"
try: # Apply OCR to the PDF URL
ocr_response = client.ocr.process(
model=ocr_model,
document={
"type": "document_url",
"document_url": pdf_or_img_url
}
)
except Exception:
try: # IF PDF OCR fails, try Image OCR
ocr_response = client.ocr.process(
model=ocr_model,
document={
"type": "image_url",
"image_url": pdf_or_img_url
}
)
except Exception as e:
return e # Return the error to the model if it fails, otherwise return the contents
return "\n\n".join([f"### Page {i+1}\n{ocr_response.pages[i].markdown}" for i in range(len(ocr_response.pages))])
@tool
def visit_website(url:str)-> str:
"""A tool that visits a website, gathers its content and returns the markdown
Args:
url: url address of the website to visit
"""
try:
# Send a GET request to the URL
response = requests.get(url)
response.raise_for_status() # Raise an exception for bad status codes
# Convert the HTML content to Markdown
markdown_content = markdownify(response.text).strip()
# Remove multiple line breaks
markdown_content = re.sub(r"\n{3,}", "\n\n", markdown_content)
return markdown_content
except RequestException as e:
return f"Error fetching the webpage: {str(e)}"
except Exception as e:
return f"An unexpected error occurred: {str(e)}"
# Below is an example of a tool that does nothing. Amaze us with your creativity !
@tool
def web_search(search_query:str)-> str:
"""A tool that does web search using a query
Args:
search_query: a string for a search query
"""
search_tool = DuckDuckGoSearchTool()
return search_tool(search_query)
@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', #https://pflgm2locj2t89co.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, web_search, get_current_time_in_timezone, visit_website, ocr_pdf_img_document], ## 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() |