
    Vi$                     B   d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZmZ d dlmZ d d	lZd d	lZd d
lmZ  eddg          Ze                    d          dej        fd            Ze                    d          dej        fd            Zd	S )    )	APIRouterHTTPException)FileResponse)studyplan_schema)studyplan_module)loggerget_gemini_model)classify_and_save)save_chat_logget_chat_logs)typesN)get_summary_data 	StudyPlan)prefixtagsz/startrequestc                    K   	 d}t          j        d| j                    d|iS # t          $ r:}t          j        d|            t          dt          |                    d}~ww xY w)u,   
    학습계획표 시작 (대화형)
    u  ここまで来ましたね😊

これからは一緒に、あなたの目標に向かって進んでいきます🤝

最後まで無理なく続けられるように、まずはペースを一緒に整えていきましょうか？👀

どれくらいの期間で目標を達成したいイメージがありますか？
（※現在は6ヶ月コースのみご用意しております）zStudyPlan Started for session: questionzStudyPlan Start Error:   status_codedetailN)r   info
session_id	Exceptionerrorr   str)r   greetinges      $/app/app/routers/studyplan_router.pystart_studyplanr"      s      
<R 	 	Jg6HJJKKK 
 	
  < < <2q22333CFF;;;;<s   !& 
A*5A%%A*z/answerc           	        K   	 t          | j        dd| j                   d{V  t          | j        d          }g }|dd         D ]L}|d         d	v r|d
         | j        k    r|d         d	v rdnd}|                    | d|d
                     M|                    d| j                    d                    |          }	 t          | j                  }|                    dd          }|r|                                dk    rd}n	#  d}Y nxY wd| d| d| d}t                      }	|	j
                            d|t          j        d                    }
	 t          j        |
j                  }n# t          j        $ r 	 |
j                                        }t%          j        dd|t$          j                  }t%          j        dd|                                          }t          j        |          }n# t*          $ r ddd }Y nw xY wY nw xY w|                    d!          d"k    r0t-          |                    d#d$                    }	 t/          |                    d%d&                    }n	#  d&}Y nxY wt-          |                    d'd(                    }	 t/          |                    d)d*                    }n	#  d*}Y nxY wt1          j        | j        ||||+           d,| d-| d.| d/| d0	}t          | j        d1d|           d{V  t1          j        | j        ||||2           d3}t          | j        d1d|           d{V  d"|d4S |                    d5d6          }t          | j        d1d|           d{V  d|d S # t*          $ r:}t7          j        d7|            t;          d8t-          |          9          d}~ww xY w):u3   
    학습계획표 답변 제출 (대화형)
    MA)r   senderparttextN	studyplan)categoryir&   )r$   useruser_idlogUserBotz: zUser: 
usernameu	   あなたr   uZ   あなたはGoalSkillの学習パートナー「トブ」です。
ユーザー（名前: u5  ）と楽しく会話しながら、以下の4つの学習設定項目をヒアリングしてください。

【ペルソナ（Human UI）とルール】
1. 面接官や機械のような硬い定型文は厳禁です。
2. ユーザーの回答に対して「なるほど！」「おお、いいですね！」「無理なく進めるのが一番です😊」「素晴らしい！」など、回答の内容に合わせて**毎回異なる自然なリアクション**をしてください。「なるほど〜！」を何度も繰り返すなど、ロボットのようなワンパターンな話し方は絶対に避けてください。
3. 絵文字を少しだけ（1~2個）交えて、友達のようにフレンドリーで温かいトーンを維持してください。
4. ユーザーを呼ぶ時は必ず「ud  」と呼んでください。「〇〇さん」のようなプレースホルダーは絶対に使わないでください。
5. Markdownブロック(```json)は含めず、この仕様通りの**純粋なJSONオブジェクトのみ**を出力してください。

【収集すべき4つの必須項目】
1. total_duration (総学習期間) - 現在は「6ヶ月」コースのみ対応しています。ユーザーが6ヶ月以外を希望した場合は、「現在は6ヶ月コースのみご用意しています😊」と丁寧に案内し、6ヶ月で進めてよいか確認してください。
2. study_days (1週間の学習日数) - 例: 5, 7 など数字のみ
3. preferred_time_slot (希望する学習時間帯) - 例: 朝、夜、いつでも
4. weekday_hours (1日あたりの学習時間) - 例: 2 など数字のみ

【現在の会話ログ】
uh  

【出力形式（JSONのみを出力）】
1. **会話ログを読んで4項目すべて揃っている場合**
   これ以上質問せず、次の完了JSONのみを返してください:
   {"status": "completed", "total_duration": "...", "study_days": "X", "preferred_time_slot": "...", "weekday_hours": "X"}

2. **揃っていない項目がある場合**
   足りない項目を「一度に一つだけ」質問してください。
   例: {"status": "continue", "question": "週3日ですね、無理なく進められていいペースだと思います！🗓\n\nちなみに、学習するとしたら1日のうちでだいたいいつ頃（朝とか夜とか）が一番集中できそうですか？"}

※**過去に言った自分のセリフのパターンを繰り返さないこと**。「なるほど」等の同じ相槌の連発は禁止です。
zgemini-2.5-flashzapplication/json)response_mime_type)modelcontentsconfigz^```json\s*)flagsz```\s*$continueui   すみません、上手く聞き取れませんでした。もう一度教えていただけますか？)statusr   r8   	completedtotal_durationu   3ヶ月
study_days   preferred_time_slotu   夜weekday_hours   )r   r:   r;   r=   r>   u   学習計画: 期間=u   , 週u   日, 時間帯=u   , 1日u   時間I)r   studyplan_durationstudyplan_study_daysstudyplan_time_slotstudyplan_weekday_hoursu  ばっちりです！これであなたの生活リズムに合わせた完璧なスケジュールが完成しましたよ🎉

いよいよあなた専用のカリキュラムを作成する準備が整いました。ここまで本当にお疲れ様でした！😊)r8   messager   u-   もう少し詳しく教えてください！zStudyPlan Answer Error: r   r   )r
   r   rE   r   appendjoinr   getstripr	   modelsgenerate_contentr   GenerateContentConfigjsonloadsr(   JSONDecodeErrorresub
IGNORECASEr   r   intr   save_studyplan_outputsync_to_user_profile_summaryr   r   r   )r   logshistory_linesr-   sender_namehistory_textsummary_datar1   system_promptclientresponseresultraw_textr:   r;   r=   r>   plan_summarycompletion_msgbot_questionr    s                        r!   answer_studyplanrc   *   sC     
C<7+=cPSZaZijjjjjjjjjj W/+FFF : 	A 	AC8} 888SZ7?=Z=Z$'M5M$M$M&&SXK  K!?!?3u:!?!?@@@@7go77888yy//	#+G,>??L#''
K@@H 'x~~//255&	#"HHH   )1 " #  > "##=11$".BTUUU 2 
 
		iZ..FF# 	i 	i 	ii#=..006."hbmTTT6*b(;;AACCH-- i i i$.  =h  i  ii	i ::h;.. ,<i!H!HIIN L!!<!<==




"%fjj1F&N&N"O"O" #FJJ$B$B C C" !2"--%$7+    T>  T  T
  T  Tcv  T  T  L  T  T  TL#w/A#TW^jkkkkkkkkkk9"-#1%/$7(5   ^ 
 $w/A#TW^lmmmmmmmmmm &)  
 "::j2abbL#w/A#TW^jkkkkkkkkkk$(  
  < < <333444CFF;;;;<s   CN$ 	AD N$ DAN$ $E> =N$ >HA7HHHHHHN$ HA N$ #J N$ J	(N$ 0#K N$ KBN$ +8N$ $
O(.5O##O()fastapir   r   fastapi.responsesr   app.schemasr   
app.modelsr   app.core.configr   r	   !app.services.goalskill_classifierr
   app.models.chat_log_moduler   save_to_chat_messagesr   google.genair   rM   rP   app.models.summary_moduler   routerpostStartStudyPlanRequestr"   AnswerStudyPlanRequestrc        r!   <module>rt      sj   , , , , , , , , * * * * * * ( ( ( ( ( ( ' ' ' ' ' ' 4 4 4 4 4 4 4 4 ? ? ? ? ? ? \ \ \ \ \ \ \ \        				 6 6 6 6 6 6	

 
 
 X<#3#I < < < <, YG<$4$K G< G< G< G< G< G<rs   