
    i$%                     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_dataz/goal-skill-t/api/studyplan	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    r3t-          |                    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	   あなた uZ   あなたはGoalSkillの学習パートナー「トブ」です。
ユーザー（名前: u  ）と楽しく会話しながら、以下の4つの学習設定項目をヒアリングしてください。

【ペルソナ（Human UI）とルール】
1. 面接官や機械のような硬い定型文は厳禁です。
2. ユーザーの回答に対しては、その回答内容に具体的に触れた自然なリアクションをしてください。
   - ★ 禁止: 「なるほど！」「いいですね！」「素晴らしい！」「無理なく進めるのが一番です」などの汎用的な定型リアクションの使用。これらは一切使わないでください。
   - ★ 推奨: ユーザーの回答内容を具体的に拾って反応する（例: 「週3日」→「平日の隙間時間を上手に使えそうですね」、「夜」→「夜の方が集中しやすいってタイプなんですね」など）。
3. 絵文字を少しだけ（1~2個）交えて、友達のようにフレンドリーで温かいトーンを維持してください。
4. ★★ ユーザーを呼ぶ際は必ず「u  さん」と「さん」付きで呼んでください（呼び捨て厳禁）。ただし、**毎回の発言で無理に名前を入れると機械的で不自然になるため、文脈上強調したい時や話題が切り替わる時など、必要最低限の頻度（全体の1〜2回程度）で自然に使ってください。** 日本語の自然な会話のように、主語がなくても通じる場合は名前を省いてください。
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 など数字のみ

【現在の会話ログ】
u(  

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

2. **揃っていない項目がある場合**
   足りない項目を「一度に一つだけ」質問してください。
   {"status": "continue", "question": "ここに質問文"}

★★★ 絶対ルール ★★★
- 過去の自分の発言パターンを絶対に繰り返さないこと。
- 会話ログを確認し、以前使用した相槌・リアクション・言い回しは二度と使わないこと。
- 「無理なく」という言葉は会話全体で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_hoursuL   さんのペースに合わせたスケジュールが整いました！🎉)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_datar0   system_promptclientresponseresultraw_textr:   r;   r=   r>   plan_summarycompletion_msgbot_questionr   s                        r    answer_studyplanrc   (   sL     
G<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" " " 08" "& '" " "H "##=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    iii  $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+15O&&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K<$4$K K< K< K< K< K< K<rs   