import os
import base64
from typing import List
from pydantic import BaseModel, Field
from opperai import Opper
opper = Opper(
http_bearer=os.getenv("OPPER_API_KEY"),
)
class CommonDenominator(BaseModel):
description: str = Field(description="Description of the common denominator among the images")
def common_denominator(image_paths: List[str]) -> str:
image_inputs = []
for path in image_paths:
with open(path, "rb") as f:
image_data = base64.b64encode(f.read()).decode('utf-8')
image_inputs.append(f"data:image/png;base64,{image_data}")
response = opper.call(
name="common_denominator",
instructions="given a list of images, return the most common denominator of the images",
output_schema=CommonDenominator,
input={
"_opper_media_input": image_inputs, # this field name is required by opper
},
model="openai/gpt-4o",
)
return response.description
def main():
image_paths = [
"/var/folders/dx/lwwkf62n61j9z928d87z5txm0000gn/T/tmpid366821.png",
"/var/folders/dx/lwwkf62n61j9z928d87z5txm0000gn/T/tmpuhl0wyg4.png",
"/var/folders/dx/lwwkf62n61j9z928d87z5txm0000gn/T/tmpijk_v13m.png",
"/var/folders/dx/lwwkf62n61j9z928d87z5txm0000gn/T/tmpqglezg1g.png",
]
description = common_denominator(image_paths)
print(f"Image description: {description}")
# Image description: People using VR headsets in a forest
if __name__ == "__main__":
main()