Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -1,36 +1,33 @@
|
|
1 |
# img_bot.py
|
2 |
import discord, os, io, re, asyncio, logging, requests, replicate, subprocess
|
3 |
-
from transformers import pipeline as transformers_pipeline
|
4 |
|
5 |
# ββ νκ²½ λ³μ ββββββββββββββββββββββββββββββββββββββββββββββββ
|
6 |
-
TOKEN
|
7 |
-
CHANNEL_ID
|
8 |
-
REPL_TOKEN
|
9 |
-
HF_TOKEN
|
|
|
|
|
10 |
|
11 |
if not TOKEN or not CHANNEL_ID:
|
12 |
raise RuntimeError("DISCORD_TOKEN κ³Ό DISCORD_CHANNEL_ID νκ²½ λ³μλ₯Ό λͺ¨λ μ§μ νμΈμ.")
|
13 |
-
|
14 |
if not REPL_TOKEN:
|
15 |
-
raise RuntimeError(
|
16 |
-
"OPENAI_API_KEY νκ²½ λ³μμ Replicate Personal Access Token κ°μ λ£μ΄μ£ΌμΈμ."
|
17 |
-
)
|
18 |
|
19 |
# Replicate λΌμ΄λΈλ¬λ¦¬κ° μ°Έμ‘°νλλ‘ ν ν° μ£Όμ
|
20 |
os.environ["REPLICATE_API_TOKEN"] = REPL_TOKEN
|
21 |
|
22 |
# ββ λͺ¨λΈ ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
23 |
MODEL = (
|
24 |
-
"
|
25 |
-
"
|
26 |
-
|
27 |
)
|
28 |
|
29 |
# ββ λ²μ νμ΄νλΌμΈ (CPU) βββββββββββββββββββββββββββββββββββ
|
30 |
translator_kwargs = {"device": -1}
|
31 |
if HF_TOKEN:
|
32 |
-
translator_kwargs["token"] = HF_TOKEN
|
33 |
-
|
34 |
translator = transformers_pipeline(
|
35 |
"translation",
|
36 |
model="Helsinki-NLP/opus-mt-ko-en",
|
@@ -38,7 +35,7 @@ translator = transformers_pipeline(
|
|
38 |
)
|
39 |
|
40 |
def ko2en(text: str) -> str:
|
41 |
-
"""
|
42 |
if re.search(r"[κ°-ν£]", text):
|
43 |
try:
|
44 |
return translator(text, max_length=512)[0]["translation_text"].strip()
|
@@ -55,7 +52,12 @@ logging.basicConfig(
|
|
55 |
|
56 |
# ββ Discord μ€μ ββββββββββββββββββββββββββββββββββββββββββββ
|
57 |
intents = discord.Intents.default()
|
58 |
-
|
|
|
|
|
|
|
|
|
|
|
59 |
|
60 |
class ImageBot(discord.Client):
|
61 |
async def on_ready(self):
|
@@ -68,15 +70,18 @@ class ImageBot(discord.Client):
|
|
68 |
logging.warning(f"web.py μ€ν μ€ν¨: {e}")
|
69 |
|
70 |
async def on_message(self, message: discord.Message):
|
71 |
-
#
|
|
|
|
|
|
|
72 |
if message.author.id == self.user.id or message.channel.id != CHANNEL_ID:
|
73 |
return
|
74 |
|
75 |
-
|
76 |
-
if not
|
77 |
return
|
|
|
78 |
|
79 |
-
prompt_en = ko2en(prompt) # νκΈμ΄λ©΄ μμ΄λ‘ λ³ν
|
80 |
await message.channel.typing()
|
81 |
|
82 |
# ββ Replicate νΈμΆ ββββββββββββββββββββββββββββββββββ
|
@@ -90,7 +95,7 @@ class ImageBot(discord.Client):
|
|
90 |
await message.reply("β οΈ μ΄λ―Έμ§ μμ± μ€ν¨!")
|
91 |
return
|
92 |
|
93 |
-
# ββ
|
94 |
files = []
|
95 |
for idx, item in enumerate(images):
|
96 |
try:
|
|
|
1 |
# img_bot.py
|
2 |
import discord, os, io, re, asyncio, logging, requests, replicate, subprocess
|
3 |
+
from transformers import pipeline as transformers_pipeline
|
4 |
|
5 |
# ββ νκ²½ λ³μ ββββββββββββββββββββββββββββββββββββββββββββββββ
|
6 |
+
TOKEN = os.getenv("DISCORD_TOKEN") # Discord λ΄ ν ν°
|
7 |
+
CHANNEL_ID = int(os.getenv("DISCORD_CHANNEL_ID")) # ν둬ννΈ λ°μ μ±λ ID
|
8 |
+
REPL_TOKEN = (os.getenv("OPENAI_API_KEY") or "").strip() # Replicate ν ν°(λμΌ λ³μ μ¬μ©)
|
9 |
+
HF_TOKEN = (os.getenv("HF_TOKEN") or "").strip() # Hugging Face ν ν°
|
10 |
+
# message_content μΈν
νΈ μ¬μ© μ¬λΆ(1 = ON, 0 = OFF)
|
11 |
+
USE_MSG_INTENT = os.getenv("MESSAGE_CONTENT_INTENT", "1") != "0"
|
12 |
|
13 |
if not TOKEN or not CHANNEL_ID:
|
14 |
raise RuntimeError("DISCORD_TOKEN κ³Ό DISCORD_CHANNEL_ID νκ²½ λ³μλ₯Ό λͺ¨λ μ§μ νμΈμ.")
|
|
|
15 |
if not REPL_TOKEN:
|
16 |
+
raise RuntimeError("OPENAI_API_KEY μ Replicate Personal Access Token κ°μ λ£μ΄μ£ΌμΈμ.")
|
|
|
|
|
17 |
|
18 |
# Replicate λΌμ΄λΈλ¬λ¦¬κ° μ°Έμ‘°νλλ‘ ν ν° μ£Όμ
|
19 |
os.environ["REPLICATE_API_TOKEN"] = REPL_TOKEN
|
20 |
|
21 |
# ββ λͺ¨λΈ ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
22 |
MODEL = (
|
23 |
+
"bytedance/sdxl-lightning-4step:"
|
24 |
+
"6f7a773af6fc3e8de9d5a3c00be77c17308914bf67772726aff83496ba1e3bbe"
|
|
|
25 |
)
|
26 |
|
27 |
# ββ λ²μ νμ΄νλΌμΈ (CPU) βββββββββββββββββββββββββββββββββββ
|
28 |
translator_kwargs = {"device": -1}
|
29 |
if HF_TOKEN:
|
30 |
+
translator_kwargs["token"] = HF_TOKEN
|
|
|
31 |
translator = transformers_pipeline(
|
32 |
"translation",
|
33 |
model="Helsinki-NLP/opus-mt-ko-en",
|
|
|
35 |
)
|
36 |
|
37 |
def ko2en(text: str) -> str:
|
38 |
+
"""ν둬ννΈμ νκΈμ΄ μμΌλ©΄ μμ΄λ‘ λ²μνμ¬ λ°ν."""
|
39 |
if re.search(r"[κ°-ν£]", text):
|
40 |
try:
|
41 |
return translator(text, max_length=512)[0]["translation_text"].strip()
|
|
|
52 |
|
53 |
# ββ Discord μ€μ ββββββββββββββββββββββββββββββββββββββββββββ
|
54 |
intents = discord.Intents.default()
|
55 |
+
if USE_MSG_INTENT:
|
56 |
+
intents.message_content = True
|
57 |
+
logging.info("Message Content Intent = ON "
|
58 |
+
"(Discord Developer Portal β Bot β Privileged Intents μμ νμ±ν νμ)")
|
59 |
+
else:
|
60 |
+
logging.info("Message Content Intent = OFF (MESSAGE_CONTENT_INTENT=0)")
|
61 |
|
62 |
class ImageBot(discord.Client):
|
63 |
async def on_ready(self):
|
|
|
70 |
logging.warning(f"web.py μ€ν μ€ν¨: {e}")
|
71 |
|
72 |
async def on_message(self, message: discord.Message):
|
73 |
+
# μΈν
νΈ OFF μ ν둬ννΈλ₯Ό μ½μ μ μμΌλ―λ‘ μ¦μ λ°ν
|
74 |
+
if not USE_MSG_INTENT:
|
75 |
+
return
|
76 |
+
# λ΄ μμ μ λ©μμ§ λλ λ€λ₯Έ μ±λ λ©μμ§ β 무μ
|
77 |
if message.author.id == self.user.id or message.channel.id != CHANNEL_ID:
|
78 |
return
|
79 |
|
80 |
+
prompt_raw = message.content.strip()
|
81 |
+
if not prompt_raw:
|
82 |
return
|
83 |
+
prompt_en = ko2en(prompt_raw)
|
84 |
|
|
|
85 |
await message.channel.typing()
|
86 |
|
87 |
# ββ Replicate νΈμΆ ββββββββββββββββββββββββββββββββββ
|
|
|
95 |
await message.reply("β οΈ μ΄λ―Έμ§ μμ± μ€ν¨!")
|
96 |
return
|
97 |
|
98 |
+
# ββ Discord νμΌ μ
λ‘λ βββββββββββββββββββββββββββββ
|
99 |
files = []
|
100 |
for idx, item in enumerate(images):
|
101 |
try:
|