"""
title: Image Gen
author: open-webui (@justinrahb)
author_url: https://github.com/open-webui
funding_url: https://github.com/open-webui
version: 0.1 (Modified to only trigger with certain phrases. All credits to original author)
required_open_webui_version: 0.3.9
"""
import os
import requests
from datetime import datetime
from typing import Callable
from open_webui.apps.images.main import image_generations, GenerateImageForm
from open_webui.apps.webui.models.users import Users
class Tools:
def __init__(self):
pass
async def generate_image(
self, prompt: str, __user__: dict, __event_emitter__=None
) -> str:
"""
Generate an image given a prompt if the prompt contains specific phrases
:param prompt: prompt to use for image generation
"""
valid_phrases = ["create an image", "imagine an image", "image of"]
if not any(phrase in prompt.lower() for phrase in valid_phrases):
await __event_emitter__(
{
"type": "status",
"data": {
"description": (
""
""
),
"done": True,
},
}
)
return (
"The prompt must include one of the following phrases to generate an image: "
"'create an image', 'imagine an image', or 'image of'."
)
await __event_emitter__(
{
"type": "status",
"data": {"description": "Generating an image", "done": False},
}
)
try:
images = await image_generations(
GenerateImageForm(**{"prompt": prompt}),
Users.get_user_by_id(__user__["id"]),
)
await __event_emitter__(
{
"type": "status",
"data": {"description": "Generated an image", "done": True},
}
)
for image in images:
await __event_emitter__(
{
"type": "message",
"data": {"content": f""},
}
)
return "Notify the user that the image has been successfully generated."
except Exception as e:
await __event_emitter__(
{
"type": "status",
"data": {"description": f"An error occurred: {e}", "done": True},
}
)
return f"Tell the user: {e}"