o
    Ϸuh                     @   sV  d dl Z d dlZd dlmZmZ d dlZ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 edd	 ee d
dZe Zeje
dgdgdgd G dd deZG dd deZG dd deZdaed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!efd"d#Ze d$d%d& Z!dS )'    N)urlparseunquote)FastAPIHTTPException)CORSMiddleware)	BaseModel)AsyncOpenAI)load_dotenvT)overrideOPENAI_API_KEY)api_key*)allow_originsallow_methodsallow_headersc                   @   s   e Zd ZU ee ed< dS )ChatReqmessagesN)__name__
__module____qualname__listdict__annotations__ r   r    /home/air/goalskill/back/main.pyr      s   
 r   c                   @   s6   e Zd ZU eed< eed< eed< eed< eed< dS )UserInfo
session_idintrohobbygoalskillsNr   r   r   strr   r   r   r   r   r      s   
 r   c                   @   s>   e Zd ZU eed< eed< eed< eed< eed< eed< dS )CompanyInfor   aboutculturer    welfareprojectsNr!   r   r   r   r   r#   #   s   
 r#   startupc               
      s   zTt d} | r(t| }|j|jpd}}|jt|jpd}}|j	d}nt d}t
t dd}t d}t d	}t d
}tj|||||dddI d H aW d S  tyl } zt  td| d }~ww )NDATABASE_URLi   /DB_HOSTDB_PORT3306DB_USERDB_PASSWORDDB_NAMETutf8mb4)hostportuserpassworddb
autocommitcharsetzCould not connect to database: )osgetenvr   hostnamer4   usernamer   r6   pathlstripintaiomysqlcreate_pooldb_pool	Exception	traceback	print_excRuntimeError)dsnpr3   r4   r5   pwddb_nameer   r   r   r(   /   s(   

shutdownc                      s$   t rt   t  I d H  d S d S )N)rC   closewait_closedr   r   r   r   rM   G   s
   z/goalskill/back/gpt-chatreqc              
      sd   zt jjjd| jddI d H }d|jd jjiW S  ty1 } zt	
  tdt|dd }~ww )Nzgpt-3.5-turbogffffff?)modelr   temperaturereplyr     )status_codedetail)openai_clientchatcompletionscreater   choicesmessagecontentrD   rE   rF   r   r"   )rP   resrL   r   r   r   gpt_chatN   s   r_   z/goalskill/back/save_userinfo	user_infoc              
      s   t stddd}zVt  4 I d H <}| 4 I d H }||| j| j| j| j| j	fI d H  W d   I d H  n1 I d H s@w   Y  W d   I d H  n1 I d H sUw   Y  d| jdW S  t
yx } zt  tdd| d }~ww )N  z!Database connection not availablez
    INSERT INTO userinfo (session_id, intro, hobby, goal, skills)
    VALUES (%s,%s,%s,%s,%s)
    ON DUPLICATE KEY UPDATE
      intro=VALUES(intro),
      hobby=VALUES(hobby),
      goal=VALUES(goal),
      skills=VALUES(skills)
    successstatusr   rT   Database error: )rC   r   acquirecursorexecuter   r   r   r   r    rD   rE   rF   )r`   sqlconncurrL   r   r   r   save_userinfo[   s,   
	*(	rl   z /goalskill/back/save_companyinfoinfoc                    s   t stddd}zXt  4 I d H >}| 4 I d H  }||| j| j| j| j| j	| j
fI d H  W d   I d H  n1 I d H sBw   Y  W d   I d H  n1 I d H sWw   Y  d| jdW S  tyz } zt  tdd| d }~ww )Nra   zDB connection not availablea0  
    INSERT INTO companyinfo
      (session_id, about, culture, skills, welfare, projects)
    VALUES (%s,%s,%s,%s,%s,%s)
    ON DUPLICATE KEY UPDATE
      about=VALUES(about),
      culture=VALUES(culture),
      skills=VALUES(skills),
      welfare=VALUES(welfare),
      projects=VALUES(projects)
    rb   rc   rT   re   )rC   r   rf   rg   rh   r   r$   r%   r    r&   r'   rD   rE   rF   )rm   ri   rj   rk   rL   r   r   r   save_companyinfox   s"   
$Rrn   z/goalskill/back/healthc                      s
   ddiS )Nrd   okr   r   r   r   r   health   s   rp   )"r:   rE   urllib.parser   r   rA   fastapir   r   fastapi.middleware.corsr   pydanticr   openair   dotenvr	   r;   rW   appadd_middlewarer   r   r#   rC   on_eventr(   rM   postr_   rl   rn   getrp   r   r   r   r   <module>   sB   



