Spaces:
Sleeping
Sleeping
File size: 2,089 Bytes
aa84f48 | 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 | import base64
import os
from smolagents import Tool
from openai import OpenAI
class AnalyzeImageTool(Tool):
name = "analyze_image_tool"
description = """This tool performs a custom analysis of the provided image and returns the corresponding result."""
inputs = {
"image_path": {"type": "string", "description": "Image path"},
"task": {"type": "string", "description": "Task to perform on the image, be detailed and clear"},
}
output_type = "string"
def __init__(self):
super().__init__()
self.model_id = "gpt-4.1-mini"
def forward(self, image_path: str, task: str) -> str:
"""
Analyze the image at `image_path` according to `task` and return the textual result.
"""
header = "Image analysis result:\n\n"
llm_instruction = (
"You are a highly capable image analysis tool, designed to examine images and deliver detailed descriptions, "
"insights, and relevant interpretations based on the task at hand.\n\n"
"Approach the task methodically and provide a thorough and well-reasoned response to the following:\n\n---\nTask:\n"
f"{task}\n\n"
)
try:
return header + self._analyze_with_openai(image_path, llm_instruction)
except Exception as e:
return f"Error analyzing image: {e}."
def _analyze_with_openai(self, image_path: str, task: str) -> str:
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"), base_url=os.getenv("OPENAI_BASE_URL"))
with open(image_path, "rb") as f:
encoded_image = base64.b64encode(f.read()).decode("utf-8")
payload = [
{
"role": "user",
"content": [
{"type": "input_text", "text": task},
{"type": "input_image", "image_url": f"data:image/jpeg;base64,{encoded_image}"},
],
}
]
response = client.responses.create(model=self.model_id, input=payload)
return response.output[0].content[0].text |