IMPChat / modules /models /DALLE3.py
MILVLG's picture
Upload 107 files
0bae6cd verified
raw history blame
No virus
2.41 kB
import logging
from .base_model import BaseLLMModel
from .. import shared
import requests
from ..presets import *
from ..config import retrieve_proxy, sensitive_id
class OpenAI_DALLE3_Client(BaseLLMModel):
def __init__(self, model_name, api_key, user_name="") -> None:
super().__init__(model_name=model_name, user=user_name)
self.api_key = api_key
self._refresh_header()
def _get_dalle3_prompt(self):
prompt = self.history[-1]["content"]
if prompt.endswith("--raw"):
prompt = "I NEED to test how the tool works with extremely simple prompts. DO NOT add any detail, just use it AS-IS:" + prompt
return prompt
def get_answer_at_once(self, stream=False):
prompt = self._get_dalle3_prompt()
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {self.api_key}"
}
payload = {
"model": "dall-e-3",
"prompt": prompt,
"n": 1,
"size": "1024x1024",
"quality": "standard",
}
if stream:
timeout = TIMEOUT_STREAMING
else:
timeout = TIMEOUT_ALL
if shared.state.images_completion_url != IMAGES_COMPLETION_URL:
logging.debug(f"使用自定义API URL: {shared.state.images_completion_url}")
with retrieve_proxy():
try:
response = requests.post(
shared.state.images_completion_url,
headers=headers,
json=payload,
stream=stream,
timeout=timeout,
)
response.raise_for_status() # 根据HTTP状态码引发异常
response_data = response.json()
image_url = response_data['data'][0]['url']
img_tag = f'<!-- S O PREFIX --><a data-fancybox="gallery" target="_blank" href="{image_url}"><img src="{image_url}" /></a><!-- E O PREFIX -->'
revised_prompt = response_data['data'][0].get('revised_prompt', '')
return img_tag + revised_prompt, 0
except requests.exceptions.RequestException as e:
return str(e), 0
def _refresh_header(self):
self.headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {sensitive_id}",
}