Ë
    ôëiIB  ã            
       ó"  — d Z ddlZddlZddlmZ ej
                  j                  dej
                  j                  ej
                  j                  ej
                  j                  e	«      «      «      «       ddl
mZmZmZmZmZ  G d„ d«      Zy)u�   
æœˆæ¬¡ãƒ¬ãƒ�ãƒ¼ãƒˆç”Ÿæˆ�ã‚µãƒ¼ãƒ“ã‚¹ - LLMåˆ†æž�ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«
å�„ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã�®ãƒ‡ãƒ¼ã‚¿ã‚’LLMã�«æ¸¡ã�—ã�¦åˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆã‚’ç”Ÿæˆ�
é    N)ÚOptional)ÚLLM_ANALYSIS_ENABLEDÚOPENAI_API_KEYÚOPENAI_MODELÚOPENAI_TEMPERATUREÚOPENAI_MAX_TOKENSc                   ó   — e Zd ZdZdddddddœZdd
efd„Zedefd„«       Zd„ Z	de
dedee
   fd„Zde
dede
fd„Zdede
fd„Zdede
fd„Zdede
fd„Zdede
fd„Zdede
fd„Zdede
fd„Zdedefd„Zde
dee
   fd„Zy	)ÚLLMAnalyzeru0   LLMã‚’ä½¿ã�£ã�Ÿåˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆç”Ÿæˆ�ã‚¯ãƒ©ã‚¹uv  ã�‚ã�ªã�Ÿã�¯æ²»é¨“ãƒ�ãƒ£ãƒƒãƒˆãƒœãƒƒãƒˆã�®é�‹ç”¨ã‚¢ãƒŠãƒªã‚¹ãƒˆã�§ã�™ã€‚
ä»¥ä¸‹ã�®æœˆæ¬¡ã‚µãƒžãƒªãƒ¼ãƒ‡ãƒ¼ã‚¿ã‚’åˆ†æž�ã�—ã€�å…¨ä½“å‚¾å�‘ã�¨å‰�æœˆæ¯”ã�®å¤‰åŒ–ã�«ã�¤ã�„ã�¦
ç°¡æ½”ã�«è©•ä¾¡ã�—ã�¦ã��ã� ã�•ã�„ã€‚è‰¯ã�„ç‚¹ã�¨æ³¨æ„�ã�Œå¿…è¦�ã�ªç‚¹ã�Œã�‚ã‚Œã�°ä¸¡æ–¹æŒ‡æ‘˜ã�—ã�¦ã��ã� ã�•ã�„ã€‚

ãƒ‡ãƒ¼ã‚¿:
{data}

åˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆã‚’2-3æ–‡ã�§æ—¥æœ¬èªžã�§è¨˜è¼‰ã�—ã�¦ã��ã� ã�•ã�„ã€‚uL  ã�‚ã�ªã�Ÿã�¯æ²»é¨“ãƒ�ãƒ£ãƒƒãƒˆãƒœãƒƒãƒˆã�®é�‹ç”¨ã‚¢ãƒŠãƒªã‚¹ãƒˆã�§ã�™ã€‚
ä»¥ä¸‹ã�®åˆ©ç”¨çŠ¶æ³�ãƒ‡ãƒ¼ã‚¿ï¼ˆæ—¥åˆ¥æŽ¨ç§»ã€�å‰�æœˆæ¯”è¼ƒï¼‰ã‚’åˆ†æž�ã�—ã€�
åˆ©ç”¨å‚¾å�‘ã‚„å‰�æœˆã�‹ã‚‰ã�®å¤‰åŒ–ã�«ã�¤ã�„ã�¦ç°¡æ½”ã�«ã‚³ãƒ¡ãƒ³ãƒˆã�—ã�¦ã��ã� ã�•ã�„ã€‚

ãƒ‡ãƒ¼ã‚¿:
{data}

åˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆã‚’2-3æ–‡ã�§æ—¥æœ¬èªžã�§è¨˜è¼‰ã�—ã�¦ã��ã� ã�•ã�„ã€‚um  ã�‚ã�ªã�Ÿã�¯æ²»é¨“ãƒ�ãƒ£ãƒƒãƒˆãƒœãƒƒãƒˆã�®é�‹ç”¨ã‚¢ãƒŠãƒªã‚¹ãƒˆã�§ã�™ã€‚
ä»¥ä¸‹ã�®åˆ©ç”¨ãƒ‘ã‚¿ãƒ¼ãƒ³ãƒ‡ãƒ¼ã‚¿ï¼ˆæ™‚é–“å¸¯åˆ¥ãƒ»æ›œæ—¥åˆ¥ï¼‰ã‚’åˆ†æž�ã�—ã€�
é�‹ç”¨æ”¹å–„ã�¸ã�®ç¤ºå”†ï¼ˆä¾‹ï¼šãƒ”ãƒ¼ã‚¯æ™‚é–“å¸¯ã�®å¯¾å¿œå¼·åŒ–ã�ªã�©ï¼‰ã‚’ç°¡æ½”ã�«ã‚³ãƒ¡ãƒ³ãƒˆã�—ã�¦ã��ã� ã�•ã�„ã€‚

ãƒ‡ãƒ¼ã‚¿:
{data}

åˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆã‚’2-3æ–‡ã�§æ—¥æœ¬èªžã�§è¨˜è¼‰ã�—ã�¦ã��ã� ã�•ã�„ã€‚uz  ã�‚ã�ªã�Ÿã�¯æ²»é¨“ãƒ�ãƒ£ãƒƒãƒˆãƒœãƒƒãƒˆã�®é�‹ç”¨ã‚¢ãƒŠãƒªã‚¹ãƒˆã�§ã�™ã€‚
ä»¥ä¸‹ã�®å›žç­”å“�è³ªãƒ‡ãƒ¼ã‚¿ï¼ˆè§£æ±ºçŽ‡ã€�ãƒ•ã‚£ãƒ¼ãƒ‰ãƒ�ãƒƒã‚¯çŽ‡ã€�æº€è¶³åº¦ã€�ä½Žè©•ä¾¡å‚¾å�‘ï¼‰ã‚’åˆ†æž�ã�—ã€�
å“�è³ªæ”¹å–„ã�®ãƒ�ã‚¤ãƒ³ãƒˆã‚’ç°¡æ½”ã�«ã‚³ãƒ¡ãƒ³ãƒˆã�—ã�¦ã��ã� ã�•ã�„ã€‚

é‡�è¦�ã�ªæ³¨æ„�äº‹é …:
- ãƒ•ã‚£ãƒ¼ãƒ‰ãƒ�ãƒƒã‚¯çŽ‡ã�Œ20%æœªæº€ã�®å ´å�ˆã€�æº€è¶³åº¦ã�®çµ±è¨ˆçš„ä¿¡é ¼æ€§ã�Œä½Žã�„ã�“ã�¨ã‚’æŒ‡æ‘˜ã�—ã�¦ã��ã� ã�•ã�„
- ã‚µãƒ³ãƒ—ãƒ«æ•°ã�Œå°‘ã�ªã�„å ´å�ˆã�¯ã€Œãƒ•ã‚£ãƒ¼ãƒ‰ãƒ�ãƒƒã‚¯çŽ‡ã�Œä½Žã��ã€�æº€è¶³åº¦ã�¯å�‚è€ƒå€¤ã€�ã�¨æ˜Žè¨˜ã�—ã�¦ã��ã� ã�•ã�„
- æ”¹å–„æ��æ¡ˆã�¯ã€ŒQ&Aãƒ‡ãƒ¼ã‚¿ã�®è¿½åŠ ãƒ»ä¿®æ­£ã€�ã�ªã�©é¡§å®¢ã�Œã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã�§ã��ã‚‹ç¯„å›²ã�«é™�å®šã�—ã�¦ã��ã� ã�•ã�„
- ã‚·ã‚¹ãƒ†ãƒ æ©Ÿèƒ½ã�®æ”¹å–„æ��æ¡ˆï¼ˆãƒ•ã‚£ãƒ¼ãƒ‰ãƒ�ãƒƒã‚¯ä¿ƒé€²ã�®ä»•çµ„ã�¿å°Žå…¥ã�ªã�©ï¼‰ã�¯çµ¶å¯¾ã�«å�«ã‚�ã�ªã�„ã�§ã��ã� ã�•ã�„

ãƒ‡ãƒ¼ã‚¿:
{data}

åˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆã‚’3-4æ–‡ã�§æ—¥æœ¬èªžã�§è¨˜è¼‰ã�—ã�¦ã��ã� ã�•ã�„ã€‚uy  ã�‚ã�ªã�Ÿã�¯æ²»é¨“ãƒ�ãƒ£ãƒƒãƒˆãƒœãƒƒãƒˆã�®é�‹ç”¨ã‚¢ãƒŠãƒªã‚¹ãƒˆã�§ã�™ã€‚
ä»¥ä¸‹ã�®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰åˆ†æž�ãƒ‡ãƒ¼ã‚¿ï¼ˆé »å‡ºã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã€�æœªè§£æ±ºã�«å¤šã�„ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ï¼‰ã‚’åˆ†æž�ã�—ã€�
ãƒ¦ãƒ¼ã‚¶ãƒ¼ã�®é–¢å¿ƒäº‹ã‚„æœªå¯¾å¿œé ˜åŸŸã�«ã�¤ã�„ã�¦ç°¡æ½”ã�«ã‚³ãƒ¡ãƒ³ãƒˆã�—ã�¦ã��ã� ã�•ã�„ã€‚

ãƒ‡ãƒ¼ã‚¿:
{data}

åˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆã‚’2-3æ–‡ã�§æ—¥æœ¬èªžã�§è¨˜è¼‰ã�—ã�¦ã��ã� ã�•ã�„ã€‚u—  ã�‚ã�ªã�Ÿã�¯æ²»é¨“ãƒ�ãƒ£ãƒƒãƒˆãƒœãƒƒãƒˆã�®é�‹ç”¨ã‚¢ãƒŠãƒªã‚¹ãƒˆã�§ã�™ã€‚
ä»¥ä¸‹ã�®å›žç­”ã�§ã��ã�ªã�‹ã�£ã�Ÿè³ªå•�ä¸€è¦§ã‚’åˆ†æž�ã�—ã€�
æ”¹å–„å„ªå…ˆåº¦ã�Œé«˜ã�„ãƒˆãƒ”ãƒƒã‚¯ã‚„å…·ä½“çš„ã�ªQ&Aè¿½åŠ æ��æ¡ˆã‚’ç°¡æ½”ã�«ã‚³ãƒ¡ãƒ³ãƒˆã�—ã�¦ã��ã� ã�•ã�„ã€‚

ãƒ‡ãƒ¼ã‚¿:
{data}

åˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆã‚’2-3æ–‡ã�§æ—¥æœ¬èªžã�§è¨˜è¼‰ã�—ã�¦ã��ã� ã�•ã�„ã€‚å…·ä½“çš„ã�ªQ&Aè¿½åŠ å€™è£œã�Œã�‚ã‚Œã�°1-2ä»¶æ��æ¡ˆã�—ã�¦ã��ã� ã�•ã�„ã€‚)ÚsummaryÚusage_overviewÚusage_patternÚqualityÚkeywordsÚimprovementNÚenabledc                 óL   — |�|nt         | _        d| _        d| _        i | _        y)u�   
        åˆ�æœŸåŒ–

        Args:
            enabled: LLMåˆ†æž�ã‚’æœ‰åŠ¹ã�«ã�™ã‚‹ã�‹ï¼ˆNoneã�®å ´å�ˆã�¯è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã�«å¾“ã�†ï¼‰
        NF)r   Ú_enabledÚ_clientÚ_client_init_failedÚ	_analyses)Úselfr   s     ú//var/www/html/chat/reports/core/llm_analyzer.pyÚ__init__zLLMAnalyzer.__init__U   s)   € ð $+Ð#6™Ô<PˆŒØˆŒØ#(ˆÔ Øˆ�ó    Úreturnc                 ó<   — | j                   xr t        t        «      S )u   LLMåˆ†æž�ã�Œæœ‰åŠ¹ã�‹ã�©ã�†ã�‹)r   Úboolr   )r   s    r   r   zLLMAnalyzer.enableda   s   € ð �}‰}Ò5¤¤nÓ!5Ð5r   c                 ól  — | j                   ry| j                  €%	 ddlm}  |t        ¬«      | _        | j                  S | j                  S # t
        $ r' t        d«       d| _        d| _         Y | j                  S t        $ r1}t        d|› �«       d| _        d| _         Y d}~| j                  S d}~ww xY w)	u7   OpenAI ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’å�–å¾—ï¼ˆé�…å»¶åˆ�æœŸåŒ–ï¼‰Nr   )ÚOpenAI)Úapi_keyu{   è­¦å‘Š: openaiãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã�Œã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã�•ã‚Œã�¦ã�„ã�¾ã�›ã‚“ã€‚pip install openai ã‚’å®Ÿè¡Œã�—ã�¦ã��ã� ã�•ã�„ã€‚FTuC   è­¦å‘Š: OpenAIã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã�®åˆ�æœŸåŒ–ã�«å¤±æ•—ã�—ã�¾ã�—ã�Ÿ: )	r   r   Úopenair   r   ÚImportErrorÚprintr   Ú	Exception)r   r   Úes      r   Ú_get_clientzLLMAnalyzer._get_clientf   s·   € ð ×#Ò#Øà�<‰<Ðð
0Ý)Ù%¬nÔ=�”ð �|‰|Ðˆt�|‰|Ðøô ò 0Üð  Tô  UØ %�”Ø+/�Õ(ð
 �|‰|Ðô	 ò 0ÜÐ[Ð\]Ð[^Ð_Ô`Ø %�”Ø+/�×(Ð(Ø�|‰|Ðûð	0ús   ›A Á"B3Á:B3ÂB.Â.B3ÚsectionÚdatac                 óh  — | j                   sy|| j                  vrt        d|› d�«       y|| j                  v r| j                  |   S | j	                  «       }|€y| j                  ||«      }| j                  |   j                  |¬«      }	 |j                  j                  j                  t        dddœd|dœgt        t        ¬	«      }|j                  d
   j                  j                  j!                  «       }|| j                  |<   |S # t"        $ r}t        d|› d|› �«       Y d}~yd}~ww xY w)uR  
        ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã�®ãƒ‡ãƒ¼ã‚¿ã‚’åˆ†æž�ã�—ã�¦ã‚³ãƒ¡ãƒ³ãƒˆã‚’ç”Ÿæˆ�

        Args:
            section: ã‚»ã‚¯ã‚·ãƒ§ãƒ³å��ï¼ˆsummary, usage_overview, usage_pattern, quality, keywords, improvementï¼‰
            data: åˆ†æž�å¯¾è±¡ã�®ãƒ‡ãƒ¼ã‚¿

        Returns:
            åˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆï¼ˆæ–‡å­—åˆ—ï¼‰ã€�å¤±æ•—æ™‚ã�¯None
        Nu"   è­¦å‘Š: æœªçŸ¥ã�®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 'ú')r(   Úsystemu«   ã�‚ã�ªã�Ÿã�¯æ²»é¨“ãƒ�ãƒ£ãƒƒãƒˆãƒœãƒƒãƒˆã�®é�‹ç”¨ãƒ‡ãƒ¼ã‚¿ã‚’åˆ†æž�ã�™ã‚‹å°‚é–€å®¶ã�§ã�™ã€‚ç°¡æ½”ã�§å®Ÿç”¨çš„ã�ªåˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆã‚’æ—¥æœ¬èªžã�§æ��ä¾›ã�—ã�¦ã��ã� ã�•ã�„ã€‚)ÚroleÚcontentÚuser)ÚmodelÚmessagesÚtemperatureÚmax_completion_tokensr   u   è­¦å‘Š: ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 'u%   ' ã�®LLMåˆ†æž�ã�«å¤±æ•—ã�—ã�¾ã�—ã�Ÿ: )r   ÚSECTION_PROMPTSr#   r   r&   Ú_format_dataÚformatÚchatÚcompletionsÚcreater   r   r   ÚchoicesÚmessager-   Ústripr$   )	r   r'   r(   ÚclientÚdata_strÚpromptÚresponseÚresultr%   s	            r   Úanalyze_sectionzLLMAnalyzer.analyze_sectionz   sI  € ð �|Š|Øà˜$×.Ñ.Ñ.ÜÐ6°w°i¸qÐAÔBØð �d—n‘nÑ$Ø—>‘> 'Ñ*Ð*à×!Ñ!Ó#ˆØˆ>Øð ×$Ñ$ W¨dÓ3ˆð ×%Ñ% gÑ.×5Ñ5¸8Ð5ÓDˆð	Ø—{‘{×.Ñ.×5Ñ5Ü"à%ð  3`ñ  aØ#°Ñ7ðô /Ü&7ð 6ó ˆHð ×%Ñ% aÑ(×0Ñ0×8Ñ8×>Ñ>Ó@ˆFØ&,ˆD�N‰N˜7Ñ#ØˆMøÜò 	ÜÐ-¨g¨YÐ6[Ð\]Ð[^Ð_Ô`Üûð	ús   ÂA>D Ä	D1ÄD,Ä,D1c                 ó   — |dk(  r| j                  |«      S |dk(  r| j                  |«      S |dk(  r| j                  |«      S |dk(  r| j                  |«      S |dk(  r| j	                  |«      S |dk(  r| j                  |«      S t        |«      S )u-   ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã�«å¿œã�˜ã�¦ãƒ‡ãƒ¼ã‚¿ã‚’æ•´å½¢r   r   r   r   r   r   )Ú_format_summary_dataÚ_format_usage_overview_dataÚ_format_usage_pattern_dataÚ_format_quality_dataÚ_format_keywords_dataÚ_format_improvement_dataÚstr)r   r'   r(   s      r   r4   zLLMAnalyzer._format_data«   s£   € à�iÒØ×,Ñ,¨TÓ2Ð2ØÐ(Ò(Ø×3Ñ3°DÓ9Ð9Ø˜Ò'Ø×2Ñ2°4Ó8Ð8Ø˜	Ò!Ø×,Ñ,¨TÓ2Ð2Ø˜
Ò"Ø×-Ñ-¨dÓ3Ð3Ø˜Ò%Ø×0Ñ0°Ó6Ð6ä�t“9Ðr   c                 óX  — |j                  di «      }|j                  di «      }dd|j                  dd«      d›d�d	|j                  d
d«      d›�d|j                  dd«      › d�d|j                  dd«      › d�d|j                  dd«      › d�d|j                  dd«      › d�ddd|j                  di «      j                  dd«      d›d�d|j                  di «      j                  dd«      d›d�d|j                  di «      j                  dd«      d›d�g}dj                  |«      S )u0   ã‚µãƒžãƒªãƒ¼ã‚»ã‚¯ã‚·ãƒ§ãƒ³ç”¨ã�®ãƒ‡ãƒ¼ã‚¿æ•´å½¢r   Ú
comparisonu   ã€�ã‚µãƒžãƒªãƒ¼ã€‘õ   ãƒ»ç·�ä¼šè©±æ•°: Útotal_conversationsr   ú,õ   ä»¶u.   ãƒ»ãƒ¦ãƒ‹ãƒ¼ã‚¯IPæ•°ï¼ˆâ‰’ãƒ¦ãƒ¼ã‚¶ãƒ¼æ•°ï¼‰: Ú
unique_ipsu)   ãƒ»ãƒ¦ãƒ¼ã‚¶ãƒ¼ã�‚ã�Ÿã‚Šå¹³å�‡ä¼šè©±æ•°: Úconversations_per_userõ   å›žõ   ãƒ»è‡ªå‹•è§£æ±ºçŽ‡: Úresolution_rateú%u   ãƒ»æœªè§£æ±ºçŽ‡: Úunresolved_rateõ   ãƒ»æº€è¶³åº¦: Úsatisfaction_rateÚ õ   ã€�å‰�æœˆæ¯”è¼ƒã€‘u   ãƒ»ç·�ä¼šè©±æ•°ã�®å¤‰åŒ–: Úchangesú+u    ãƒ»å›žç­”ã�§ã��ã�Ÿæ•°ã�®å¤‰åŒ–: Úanswered_countu)   ãƒ»å›žç­”ã�§ã��ã�ªã�‹ã�£ã�Ÿæ•°ã�®å¤‰åŒ–: Úunanswered_countú
)ÚgetÚjoin)r   r(   r   rK   Úliness        r   rC   z LLMAnalyzer._format_summary_data¼   sb  € à—(‘(˜9 bÓ)ˆØ—X‘X˜l¨BÓ/ˆ
ð !Ø §¡Ð,AÀ1Ó EÀaÐHÈÐLØ<¸W¿[¹[ÈÐWXÓ=YÐZ[Ð<\Ð]Ø7¸¿¹ÐD\Ð^_Ó8`Ð7aÐadÐeØ" 7§;¡;Ð/@À!Ó#DÐ"EÀQÐGØ §¡Ð,=¸qÓ AÐBÀ!ÐDØ˜WŸ[™[Ð)<¸aÓ@ÐAÀÐCØØ Ø(¨¯©¸	À2Ó)F×)JÑ)JÐK`ÐbcÓ)dÐefÐ(gÐghÐiØ.¨z¯~©~¸iÈÓ/L×/PÑ/PÐQaÐcdÓ/eÐfgÐ.hÐhiÐjØ7¸
¿¹ÀyÐRTÓ8U×8YÑ8YÐZlÐnoÓ8pÐqrÐ7sÐstÐuð
ˆð �y‰y˜ÓÐr   c                 ó\  — |j                  dg «      }|j                  di «      }|rLt        |«      }|rt        |d„ ¬«      ni }|rt        |d„ ¬«      ni }|dkD  rt	        d„ |D «       «      |z  nd}nd}i }i }d}|j                  di «      }|j                  d	i «      }	|j                  d
i «      }
dd|› d�d|d›d�d|j                  dd«      › d|j                  dd«      › d�d|j                  dd«      › d|j                  dd«      › d�ddd|	j                  dd«      › d|j                  dd«      › d|
j                  dd«      d›d�d|	j                  d d«      › d|j                  d d«      › d�d!|	j                  d"d«      › d|j                  d"d«      › d�g
}d#j                  |«      S )$u6   åˆ©ç”¨çŠ¶æ³�æ¦‚è¦�ã‚»ã‚¯ã‚·ãƒ§ãƒ³ç”¨ã�®ãƒ‡ãƒ¼ã‚¿æ•´å½¢Údaily_statsrK   c                 ó&   — | j                  dd«      S ©NrM   r   ©r`   ©Úxs    r   ú<lambda>z9LLMAnalyzer._format_usage_overview_data.<locals>.<lambda>Ù   ó   € °Q·U±UÐ;PÐRSÓ5T€ r   ©Úkeyc                 ó&   — | j                  dd«      S rf   rg   rh   s    r   rj   z9LLMAnalyzer._format_usage_overview_data.<locals>.<lambda>Ú   rk   r   r   c              3   ó@   K  — | ]  }|j                  d d«      –— Œ y­w)rM   r   Nrg   )Ú.0Úds     r   ú	<genexpr>z:LLMAnalyzer._format_usage_overview_data.<locals>.<genexpr>Û   s   è ø€ ÒQÀ˜AŸE™EÐ"7¸×;ÑQùs   ‚ÚcurrentÚpreviousr[   u   ã€�æ—¥åˆ¥çµ±è¨ˆã‚µãƒžãƒªãƒ¼ã€‘u   ãƒ»ãƒ‡ãƒ¼ã‚¿æ—¥æ•°: u   æ—¥u!   ãƒ»1æ—¥ã�‚ã�Ÿã‚Šå¹³å�‡ä¼šè©±æ•°: z.1frO   u   ãƒ»æœ€å¤šæ—¥: ÚdateúN/Aú (rM   õ   ä»¶)u   ãƒ»æœ€å°‘æ—¥: rY   rZ   u   ãƒ»ç·�ä¼šè©±æ•°: å‰�æœˆu   ä»¶ â†’ å½“æœˆu   ä»¶ï¼ˆr\   u   %ï¼‰u   ãƒ»å›žç­”ã�§ã��ã�Ÿ: å‰�æœˆr]   u#   ãƒ»å›žç­”ã�§ã��ã�ªã�‹ã�£ã�Ÿ: å‰�æœˆr^   r_   )r`   ÚlenÚmaxÚminÚsumra   )r   r(   rd   rK   Ú
total_daysÚmax_dayÚmin_dayÚ	avg_dailyrs   rt   r[   rb   s               r   rD   z'LLMAnalyzer._format_usage_overview_dataÑ   sQ  € à—h‘h˜}¨bÓ1ˆØ—X‘X˜l¨BÓ/ˆ
ñ Ü˜[Ó)ˆJÙYd”c˜+Ñ+TÕUÐjlˆGÙYd”c˜+Ñ+TÕUÐjlˆGØblÐopÒbpœÑQÀ[ÔQÓQÐT^Ò^Ðvw‰IàˆJØˆGØˆGØˆIð —.‘. ¨BÓ/ˆØ—>‘> *¨bÓ1ˆØ—.‘. ¨BÓ/ˆð -Ø" : ,¨cÐ2Ø/°	¸#¨¸cÐBØ˜WŸ[™[¨°Ó7Ð8¸¸7¿;¹;ÐG\Ð^_Ó;`Ð:aÐaeÐfØ˜WŸ[™[¨°Ó7Ð8¸¸7¿;¹;ÐG\Ð^_Ó;`Ð:aÐaeÐfØØ Ø% h§l¡lÐ3HÈ!Ó&LÐ%MÈ^Ð\c×\gÑ\gÐh}ð  @Aó  ]Bð  \Cð  CIð  JQ÷  JUñ  JUð  Vkð  mnó  Joð  pqð  Irð  rvð  wØ(¨¯©Ð6FÈÓ)JÐ(KÈ>ÐZa×ZeÑZeÐfvÐxyÓZzÐY{Ð{~ÐØ1°(·,±,Ð?QÐSTÓ2UÐ1VÐVdÐel×epÑepð  rDð  FGó  fHð  eIð  ILð  Mð
ˆð �y‰y˜ÓÐr   c                 ó\  — |j                  dg «      }|j                  dg «      }|r|rt        |d„ ¬«      ni }ni }|r|rt        |d„ ¬«      ni }ni }dd|j                  dd	«      › d
|j                  dd«      › d�ddd|j                  dd	«      › d|j                  dd«      › d�g}|rst        |d„ d¬«      dd }|j                  d«       |j                  d«       |D ]:  }|j                  d|j                  dd«      › d|j                  dd«      › d�«       Œ< dj	                  |«      S )u6   åˆ©ç”¨ãƒ‘ã‚¿ãƒ¼ãƒ³ã‚»ã‚¯ã‚·ãƒ§ãƒ³ç”¨ã�®ãƒ‡ãƒ¼ã‚¿æ•´å½¢Úhourly_statsÚday_of_week_statsc                 ó&   — | j                  dd«      S ©NÚcountr   rg   rh   s    r   rj   z8LLMAnalyzer._format_usage_pattern_data.<locals>.<lambda>ü   s   € ¸¿¹¸gÀqÓ8I€ r   rl   c                 ó&   — | j                  dd«      S r…   rg   rh   s    r   rj   z8LLMAnalyzer._format_usage_pattern_data.<locals>.<lambda>  s   € °A·E±E¸'À1Ó4E€ r   u   ã€�æ™‚é–“å¸¯åˆ¥å‚¾å�‘ã€‘u   ãƒ»ãƒ”ãƒ¼ã‚¯æ™‚é–“å¸¯: Úhourrv   u   æ™‚å�° (r†   r   rx   rY   u   ã€�æ›œæ—¥åˆ¥å‚¾å�‘ã€‘u    ãƒ»æœ€ã‚‚åˆ©ç”¨ã�Œå¤šã�„æ›œæ—¥: Úday_namerw   c                 ó&   — | j                  dd«      S r…   rg   rh   s    r   rj   z8LLMAnalyzer._format_usage_pattern_data.<locals>.<lambda>  s   € ¸q¿u¹uÀWÈaÓ?P€ r   T©rm   ÚreverseNé   u   ã€�æ™‚é–“å¸¯åˆ¥ä¸Šä½�5ã€‘õ   ãƒ»u   æ™‚å�°: rO   r_   )r`   rz   ÚsortedÚappendra   )	r   r(   r‚   Ú	dow_statsÚ	peak_hourÚpeak_dowrb   Úsorted_hourlyÚhs	            r   rE   z&LLMAnalyzer._format_usage_pattern_dataõ   sV  € à—x‘x °Ó3ˆØ—H‘HÐ0°"Ó5ˆ	ñ ÙNZœ˜LÑ.IÕJÐ`b‰IàˆIñ ÙJS”s˜9Ñ*EÕFÐY[‰HàˆHð 'Ø% i§m¡m°F¸EÓ&BÐ%CÀ8ÈIÏMÉMÐZaÐcdÓLeÐKfÐfjÐkØØ#Ø.¨x¯|©|¸JÈÓ/NÐ.OÈrÐRZ×R^ÑR^Ð_fÐhiÓRjÐQkÐkoÐpð
ˆñ Ü" <Ñ5PÐZ^Ô_Ð`bÐabÐcˆMØ�L‰L˜ÔØ�L‰LÐ4Ô5Ø"ò U�Ø—‘˜s 1§5¡5¨°Ó#3Ð"4°H¸Q¿U¹UÀ7ÈAÓ=NÐ<OÈsÐSÕTðUð �y‰y˜ÓÐr   c                 óä  — |j                  di «      }|j                  dg «      }|j                  dd«      }|j                  dd«      }|j                  dd«      }dd|d	›d
�d|j                  dd«      d	›d
�d|j                  dd«      d	›d
�d|j                  dd«      › d�ddd|› d|› d�d|› d�d|j                  dd«      d	›d
�d|j                  dd«      d	›d
�d|j                  dd«      › d�g}|rj|j                  d«       |j                  d«       |d d! D ]@  }|j                  d"d«      }	|	sŒ|j                  d#|	d d$ › t        |	«      d$kD  rd%nd› �«       ŒB d&j                  |«      S )'u0   å›žç­”å“�è³ªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç”¨ã�®ãƒ‡ãƒ¼ã‚¿æ•´å½¢r   Úrecent_dislikedrM   r   Útotal_feedbacksÚfeedback_rateu   ã€�å›žç­”å“�è³ªæŒ‡æ¨™ã€‘rL   rN   rO   u   ãƒ»å›žç­”ã�§ã��ã�Ÿ: r]   u   ãƒ»å›žç­”ã�§ã��ã�ªã�‹ã�£ã�Ÿ: r^   rS   rT   rU   rY   u!   ã€�ãƒ•ã‚£ãƒ¼ãƒ‰ãƒ�ãƒƒã‚¯æŒ‡æ¨™ã€‘u   ãƒ»ãƒ•ã‚£ãƒ¼ãƒ‰ãƒ�ãƒƒã‚¯æ•°: u   ä»¶ / u   ä¼šè©±u   ãƒ»ãƒ•ã‚£ãƒ¼ãƒ‰ãƒ�ãƒƒã‚¯çŽ‡: u   ãƒ»ã�„ã�„ã�­: Úlikes_countu   ãƒ»ã‚ˆã��ã�ªã�„: Údislikes_countrW   rX   u*   %ï¼ˆã�„ã�„ã�­Ã·ãƒ•ã‚£ãƒ¼ãƒ‰ãƒ�ãƒƒã‚¯æ•°ï¼‰u-   ã€�ä½Žè©•ä¾¡ã‚’å�—ã�‘ã�Ÿè³ªå•�ã‚µãƒ³ãƒ—ãƒ«ã€‘Nr�   ÚquestionrŽ   é2   ú...r_   )r`   r�   ry   ra   )
r   r(   r   r—   rM   r˜   r™   rb   rq   Úqs
             r   rF   z LLMAnalyzer._format_quality_data  s½  € à—(‘(˜9 bÓ)ˆØŸ(™(Ð#4°bÓ9ˆà%Ÿk™kÐ*?ÀÓCÐØ!Ÿ+™+Ð&7¸Ó;ˆØŸ™ O°QÓ7ˆð 'ØÐ 3°AÐ6°cÐ:Ø" 7§;¡;Ð/?ÀÓ#CÀAÐ"FÀcÐJØ+¨G¯K©KÐ8JÈAÓ,NÈqÐ+QÐQTÐUØ" 7§;¡;Ð/@À!Ó#DÐ"EÀQÐGØØ/Ø+¨OÐ+<¸FÐCVÐBWÐW]Ð^Ø+¨M¨?¸!Ð<Ø˜WŸ[™[¨¸Ó:¸1Ð=¸SÐAØ §¡Ð,<¸aÓ @ÀÐCÀ3ÐGØ˜WŸ[™[Ð)<¸aÓ@ÐAÐAkÐlð
ˆñ  Ø�L‰L˜ÔØ�L‰LÐHÔIØ$ R aÐ(ò O�Ø—E‘E˜* bÓ)�ÚØ—L‘L 3 q¨¨" v h¼¸A»Àº©uÈÐ.LÐ!MÕNðOð
 �y‰y˜ÓÐr   c           
      óz  — |j                  dg «      }|j                  dg «      }dg}|dd D ]i  }t        |t        «      r|j                  d|d   › d|d	   › d
�«       Œ2|j                  d|j                  dd«      › d|j                  dd«      › d
�«       Œk |j                  d«       |j                  d«       |dd D ]i  }t        |t        «      r|j                  d|d   › d|d	   › d
�«       Œ2|j                  d|j                  dd«      › d|j                  dd«      › d
�«       Œk dj	                  |«      S )u9   ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰åˆ†æž�ã‚»ã‚¯ã‚·ãƒ§ãƒ³ç”¨ã�®ãƒ‡ãƒ¼ã‚¿æ•´å½¢r   Úunresolved_keywordsu#   ã€�é »å‡ºã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ä¸Šä½�10ã€‘Né
   rŽ   r   z: é   rR   ÚkeywordrY   r†   u/   ã€�æœªè§£æ±ºã�«å¤šã�„ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ä¸Šä½�10ã€‘r_   )r`   Ú
isinstanceÚtupler�   ra   )r   r(   r   r¡   rb   Úkws         r   rG   z!LLMAnalyzer._format_keywords_data;  sG  € à—8‘8˜J¨Ó+ˆØ"Ÿh™hÐ'<¸bÓAÐà6Ð7ˆØ˜3˜B�-ò 	UˆBä˜"œeÔ$Ø—‘˜s 2 a¡5 '¨¨B¨q©E¨7°#Ð6Õ7à—‘˜s 2§6¡6¨)°RÓ#8Ð"9¸¸B¿F¹FÀ7ÈAÓ<NÐ;OÈsÐSÕTð	Uð 	�‰�RÔØ�‰ÐFÔGØ% c rÐ*ò 	UˆBÜ˜"œeÔ$Ø—‘˜s 2 a¡5 '¨¨B¨q©E¨7°#Ð6Õ7à—‘˜s 2§6¡6¨)°RÓ#8Ð"9¸¸B¿F¹FÀ7ÈAÓ<NÐ;OÈsÐSÕTð		Uð �y‰y˜ÓÐr   c           
      ó   — |j                  dg «      }i }|D ].  }|j                  dd«      }|sŒ||vrd||<   Œ"||xx   dz  cc<   Œ0 t        |j                  «       d„ d¬«      }dd	t        |«      › d
�dt        |«      › d
�ddg}|dd D ]1  \  }}|j	                  d|› d|dd › t        |«      dkD  rdnd› �«       Œ3 dj                  |«      S )u0   æ”¹å–„æ��æ¡ˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ç”¨ã�®ãƒ‡ãƒ¼ã‚¿æ•´å½¢Úunanswered_questionsÚuser_messagerY   r£   c                 ó   — | d   S )Nr£   © rh   s    r   rj   z6LLMAnalyzer._format_improvement_data.<locals>.<lambda>`  s
   € È!ÈAÉ$€ r   Tr‹   u$   ã€�å›žç­”ã�§ã��ã�ªã�‹ã�£ã�Ÿè³ªå•�ã€‘u   ãƒ»ç·�æ•°: rO   u   ãƒ»ãƒ¦ãƒ‹ãƒ¼ã‚¯æ•°: u)   ã€�é »å‡ºã�™ã‚‹æœªå›žç­”è³ªå•�ä¸Šä½�10ã€‘Nr¢   u   ãƒ»(u   å›ž) é<   rž   r_   )r`   r�   Úitemsry   r�   ra   )	r   r(   Ú
unansweredÚunique_questionsrŸ   rœ   Úsorted_questionsrb   r†   s	            r   rH   z$LLMAnalyzer._format_improvement_dataR  s  € à—X‘XÐ4°bÓ9ˆ
ð ÐØò 	4ˆAØ—u‘u˜^¨RÓ0ˆHÚØÐ#3Ñ3Ø12Ð$ XÒ.à$ XÓ.°!Ñ3Ô.ð	4ô "Ð"2×"8Ñ"8Ó":ÁÐX\Ô]Ðð 3Øœ#˜j›/Ð*¨#Ð.Ø"¤3Ð'7Ó#8Ð"9¸Ð=ØØ7ð
ˆð )¨¨"Ð-ò 	T‰HˆAˆuØ�L‰L˜4 ˜w e¨A¨c¨r¨F¨8¼SÀ»VÀbº[±EÈbÐ3QÐRÕSð	Tð �y‰y˜ÓÐr   c                 óÒ   — | j                   si S i }d|fd|fd|fd|fd|fd|fg}|D ]=  \  }}| j                   s |S t        d|› d�«       | j                  ||«      }|sŒ9|||<   Œ? |S )	uÚ   
        å…¨ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã�®åˆ†æž�ã‚’å®Ÿè¡Œ

        Args:
            data: ãƒ¬ãƒ�ãƒ¼ãƒˆå…¨ä½“ã�®ãƒ‡ãƒ¼ã‚¿

        Returns:
            ã‚»ã‚¯ã‚·ãƒ§ãƒ³å��ã‚’ã‚­ãƒ¼ã€�åˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆã‚’å€¤ã�¨ã�™ã‚‹è¾žæ›¸
        r   r   r   r   r   r   u     LLMåˆ†æž�ä¸­: rž   )r   r#   rA   )r   r(   ÚresultsÚsectionsr'   Úsection_datar@   s          r   Úanalyze_allzLLMAnalyzer.analyze_allo  s­   € ð �|Š|ØˆIàˆà˜ÐØ˜tÐ$Ø˜dÐ#Ø˜ÐØ˜ÐØ˜DÐ!ð
ˆð &.ò 	*Ñ!ˆG�\à—<’<Øð ˆô Ð$ W I¨SÐ1Ô2Ø×)Ñ)¨'°<Ó@ˆFÚØ#)�˜Ò ð	*ð ˆr   c                 ó8   — | j                   j                  |«      S )uÒ   
        ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã�•ã‚Œã�Ÿåˆ†æž�çµ�æžœã‚’å�–å¾—

        Args:
            section: ã‚»ã‚¯ã‚·ãƒ§ãƒ³å��

        Returns:
            åˆ†æž�ã‚³ãƒ¡ãƒ³ãƒˆï¼ˆã‚­ãƒ£ãƒƒã‚·ãƒ¥ã�Œã�ªã�„å ´å�ˆã�¯Noneï¼‰
        )r   r`   )r   r'   s     r   Úget_analysiszLLMAnalyzer.get_analysis‘  s   € ð �~‰~×!Ñ! 'Ó*Ð*r   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r3   r   r   Úpropertyr   r&   rI   Údictr   rA   r4   rC   rD   rE   rF   rG   rH   r¶   r¸   r¬   r   r   r
   r
      s7  „ Ù:ðIðIðIðIðIðQñi<€Oñ|
 ó 
ð ð6˜ò 6ó ð6òð(/ sð /°$ð /¸8ÀC¹=ó /ðb Cð ¨tð ¸ó ð" ¨ð  °#ó  ð*" °ð " ¸ó " ðH! ¨tð ! ¸ó ! ðF! ¨ð ! °#ó ! ðF ¨$ð  °3ó  ð. ¨Tð  °có  ð:  ð  ¨ó  ðD
+ Cð 
+¨H°S©Mô 
+r   r
   )r¼   ÚosÚsysÚtypingr   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úconfigr   r   r   r   r   r
   r¬   r   r   ú<module>rÈ      sd   ðñó 
Û 
Ý à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°2·7±7·?±?À8Ó3LÓ#MÓNÔ O÷õ ÷H+ò H+r   