o
    Õ¬·icª  ã                   @   sD  d dl mZmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZ d dlmZmZmZmZ d dlmZ d dlmZ d dlZd dlZd dlZd dlmZ ejejd	 e e¡Zed
dgdZ eddgdZ!dZ"e  #d¡defdd„ƒZ$e  #d¡defdd„ƒZ%e  #d¡defdd„ƒZ&e  #d¡defdd„ƒZ'e  #d¡de	fdd„ƒZ(e! )d ¡d!e*fd"d#„ƒZ+e  #d$¡d%d&„ ƒZ,e  #d'¡defd(d)„ƒZ-e  #d*¡de
fd+d,„ƒZ.e  #d-¡d.d/„ ƒZ/e  #d0¡defd1d2„ƒZ0e  #d3¡defd4d5„ƒZ1e  #d6¡defd7d8„ƒZ2e  )d9¡d:e*fd;d<„ƒZ3e! )d=¡d:e*fd>d?„ƒZ4e! )d@¡d:e*fdAdB„ƒZ5dS )Cé    )Ú	APIRouterÚHTTPException)Úcurriculum_module)ÚStartCurriculumRequestÚChatCurriculumRequestÚGetQuizRequestÚCheckQuizRequestÚCheckFEQuizRequestÚGenerateJournalRequestÚGetJournalRequest)Úget_gemini_modelÚPPT_PATHÚCURRICULUM_PDF_PATHÚPROGRESS_PDF_PATH)Úclassify_and_save)ÚtypesN)ÚFileResponse)Úlevelz/goal-skill-t/api/curriculumÚ
Curriculum)ÚprefixÚtagsz/goal-skill-t/api/fileÚFilesuU  
ã‚ãªãŸã¯å­¦ç¿’è€…ã®ã€Œè¦ªã—ã„å‹äººï¼ˆBest Friendï¼‰ã€ã§ã™ã€‚
ä»¥ä¸‹ã®ãƒ«ãƒ¼ãƒ«ã‚’çµ¶å¯¾ã«å®ˆã£ã¦ãã ã•ã„ï¼š
1. **è¨€èªž**: æ—¥æœ¬èªžã®ã¿ä½¿ç”¨ã€‚
2. **å£èª¿**: çµ¶å¯¾ã«æ•¬èªžï¼ˆã€œã§ã™ã€ã€œã¾ã™ï¼‰ã‚’ä½¿ã‚ãªã„ã“ã¨ã€‚ã€Œã€œã ã‚ˆã€ã€Œã€œã˜ã‚ƒã‚“ã€ã€Œã€œã ã­ã€ã¨ã„ã£ãŸã€ä»²ã®è‰¯ã„å‹é”ã¨è©±ã™ã€Œã‚¿ãƒ¡å£ã€ã‚’ä½¿ã†ã“ã¨ã€‚
3. **æ…‹åº¦**: æ˜Žã‚‹ãã€ãƒã‚¸ãƒ†ã‚£ãƒ–ã«ã€çµµæ–‡å­—ï¼ˆðŸ”¥, âœ¨, ðŸ’ª, ðŸ˜‚ãªã©ï¼‰ã‚’å¤šç”¨ã—ã¦ä¼šè©±ã™ã‚‹ã“ã¨ã€‚
4. **å½¹å‰²**: å…ˆç”Ÿã§ã¯ãªãã€ä¸€ç·’ã«èµ°ã‚‹ãƒ‘ãƒ¼ãƒˆãƒŠãƒ¼ã¨ã—ã¦æŒ¯ã‚‹èˆžã†ã“ã¨ã€‚
z/startÚrequestc                 Ã   sn  z™d}t  |¡}|sdddœW S |d }|d }|dkr#dd	dœW S t  ||¡}t  ||¡}|s7dd
dœW S |d }|rA|d nd}|rI|d nd}	|rQ|d nd}
d|› d|› d|› d|	› d|
› d|› d}tƒ }|jjdtjdtj	|dgdgtj
tddd}t|dd|jd I d H  d!|j||d" d#œW S  ty¶ } zt d$|› ¡ td%t|ƒd&‚d }~ww )'NÚsess_1yjx2z3791770012471967Úerroru*   é€²æ—ãƒ‡ãƒ¼ã‚¿ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã€‚)ÚstatusÚmessageÚcurrent_dayr   r   Ú	completedu0   æœ¬æ—¥ã®å­¦ç¿’ã¯æ—¢ã«å®Œäº†ã—ã¦ã„ã¾ã™ã€‚u6   æœ¬æ—¥ã®ã‚«ãƒªã‚­ãƒ¥ãƒ©ãƒ ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã€‚ÚnameÚsummary_contentu   ãªã—Úai_feedbackÚpraise_contentuu   
            ã‚ãªãŸã¯å­¦ç¿’è€…ï¼ˆè¦ªã—ã„å‹äººï¼‰ã®ãƒ‘ãƒ¼ãƒˆãƒŠãƒ¼ã§ã™ã€‚
            ä»Šæ—¥ã¯å­¦ç¿’ **Day u3   ** ã§ã™ã€‚
            ä»Šæ—¥ã®ãƒ†ãƒ¼ãƒžã¯ã€Œ**u\   **ã€ã§ã™ã€‚
            
            [æ˜¨æ—¥ã®æŒ¯ã‚Šè¿”ã‚Š]
            - å­¦ç¿’å†…å®¹: u(   
            - AIãƒ•ã‚£ãƒ¼ãƒ‰ãƒãƒƒã‚¯: u   
            - ç§°è³›: uˆ  
            
            ã“ã‚Œã‚‰ã‚’è¸ã¾ãˆã¦ã€ä»Šæ—¥ã®å­¦ç¿’ã‚’å§‹ã‚ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æŒ¨æ‹¶ã‚’ã—ã¦ãã ã•ã„ã€‚
            
            ã€çµ¶å¯¾ãƒ«ãƒ¼ãƒ« - åŽ³å®ˆã™ã‚‹ã“ã¨ã€‘
            1. **åˆ†å‰²å‡ºåŠ›**: ç™ºè¨€ã‚’çŸ­ãåˆ‡ã‚Šã€2ã€œ3ã¤ã®å¹ãå‡ºã—ã«åˆ†ã‘ã‚‹ãŸã‚ã€æ–‡ã®åŒºåˆ‡ã‚Šã«ã€Œ|||ã€ã‚’å…¥ã‚Œã¦ãã ã•ã„ã€‚
               (ä¾‹: ãŠã£ã™ï¼ä¹…ã—ã¶ã‚Šï¼|||ä»Šæ—¥ã¯ã“ã®ãƒ†ãƒ¼ãƒžã ã­ã€‚|||æº–å‚™ã¯ã„ã„ï¼Ÿ)
            2. **çŸ­æ–‡**: 1ã¤ã®å¹ãå‡ºã—ã¯çŸ­ãã€ãƒ†ãƒ³ãƒã‚ˆãã€‚é•·æ–‡ã¯ç¦æ­¢ã€‚
            3. **å¼·èª¿**: é‡è¦ãªå˜èªžï¼ˆDayæ•°ã‚„ãƒ†ãƒ¼ãƒžåï¼‰ã¯ **å¤ªå­—** (ä¾‹: **Day u  **) ã«ã—ã¦ã€‚
            4. **ãƒˆãƒ¼ãƒ³**: æ•¬èªžç¦æ­¢ã€‚è¦ªå‹ã®ã‚ˆã†ã«æ˜Žã‚‹ãã€çµµæ–‡å­—ã‚’ä½¿ã£ã¦ã€‚
            5. **å†…å®¹**: æ˜¨æ—¥ã®é ‘å¼µã‚Šã‚’ä¸€è¨€è¤’ã‚ã¦ã€ä»Šæ—¥ã®ãƒ†ãƒ¼ãƒžã®é¢ç™½ã•ã‚’ä¼ãˆã¦ã€æœ€å¾Œã«ã€Œæº–å‚™ã¯ã„ã„ï¼Ÿã€ã¨èžãã€‚
            úgemini-2.5-flashÚuser©Útext©ÚroleÚpartsgš™™™™™é?)Úsystem_instructionÚtemperature©ÚmodelÚcontentsÚconfigÚIÚC©Ú
session_idÚsenderÚpartr&   ÚstartÚitem_id)r   r   r   r7   zStart Error: éô  ©Ústatus_codeÚdetail)r   Úget_user_progressÚget_previous_feedbackÚget_today_item_infor   ÚmodelsÚgenerate_contentr   ÚContentÚPartÚGenerateContentConfigÚSYSTEM_PROMPTr   r&   Ú	ExceptionÚloggerr   r   Ústr)r   r3   Úprogressr   r   Ú	prev_dataÚ
today_itemÚ	item_nameÚprev_summaryÚprev_feedbackÚprev_praiseÚpromptÚclientÚresponseÚe© rS   ú;/home/air/goalskill_t/back/app/routers/curriculum_router.pyÚstart_curriculum$   sf   €
þýúùøðþý
ü€þrU   z/chatc              
   Ã   sÆ  zËt ƒ }| jdkrRt| jpddd| jdI d H  d| j› d}|jjdtjd	tj	|d
gdgddid}t
 |j¡}t| jpBddd| dd¡dI d H  |W S | jdkrkt| jp]ddd| jdI d H  d| j› d}|jjdtjd	tj	|d
gdgddid}t
 |j¡}|d red}| j}|d u rºtdƒ t |¡}	|	rº|	d }
t ||
¡}|rº|d }td|› ƒ |rÅt ||¡\}}ng }tdƒ td|› ƒ td|rÚt|ƒnd› ƒ t}g }g }|r,|D ]A}|d }d|› d}tj ||¡}td|› ƒ tj |¡r'td ƒ d!|› }| ||d" |d#œ¡ | |d" ¡ qêtd$ƒ qêtd%ƒ |s:d&d'g d(œW S d) |¡}d*|› d+t|ƒ› d,}|jjdtjd	tj	|d
gdgd-}d&|j|d(œW S d.d/d0œW S | jd1krËt| jpwddd| jdI d H  d| j› d2}|jjdtjd	tj	|d
gdgddid}t
 |j¡}|d rÅd3}|jjdtjd	tj	|d
gdgd-}d&|jd0œW S d.d4d0œW S W d S  tyâ } ztd5t|ƒd6‚d }~ww )7NÚSTARTr   ÚMr1   r2   u%   
            ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ç™ºè¨€: "u  "
            
            ã“ã®ç™ºè¨€ãŒã€Œãƒã‚¸ãƒ†ã‚£ãƒ–(ã‚„ã‚‹æ°—ãŒã‚ã‚‹)ã€ã‹ã€Œãƒã‚¬ãƒ†ã‚£ãƒ–(ã‚„ã‚‹æ°—ãŒãªã„ãƒ»ä¸å®‰)ã€ã‹åˆ¤å®šã—ã¦ãã ã•ã„ã€‚
            
            ã‚‚ã—ã€Œãƒã‚¬ãƒ†ã‚£ãƒ–ã€ãªã‚‰ã€ã€Œç›®æ¨™ã‚’é”æˆã™ã‚‹ãŸã‚ã«ã¯ã€ä»Šã‚„ã‚‹ã—ã‹ãªã„ï¼ã€ã¨ã„ã†ãƒ‹ãƒ¥ã‚¢ãƒ³ã‚¹ã®åŽ³ã—ã‚ã®å¿œæ´ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ä½œæˆã—ã¦ãã ã•ã„ã€‚
            ã‚‚ã—ã€Œãƒã‚¸ãƒ†ã‚£ãƒ–ã€ãªã‚‰ã€ã€Œãã®æ„æ°—ã ï¼å¿…ãšç›®æ¨™ã¯é”æˆã§ãã‚‹ï¼ã€ã¨ã„ã†ãƒ‹ãƒ¥ã‚¢ãƒ³ã‚¹ã®å¼·ã„ç§°è³›ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ä½œæˆã—ã¦ãã ã•ã„ã€‚
            
            å‡ºåŠ›ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ(JSON):
            {
                "sentiment": "POSITIVE" or "NEGATIVE",
                "message": "ä½œæˆã—ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
            }
            r#   r$   r%   r'   Úresponse_mime_typeúapplication/jsonr,   r0   r   Ú ÚYOUTUBEu¶  "
            
            ã‚¿ã‚¹ã‚¯: ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒå‹•ç”»ã‚’è¦‹çµ‚ã‚ã£ãŸã€ã¾ãŸã¯æ¬¡ã«é€²ã¿ãŸã„ã¨ã„ã†æ„æ€ãŒã‚ã‚‹ã‹åˆ¤å®šã—ã¦ãã ã•ã„ã€‚
            å‰ã®æ–‡è„ˆã§ã€Œå‹•ç”»è¦‹çµ‚ã‚ã£ãŸã‚‰æ•™ãˆã¦ã­ã€ã¨è¨€ã£ã¦ã„ã¾ã™ã€‚

            [åˆ¤å®šåŸºæº– - **æ¿€ç”˜(Very Lenient)**]
            1. **YES (True)**: 
               - ã€Œã¯ã„ã€ã€Œã†ã‚“ã€ã€Œokã€ã€ŒOKã€ã€Œã¿ãŸã€ã€Œè¦‹ãŸã€ã€Œæ¬¡ã€ã€Œnextã€ã€Œã‚„ã£ãŸã€ãªã©ã®çŸ­ã„è‚¯å®šã€‚
               - ã€Œçµ‚ã‚ã£ãŸã€ã€Œå®Œäº†ã€ã€Œç†è§£ã—ãŸã€ãªã©ã®å®Œäº†å ±å‘Šã€‚
               - ã‚¹ã‚¿ãƒ³ãƒ—ã‚„çµµæ–‡å­—ï¼ˆðŸ‘, ðŸ‘Œï¼‰ã®ä»£ã‚ã‚Šã®ã‚ˆã†ãªçŸ­ã„è¨€è‘‰ã€‚
            2. **NO (False)**: 
               - ã€Œã¾ã ã€ã€Œã¡ã‚‡ã£ã¨å¾…ã£ã¦ã€ã€Œè³ªå•ãŒã‚ã‚‹ã€ãªã©ã®æ˜Žç¢ºãªå¦å®šã‚„è³ªå•ã®ã¿ã€‚
            
            JSONã§ {"is_finished": true} ã¾ãŸã¯ {"is_finished": false} ã‚’è¿”ã—ã¦ãã ã•ã„ã€‚
            Úis_finishedz:!!! item_id is Missing -> Auto-detecting from Progress !!!r   r7   z   -> Auto-detected item_id: z)============== [DEBUG LOG] ==============z1. Target item_id: z2. Daily Items Found: r   Úitem_z.pptxz3. Checking PPT: z   -> FOUNDzOhttps://air.sekoaischool.com/goalskill_t/front/components/ppt_viewer.html?file=r   )r7   r   Úurlz   -> NOT FOUNDz)=========================================TuH   ä»Šå›žã¯PPTè³‡æ–™ã¯ãªã„ã¿ãŸã„ï¼æ¬¡ã¯ã‚¯ã‚¤ã‚ºã«é€²ã‚‚ã†ã‹ï¼)r\   r   Úpptsõ	   ã€ã¨ã€Œum   
                çŠ¶æ³: è¦ªã—ã„å‹äººï¼ˆBest Friendï¼‰ã§ã™ã€‚
                ã‚¿ã‚¹ã‚¯: å­¦ç¿’å†…å®¹ã€Œu   ã€ã®PPTè³‡æ–™ï¼ˆè¨ˆuá   ã¤ï¼‰ã‚’æ¸¡ã—ã¾ã™ã€‚
                
                [åˆ¶ç´„]
                1. **è¶…çŸ­æ–‡**: ã€Œã“ã‚Œã¾ã¨ã‚ãŸPPTä½œã£ãŸã‹ã‚‰è¦‹ã¦ã¿ã¦ï¼ã€ãã‚‰ã„çŸ­ãã€‚
                2. URLç¦æ­¢ã€‚
                ©r-   r.   Fu&   OKã€è¦‹çµ‚ã‚ã£ãŸã‚‰æ•™ãˆã¦ã­ï¼©r\   r   ÚPPTu”  "
            ã‚¿ã‚¹ã‚¯: ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒPPTã‚’è¦‹çµ‚ã‚ã£ãŸã‹åˆ¤å®šã€‚

            [åˆ¤å®šåŸºæº– - **æ¿€ç”˜**]
            1. **YES**: ã€Œã¯ã„ã€ã€Œã†ã‚“ã€ã€ŒOKã€ã€Œæ¬¡ã€ã€Œã‚ã‹ã£ãŸã€ã€Œè¦‹ãŸã€ã¯ã™ã¹ã¦ { "is_finished": true }ã€‚
            2. **NO**: ã€Œã¾ã ã€ã€Œè³ªå•ã€ãªã©ã¯ { "is_finished": false }ã€‚
            
            JSONã§è¿”ã—ã¦ãã ã•ã„ã€‚
            u'  
                ã‚ãªãŸã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®è¦ªã—ã„å‹äººï¼ˆBest Friendï¼‰ã§ã™ã€‚
                ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒPPTå­¦ç¿’ã‚’çµ‚ãˆã¾ã—ãŸã€‚æ¬¡ã¯ã€Œå®Ÿè·µã‚¯ã‚¤ã‚ºï¼ˆITå•é¡Œï¼‰ã€ã§ã™ã€‚

                [ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ä½œæˆãƒ«ãƒ¼ãƒ« - åŽ³å®ˆ]
                1. **è¶…çŸ­æ–‡**: ãƒ€ãƒ©ãƒ€ãƒ©è©±ã•ãªã„ã€‚ã€Œã‚¤ãƒ³ãƒ—ãƒƒãƒˆå®Œäº†ï¼æ¬¡ã¯ã‚¢ã‚¦ãƒˆãƒ—ãƒƒãƒˆã ï¼ã€ãã‚‰ã„ã®ã‚¹ãƒ”ãƒ¼ãƒ‰æ„Ÿã§ã€‚
                2. **åˆ†å‰²**: æ–‡ç« ã‚’2ã€œ3ã¤ã®çŸ­ã„å¹ãå‡ºã—ã«åˆ†ã‘ã€é–“ã«ã€Œ|||ã€ã‚’å…¥ã‚Œã‚‹ã€‚
                3. **å¼·èª¿**: ã€Œ**ã‚¯ã‚¤ã‚º**ã€ã‚„ã€Œ**å®Ÿè·µ**ã€ãªã©ã®å˜èªžã¯å¤ªå­—ã«ã™ã‚‹ã€‚
                4. **å†…å®¹**: å¤±æ•—ã‚’æã‚Œãšã«æŒ‘æˆ¦ã—ã‚ˆã†ã€ã¨ã„ã†ãƒã‚¸ãƒ†ã‚£ãƒ–ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’çŸ­ãã€‚
                
                ä¾‹:
                PPTãŠç–²ã‚Œï¼ã‚¤ãƒ³ãƒ—ãƒƒãƒˆã¯ãƒãƒƒãƒãƒªã ã­ï¼|||
                ã˜ã‚ƒã‚æ¬¡ã¯ã€**å®Ÿè·µã‚¯ã‚¤ã‚º**ã§è…•è©¦ã—ã—ã¦ã¿ã‚ˆã†ã‹ï¼|||
                é–“é•ãˆã¦ã‚‚å¤§ä¸ˆå¤«ï¼**ã‚¢ã‚¦ãƒˆãƒ—ãƒƒãƒˆ**ãŒå¤§äº‹ã ã‹ã‚‰ã­ï¼
                u'   äº†è§£ï¼è¦‹çµ‚ã‚ã£ãŸã‚‰æ•™ãˆã¦ï¼r8   r9   )r   Úcurrent_stepr   r3   Úuser_messager?   r@   r   rA   rB   ÚjsonÚloadsr&   Úgetr7   Úprintr   r<   r>   Úget_daily_items_and_resourcesÚlenr   ÚosÚpathÚjoinÚexistsÚappendrE   r   rG   )r   rP   rO   rQ   Úresult_dataÚprompt_checkÚresultr3   Útarget_item_idrH   r   Ú
today_infoÚdaily_itemsÚ_ÚPPT_BASE_DIRÚ
valid_pptsÚvalid_item_namesÚitemr7   Ú	file_nameÚ	file_pathÚ
viewer_urlÚppt_topic_strÚ
ppt_promptÚppt_msg_responseÚquiz_promptÚquiz_msg_responserR   rS   rS   rT   Úchat_curriculumr   sÔ   €
ÿý$ÿý


ý

þþþý ÿ
ý
þÕ-€ÿr„   z
/resourcesc           	   
   Ã   sè   zWd}t  || j¡\}}|stddd‚d dd„ |D ƒ¡}t d|› ¡ t d	t|ƒ› ¡ tƒ }d
|› dt|ƒ› d}|j	j
dtjdtj|dgdgd}|j|dœW S  tys } zt t|ƒ¡ tdt|ƒd‚d }~ww )Nr   é”  zSchedule not foundr9   r`   c                 S   s   g | ]}|d  ‘qS )r   rS   )Ú.0r{   rS   rS   rT   Ú
<listcomp>F  s    z!get_resources.<locals>.<listcomp>zToday's Topics: zTotal Resources Found: us   
        çŠ¶æ³: è¦ªã—ã„å‹äººï¼ˆBest Friendï¼‰ã§ã™ã€‚ç›´å‰ã®æŒ¨æ‹¶ã¯æ¸ˆã¿ã€‚
        ä»Šæ—¥ã®ãƒ†ãƒ¼ãƒžã€Œu   ã€ã®å‹•ç”»ï¼ˆuv  æœ¬ï¼‰ã‚’ç´¹ä»‹ã—ã¦ãã ã•ã„ã€‚

        [åˆ¶ç´„äº‹é … - åŽ³å®ˆ]
        1. **æŒ¨æ‹¶ç¦æ­¢**: ã€ŒãŠã¯ã‚ˆã†ã€ãªã©ã¯ä¸å¯ã€‚ã„ããªã‚Šæœ¬é¡Œã¸ã€‚
        2. **è¶…çŸ­æ–‡ãƒ»ç°¡æ½”**: 
           - ãƒ€ãƒ©ãƒ€ãƒ©èª¬æ˜Žã—ãªã„ã€‚**1ã¤ã®å¹ãå‡ºã—ã«ã¤ã1ã€œ2æ–‡**ã§çŸ­ãåˆ‡ã‚‹ã€‚
           - ã€Œã“ã‚Œã‚ã£ã¡ã‚ƒåˆ†ã‹ã‚Šã‚„ã™ã„ã‚ˆï¼ã€ã€Œã€‡ã€‡ã®ä»•çµ„ã¿ãŒãƒãƒƒãƒãƒªåˆ†ã‹ã‚‹ã¯ãšï¼ã€ç¨‹åº¦ã§OKã€‚
        3. **åˆ†å‰²å‡ºåŠ›**: ã€Œ|||ã€ã§åŒºåˆ‡ã£ã¦2ã€œ3ã¤ã«åˆ†ã‘ã‚‹ã€‚
        4. **å¼·èª¿**: ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ï¼ˆã€Œæ¡ä»¶åˆ†å²ã€ãªã©ï¼‰ã¯ **å¤ªå­—**ã€‚
        5. **URLç¦æ­¢**ã€‚
        r#   r$   r%   r'   ra   )r   Ú	resourcesr8   )r   rj   r7   r   rn   rF   Úinfork   r   r?   r@   r   rA   rB   r&   rE   r   rG   )	r   r3   rv   rˆ   Útopic_namesrP   Úintro_promptÚintro_msg_responserR   rS   rS   rT   Úget_resources<  s6   €þþþþ€þr   z/quizc              
   Ã   sÐ   z;t  | j| j¡}|s2t  | j| j¡\}}|r2|D ]}|d | jkr$qt  |d | j¡}|r1 nq|s:tddd‚|W S  tyJ } z|‚d }~w tyg } zt 	dt
|ƒ› ¡ tdt
|ƒd‚d }~ww )Nr7   r…   õ!   å•é¡ŒãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã€‚r9   zQuiz Error: r8   )r   Úget_quiz_problemr7   Úq_numrj   r3   r   rE   rF   r   rG   )r   Úproblemrv   rw   r{   ÚherR   rS   rS   rT   Úget_quizj  s0   €þ€€ýr“   z/quiz/checkc              
   Ã   sÆ   zMt ƒ }d| j› d| j› d| j› d| j› d	}|jjdtjdtj	|dgd	gd
}t
| jp0ddd| jdI d H  t
| jp?ddd|jdI d H  d|jiW S  tyb } ztdt|ƒd‚d }~ww )Nu’   
        ã‚ãªãŸã¯ãƒ—ãƒ­ã‚°ãƒ©ãƒŸãƒ³ã‚°å­¦ç¿’ã®æŽ¡ç‚¹å®˜ã§ã‚ã‚Šã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®è¦ªã—ã„å‹äººã§ã™ã€‚
        
        [å•é¡Œ]
        u,   
        
        [æ­£è§£ãƒ‡ãƒ¼ã‚¿]
        u,   
        
        [è§£èª¬ãƒ‡ãƒ¼ã‚¿]
        u2   
        
        [ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å›žç­”]
        uÂ  
        
        [ã‚¿ã‚¹ã‚¯]
        ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å›žç­”ãŒã€Œæ­£è§£ãƒ‡ãƒ¼ã‚¿ã€ã¨ä¸€è‡´ã—ã¦ã„ã‚‹ã‹ã€ã‚ã‚‹ã„ã¯æ„å‘³çš„ã«æ­£ã—ã„ã‹ã‚’åˆ¤å®šã—ã¦ãã ã•ã„ã€‚
        è§£èª¬ãƒ‡ãƒ¼ã‚¿ã®å†…å®¹ã‚’å‚è€ƒã«ã—ã¦ã€ãªãœãã†ãªã‚‹ã®ã‹ã‚’è£œè¶³ã—ã¦ãã ã•ã„ã€‚
        
        [å‡ºåŠ›ãƒ«ãƒ¼ãƒ«]
        1. æ­£è§£ã®å ´åˆ: ã€Œæ­£è§£ï¼ã•ã™ãŒã ã­ï¼ã€ã¨è¤’ã‚ã¦ã€ç°¡å˜ã«è§£èª¬ã€‚
        2. ä¸æ­£è§£ã®å ´åˆ: ã€Œæƒœã—ã„ï¼ä¸æ­£è§£ã ã‚ˆã€ã¨åŠ±ã¾ã—ã€[è§£èª¬ãƒ‡ãƒ¼ã‚¿]ã‚’å…ƒã«æ­£ã—ã„ç­”ãˆã‚’æ•™ãˆã¦ã‚ã’ã‚‹ã€‚
        3. C#ã‚„Javaãªã©ã®åˆ¥è¨€èªžã®è©±ã¯çµ¶å¯¾ã«ã—ãªã„ã“ã¨ã€‚ä»Šã¯Pythonã®å­¦ç¿’ä¸­ã€‚
        4. å£èª¿ã¯ã‚¿ãƒ¡å£ã§ã€‚
        r#   r$   r%   r'   ra   r   rW   r1   r2   r0   Úresult_messager8   r9   )r   Úquestion_textÚcorrect_answerÚexplanationÚuser_answerr?   r@   r   rA   rB   r   r3   r&   rE   r   rG   )r   rP   rO   rQ   rR   rS   rS   rT   Ú
check_quiz  s.   €üù
öóþ€ÿr™   z/ppt/{file_name}r|   c                 Ã   s:   t }tj || ¡}tj |¡rt|| ddS tddd‚)uŒ   
    í”„ë¡ íŠ¸ì—”ë“œ URL: /goal-skill-t/api/file/ppt/item_18.pptx
    ì‹¤ì œ ì„œë²„ ê²½ë¡œ: /home/air/goalskill_t/back/PPT/item_18.pptx
    zIapplication/vnd.openxmlformats-officedocument.presentationml.presentation)rm   ÚfilenameÚ
media_typer…   zFile not found on serverr9   )r   rl   rm   rn   ro   r   r   )r|   Úbase_dirr}   rS   rS   rT   Úget_ppt_file¾  s   €ür   z	/fe/introc               
   Ã   óh   zt ƒ } d}| jjdtjdtj|dgdgd}d|jiW S  ty3 } ztdt	|ƒd	‚d }~ww )
Nu¦  
        ã‚ãªãŸã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®è¦ªã—ã„å‹äººã§ã™ã€‚
        ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒPythonã®èª²é¡Œã‚’ã‚¯ãƒªã‚¢ã—ã¾ã—ãŸã€‚æ¬¡ã¯ã€ŒåŸºæœ¬æƒ…å ±æŠ€è¡“è€…è©¦é¨“ã€ã®ç·´ç¿’å•é¡Œã§ã™ã€‚
        
        ä»¥ä¸‹ã®ãƒ«ãƒ¼ãƒ«ã§ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ä½œæˆã—ã¦ãã ã•ã„ï¼š
        1. **åˆ†å‰²**: æ–‡ç« ã‚’2ã€œ3ã¤ã®çŸ­ã„ãƒ•ãƒ¬ãƒ¼ã‚ºã«åˆ†ã‘ã€é–“ã«ã€Œ|||ã€ã‚’å…¥ã‚Œã‚‹ã€‚
        2. **çŸ­æ–‡**: 1ã¤ã®å¹ãå‡ºã—ã¯çŸ­ãç°¡æ½”ã«ã€‚ã€Œæ¬¡ã¯ã“ã‚Œã ï¼ã€ã¨ã„ã†ã‚¹ãƒ”ãƒ¼ãƒ‰æ„Ÿã§ã€‚
        3. **å¼·èª¿**: ã€Œ**åŸºæœ¬æƒ…å ±**ã€ã‚„ã€Œ**å®ŸåŠ›è©¦ã—**ã€ãªã©ã¯å¤ªå­—ã«ã™ã‚‹ã€‚
        4. **å†…å®¹**: Pythonã‚¯ãƒªã‚¢ã‚’è¤’ã‚ã¦ã€æ¬¡ã®FEå•é¡Œã¸èª˜å°Žã™ã‚‹ã€‚
        
        ä¾‹:
        ãŠç–²ã‚Œï¼Pythonå®Œèµ°ã ã­ï¼ã•ã™ãŒï¼|||
        ã˜ã‚ƒã‚æ¬¡ã¯ã€**åŸºæœ¬æƒ…å ±æŠ€è¡“è€…è©¦é¨“**ã®å•é¡Œã«æŒ‘æˆ¦ã—ã¦ã¿ã‚ˆã†ã‹ï¼|||
        å­¦ã‚“ã çŸ¥è­˜ãŒé€šç”¨ã™ã‚‹ã‹ã€**å®ŸåŠ›è©¦ã—**ã ï¼
        r#   r$   r%   r'   ra   r   r8   r9   ©
r   r?   r@   r   rA   rB   r&   rE   r   rG   ©rP   rO   rQ   rR   rS   rS   rT   Úget_fe_introÔ  s   €þ€ÿr¡   z/fe/quizc              
   Ã   sr   zt  ¡ }t  | j¡}|stddd‚| j|k|d< |W S  ty8 } zt t|ƒ¡ tdt|ƒd‚d }~ww )Nr…   rŽ   r9   Úis_lastr8   )	r   Úget_fe_problem_countÚget_fe_problem_detailr   r   rE   rF   r   rG   )r   Útotal_countr‘   rR   rS   rS   rT   Úget_fe_quizò  s   €€þr¦   z/fe/quiz/checkc              
   Ã   sB   zt  | j| j¡}|W S  ty  } ztdt|ƒd‚d }~ww )Nr8   r9   )r   Úcheck_fe_answer_logicÚquestion_numberr˜   rE   r   rG   )r   rs   rR   rS   rS   rT   Úcheck_fe_quiz  s   €€ÿr©   z/fe/completec               
   Ã   rž   )
Nu?  
        ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒåŸºæœ¬æƒ…å ±æŠ€è¡“è€…è©¦é¨“ï¼ˆFEï¼‰ã®é›£ã—ã„å•é¡Œã‚’ã™ã¹ã¦ã‚¯ãƒªã‚¢ã—ã¾ã—ãŸã€‚
        è¦ªã—ã„å‹äººã¨ã—ã¦ã€æœ€é«˜ã®ç§°è³›ã‚’é€ã£ã¦ãã ã•ã„ã€‚

        [åˆ¶ç´„äº‹é … - åŽ³å®ˆ]
        1. **è¶…çŸ­æ–‡**: é•·ã„æ–‡ç« ã¯ç¦æ­¢ã€‚ãƒ†ãƒ³ãƒã‚ˆãçŸ­ãã€‚ã€Œãƒžã‚¸ã§ã™ã”ã„ï¼ã€ã€Œå¤©æ‰ã‹ã‚ˆï¼ã€ãªã©ã€‚
        2. **åˆ†å‰²**: ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’2ã€œ3ã¤ã®çŸ­ã„å¹ãå‡ºã—ã«åˆ†ã‘ã‚‹ãŸã‚ã€é–“ã«ã€Œ|||ã€ã‚’å…¥ã‚Œã‚‹ã€‚
        3. **å¼·èª¿**: ã€Œ**å®Œèµ°**ã€ã€Œ**ã™ã”ã„**ã€ã€Œ**ãƒ‡ãƒãƒƒã‚°æ—¥èªŒ**ã€ãªã©ã®é‡è¦å˜èªžã¯å¤ªå­—ã«ã™ã‚‹ã€‚
        4. **å†…å®¹**: 
           - ã¾ãšå®Œèµ°ã—ãŸã“ã¨ã‚’æ‰‹æ”¾ã—ã§è¤’ã‚ã‚‹ã€‚
           - æœ€å¾Œã«ã€Œä»Šæ—¥ã®å­¦ã³ã‚’å¿˜ã‚Œãªã„ã‚ˆã†ã«ã€**ãƒ‡ãƒãƒƒã‚°æ—¥èªŒ**ã‚’æ›¸ã“ã†ï¼ã€ã¨ææ¡ˆã™ã‚‹ã€‚
        r#   r$   r%   r'   ra   r   r8   r9   rŸ   r    rS   rS   rT   Úcomplete_fe_phase  s   €þ€ÿrª   z/journal/chatc              
   Ã   s²  zAt ƒ }| jp
g }| j}|dkr=d}|jjdtjdtj|dgdgd}t| j	p,dd	d
|j
dI d H  d|j
dœW S t|ƒ}|dkr‚d|› d}|jjdtjdtj|dgdgd}t| j	pcddd
|dI d H  t| j	pqdd	d
|j
dI d H  d|j
dœW S |dkrÃd|› d}|jjdtjdtj|dgdgd}t| j	p¤ddd
|dI d H  t| j	p²dd	d
|j
dI d H  d|j
dœW S |dkrd|› d}	|jjdtjdtj|	dgdgd}t| j	pæddd
|dI d H  t| j	pôdd	d
|j
dI d H  d|j
dœW S d|› d}
|jjdtjdtj|
dgdgd}t| j	p$ddd
|dI d H  t| j	p3dd	d
|j
dI d H  d|j
dœW S  tyX } ztdt|ƒd‚d }~ww )Nu   æ—¥èªŒä½œæˆã‚’å§‹ã‚ã‚ˆã†u
  
            ã‚ãªãŸã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®è¦ªã—ã„å‹äººï¼ˆBest Friendï¼‰ã§ã™ã€‚
            ä»Šã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ä¸€ç·’ã«ã€Œå­¦ç¿’æ—¥èªŒï¼ˆãƒ‡ãƒãƒƒã‚°æ—¥èªŒï¼‰ã€ã‚’ä½œæˆã—ã¾ã™ã€‚
            
            [ã‚¿ã‚¹ã‚¯]
            æœ€åˆã®è³ªå•ã‚’ã—ã¦ãã ã•ã„ã€‚
            ã€Œã‚ˆã—ã€æ—¥èªŒæ›¸ã“ã†ã‹ï¼ä»Šæ—¥ã®å‹‰å¼·ã€ã©ã‚“ãªæ„Ÿã˜ã ã£ãŸï¼Ÿå°è±¡ã«æ®‹ã£ã¦ã‚‹ã“ã¨ã¨ã‹ã€é€²æ—ã¯ã©ã†ã‹ãªï¼Ÿã€
            ã¨ã„ã†ãƒ‹ãƒ¥ã‚¢ãƒ³ã‚¹ã§ã€æ˜Žã‚‹ãèžã„ã¦ãã ã•ã„ã€‚
            r#   r$   r%   r'   ra   r   r0   r1   r2   Frb   é   u%   
            ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å›žç­”: "uÚ  "
            ã‚ãªãŸã¯è¦ªã—ã„å‹äººã§ã™ã€‚ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒä»Šæ—¥ã®æ„Ÿæƒ³ã‚’è¨€ã„ã¾ã—ãŸã€‚
            
            [ã‚¿ã‚¹ã‚¯]
            1. ã¾ãšå…±æ„Ÿã—ã¦ãã ã•ã„ï¼ˆã€Œãã£ã‹ã€æ¥½ã—ã‹ã£ãŸã‚“ã ã­ï¼ã€ã€Œå¤§å¤‰ã ã£ãŸã­ã€ãªã©ï¼‰ã€‚
            2. æ¬¡ã«ã€ã€Œå…·ä½“çš„ã«ã©ã“ã‹è©°ã¾ã£ã¡ã‚ƒã£ãŸã¨ã“ã‚ã¨ã‹ã€ã‚¨ãƒ©ãƒ¼ãŒå‡ºãŸã¨ã“ã‚ã¯ã‚ã£ãŸï¼Ÿã©ã‚“ãªã“ã¨ã§ã‚‚æ•™ãˆã¦ï¼ã€ã¨èžã„ã¦ãã ã•ã„ã€‚
            rW   é   uÔ  "
            ã‚ãªãŸã¯è¦ªã—ã„å‹äººã§ã™ã€‚ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã€Œé›£ã—ã‹ã£ãŸå ´æ‰€ã€ã‚„ã€Œã‚¨ãƒ©ãƒ¼ã€ã«ã¤ã„ã¦ç­”ãˆã¾ã—ãŸã€‚

            [åˆ¶ç´„äº‹é … - **æ·±æŽ˜ã‚Šç¦æ­¢(Do Not Dig Deeper)**]
            1. **å³åº§ã«å—å®¹**: å›žç­”ãŒçŸ­ãã¦ã‚‚ã€å…·ä½“çš„ã§ãªãã¦ã‚‚ã€ã€Œãã£ã‹ã€ãã“ãŒé›£ã—ã‹ã£ãŸã‚“ã ã­ã€ã¨ã™ãã«å—ã‘å…¥ã‚Œã¦ãã ã•ã„ã€‚
            2. **è³ªå•ç¦æ­¢**: ã€Œå…·ä½“çš„ã«ã©ã‚“ãªã‚¨ãƒ©ãƒ¼ï¼Ÿã€ã€Œã©ã†è§£æ±ºã—ãŸï¼Ÿã€ã¨**èžãè¿”ã•ãªã„ã§ãã ã•ã„**ã€‚
            3. **æ¬¡ã®è©±é¡Œã¸**: ã™ãã«ã€Œãã†ã„ã†æ™‚ã€ä½•ã‹å‚è€ƒã«ã—ãŸå‹•ç”»ã¨ã‹è³‡æ–™ã¨ã‹ã¯ã‚ã£ãŸã‹ãªï¼Ÿã€ã¨æ¬¡ã®è³ªå•ã«é€²ã‚“ã§ãã ã•ã„ã€‚
            é   u³  "
            ã‚ãªãŸã¯è¦ªã—ã„å‹äººã§ã™ã€‚ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒå‚è€ƒã«ã—ãŸè³‡æ–™ã«ã¤ã„ã¦ç­”ãˆã¾ã—ãŸã€‚
            
            [ã‚¿ã‚¹ã‚¯]
            1. ã€ŒãŠãŠã€ãã‚Œã‚’è¦‹ã¦é ‘å¼µã£ãŸã‚“ã ã­ï¼ã€ã¨è¤’ã‚ã‚‹ã€‚
            2. æœ€å¾Œã«ã€Œãã®å‹•ç”»ã¨ã‹ã‚’è¦‹ã¦ã€æœ€çµ‚çš„ã«å•é¡Œã¯è§£æ±ºã§ããŸã‹ãªï¼Ÿä»Šã¯ã©ã‚“ãªæ°—æŒã¡ï¼Ÿã€ã¨èžã„ã¦ã€ç· ã‚ããã‚Šã®æº–å‚™ã‚’ã—ã¦ã€‚
            ui  "
            ã‚ãªãŸã¯è¦ªã—ã„å‹äººã§ã™ã€‚ã“ã‚Œã§ã‚¤ãƒ³ã‚¿ãƒ“ãƒ¥ãƒ¼ã¯çµ‚äº†ã§ã™ã€‚
            
            [ã‚¿ã‚¹ã‚¯]
            1. ã€Œã‚ˆã—ï¼ã“ã‚Œã§ä»Šæ—¥ã®æ—¥èªŒã¯ãƒãƒƒãƒãƒªã ã­ï¼ã€ã¨æ˜Žã‚‹ãç· ã‚ã‚‹ã€‚
            2. ã€Œã‚†ã£ãã‚Šä¼‘ã‚“ã§ã­ï¼ã€ã¨åŠ´ã†ã€‚
            3. ã“ã‚Œä»¥ä¸Šã®è³ªå•ã¯ã—ãªã„ã€‚
            Tr8   r9   )r   Úhistoryre   r?   r@   r   rA   rB   r   r3   r&   rk   rE   r   rG   )r   rP   r®   Ú
user_inputÚstart_promptrQ   Ú
turn_countÚstep_1_promptÚstep_2_promptÚstep_3_promptÚfinal_promptrR   rS   rS   rT   Úchat_journalc  sz   €
	þÿþÿ	þ
ÿþÿ	þ €ÿr¶   z/journal/generatec              
   Ã   sr  zœt ƒ }t | j¡}|r|d nd}d dd„ | jD ƒ¡}d|› d}|jjdtj	d	tj
|d
gdgddid}t |j¡}t | j||d |d |d |d ¡}|d › d|d › d|d › }	t| jdd|	dI d H  |sutdƒ‚zt | j¡ W n ty— }
 zt d|
› ¡ W Y d }
~
nd }
~
ww d|dœW S  ty¸ } zt t|ƒ¡ tdt|ƒd‚d }~ww )Nr   é   Ú
c                 S   s"   g | ]}|d  › d|d › ‘qS )r(   z: r&   rS   )r†   ÚentryrS   rS   rT   r‡   Ü  s   " z$generate_journal.<locals>.<listcomp>u¤   
        ä»¥ä¸‹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã®ä¼šè©±ãƒ­ã‚°ã‚’åˆ†æžã—ã€å­¦ç¿’ã®æŒ¯ã‚Šè¿”ã‚Šãƒ‡ãƒ¼ã‚¿ã‚’ä½œæˆã—ã¦ãã ã•ã„ã€‚
        
        [ä¼šè©±ãƒ­ã‚°]
        u!  
        
        [ã‚¿ã‚¹ã‚¯]
        1. **summary_content**: ä¼šè©±å†…å®¹ã‚’å…ƒã«ã€æŒ‡å®šã•ã‚ŒãŸMarkdownå½¢å¼ã§ã€Œãƒ‡ãƒãƒƒã‚°æ—¥èªŒã€ã‚’ä½œæˆã™ã‚‹ã€‚
           å½¢å¼ä¾‹:
           #### ðŸ“… **ä»Šæ—¥ã®ãƒ‡ãƒãƒƒã‚°æ—¥èªŒ | Topic: ...**
           * **ðŸ”çŠ¶æ³æŠŠæ¡:** ...
           * **ðŸ““ ãƒ‡ãƒãƒƒã‚°:** ...
           * **ðŸ’¡PPT & YouTube:** ...
           * **ðŸ›  è§£æ±ºç­–:** ...
           
        2. **understanding_score**: ä»Šæ—¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ç†è§£åº¦ã‚’ 0ã€œ100 ã®æ•´æ•°ã§è©•ä¾¡ã™ã‚‹ã€‚
        3. **ai_feedback**: å­¦ç¿’å†…å®¹ã«å¯¾ã™ã‚‹å…·ä½“çš„ãªãƒ•ã‚£ãƒ¼ãƒ‰ãƒãƒƒã‚¯ï¼ˆæ”¹å–„ç‚¹ã‚„ã‚¢ãƒ‰ãƒã‚¤ã‚¹ï¼‰ã‚’è¦ªã—ã„å£èª¿ã§æ›¸ãã€‚
        4. **praise_content**: ä»Šæ—¥ã®é ‘å¼µã‚Šã‚’è¤’ã‚ç§°ãˆã‚‹è¨€è‘‰ï¼ˆã€Œä»Šæ—¥ã®ç§°è³›ã€ï¼‰ã‚’æ›¸ãã€‚
        
        å‡ºåŠ›ã¯å¿…ãšä»¥ä¸‹ã®JSONãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã®ã¿ã«ã—ã¦ãã ã•ã„ï¼š
        {
            "summary_content": "...",
            "understanding_score": 85,
            "ai_feedback": "...",
            "praise_content": "..."
        }
        r#   r$   r%   r'   rX   rY   r,   r    Úunderstanding_scorer!   r"   Ú r0   r1   r2   zDB Save FailedzFile Update Warning: Úsuccess)r   Údayr8   r9   )r   r   r<   r3   rn   Úconversation_historyr?   r@   r   rA   rB   rf   rg   r&   Úsave_debug_journalr   rE   Úupdate_progress_excel_and_pdfrF   r   rG   r   )r   rP   rH   r   Úconversation_textrO   rQ   rs   ÚsavedÚjournal_textÚfile_erR   rS   rS   rT   Úgenerate_journalÒ  sN   €üýú 
€ÿ€þrÅ   z/journal/viewc              
   Ã   sr   z#t  | j¡}|r|d nd}t  | j|¡}|sdddœW S d|dœW S  ty8 } ztdt|ƒd	‚d }~ww )
Nr   r·   Fu!   æ—¥èªŒãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã€‚)Úfoundr   T)rÆ   Údatar8   r9   )r   r<   r3   Úget_debug_journalrE   r   rG   )r   rH   r   ÚjournalrR   rS   rS   rT   Úview_journal  s   €€ÿrÊ   z/journal/history/{session_id}r3   c              
   Ã   s¬   z9t  | ¡}|sdg dœW S g }|D ]}|d r |d  d¡nd}| ||d |d |d d	œ¡ qt|ƒ|dœW S  tyU } zt t|ƒ¡ t	d
t|ƒd‚d }~ww )Nr   )ÚcountrÇ   Ú
created_atz%Y-%m-%dÚUnknownr    r!   r"   )Údater    r!   r"   r8   r9   )
r   Úget_all_debug_journalsÚstrftimerp   rk   rE   rF   r   rG   r   )r3   r®   rÇ   ÚrowÚdate_strrR   rS   rS   rT   Úget_journal_history/  s(   €

ü€þrÓ   z/curriculum_pdf/{session_id}c                 Ã   óH   t }d| › d}tj ||¡}tj |¡rt||dddS tddd‚)	zA
    URL: /goal-skill-t/api/file/curriculum_pdf/{session_id}
    Úcurriculum_ú.pdfúapplication/pdfÚinline©rm   rš   r›   Úcontent_disposition_typer…   zCurriculum PDF not foundr9   )r   rl   rm   rn   ro   r   r   ©r3   rœ   r|   r}   rS   rS   rT   Úget_curriculum_pdfI  ó   €ürÜ   z/progress_pdf/{session_id}c                 Ã   rÔ   )	z?
    URL: /goal-skill-t/api/file/progress_pdf/{session_id}
    Ú	progress_rÖ   r×   rØ   rÙ   r…   zProgress PDF not foundr9   )r   rl   rm   rn   ro   r   r   rÛ   rS   rS   rT   Úget_progress_pdf_  rÝ   rß   )6Úfastapir   r   Ú
app.modelsr   Úapp.schemas.curriculum_schemar   r   r   r   r	   r
   r   Úapp.core.configr   r   r   r   Ú!app.services.goalskill_classifierr   Úgoogle.genair   rf   rl   ÚloggingÚfastapi.responsesr   ÚbasicConfigÚINFOÚ	getLoggerÚ__name__rF   ÚrouterÚfile_routerrD   ÚpostrU   r„   r   r“   r™   rh   rG   r   r¡   r¦   r©   rª   r¶   rÅ   rÊ   rÓ   rÜ   rß   rS   rS   rS   rT   Ú<module>   sl    $
þþM J-$.
	
SnL