# -*- coding: utf-8 -*- """ @File: services.py @Date: 2020-09-14 @author: A2TEC @section MODIFYINFO 수정정보 - 수정자/수정일 : 수정내역 - 2022-01-14/hsj100@a2tec.co.kr : refactoring @brief: services api """ import requests, json, traceback from fastapi import APIRouter, Depends, Body from starlette.requests import Request from typing import Annotated, List from rest.app.common import consts from rest.app import models as M from rest.app.utils.date_utils import D from custom_logger.custom_log import custom_logger as LOG from custom_apps.bingimagecreator.utils import DallEArgument,dalle3_generate_image from custom_apps.bingart.bingart import BingArtGenerator from custom_apps.imagen.custom_imagen import imagen_generate_image from rest.app.utils.parsing_utils import download_range from custom_apps.utils import cookie_manager router = APIRouter(prefix="/services") @router.post("/bing/cookie/set", summary="bing 관련 쿠키 set", response_model=M.BingCookieSetRes) async def bing_cookie_set(request: Request, request_body_info: M.BingCookieSetReq): """ ## Bing cookie set > 쿠키정보 set ## 정보 > cookie 값이 빈 값일경우 쿠키정보를 set 하지 않고 현재 쿠키값 return 함 > cookie 값이 정상 쿠키 인지는 확인안함 """ response = M.BingCookieSetRes() try: if len(request_body_info.cookie) == 0: pass else: cookie_manager.set_cookie(request_body_info.cookie) return response.set_message(current_cookie=cookie_manager.get_cookie()) except Exception as e: LOG.error(traceback.format_exc()) return response.set_error(e,current_cookie=cookie_manager.get_cookie()) @router.post("/imageGenerate/bingimg", summary="이미지 생성(AI) - bing image generator (DALL-E 3)", response_model=M.ImageGenerateRes) async def bing_img_generate(request: Request, request_body_info: M.ImageGenerateReq): """ ## 이미지 생성(AI) - bing image generator (DALL-E 3) > bing image generator를 이용하여 이미지 생성 ### Requriements ## 정보 > 오류 발생시 오류 발생한 파일은 에러 메세지에만 남기고 저장은 안함 > *동작 안함. """ response = M.ImageGenerateRes() try: if not download_range(request_body_info.downloadCount): raise Exception(f"downloadCount is 1~4 (current value = {request_body_info.downloadCount})") args = DallEArgument( prompt=request_body_info.prompt, download_count=request_body_info.downloadCount ) info = dalle3_generate_image(args) if info.get_error_messages(): error_message = f"파일생성 error: {info.get_error_messages()}" LOG.error(error_message) return response.set_error(error=error_message, img_len=info.get_counter()) return response.set_message(img_len=info.get_counter()) except Exception as e: LOG.error(traceback.format_exc()) return response.set_error(e) @router.post("/imageGenerate/bingart", summary="이미지 생성(AI) - bing art (DALL-E 3)", response_model=M.ImageGenerateRes) async def bing_art(request: Request, request_body_info: M.ImageGenerateReq): """ ## 이미지 생성(AI) - bing art (DALL-E 3) > bing art를 이용하여 이미지 생성 ### Requriements ## 정보 > 오류 발생시 오류 발생한 파일은 에러 메세지에만 남기고 저장은 안함 > *동작 안함. """ response = M.ImageGenerateRes() try: if not download_range(request_body_info.downloadCount): raise Exception(f"downloadCount is 1~4 (current value = {request_body_info.downloadCount})") bing_art = BingArtGenerator() info = bing_art.get_images(prompt=request_body_info.prompt,image_len=request_body_info.downloadCount) return response.set_message(img_len=info) except Exception as e: LOG.error(traceback.format_exc()) return response.set_error(e) @router.post("/imageGenerate/imagen", summary="이미지 생성(AI) - imagen", response_model=M.ImageGenerateRes) async def imagen(request: Request, request_body_info: M.ImageGenerateReq): """ ## 이미지 생성(AI) - imagen > imagen AI를 이용하여 이미지 생성 ### Requriements > - googlecli 설치(https://cloud.google.com/sdk/docs/install?hl=ko#linux) > - const.py 에 지정한 OUTPUT_FOLDER 하위에 imagen 폴더가 있어야함. """ response = M.ImageGenerateRes() try: if not download_range(request_body_info.downloadCount): raise Exception(f"downloadCount is 1~4 (current value = {request_body_info.downloadCount})") img_length = imagen_generate_image(prompt=request_body_info.prompt, download_count=request_body_info.downloadCount ) return response.set_message(img_len=img_length) except Exception as e: LOG.error(traceback.format_exc()) return response.set_error(error=e)