fix: AI 플로우 전체 truncation 제거 + Discord 메시지 분할

- task_pipeline.py: summarize()에서 리뷰/코딩 결과 자르기 제거
- discord_bot.py: safe_send_embed() 추가 (4096자 초과 시 분할 전송)
- 리뷰 피드백 자르기 제거 (재시도 시 전체 피드백 전달)
This commit is contained in:
2026-03-06 22:32:22 +09:00
parent 7777ca1ba7
commit 173e1a6a54
2 changed files with 27 additions and 4 deletions

View File

@@ -19,6 +19,29 @@ from core.gemini_caller import GeminiCaller, GeminiCallError
logger = logging.getLogger("variet.discord")
EMBED_DESC_LIMIT = 4096
EMBED_FIELD_LIMIT = 1024
async def safe_send_embed(channel, embed: discord.Embed):
"""Embed가 Discord 제한을 초과하면 나눠서 전송."""
# description이 길면 분할
desc = embed.description or ""
if len(desc) <= EMBED_DESC_LIMIT:
await channel.send(embed=embed)
return
# 첫 번째: 원래 embed + 잘린 description
chunks = [desc[i:i+EMBED_DESC_LIMIT] for i in range(0, len(desc), EMBED_DESC_LIMIT)]
embed.description = chunks[0]
await channel.send(embed=embed)
# 나머지: 연속 embed
for chunk in chunks[1:]:
cont = discord.Embed(description=chunk, color=embed.color)
await channel.send(embed=cont)
# Bot 설정
intents = discord.Intents.default()
intents.message_content = True
@@ -381,7 +404,7 @@ async def _handle_task(message: discord.Message, text: str, ws):
color=0xF39C12,
)
)
feedback = review.get("summary", str(review))[:500]
feedback = review.get("summary", str(review))
for task in tasks:
task["review_feedback"] = (
f"이전 시도에서 다음 리뷰 피드백을 받았습니다. "
@@ -413,7 +436,7 @@ async def _handle_task(message: discord.Message, text: str, ws):
summary_embed.add_field(name=field_name, value=val[:1000], inline=False)
summary_embed.set_footer(text=f"ID: {task_id} | {ws.name}")
await message.channel.send(embed=summary_embed)
await safe_send_embed(message.channel, summary_embed)
# 기록
pipeline.docs.record_session(text, summary, plan)