fix: AI 플로우 전체 truncation 제거 + Discord 메시지 분할
- task_pipeline.py: summarize()에서 리뷰/코딩 결과 자르기 제거 - discord_bot.py: safe_send_embed() 추가 (4096자 초과 시 분할 전송) - 리뷰 피드백 자르기 제거 (재시도 시 전체 피드백 전달)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -189,9 +189,9 @@ class TaskPipeline:
|
||||
prompt = (
|
||||
f"## 원래 요청\n{user_request}\n\n"
|
||||
f"## 태스크 수\n{len(plan.get('tasks', []))}개\n\n"
|
||||
f"## 리뷰 결과\n{review.get('summary', str(review))[:500]}\n\n"
|
||||
f"## 리뷰 결과\n{review.get('summary', str(review))}\n\n"
|
||||
f"## 코딩 결과 요약\n"
|
||||
f"{chr(10).join(o[:200] for o in code_outputs)}\n\n"
|
||||
f"{chr(10).join(code_outputs)}\n\n"
|
||||
f"위 정보를 바탕으로 총평을 작성하세요."
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user