
    i                         d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z
 ddlmZ  ej                  e      ZdZe G d d	             ZddZded
efdZded
ee   fdZy)u%   Gemini 2.5 Flash 요약 생성 모듈    N)	dataclass)Optional   )configu  
당신은 보험 콘텐츠 전문 분석가입니다.
아래 보험 유튜브 영상 자막을 꼼꼼히 분석하고 **설계사가 바로 업무에 활용할 수 있도록** 충분히 상세하게 요약해 주세요.

[분석 항목]

## 1. 핵심 요약
영상의 핵심 주제와 결론을 **충분히 담아서** 요약합니다.
짧은 영상이면 간결하게, 긴 영상이면 중요 내용이 빠지지 않도록 길게 작성해도 됩니다.

## 2. 설계사 고객 상담 활용 포인트
고객 상담 시 실제로 쓸 수 있는 포인트를 **내용이 있는 만큼** 추출합니다.
개수 제한 없음 — 중요한 내용이라면 10개, 20개도 괜찮습니다.

## 3. 언급된 보험 상품 / 보험사
영상에서 언급된 특정 상품명, 보험사명, 특약명을 모두 나열합니다. (없으면 "없음")

## 4. 수치 / 금액 정보
보험료, 보험금, 비율 등 수치가 언급된 경우 **자막 원문 그대로** 정리합니다. (없으면 "없음")

## 5. 약관과 다를 수 있는 내용 ⚠️
영상 내용이 일반적인 약관 규정과 다르거나 오해를 살 수 있는 부분을 명시합니다.
(없으면 "없음" — 억지로 찾지 마세요)

## 6. 주제별 섹션 흐름 요약
영상이 어떤 순서로 진행됐는지, 주요 섹션별로 요약합니다.
긴 영상일수록 섹션을 더 세분화해서 작성합니다.

⚠️ 반드시 지켜야 할 규칙:
- 자막에 없는 내용은 절대 추가하지 않습니다
- 보험료·금액 수치는 자막 원문 그대로만 인용합니다
- 불확실한 표현("아마도", "추정" 등) 사용 금지
- 마지막 줄에 반드시 포함: "※ 이 요약은 자동 생성이며 약관 원문을 우선합니다"
c                   "    e Zd ZU eed<   eed<   y)SummaryResultsummary_texthas_numeric_warningsN)__name__
__module____qualname__str__annotations__bool     S/home/jay/projects/insuwiki/scripts/youtube-pipeline/youtube_pipeline/summarizer.pyr   r   4   s    r   r   returnc                      t        j                  t        j                         t        j                  t        j
                        S )u   Gemini API 초기화api_key)genai	configurer   GEMINI_API_KEYGenerativeModelGEMINI_MODELr   r   r   _init_genair   :   s+    	OOF112  !4!455r   transcript_textc           	         t               }d}d}t         d| dd  }d}t        |dz         D ]M  }	 |j                  |      }|j                  }t        t        j                  d|            }	t        ||	      c S  t!        d|       # t        $ re}
|
}||k  rT|d	|z  z  t        t        |
            d
z  d
z  z   }t        j                  d|dz   |||
       t        j                  |       Y d}
~
d}
~
ww xY w)uN   전사 텍스트로부터 구조화된 요약 생성 (지수 백오프 포함)   g      @u   

[자막 내용]
Ni@ r   u3   \d+[\s]*(만원|원|%|퍼센트|세|년|개월|일))r	   r
      i  u7   Gemini 오류 (시도 %d/%d), %.1f초 후 재시도: %su7   Gemini 요약 생성 실패 (최대 재시도 초과): )r   YOUTUBE_SUMMARY_PROMPTrangegenerate_contenttextr   researchr   	Exceptionhashr   loggerwarningtimesleepRuntimeError)r   modelmax_retries
base_delayprompt
last_errorattemptresponsesummaryhas_numericedelays               r   generate_summaryr:   @   s"   MEKJ&''<_Wf=U<VWF&*Jq) "	"--f5HmmG 		PRYZK !$%0 "6 PQ[P\]
^^  	"J$"aj1T#a&\D5HD4PPMaK 

5!	"s   AB	C9AC44C9r%   c                     t        j                  t        j                         t        j                  dt        j
                   | dd       }|d   S )u:   텍스트 임베딩 생성 (text-embedding-004, 768차원)r   zmodels/Ni@  )r/   content	embedding)r   r   r   r   embed_contentEMBEDDING_MODEL)r%   results     r   generate_embeddingrA   h   sK    	OOF112  ../0UdF +r   )r   zgenai.GenerativeModel)__doc__loggingr&   r,   dataclassesr   typingr   google.generativeaigenerativeair    r   	getLoggerr   r*   r"   r   r   r   r:   listfloatrA   r   r   r   <module>rL      s    +  	  !  # 			8	$! H   
6%_c %_m %_PS T%[ r   