33 lines
1.3 KiB
Python
33 lines
1.3 KiB
Python
from app.utils.chatgpt_prompt import ChatgptService
|
|
from app.utils.prompts.prompts import image_autotag_prompt
|
|
from app.utils.prompts.schemas import SpaceType, Subject, Camera, MotionRecommended
|
|
|
|
import asyncio
|
|
|
|
async def autotag_image(image_url : str) -> list[str]: #tag_list
|
|
chatgpt = ChatgptService()
|
|
image_input_data = {
|
|
"img_url" : image_url,
|
|
"space_type" : list(SpaceType),
|
|
"subject" : list(Subject),
|
|
"camera" : list(Camera),
|
|
"motion_recommended" : list(MotionRecommended)
|
|
}
|
|
|
|
image_result = await chatgpt.generate_structured_output(image_autotag_prompt, image_input_data, image_url, False)
|
|
return image_result
|
|
|
|
async def autotag_images(image_url_list : list[str]) -> list[dict]: #tag_list
|
|
chatgpt = ChatgptService()
|
|
image_input_data_list = [{
|
|
"img_url" : image_url,
|
|
"space_type" : list(SpaceType),
|
|
"subject" : list(Subject),
|
|
"camera" : list(Camera),
|
|
"motion_recommended" : list(MotionRecommended)
|
|
}for image_url in image_url_list]
|
|
|
|
image_result_tasks = [chatgpt.generate_structured_output(image_autotag_prompt, image_input_data, image_input_data['img_url'], False) for image_input_data in image_input_data_list]
|
|
image_result_list = await asyncio.gather(*image_result_tasks)
|
|
|
|
return image_result_list |