o
    Y^h                     @   s0  d dl mZ d dlmZmZ d dlmZ d dlZd dlmZ d dl	Z	d dl
Z
d dlZd dlmZ d dlmZ e ZeedZee_e	d	Zd
ZG dd deZG dd deZG dd de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dS )#    )List)	APIRouterHTTPException)	BaseModelN)OpenAI)openai_api_key)database)api_keys3z$shanri-ai-chatbot-for-text-to-speechc                   @      e Zd ZU eed< eed< dS )MessagerolecontentN__name__
__module____qualname__str__annotations__ r   r   +/home/air/shanriGPT/back/chatbot_router4.pyr         
 r   c                   @   s*   e Zd ZU ee ed< dZedB ed< dS )ChatRequestmessagesNconversation_id)r   r   r   r   r   r   r   intr   r   r   r   r      s   
 r   c                   @   r   )
SpeechTexttext
chat_tokenNr   r   r   r   r   r      r   r   z/shanri/gpt-back/ask_questionchatc                    s  | j s
tddd| j d j }|d d }tjjjddd | j D d	}|jd
 j	j }| j
d u rLtdd|iI d H  tdd|iI d H }n| j
}tdd|iI d H }d}t||d||d dI d H  t||d||d dI d H  ||dS )N  zmessages is requiredstatus_codedetail   zgpt-4oc                 S   s   g | ]}|  qS r   dict).0mr   r   r   
<listcomp>,       z ask_question.<locals>.<listcomp>)modelr   r   z
            INSERT INTO conversations (title, is_deleted, created_at, updated_at)
            VALUES (:title, 0, NOW(), NOW())
        titlez
            SELECT id FROM conversations
            WHERE title = :title
            ORDER BY id DESC
            LIMIT 1
        zp
        SELECT COALESCE(MAX(sort_order), 0) FROM messages
        WHERE conversation_id = :conversation_id
    r   z
        INSERT INTO messages (conversation_id, role, content, sort_order, is_deleted, created_at, updated_at)
        VALUES (:conversation_id, :role, :content, :sort_order, 0, NOW(), NOW())
    user   )r   r   r   
sort_order	assistant   )r   answer)r   r   r   stripopenair   completionscreatechoicesmessager   r   execute	fetch_val)r   user_messager-   responser3   r   	max_order
insert_msgr   r   r   ask_question"   sJ   


r@   z/shanri/gpt-back/conversationsc                     s    t dI d H } dd | D S )Nz{
        SELECT id, title, updated_at FROM conversations
        WHERE is_deleted = 0
        ORDER BY updated_at DESC
    c                 S      g | ]}t |qS r   r&   r(   rowr   r   r   r*   f   r+   z%get_conversations.<locals>.<listcomp>r   	fetch_all)resultr   r   r   get_conversations_   s   rG   z+/shanri/gpt-back/messages/{conversation_id}r   c                    s&   t dd| iI d H }dd |D S )Nz
        SELECT role, content FROM messages
        WHERE conversation_id = :conversation_id AND is_deleted = 0
        ORDER BY sort_order ASC
    r   c                 S   rA   r   r&   rB   r   r   r   r*   p   r+   z-get_conversation_messages.<locals>.<listcomp>rD   )r   rowsr   r   r   get_conversation_messagesi   s
   
rI   z/shanri/gpt-back/speechspeech_textc                    s   | j }| j}|stdddtjjjdd|d}d| dt  d	}t|d
}|	 D ]}|
| q.W d    n1 s@w   Y  | dt  d	}t|t| t| ddt d| iS )Nr    zText is requiredr!   ztts-1nova)r,   voiceinputz
tmp/audio--z.mp3wb
audio_filezhttps://z.s3.amazonaws.com/)r   r   r   clientaudiospeechr7   timeopen
iter_byteswrite	s3_clientupload_filebucket_nameosremove)rJ   r   user_idr=   rP   fchunks3_keyr   r   r   rS   s   s*   
rS   z/healthc                      s
   ddiS )Nstatushealthyr   r   r   r   r   health_check   s   rc   ) typingr   fastapir   r   pydanticr   r5   r   boto3r[   rT   configr   dbr   routerrQ   r	   rX   rZ   r   r   r   postr@   getrG   r   rI   rS   rc   r   r   r   r   <module>   s8    

<
		