o
    ÃiõN  ã                   @   s0  d dl m Z mZmZ d dlmZmZmZmZmZ d dl	m
Z
mZ d dlmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlZed	d
g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¡edƒedƒfdedefdd„ƒZ$dS ) é    )ÚdatetimeÚtimezoneÚ	timedelta)Ú	APIRouterÚHTTPExceptionÚ
UploadFileÚFileÚForm)ÚChatRequestÚ
LogRequest)Úsave_chat_logÚget_history_from_dbÚget_a_part_statusÚsave_usernameÚget_usernameÚsave_daily_logÚget_daily_log_from_dbÚcheck_today_daily_log_exists)Úsave_sales_sheet_from_excel)Úget_gemini_model)ÚtypesNz/goalskill-sales/apiÚGeneral)ÚprefixÚtagsz/status/a-part/{session_id}Ú
session_idc                 Ã   s   t | ƒ}d|iS )u;   
    í”„ëŸ°íŠ¸ì—ì„œ A/B íŒŒíŠ¸ ë¶„ê¸°ìš©ìœ¼ë¡œ í˜¸ì¶œ
    Ústatus)r   )r   r   © r   ú</home/air/goalskill_sales/back/app/routers/general_router.pyÚget_a_part_status_api   s   €r   z/chatÚrequestc           )   
   Ã   sˆ  z,t | jƒ}g }|dkrt| jd| jƒ t| jƒ}nt| jd| jƒ t| jƒ}ttddƒ}t	 
|¡}| ¡ }| d¡}d}d }d }	d}
|D ]f}| dd¡}| d	d¡}| d
d¡}d }|rit|t	ƒrh|}n	 |r¤|jd u r{|jtjd |¡}n| |¡}| d¡}|d|› d|› d|› d7 }| ¡ }|}	| ¡ |kr£|
d7 }
qH||› d|› d7 }qH|dkrÜt| jƒ}d}|rÅ|rÅ||v rÄd}n|sÈ	 d}|rÓd|› d}nd}d|› d}nªd}|	róz||	 }| ¡ d }W n   d}Y d}|rý||k rýd}d}|s	|dkr	d}t| jƒ}d}| jrd| j› d| j› d}|j}d}d|  kr0dk r5n nd}nd|  krAd k rFn nd!}nd"}d}|rWd#|› d$|› d}n|rid%t|ƒ› d&|› d'|› d}nd(}d}|
d)krud*}nd+}d,|› d-|
› d.|› d/|› d0	}tƒ }d1|› d2} |› | › d3| j› d4}!|jjd5tjdtj|!d6gd7gd8d9id:}"zTt  |"j!¡}#|# d;|"j! "¡ ¡}$|dkrð|# d<¡}%|%rÓt#| j|%ƒ t| jd=|$ƒ t$|%ƒpçd>|$v oçd?|$v }&|$d |&d@œW W S |# dAd¡}'t| jd=|$ƒ |$d |'dBœW W S  tj%y.   |"j! "¡ }$|dkrt| jd=|$ƒ nt| jd=|$ƒ |$d dCœ Y W S w  t&yC }( zt'dDt(|(ƒdE‚d }(~(ww )FNr   Úuseré	   )Úhoursz%Y-%m-%d %H:%MÚ ÚsenderÚunknownÚmessageÚ
created_at)Útzinfoú[z] z: Ú
é   FTuQ   
ã€æ—¢çŸ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã€‘
- æ—¢ã«ç™»éŒ²ã•ã‚Œã¦ã„ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å: uÎ   
- ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚’ä½¿ç”¨ã—ã¦å¿œç­”ã—ã¦ãã ã•ã„ã€‚
- ä¼šè©±å±¥æ­´ï¼ˆHistoryï¼‰ã«åå‰ãŒå«ã¾ã‚Œã¦ã„ã¦ã‚‚ã€ä¸Šè¨˜ã®ç™»éŒ²ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼åã®ã¿ã‚’ä½¿ç”¨ã—ã¦ãã ã•ã„ã€‚
u¶  
ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã«ã¤ã„ã¦ - é‡è¦ã€‘
- ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®åå‰ã¯ã¾ã ç‰¹å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ï¼ˆãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ç™»éŒ²ã•ã‚Œã¦ã„ã¾ã›ã‚“ï¼‰ã€‚
- ä¼šè©±å±¥æ­´ã«åå‰ãŒå«ã¾ã‚Œã¦ã„ã¦ã‚‚ã€ãã‚Œã‚’æŽ¨æ¸¬ã—ãŸã‚Šä»®å®šã™ã‚‹æ ¹æ‹ ã¨ã—ã¦ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„ã€‚
- çµ¶å¯¾ã«åå‰ã‚’æŽ¨æ¸¬ã—ãŸã‚Šä»®å®šã—ãŸã‚Šã—ãªã„ã§ãã ã•ã„ã€‚
- ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ˜Žç¤ºçš„ã«åå‰ã‚’è¨€ã†ã¾ã§ã€Œâ—‹â—‹ã•ã‚“ã€ã®ã‚ˆã†ãªå‘¼ç§°ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„ã€‚
- åå‰ã‚’å°‹ã­ã‚‹ã¨ãã¯ã€è‡ªç„¶ã«ã€Œåå‰ã‚’æ•™ãˆã¦ãã ã•ã„ã€ã¨èžã„ã¦ãã ã•ã„ã€‚
- ä¼šè©±å±¥æ­´ï¼ˆHistoryï¼‰ã«éŽåŽ»ã®åå‰ãŒå«ã¾ã‚Œã¦ã„ã¦ã‚‚ç„¡è¦–ã—ã¦ãã ã•ã„ã€‚ ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒä»Šã“ã®çž¬é–“ã«åå‰ã‚’è¨€ã†ã¾ã§å¾…ã£ã¦ãã ã•ã„ã€‚
- 'å†ã³'ã€'ã‚‚ã†ä¸€åº¦'ã€'å†åº¦'ã¨ã„ã£ãŸè¡¨ç¾ã¯çµ¶å¯¾ã«ä½¿ã‚ãªã„ã§ãã ã•ã„ã€‚ æœ€åˆã«åå‰ã‚’èžãã‚ˆã†ã«ã€è‡ªç„¶ã«è³ªå•ã—ã¦ãã ã•ã„ã€‚
u÷  
ã€GOALSKILLã«ã¤ã„ã¦ã€‘
- ã‚ãªãŸã¯GOALSKILLã®ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚³ãƒ¼ãƒã§ã™ã€‚
- **æ³¨æ„**: ä»¥ä¸‹ã®GOALSKILLã®ç‰¹å¾´èª¬æ˜Žã¯ã€Aãƒ‘ãƒ¼ãƒˆæœªå®Œäº†ã®åˆå›žåˆ©ç”¨è€…ã«ã¯**ä¸€åˆ‡è¨€åŠã—ãªã„ã§ãã ã•ã„**ã€‚åå‰ã‚’èžì€ í›„ì—ë§Œ ê°„ëžµí•˜ê²Œ ì–¸ê¸‰í•˜ì„¸ìš”ã€‚

ã€Aãƒ‘ãƒ¼ãƒˆãŒæœªå®Œäº†ã®å ´åˆ - åˆå›žåˆ©ç”¨è€…ã€‘
- ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯GOALSKILLã«åˆã‚ã¦è¨ªã‚Œã¾ã—ãŸã€‚
- **é‡è¦**: ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ¨æ‹¶ï¼ˆä¾‹ï¼š"ã“ã‚“ã«ã¡ã¯"ã€"åˆã‚ã¾ã—ã¦"ã€"hi"ãªã©ï¼‰ã‚’ã™ã‚‹å ´åˆã€GOALSKILLã®ç‰¹å¾´ã‚„è©³ç´°ãªèª¬æ˜Žã¯ä¸€åˆ‡ã›ãšã€ç°¡å˜ã«è‡ªå·±ç´¹ä»‹ã ã‘ã‚’ã—ã¦ãã ã•ã„ã€‚
- ãã®å¾Œã™ãã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®åå‰ã‚’å°‹ã­ã¦ãã ã•ã„ã€‚
- 'å†ã³'ã‚„'ã‚‚ã†ä¸€åº¦'ã®ã‚ˆã†ãªè¡¨ç¾ã¯çµ¶å¯¾ã«ä½¿ã‚ãªã„ã§ãã ã•ã„ã€‚ åˆã‚ã¦åå‰ã‚’å°‹ã­ã‚‹å ´åˆã«ã®ã¿è©²å½“ã—ã¾ã™ã€‚
- åå‰ã‚’èžã„ãŸå¾Œã€**SALESç‰ˆ**: ã¾ãšç›¸æ‰‹ã‚’æ­“è¿Žã—ï¼ˆã‚ˆã‚ã—ããŠé¡˜ã„ã„ãŸã—ã¾ã™ï¼âœ¨ï¼‰ã€ãã®ã†ãˆã§ã‚·ãƒ¼ãƒˆã‚’ãƒ‰ãƒ©ãƒƒã‚°ï¼†ãƒ‰ãƒ­ãƒƒãƒ—ï¼ˆã¾ãŸã¯ãƒœã‚¿ãƒ³ï¼‰ã§ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰ã—ã¦ã‚‚ã‚‰ã†ã‚ˆã†æ¡ˆå†…ã—ã¦ãã ã•ã„ã€‚
* å¿œç­”ä¾‹: "â—‹â—‹ã•ã‚“ã€ã‚ˆã‚ã—ããŠé¡˜ã„ã„ãŸã—ã¾ã™ï¼âœ¨ ã¾ãšã¯ç¾çŠ¶ã‚’æŠŠæ¡ã™ã‚‹ãŸã‚ã«ã€ãŠæ‰‹å…ƒã®ã‚·ãƒ¼ãƒˆã‚’ã“ã®ç”»é¢ã«ãƒ‰ãƒ©ãƒƒã‚°ï¼†ãƒ‰ãƒ­ãƒƒãƒ—ï¼ˆã¾ãŸã¯ãƒœã‚¿ãƒ³ã‹ã‚‰ï¼‰ã—ã¦ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰ã—ã¦ã„ãŸã ã‘ã¾ã™ã‹ï¼Ÿ"
* åå‰å¿œç­”ã®è¿”å´JSONã« "show_sheet_upload_button": true ã‚’å«ã‚ã¦ãã ã•ã„ï¼ˆãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã§å‡¦ç†ã™ã‚‹å ´åˆã¯çœç•¥å¯ï¼‰ã€‚

u.  

ã€å¿œç­”ä¾‹ - å¿…ãšã“ã®å½¢å¼ã«å¾“ã†ã“ã¨ã€‘
- ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ¨æ‹¶ã—ãŸå ´åˆï¼ˆä¾‹ï¼šã€Œhiã€ã€Œã“ã‚“ã«ã¡ã¯ã€ï¼‰: "ã“ã‚“ã«ã¡ã¯ï¼ãŠä¼šã„ã§ãã¦å¬‰ã—ã„ã§ã™ã€‚GOALSKILLã®AIãƒ‘ãƒ¼ãƒˆãƒŠãƒ¼ã§ã™ã€‚ãŠåå‰ã‚’æ•™ãˆã¦ã„ãŸã ã‘ã¾ã™ã‹ï¼Ÿ"
  * **ç¦æ­¢**: GOALSKILLã®ç‰¹å¾´ã€ç›®çš„ã€æ©Ÿèƒ½ãªã©ã®é•·ã„èª¬æ˜Žã¯ä¸€åˆ‡ã—ãªã„ã§ãã ã•ã„ã€‚
  * **å¿…é ˆ**: æŒ¨æ‹¶ + ç°¡æ½”ãªè‡ªå·±ç´¹ä»‹ï¼ˆãƒ‘ãƒ¼ãƒˆãƒŠãƒ¼æ„Ÿï¼‰ + åå‰ã‚’å°‹ã­ã‚‹ï¼ˆ3æ–‡ä»¥å†…ï¼‰
- åå‰ å›žç­”å¾Œ: "â—‹â—‹ã•ã‚“ã€ã‚ˆã‚ã—ããŠé¡˜ã„ã„ãŸã—ã¾ã™ï¼âœ¨ ã¾ãšã¯ç¾çŠ¶ã‚’æŠŠæ¡ã™ã‚‹ãŸã‚ã«ã€ãŠæ‰‹å…ƒã®ã‚·ãƒ¼ãƒˆã‚’ã“ã®ç”»é¢ã«ãƒ‰ãƒ©ãƒƒã‚°ï¼†ãƒ‰ãƒ­ãƒƒãƒ—ï¼ˆã¾ãŸã¯ãƒœã‚¿ãƒ³ã‹ã‚‰ï¼‰ã—ã¦ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰ã—ã¦ã„ãŸã ã‘ã¾ã™ã‹ï¼Ÿ"
  * **å¿…é ˆ**: æ­“è¿Žã®æ°—æŒã¡ + ãƒ‰ãƒ©ãƒƒã‚°ï¼†ãƒ‰ãƒ­ãƒƒãƒ—ï¼ˆã¾ãŸã¯ãƒœã‚¿ãƒ³ï¼‰ã§ã®ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰æ¡ˆå†…ã€‚ç°¡æ½”ã«ã€‚

ã™ã¹ã¦æ—¥æœ¬èªžã§ã€æ¸©ã‹ã„å£èª¿ã§ãŠè©±ã—ãã ã•ã„ã€‚

ã€é‡è¦ãªæ³¨æ„äº‹é …ã€‘
- ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒåå‰ã‚’å…¥åŠ›ã™ã‚‹ã¨ã€JSONå½¢å¼ã§åå‰ã‚‚è¿”ã—ã¦ãã ã•ã„ã€‚
- ä¾‹: {"answer": "ç”°ä¸­ã•ã‚“ã€ã‚ˆã‚ã—ããŠé¡˜ã„ã„ãŸã—ã¾ã™ï¼âœ¨ ã¾ãšã¯ç¾çŠ¶ã‚’æŠŠæ¡ã™ã‚‹ãŸã‚ã«ã€ãŠæ‰‹å…ƒã®ã‚·ãƒ¼ãƒˆã‚’ã“ã®ç”»é¢ã«ãƒ‰ãƒ©ãƒƒã‚°ï¼†ãƒ‰ãƒ­ãƒƒãƒ—ï¼ˆã¾ãŸã¯ãƒœã‚¿ãƒ³ã‹ã‚‰ï¼‰ã—ã¦ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰ã—ã¦ã„ãŸã ã‘ã¾ã™ã‹ï¼Ÿ", "username": "ç”°ä¸­"}
- åå‰ãŒå«ã¾ã‚Œã¦ã„ãªã„å ´åˆã¯usernameãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’çœç•¥ã—ã¦ãã ã•ã„ã€‚
- ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒåå‰ã‚’è¨€ã†å‰ã«ã€çµ¶å¯¾ã«åå‰ã‚’æŽ¨æ¸¬í•˜ê±°ë‚˜ä»®å®šã—ãªã„ã§ãã ã•ã„ã€‚
i  g       @u   - ç¾åœ¨ã®å¤©æ°—: uW   
- ä¼šè©±ã®ä¸­ã§è‡ªç„¶ã«å¤©æ°—ã‚„æ°—æ¸©ã«è§¦ã‚Œã¦ãã ã•ã„ï¼ˆä¾‹ï¼šã€Œä»Šæ—¥ã¯u   ã§ã™ã­ã€ï¼‰ã€‚é   é   u!   ã€ŒãŠã¯ã‚ˆã†ã”ã–ã„ã¾ã™ã€é   u   ã€Œã“ã‚“ã«ã¡ã¯ã€u   ã€Œã“ã‚“ã°ã‚“ã¯ã€uÅ   
ã€çŠ¶æ³: æ–°ã—ã„ä¸€æ—¥ã€‘
- æ—¥ä»˜ãŒå¤‰ã‚ã‚Šã¾ã—ãŸã€‚
- ä»¥å‰ã®ä¼šè©±ã®å†…å®¹ï¼ˆæ˜¨æ—¥ã®ã“ã¨ãªã©ï¼‰ã‚’å¼•ããšã‚‰ãšã€æ–°ã—ã„æ°—æŒã¡ã§æŒ¨æ‹¶ã—ã¦ãã ã•ã„ã€‚
- æŒ¨æ‹¶: u"    ã‹ã‚‰å§‹ã‚ã¦ãã ã•ã„ã€‚
- ur   
ã€çŠ¶æ³: ã—ã°ã‚‰ãæ™‚é–“ãŒç©ºãã¾ã—ãŸã€‘
- ä»Šæ—¥ã€æ•°æ™‚é–“ã¶ã‚Šã«ä¼šè©±ãŒå†é–‹ã•ã‚Œã¾ã—ãŸï¼ˆu|  æ™‚é–“ã¶ã‚Šï¼‰ã€‚
- ç›´å‰ã®ä¼šè©±ã®å†…å®¹ï¼ˆæ•°æ™‚é–“å‰ã®è©±é¡Œï¼‰ã‚’ç„¡ç†ã«ç¶šã‘ã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“ã€‚
- ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæˆ»ã£ã¦ããŸã“ã¨ã‚’æ­“è¿Žã—ã€ä»Šã®æ™‚é–“å¸¯ã«åˆã‚ã›ãŸæŒ¨æ‹¶ã‚„åŠ´ã„ã®è¨€è‘‰ã‚’ã‹ã‘ã¦ãã ã•ã„ã€‚
- ã€Œã•ã£ãã¯ã€œã¨è¨€ã£ã¦ã¾ã—ãŸãŒã€ã®ã‚ˆã†ã«éŽåŽ»ã®ç™ºè¨€ã‚’æŽ˜ã‚Šè¿”ã•ãªã„ã§ãã ã•ã„ã€‚
- æŒ¨æ‹¶: u0   ã€ã¾ãŸã¯ã€ŒãŠç–²ã‚Œæ§˜ã§ã™ã€ãªã©ã€‚
- uN  
ã€çŠ¶æ³: åŒæ—¥ã®ä¼šè©±ç¶™ç¶šã€‘
- ä»Šæ—¥ã®ä¼šè©±ãŒç¶šã„ã¦ã„ã¾ã™ã€‚ä»¥å‰ã®ä¼šè©±ã®æµã‚Œï¼ˆæ–‡è„ˆï¼‰ã‚’ç¶­æŒã—ã¦ãã ã•ã„ã€‚
- å¤©æ°—ã®è©±é¡Œã«ã¤ã„ã¦ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè‡ªã‚‰è§¦ã‚Œãªã„é™ã‚Šã€ã“ã¡ã‚‰ã‹ã‚‰é‡ã­ã¦è³ªå•ã—ãªã„ã§ãã ã•ã„ã€‚è©±ã®æµã‚Œï¼ˆæ–‡è„ˆï¼‰ã‚’ç¶­æŒã—ã¦ãã ã•ã„ã€‚
é   uŒ  
- **é‡è¦: ä»Šæ—¥ã®ç›®æ¨™ï¼ˆToday Goalï¼‰ã¸ã®èª˜å°Ž**
- ã‚¢ã‚¤ã‚¹ãƒ–ãƒ¬ã‚¤ã‚¯ãŒååˆ†ã«æ¸©ã¾ã‚Šã¾ã—ãŸã€‚ä¼šè©±ã®æœ€å¾Œã«è‡ªç„¶ã«ç”»é¢ä¸‹éƒ¨ã®ãƒœã‚¿ãƒ³ã‚’æŠ¼ã—ã¦ã€ã€Œä»Šæ—¥ã®ç›®æ¨™ã€ã®ç¢ºèªã¨ã‚¹ã‚¿ãƒ¼ãƒˆã‚’ä¿ƒã—ã¦ãã ã•ã„ã€‚
- **èª˜å°Žã®æ–‡è„ˆ**: 
  1. ã€Œã•ã¦ã€ãã‚ãã‚ä»Šæ—¥ã®ç›®æ¨™ã‚’ç¢ºèªã—ã¦ã€æ¥­å‹™ã‚’ã‚¹ã‚¿ãƒ¼ãƒˆã—ã¾ã—ã‚‡ã†ã‹ï¼ã€
  2. ã“ã‚Œã‹ã‚‰ä¸€ç·’ã«é ‘å¼µã‚Šã¾ã—ã‚‡ã†ã€ã¨ä¼ãˆã¾ã™ã€‚
- ä¾‹: "ãã‚ãã‚æ¥­å‹™é–‹å§‹ã®æ™‚é–“ã§ã™ã­ï¼ä»Šæ—¥ã®ç›®æ¨™ã‚’ç¢ºèªã—ã¦ã€ä¸€ç·’ã«é ‘å¼µã‚Šã¾ã—ã‚‡ã†ã€‚ä¸‹ã®ãƒœã‚¿ãƒ³ï¼ˆä»Šæ—¥ã®ç›®æ¨™ï¼‰ã‹ã‚‰ã‚¹ã‚¿ãƒ¼ãƒˆã§ãã¾ã™ã‚ˆï¼ðŸš€"
u(  
- **é‡è¦: ã¾ã èª˜å°Žã—ãªã„**
- **åŸºæœ¬æ–¹é‡**: ã¾ã ä¼šè©±ã®åºç›¤ã§ã™ã€‚åŸºæœ¬çš„ã«ã¯ç„¡ç†ã«èª˜å°Žã›ãšã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã®ä¼šè©±ã‚’åºƒã’ã¦ãã ã•ã„ã€‚
- **ã€é‡è¦ä¾‹å¤– - å³æ™‚èª˜å°Žãƒˆãƒªã‚¬ãƒ¼ã€‘**: 
  ãŸã ã—ã€**ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã€Œã•ã‚å§‹ã‚ã‚ˆã†ã€ã€Œä»Šæ—¥ã®ç›®æ¨™ã¯ã€ã€Œä»•äº‹ã™ã‚‹ã€ã¨ã„ã£ãŸå‰å‘ããªæ„æ€ã‚’ç¤ºã—ãŸå ´åˆ**ã¯ã€
  **ç¾åœ¨ã®ã‚¿ãƒ¼ãƒ³æ•°ã«é–¢ä¿‚ãªãã€å³åº§ã«**ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’è¤’ã‚ã¦ã‹ã‚‰ã€ä¸‹ã®ãƒœã‚¿ãƒ³ï¼ˆä»Šæ—¥ã®ç›®æ¨™ï¼‰ã‚’æŠ¼ã™ã‚ˆã†èª˜å°Žã—ã¦ãã ã•ã„ã€‚
uŠ   
# Role
ã‚ãªãŸã¯å–¶æ¥­è·ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ã‚µãƒãƒ¼ãƒˆã™ã‚‹è¦ªã—ã„AIã‚¢ã‚·ã‚¹ã‚¿ãƒ³ãƒˆã§ã™ã€‚

# Current Status
- ç¾åœ¨æ™‚åˆ»: u    
- ä»Šæ—¥ã®ä¼šè©±ã‚¿ãƒ¼ãƒ³æ•°: ub    (ç›®å®‰: 3~4ã‚¿ãƒ¼ãƒ³å¾Œã«ä»Šæ—¥ã®ç›®æ¨™ã¸èª˜å°Ž)

# Instructions
1. **Reset & Weather**: 
   u  

2. **Conversation Flow**:
   - ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã™ã¹ã¦ã®ç™ºè¨€ã«å¯¾ã—ã¦ã€å„ªã—ãã€æ™‚ã«ã¯ãƒ¦ãƒ¼ãƒ¢ãƒ©ã‚¹ã«åå¿œã—ã¦ãã ã•ã„ã€‚
   - ã©ã‚“ãªå…¥åŠ›ãŒæ¥ã¦ã‚‚ä¼šè©±ã‚’é€”åˆ‡ã‚Œã•ã›ãªã„ã§ãã ã•ã„ã€‚

3. **Call to Action (ä»Šæ—¥ã®ç›®æ¨™)**:
   u]  

4. **Tone**:
   - è¦ªã—ã¿ã‚„ã™ãã€æ¸©ã‹ã„ï¼ˆå‹é”å£èª¿ï¼‰ã€‚çµµæ–‡å­—ã‚’ä½¿ç”¨ã—ã¦ãã ã•ã„ã€‚
   - æ„å‘³ã®ã¾ã¨ã¾ã‚Šã”ã¨ã«2ã€œ3æ–‡ã‚’1ã¤ã®å¹ãå‡ºã—ã«ã¾ã¨ã‚ã¦ãã ã•ã„ã€‚ï¼ˆã€Œ|ã€ã§åŒºåˆ‡ã‚‹ï¼‰

ã€é‡è¦ã€‘
- å¿œç­”ã¯å¿…ãšJSONå½¢å¼ã§è¿”ã—ã¦ãã ã•ã„ã€‚
- ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ: {"answer": "AIã®å›žç­”...", "show_today_goal_button": true/false}
- `show_today_goal_button`ã¯ã€ã‚ãªãŸãŒã€Œä»Šæ—¥ã®ç›®æ¨™ã€ã‚’ä¿ƒã—ãŸæ™‚ã€ã‚ã‚‹ã„ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒä»•äº‹ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã£ãŸæ™‚ã«ã®ã¿ `true` ã«ã—ã¦ãã ã•ã„ã€‚ãã‚Œä»¥å¤–ã¯ `false` ã§ã™ã€‚
z

[Conversation History]:
z

u   ãƒ¦ãƒ¼ã‚¶ãƒ¼: u   
ã‚¢ã‚·ã‚¹ã‚¿ãƒ³ãƒˆ:zgemini-2.5-flash)Útext)ÚroleÚpartsÚresponse_mime_typezapplication/json)ÚmodelÚcontentsÚconfigÚanswerÚusernameÚbotu	   ã‚·ãƒ¼ãƒˆu   ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰)r7   Úthinking_processÚshow_sheet_upload_buttonÚshow_today_goal_button)r7   r:   r<   )r7   r:   éô  ©Ústatus_codeÚdetail))r   r   r   r&   r   r   r   r   r   r   ÚnowÚdateÚstrftimeÚgetÚ
isinstancer(   ÚreplaceÚutcÚ
astimezoner   Útotal_secondsr   Úweather_conditionÚhourÚintr   ÚmodelsÚgenerate_contentr   ÚContentÚPartÚjsonÚloadsr0   Ústripr   ÚboolÚJSONDecodeErrorÚ	Exceptionr   Ústr))r   r   Úhistory_rowsÚJSTrA   Úcurrent_dateÚcurrent_time_strÚhistory_textÚlast_message_dateÚlast_message_datetimeÚtoday_turn_countÚrowr$   Úmsgr'   Úrow_dtÚcreated_at_strÚexisting_usernameÚhistory_has_nameÚusername_instructionÚsystem_promptÚ
hours_diffÚdiffÚ
is_new_dayÚis_long_gapÚhas_written_diary_todayÚweather_instructionÚcurrent_hourÚgreeting_instructionÚcontext_instructionÚcta_instructionÚclientÚhistory_contextÚfull_promptÚresponseÚresultr7   r8   Ú
show_sheetr<   Úer   r   r   Ú
chat_basic   s"  €







€
€
þ
ò#
ü
ûþú
ù
	ûú
öïÿý


ü

ù	€ÿry   z/history/{session_id}c              
   Ã   s>   z	t | ƒ}d|iW S  ty } ztdt|ƒd‚d }~ww )NÚhistoryr=   r>   )r   rV   r   rW   )r   Úrowsrx   r   r   r   Úget_historyT  s   €
€ÿr|   z/logÚreqc              
   Ã   sH   zt | j| j| jƒ ddiW S  ty# } ztdt|ƒd‚d }~ww )Nr   Úokr=   r>   )r   r   r$   r&   rV   r   rW   )r}   rx   r   r   r   Úlog_message^  s   €
€ÿr   z/sheet/upload.Úfilec              
   Ã   sŽ   | j r| j  ¡  d¡stddd‚z |  ¡ I dH }t|| j |ƒ}|dkr,dddd	œW S d
d|d	œW S  tyF } ztdt|ƒd‚d}~ww )u?   ì—‘ì…€ íŒŒì¼ ì—…ë¡œë“œ â†’ íŒŒì‹± â†’ sales_sheet_data ì €ìž¥.)z.xlsxz.xlsi  zExcel file (.xlsx) requiredr>   Nr   Fu$   ì¶”ì¶œëœ ë°ì´í„°ê°€ ì—†ìŠµë‹ˆë‹¤.)r~   r&   ÚcountTu   ì €ìž¥ë˜ì—ˆìŠµë‹ˆë‹¤.r=   )ÚfilenameÚlowerÚendswithr   Úreadr   rV   rW   )r€   r   Úcontentr   rx   r   r   r   Úupload_sales_sheeth  s   €€ÿr‡   )%r   r   r   Úfastapir   r   r   r   r	   Úapp.schemas.schemasr
   r   Úapp.models.general_moduler   r   r   r   r   r   r   r   Ú&app.services.sales_sheet_excel_servicer   Úapp.core.configr   Úgoogle.genair   rQ   ÚrouterrD   rW   r   Úpostry   r|   r   r‡   r   r   r   r   Ú<module>   s<    (þ  ;		þÿþ