aiaiteam commited on
Commit
c90a73f
·
1 Parent(s): 2e76598

Fix mode-aware ensureEndMark: skip '끝.' for 보고서 mode

Browse files
Files changed (1) hide show
  1. static/index.html +13 -10
static/index.html CHANGED
@@ -130,10 +130,10 @@
130
  <label>문서 양식</label>
131
  <div class="row" style="gap:16px; margin-bottom:8px;">
132
  <label style="display:flex; align-items:center; gap:6px; font-size:14px; color:var(--text); cursor:pointer;">
133
- <input type="radio" name="doc-mode" value="공문" checked> 공문 (수신/제목/본문/발신)
134
  </label>
135
  <label style="display:flex; align-items:center; gap:6px; font-size:14px; color:var(--text); cursor:pointer;">
136
- <input type="radio" name="doc-mode" value="보고서"> 보고서 (추진배경/계획)
137
  </label>
138
  </div>
139
 
@@ -241,7 +241,7 @@ const SYSTEM_PROMPT_REPORT = `당신은 한국전력공사(한전, KEPCO) 내부
241
  - 추측이나 가공 정보 추가 금지, 사용자가 준 내용만 정리
242
 
243
  [★ 문체 — 가장 중요]
244
- - 한전 내부 보고서 표준은 **명사형 종결** (정중체 절대 금지)
245
  - 권장 종결: "시행 예정", "참여 요청", "추진 계획", "검토 중", "수립", "협의 완료", "운영", "확보", "필요"
246
  - 금지 종결: "~합니다", "~입니다", "~예정입니다", "~하고자 합니다", "~바랍니다"
247
  - 예시:
@@ -264,9 +264,12 @@ const SYSTEM_PROMPT_REPORT = `당신은 한국전력공사(한전, KEPCO) 내부
264
  가. ('26.5월) 규제 설명회 개최
265
  나. ('26.6월) 사내 위원회 운영계획 수립`;
266
 
 
 
 
 
267
  function getSystemPrompt() {
268
- const mode = document.querySelector('input[name="doc-mode"]:checked')?.value || '공문';
269
- return mode === '보고서' ? SYSTEM_PROMPT_REPORT : SYSTEM_PROMPT_LETTER;
270
  }
271
 
272
  function buildUserPrompt() {
@@ -370,8 +373,8 @@ async function generate() {
370
  if (obj.done) {
371
  doneSeen = true;
372
  console.log('[SSE done]', obj);
373
- // 마지막에 "끝." 자동 보장
374
- const final = ensureEndMark(stripMarkdown(buffer));
375
  outputEl.textContent = final;
376
  setStatus(`완료 (${obj.tokens} 토큰, ${obj.elapsed}초)`);
377
  return;
@@ -419,9 +422,9 @@ $('download-docx').addEventListener('click', async () => {
419
  setStatus('docx 라이브러리 로딩 실패 (네트워크 확인)', true);
420
  return;
421
  }
422
- // 출력 줄의 "제목 ..." 부분에서 파일명 추출 시도, 없으면 "공문"
423
- const firstTitleMatch = outputEl.textContent.match(/^제목\s+(.+)$/m);
424
- const title = (firstTitleMatch ? firstTitleMatch[1] : '공문').trim();
425
  const safeTitle = title.replace(/[\\/:*?"<>|]/g, '_').slice(0, 50);
426
 
427
  const { Document, Paragraph, TextRun, Packer } = window.docx;
 
130
  <label>문서 양식</label>
131
  <div class="row" style="gap:16px; margin-bottom:8px;">
132
  <label style="display:flex; align-items:center; gap:6px; font-size:14px; color:var(--text); cursor:pointer;">
133
+ <input type="radio" name="doc-mode" value="공문" checked> 공문 (수신/제목/본문/끝.)
134
  </label>
135
  <label style="display:flex; align-items:center; gap:6px; font-size:14px; color:var(--text); cursor:pointer;">
136
+ <input type="radio" name="doc-mode" value="보고서"> 보고서 (작성일자/부서/섹션)
137
  </label>
138
  </div>
139
 
 
241
  - 추측이나 가공 정보 추가 금지, 사용자가 준 내용만 정리
242
 
243
  [★ 문체 — 가장 중요]
244
+ - 한전 내부 보고서 표준은 명사형 종결 (정중체 절대 금지)
245
  - 권장 종결: "시행 예정", "참여 요청", "추진 계획", "검토 중", "수립", "협의 완료", "운영", "확보", "필요"
246
  - 금지 종결: "~합니다", "~입니다", "~예정입니다", "~하고자 합니다", "~바랍니다"
247
  - 예시:
 
264
  가. ('26.5월) 규제 설명회 개최
265
  나. ('26.6월) 사내 위원회 운영계획 수립`;
266
 
267
+ function getMode() {
268
+ return document.querySelector('input[name="doc-mode"]:checked')?.value || '공문';
269
+ }
270
+
271
  function getSystemPrompt() {
272
+ return getMode() === '보고서' ? SYSTEM_PROMPT_REPORT : SYSTEM_PROMPT_LETTER;
 
273
  }
274
 
275
  function buildUserPrompt() {
 
373
  if (obj.done) {
374
  doneSeen = true;
375
  console.log('[SSE done]', obj);
376
+ const stripped = stripMarkdown(buffer);
377
+ const final = getMode() === '공문' ? ensureEndMark(stripped) : stripped;
378
  outputEl.textContent = final;
379
  setStatus(`완료 (${obj.tokens} 토큰, ${obj.elapsed}초)`);
380
  return;
 
422
  setStatus('docx 라이브러리 로딩 실패 (네트워크 확인)', true);
423
  return;
424
  }
425
+ const firstTitleMatch = text.match(/^제목\s+(.+)$/m);
426
+ const mode = getMode();
427
+ const title = (firstTitleMatch ? firstTitleMatch[1] : mode).trim();
428
  const safeTitle = title.replace(/[\\/:*?"<>|]/g, '_').slice(0, 50);
429
 
430
  const { Document, Paragraph, TextRun, Packer } = window.docx;