chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import asyncio
|
||||
import base64
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
from collections.abc import Mapping
|
||||
from typing import Any
|
||||
|
||||
from agents import Agent, ImageGenerationTool, Runner, trace
|
||||
from examples.auto_mode import is_auto_mode
|
||||
|
||||
|
||||
def _get_field(obj: Any, key: str) -> Any:
|
||||
if isinstance(obj, Mapping):
|
||||
return obj.get(key)
|
||||
return getattr(obj, key, None)
|
||||
|
||||
|
||||
def open_file(path: str) -> None:
|
||||
if sys.platform.startswith("darwin"):
|
||||
subprocess.run(["open", path], check=False) # macOS
|
||||
elif os.name == "nt": # Windows
|
||||
os.startfile(path) # type: ignore
|
||||
elif os.name == "posix":
|
||||
subprocess.run(["xdg-open", path], check=False) # Linux/Unix
|
||||
else:
|
||||
print(f"Don't know how to open files on this platform: {sys.platform}")
|
||||
|
||||
|
||||
async def main():
|
||||
agent = Agent(
|
||||
name="Image generator",
|
||||
instructions="Always use the image generation tool when the user asks for a new image.",
|
||||
tools=[
|
||||
ImageGenerationTool(
|
||||
tool_config={"type": "image_generation", "quality": "low"},
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
with trace("Image generation example"):
|
||||
print("Generating image, this may take a while...")
|
||||
result = await Runner.run(
|
||||
agent, "Create an image of a frog eating a pizza, comic book style."
|
||||
)
|
||||
print(result.final_output)
|
||||
generated_image = False
|
||||
for item in result.new_items:
|
||||
if item.type != "tool_call_item":
|
||||
continue
|
||||
|
||||
raw_call = item.raw_item
|
||||
call_type = _get_field(raw_call, "type")
|
||||
if call_type != "image_generation_call":
|
||||
continue
|
||||
|
||||
img_result = _get_field(raw_call, "result")
|
||||
if not isinstance(img_result, str):
|
||||
continue
|
||||
|
||||
generated_image = True
|
||||
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as tmp:
|
||||
tmp.write(base64.b64decode(img_result))
|
||||
temp_path = tmp.name
|
||||
|
||||
print(f"Saved generated image to: {temp_path}")
|
||||
if is_auto_mode():
|
||||
print("Auto mode leaves the image on disk instead of opening it.")
|
||||
else:
|
||||
open_file(temp_path)
|
||||
|
||||
if not generated_image:
|
||||
print("No image_generation_call item was returned.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user