U
    –‘Ùj'  ã                   @   s\   d dl Z d dlmZ d dlmZmZ edƒZdd„ Zdd„ Zdd
d„Zdd„ Z	ddd„Z
dS )é    N)ÚPath)ÚdatetimeÚtimezonez/var/lib/hermes-nexus/memory.dbc                  C   s>   t jttƒdd�} |  d¡ |  d¡ |  d¡ |  d¡ | S )Né
   )ZtimeoutzPRAGMA busy_timeout=10000aJ  
        CREATE TABLE IF NOT EXISTS hermes_conversaciones (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            usuario TEXT NOT NULL,
            conversacion TEXT NOT NULL,
            rol TEXT NOT NULL CHECK(rol IN ('user','model')),
            contenido TEXT NOT NULL,
            fecha TEXT NOT NULL
        )
    zr
        CREATE INDEX IF NOT EXISTS idx_historial
        ON hermes_conversaciones(usuario, conversacion, id)
    a  
        CREATE TABLE IF NOT EXISTS hermes_preferencias (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            usuario TEXT NOT NULL,
            instruccion TEXT NOT NULL,
            fecha TEXT NOT NULL,
            UNIQUE(usuario, instruccion)
        )
    )Úsqlite3ZconnectÚstrÚDBÚexecute)Zconexion© r
   úhermes_memory.pyÚconectar   s    




	r   c                 C   sH   |dkrt dƒ‚tƒ �(}| d| |||t tj¡ ¡ f¡ W 5 Q R X d S )N)ÚuserZmodelzRol no permitidoz•
            INSERT INTO hermes_conversaciones
            (usuario, conversacion, rol, contenido, fecha)
            VALUES (?, ?, ?, ?, ?)
        )Ú
ValueErrorr   r	   r   Únowr   ÚutcÚ	isoformat)ÚusuarioÚconversacionÚrolÚ	contenidoÚdbr
   r
   r   Úguardar#   s    ûür   é   c              	   C   sN   t dtt|ƒdƒƒ}tƒ �}| d| ||f¡ ¡ }W 5 Q R X dd„ t|ƒD ƒS )Né   é   z²
            SELECT rol, contenido
            FROM hermes_conversaciones
            WHERE usuario=? AND conversacion=?
            ORDER BY id DESC
            LIMIT ?
        c                 S   s    g | ]\}}|d |igdœ‘qS )Útext)ZroleÚpartsr
   )Ú.0r   r   r
   r
   r   Ú
<listcomp>@   s   ÿzhistorial.<locals>.<listcomp>)ÚmaxÚminÚintr   r	   ÚfetchallÚreversed)r   r   Úlimiter   Úfilasr
   r
   r   Ú	historial4   s    úþr&   c              	   C   sh   d  | ¡  ¡ ¡}dt|ƒ  kr*dks4n tdƒ‚tƒ �$}| d| |t t	j
¡ ¡ f¡ W 5 Q R X |S )Nú é   i�  u3   La instrucciÃ³n debe tener entre 3 y 400 caractereszy
            INSERT OR IGNORE INTO hermes_preferencias(usuario, instruccion, fecha)
            VALUES (?, ?, ?)
        )ÚjoinÚstripÚsplitÚlenr   r   r	   r   r   r   r   r   )r   Zinstruccionr   r
   r
   r   ÚrecordarF   s    ýr-   éd   c              
   C   sH   t ƒ �*}| d| tdtt|ƒdƒƒf¡ ¡ }W 5 Q R X dd„ t|ƒD ƒS )Nzv
            SELECT instruccion FROM hermes_preferencias
            WHERE usuario=? ORDER BY id DESC LIMIT ?
        r   r.   c                 S   s   g | ]}|d  ‘qS )r   r
   )r   Zfilar
   r
   r   r   X   s     z preferencias.<locals>.<listcomp>)r   r	   r   r    r!   r"   r#   )r   r$   r   r%   r
   r
   r   ÚpreferenciasR   s
    ýr/   )r   )r.   )r   Úpathlibr   r   r   r   r   r   r&   r-   r/   r
   r
   r
   r   Ú<module>   s   
