48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
import json
|
|
import re
|
|
|
|
from openai import AsyncOpenAI
|
|
|
|
from app.utils.logger import get_logger
|
|
from config import apikey_settings
|
|
from app.utils.prompts.prompts import Prompt
|
|
|
|
# 로거 설정
|
|
logger = get_logger("chatgpt")
|
|
|
|
# fmt: on
|
|
|
|
|
|
class ChatgptService:
|
|
"""ChatGPT API 서비스 클래스
|
|
|
|
GPT 5.0 모델을 사용하여 마케팅 가사 및 분석을 생성합니다.
|
|
"""
|
|
|
|
def __init__(self):
|
|
self.client = AsyncOpenAI(api_key=apikey_settings.CHATGPT_API_KEY)
|
|
|
|
async def _call_structured_output_with_response_gpt_api(self, prompt: str, output_format : dict, model:str) -> dict:
|
|
content = [{"type": "input_text", "text": prompt}]
|
|
response = await self.client.responses.create(
|
|
model=model,
|
|
input=[{"role": "user", "content": content}],
|
|
text = output_format
|
|
)
|
|
structured_output = json.loads(response.output_text)
|
|
return structured_output or {}
|
|
|
|
async def generate_structured_output(
|
|
self,
|
|
prompt : Prompt,
|
|
input_data : dict,
|
|
) -> str:
|
|
prompt_text = prompt.build_prompt(input_data)
|
|
|
|
logger.debug(f"[ChatgptService] Generated Prompt (length: {len(prompt_text)})")
|
|
logger.info(f"[ChatgptService] Starting GPT request with structured output with model: {prompt.prompt_model}")
|
|
|
|
# GPT API 호출
|
|
response = await self._call_structured_output_with_response_gpt_api(prompt_text, prompt.prompt_output, prompt.prompt_model)
|
|
return response
|