
    CTh                        d dl mZ d dl Z d dlZd dlZd dl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Zd dlZd dl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Zd dlZd dlmZ d dlZ G d d	      Z	  e       Zd Z!dedededede"dededededefdZ#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d  Z,d! Z-d" Z.d# Z/d$ Z0d% Z1d& Z2d' Z3d( Z4d) Z5d* Z6d+ Z7d, Z8d- Z9d1d.Z:d/ Z;d0 Z<y# e$ rZ ed
 ee               e d      dZ[ww xY w)2    )OpenAIN)Pinecone)datetime	timedelta)
BlobClient)Error)load_dotenvc                   0     e Zd ZdZg dZ fdZd Z xZS )ConfigManagerN)OPENAI_API_KEYPINECONE_API_KEYOPENAI_API_VALOR_MAS
SERVER_ENV
XI_API_KEY	AUDIO_URL
RUTA_AUDIOc                     | j                   .t        | 	  |       | _         | j                   j                          | j                   S )N)	_instancesuper__new___load_config)cls	__class__s    =/var/www/catia.catastroantioquia-mas.com/valormas/valormas.pyr   zConfigManager.__new__   s7    == !GOC0CMMM&&(}}    c                 ^   t        j                  d      | _        | j                  sZt        j                  dd      }t         j                  j	                  |      r%t        |       t        j                  d      | _        | j                  sd| _        t         j                  j	                  | j                        st        d| j                         t        | j                         g }| j                  D ]<  }t        j                  |      }|s|dk7  r|j                  |       t        | ||       > |r+t        ddj                  |       d| j                   d	      t        | j                        | _        t        | j                        | _        t        | j"                        | _        | j&                  j)                  d
      r| j&                  n| j&                  d
z   | _        | j*                  j)                  d
      r| j*                  | _        y | j*                  d
z   | _        y )Nr   ENV_PATHz.envz:/var/www/dev.catia.catastroantioquia-mas.com/valormas/.envzArchivo .env no encontrado en zClaves faltantes en .env: , z
Archivo .env encontrado en: uE   
Por favor verifica que las claves estén configuradas correctamente./)osgetenvr   pathexistsr	   FileNotFoundErrorREQUIRED_KEYSappendsetattr
ValueErrorjoinboolr   OPENAI_API_KEY_VALIDATEDr   PINECONE_API_KEY_VALIDATEDr   XI_API_KEY_VALIDATEDr   endswithr   )selfenv_pathmissing_keyskeyvalues        r   r   zConfigManager._load_config"   s   ))L1 yyV4Hww~~h'H%"$))L"9 ZDO ww~~doo.#&DT__DU$VWW 	DOO$ %% 	&CIIcNESL0##C(D#u%		& ,TYY|-D,E F//3.? @WW  )-T-@-@(A%*.t/D/D*E'$($9!+/>>+B+B3+GT^^^aMa-1__-E-Ec-J$//PTP_P_bePer   )__name__
__module____qualname__r   r%   r   r   __classcell__)r   s   @r   r   r      s    I JM*fr   r   u"   Error crítico de configuración:    c                 j   t               }|y 	 |j                  d      }|j                  d| f       |j                         }|j                  d| f       |j	                         }|j                          |j                          |syt        j                         j                  d      }|j                  dd      j                         }|j                  d	d      j                         }|j                  d
d      j                         }|j                  dd      j                         }	|rdj                  d |D              nd}
d| d|xs d d|xs d d|xs d d|	xs d d|
 }|j                         S # t        j                  j                  $ r}t        d|        Y d }~y d }~ww xY w)NT
dictionarya'  
            SELECT 
                instruccion_saludo_despedida, 
                instruccion_personalidad, 
                instruccion,
                restricciones
            FROM 
                asistentes_instrucciones 
            WHERE 
                id_asistente = %s
            zt
            SELECT funcion 
            FROM asistentes_funciones 
            WHERE id_asistente = %s
            z7No se encontraron instrucciones para el asistente dado.%Y-%m-%d %H:%M:%Sinstruccion_saludo_despedida instruccion_personalidadinstruccionrestricciones
c              3   H   K   | ]  }d |d   j                            yw)z- funcionN)strip).0rD   s     r   	<genexpr>z&traer_instrucciones.<locals>.<genexpr>   s&     QG79-33567Qs    "u   Ninguna función registrada.uQ   # 🧠 Instrucciones para el Asistente Catastro Antioquia

**🕒 Hora actual:** u   

## 👋 Saludo y Despedida
zNo definido.u%   

## 💡 Personalidad del Asistente
u"   

## 📜 Instrucciones Generales
u#   

## 🚫 Restricciones y Límites
u#   

## 🛠️ Funciones Disponibles
Error: )conectar_dbcursorexecutefetchonefetchallcloser   nowstrftimegetrE   r)   mysql	connectorr   print)id_asistente
connectionrJ   instrucciones	funcioneshora_actualsaludo_despedidapersonalidadinstruccion_generalrA   funciones_textoinstrucciones_finalerrs                r   traer_instruccionesr`   T   s   J@""d"3 	
 O	
 ) 	
 O	
 OO%	L lln--.AB(,,-KRPVVX$(()CRHNNP+//rBHHJ%))/2>DDF  IIQyQQ< 	%%0M 2++;+M~*N O33?3Q>2R S00C0U~/V W11>1P.0Q R11@0AC 	 #((**??   uos   A:E= 
C2E= =F2F--F2	asistente	thread_idpreguntaarchivo	idclientesourcerU   voy_sin_hilohuman_on	volume_upc
                    t               }
|
j                  }|
j                  a	 t	        |      }|j
                  j                  j                         }|j                  D ]  } 	 t        |      }|dk(  rt	        |
j                        an|dk(  rt	        |
j                        ane|dk(  rt	        |
j                        anI|dk(  rt	        |
j                        an-|dk(  rt	        |      an|dk(  rt	        |
j                         ai }| |d<   ||d	<   ||d
<   ||d<   ||d<   ||d<   ||d<   d|d<   t#        ||||||	|||| 
       |S # t        $ r
}Y d }~d }~ww xY w)Napi_keyINSTR_IA_GENERALINSTR_CNX_SUMMITINSTR_OLIVOINSTR_CRED_MANAGER_CLIENTEINSTR_VALOR_MASINSTR_CREDIR_MASTERra   rb   rc   rd   re   rf   rU   Exito)r   r   r   rl   r   beta
assistantslistdata	Exceptionr`   OPENAI_API_IA_GENERALclientOPENAI_API_ONOPENAI_API_OLIVOOPENAI_API_LUCYOPENAI_API_CREDIR_MASTER	verificar)ra   rb   rc   rd   re   rf   rU   rg   rh   ri   config_managerapi_valor_masclient_testru   aerW   	json_datas                     r   mainr      s    #_N #77M++G]3 %%00557
 	A	 (5M ## D DE	%	% < <=	=	  ? ?@	/	/ > >?	$	$.	(	( G GH I&Ik&Ik$Ij"Ii&Ik Ih ,In IgiM8\9V^`ikrt}~C  s   AE 	E!E!c                      t         j                  } 	 t        j                  j                  di | }|j                         r|S y # t        j                  j                  $ r}t        d|        Y d }~y d }~ww xY wNrH    )
conexionesconfigrR   rS   connectis_connectedr   rT   )r   rV   r_   s      r   rI   rI      si    F__,,6v6
""$??   uo   0A A9!A44A9c                      t         j                  } 	 t        j                  j                  di | }|j                         r|S y # t        j                  j                  $ r}t        d|        Y d }~y d }~ww xY wr   )r   config2rR   rS   r   r   r   rT   )r   rV   r_   s      r   conectar_db2r      i      G__,,7w7
""$??   uor   c                      t         j                  } 	 t        j                  j                  di | }|j                         r|S y # t        j                  j                  $ r}t        d|        Y d }~y d }~ww xY wr   )r   config3rR   rS   r   r   r   rT   )r   rV   r_   s      r   conectar_db3r      r   r   c                     t         j                  j                  t        | d      d      }|j                  |j
                  fS )Nrbru   )filepurpose)rz   filescreateopenidbytes)rd   r   s     r   subir_archivor      s5    <<D$$7ND77DJJr   c                      	 t         j                  j                  j                         } | j                  S # t
        $ r}t        d|       Y d }~y d }~ww xY w)NzError al crear el hilo:)rz   rt   threadsr   r   rx   rT   )thread_responser   s     r   
crear_hilor     sI     ++--446!!! '+s   36 	AAAc            
      \   dg i} 	 t               }|w|j                         rg|j                         }d}|j                  |       |j	                         }|D ]/  }| d   j                  |d   |d   |d   |d   |d   |d   d	       1 r1|j                         r!j                          |j                          	 t        j                  | d      S # t        $ r}t        d
|       Y d }~dd }~ww xY w# r2|j                         r!j                          |j                          w w w xY w)Ntiposa  
                SELECT 
                    t.id,
                    t.categoria,
                    c.categoria AS nombre_categoria,
                    t.tipo_pqrsf,
                    t.area_encargada,
                    t.respuesta_ia,
                    t.usuario_encargado
                FROM pqrsf_tipos t
                INNER JOIN pqrsf_categoria c ON t.categoria = c.id
                WHERE t.status = 1
            r   r8               )id_tipoid_categorianombre_categorianombre_tipo_pqrsfrespuesta_iaid_usuario_encargadou.   Ocurrió un error en la consulta de los tipos:   )indent)rI   r   rJ   rK   rM   r&   rx   rT   rN   jsondumps)	resultadorV   rJ   	sql_tiposr   tipor   s          r   consultar_pqrsf_tiposr     s0   I% ]
!j&=&=&?&&(FI NN9%OO%E '"))#Aw$(G(,Q)-a$(G,0G+  *113LLN::i**  C>BBC *113LLN 4:s*   BC 	C2C-(C5 -C22C5 56D+c                     	 t        j                  dd      } | j                          | j                  }t	        j
                  |      j                         }t        j                  |      }|j                  d      st        d      |j                  dg       }|rt        |      dk  rt        d      |d	   d
   }|d   d
   }||fS # t        $ r}t        d|        Y d }~yd }~ww xY w)NzBhttps://dev.core.ayudacatastro.co:5002/ask/configCuentaServicios/1
   )timeoutsuccessu4   No se pudo obtener la configuración de blob storagerw   r   u8   No se encontraron suficientes datos en la configuraciónr   valorr8   u4   ❌ Error al obtener credenciales del Blob Storage: )NN)requestsrQ   raise_for_statustextbase64	b64decodedecodeastliteral_evalr(   lenrx   rT   )rbase64_datadecoded_datarw   cuentasblob_service_url	sas_tokenr   s           r   obtener_credenciales_blobr   9  s    LL]gij	ff ''4;;= -xx	"STT((62&#g,*WXX"1:g.AJw'	** DQCHIs   CC
 
	C+C&&C+c                    	 t               \  }}|r|st        d      | j                  dd      \  }}| d| d| d| }t        j                  |      }dt
        j                  j                  |       }t        |d      5 }|j                  |j                         j                                d d d        t        d|        |S # 1 sw Y   xY w# t        $ r}	t        d|	        Y d }	~	y d }	~	ww xY w)	Nz<No se pudieron obtener las credenciales para el Blob Storager   r8   ?z/tmp/wbu)   ✅ Archivo descargado correctamente en: u5   ❌ Error en descarga de archivo desde Blob Storage: )r   r(   splitr   from_blob_urlr    r"   basenamer   writedownload_blobreadallrT   rx   )
	ruta_blobr   r   	container	blob_pathblob_urlblob_client
local_pathfr   s
             r   descargar_blob_a_localr   V  s   &?&A#)y[\\(sA6	9 ''q1YKqL !..x8 RWW--i89:
*d# 	;qGGK--/779:	; 	9*FG		; 	;  EaSIJs0   BC .C	1C 	CC 	C6C11C6c                 L	   ||d<   |dk(  ryd }d }	 t               }||j                         rz|j                  d      }d}	|j                  |	|f       |j	                         }
|
r|
d   }t        j                  t        |      d      }t        j                         }||z
  t        d	
      k  r8	 |r|j                          |r"|j                         r|j                          yyyt        j                         j                  d      }|rdnd}|r|nd }|rdnd	}d}|j                  ||| ||||||||f
       |j                          |j                  }t        j                         j                  d      }| | | }d}|j                  |||f       |j                          d}|j                  || f       |j	                         j                  d      }d}|j                  ||f       |j	                         j                  d      }d}|j                  ||f       |j	                         }|r|j                  d      st        d       n|d   |d<   d}|j                  ||f       |j	                         }|dk(  rd}nd}| dk7  r|d   } |d   }!|  d |! }"|d!   }#	 t        |"      t        |#      t        |      t        |      t        |      t        |      t        |      d"}$t!        j"                  d#|$d$d%id&'      }%|%j$                  d(k(  rd)|d<   n|%j&                  |d*<   | dk(  r8||r|j                          |r"|j                         r|j                          S S S d,| |r|j                          |r"|j                         r|j                          S S S |r|j                          |r"|j                         r|j                          y y y # t         j(                  $ r$}&t        d+|&       t        |&      |d*<   Y d }&~&d }&~&ww xY w# t*        $ rE}&d-|& cY d }&~&|r|j                          |r"|j                         r|j                          S S S d }&~&ww xY w# |r|j                          |r"|j                         r|j                          w w w xY w).Nre   noh   El usuario no está autenticado. Se procederá a brindar orientación e información general disponible.Tr:   z
                SELECT fecha_radicado 
                FROM pqrsf 
                WHERE id_ciudadano = %s 
                ORDER BY fecha_radicado DESC 
                LIMIT 1
            fecha_radicador<   r8   )minutesuf   Ya se registró una solicitud recientemente. Por favor, espera al menos 1 minuto antes de enviar otra.Correor>   r   a  
            INSERT INTO pqrsf (
                num_radicado, fecha_radicado, id_categoria_pqrs, id_tipo_pqrs,
                contenido_solicid, id_ciudadano, id_predio, id_encargado, tipo_encargado, 
                respuesta_encargado, fecha_respuesta, medio_llegada, medio_respuesta, status
            ) VALUES (
                '', %s, %s, %s, %s, %s, 0, %s, 'Asistente', %s, %s, 'Catia', %s, %s
            )
            %Y%m%d0UPDATE pqrsf SET num_radicado = %s WHERE id = %sz3SELECT categoria FROM pqrsf_categoria WHERE id = %s	categoriaz0SELECT tipo_pqrsf FROM pqrsf_tipos WHERE id = %s
tipo_pqrsfz
            SELECT fd.ubicacion
            FROM pqrsf_tipos_fuentes tf
            JOIN fuentes_datos fd ON tf.id_fuente_datos = fd.id
            WHERE tf.id_pqrsf_tipo = %s
            	ubicacionu=   ⚠️ No se encontró ruta de archivo para este tipo de PQR.	Ruta_Blobz?SELECT nombres, apellidos, correo FROM ciudadanos WHERE id = %s
Finalizado	Pendiente6nombres	apellidos correo)	ciudadanocorreosr   r   estadofecha_respuestanum_radicadoz3https://core.ayudacatastro.co:5004/ask/sendEmailPQRContent-Typeapplication/jsonr   )r   headersr      u   Correo enviado con éxito.Error_Correou   ❌ Error en la solicitud HTTP:zHEste es el numero del radicado de la solicitud, informaselo al usuario: u'   Ocurrió un error al registrar el PQR: )rI   r   rJ   rK   rL   r   strptimestrrO   r   rN   rP   commit	lastrowidrQ   rT   r   poststatus_coder   RequestExceptionrx   )'r   r   contenido_solicitud	encargador   re   r   rV   rJ   	sql_checkregistro_existenteultima_fecha_strultima_fechaahorar   medio_respuestar   status
sql_insertlast_id	fecha_numr   
sql_updatesql_categoriacategoria_nombresql_tipotipo_nombre
sql_fuenter   sql_ciudadanor   status_nombrer   r   nombre_completor   payloadresponser   s'                                          r   registrar_pqrr  q  s   &IkDzJFR ]
!j&=&=&?&&$&7FI NN9yl3!'!2!#56F#G '005E1FH[\ <')A*>> Dr LLN*113 4:q &\\^445HIN +7hBO 1=n$O *QqFJ NN:g7J9lO_V\(   &&G !//9I'[G9=L LJNN:g'>? RMNN=</:%044[AIHNN8gZ0 //+//=KJ NN:z2)IIMM+$>UV)2;)?	+& ^MNN=9,7)I{ , +s"#I.%k2	%,IQyk":"8,7 &)%9#&v;%()9%:&)+&6"%m"4+.~+>(+L(9G  (}}M$!/1C D "	 H  ++s2.J	(+4<MM	.1 s"# LLN*113 4: bbnaop LLN*113 4: LLN*113 4:  00 7;Q?03AIn-7  =8<< LLN*113 4:= LLN*113 4:sh   B!P *F>P )BO  1P .P  P3PP PP 	Q(#Q#'Q((Q+ #Q((Q+ +8R#c                  $   t               } | y	 | j                  d      }d}|j                  |       i }|j                         D ]7  }|d   }|d   j	                         }||vrg ||<   ||   j                  |       9 d}t        |j                               D ]+  }|| dz  }t        ||         D ]  }	|d	|	 d
z  } |d
z  }- || j                         r!|j                          | j                          S S # t        j                  j                  $ r@}
d|
 cY d }
~
| j                         r!j                          | j                          S S d }
~
ww xY w# | j                         r!j                          | j                          w w xY w)N'Error al conectar con la base de datos.Tr:   z,SELECT titulo FROM wiki_bcgs ORDER BY titulotitulor   r>   z:
z  - rB   %Error al consultar la base de datos: )rI   rJ   rK   rM   upperr&   sortedkeysr   rN   rR   rS   r   )rV   rJ   queryglosariorowr  
first_charglosario_textolettertitler_   s              r   obtener_glosarior(    s   J8 ""d"3 ?u ??$ 	0C]F*J)')$Z ''/	0 X]]_- 	#Fn,N 01 3Dr"223d"N		#  ""$LLN %	 ??   =6se<< ""$LLN %	= ""$LLN %s0   B;C< <EEEE EE 3Fc                 r   t         j                  t        _        t	        t         j
                        }d}|j                  |      }d } ||       }t        j                  d      }|j                  |       }|r|d   }dd|ii}	ni }	|j                  |dd	|	
      }
|
d   D cg c]  }|d   	 }}|S c c}w )Nrk   wikic                 v    t         j                  j                  | d      }|j                  d   j                  S Nztext-embedding-ada-002)inputmodelr   openai
embeddingsr   rw   	embeddingtextor  s     r   generar_embeddingz$wiki_bcgs.<locals>.generar_embeddingC  :    $$++* , 
 }}Q)))r   \b[A-Z][a-z]+ [A-Z][a-z]+\br   Instruction$eq2   Tvectortop_kinclude_metadatafiltermatchesmetadatar   r   r0  rl   r   r   Indexrecompilefindallr!  )rc   pc
index_nameindexr5  embedding_preguntapatron_nombrecoincidenciasnombre_speakerfiltro
resultadosmatch	metadatoss                r   	wiki_bcgsrR  5       **FN 
&11	2B J HHZ E* +84
 JJ=>M!))(3M&q)%!89  !	  J 1;90EFuz"FIF G   $B4c                 r   t         j                  t        _        t	        t         j
                        }| }|j                  |      }d } ||      }t        j                  d      }|j                  |      }|r|d   }	dd|	ii}
ni }
|j                  |dd|
	      }|d
   D cg c]  }|d   	 }}|S c c}w )Nrk   c                 v    t         j                  j                  | d      }|j                  d   j                  S r,  r/  r3  s     r   r5  z-ejecutar_vectorial.<locals>.generar_embeddingu  r6  r   r7  r   r8  r9  r:  Tr;  r@  rA  rB  )indexerc   rG  rH  rI  r5  rJ  rK  rL  rM  rN  rO  rP  rQ  s                 r   ejecutar_vectorialrX  g  rS  rT  c                 F   |dk(  ry	 t               }|/|j                         r|j                  d      }t        j                         j                  d      }t        j                         j                  d      }d}|j                  ||| |||f       |j                          |j                  }	t        j                         j                  d      }
|
 | |	 }d	}|j                  |||	f       |j                          t        j                         j                  d      }d
}|j                  ||	|f       |j                          d}|j                  ||	|f       |j                          d}|j                  ||f       |j                         }|rt|d   }|d   }| d| }|d   }	 d| d| d| d| }t        j                  |      }|j                  dk(  r||d<   n%t        d|j                   d|j                          d|r2|j                         r!|j!                          |j!                          S S S |r2|j                         r!j!                          |j!                          y y y # t        $ r}t        d|       Y d }~d }~ww xY w# t        $ rC}d| cY d }~r2|j                         r!j!                          |j!                          S S S d }~ww xY w# r2|j                         r!j!                          |j!                          w w w xY w)Nr   uC   ID de cliente no proporcionado porque el usuario no está logueado.Tr:   r<   z%Y-%m-%da  
            INSERT INTO pqrsf (
                num_radicado, fecha_radicado, id_categoria_pqrs, id_tipo_pqrs, contenido_solicid, 
                id_ciudadano, id_predio, id_encargado, tipo_encargado, respuesta_encargado, fecha_respuesta, medio_llegada, medio_respuesta, status
            ) VALUES (
                '', %s, 1, 13, %s, %s, 0, 1, 'Asistente', %s, %s, 'Catia', 'Correo', 3
            )
            r   r   z
            INSERT INTO pqrsf_logs (id_pqrsf, fecha_hora, evento, descripcion, id_usuario, leida)
            VALUES (%s, %s, 'Inicio de respuesta', 'Inicio del proceso de respuesta', 1, 0)
            u   
            INSERT INTO pqrsf_logs (id_pqrsf, fecha_hora, evento, descripcion, id_usuario, leida)
            VALUES (%s, %s, 'Solución PQR', 'Se ha dado una respuesta al PQR', 1, 0)
            zq
            SELECT nombres, apellidos, correo
            FROM ciudadanos
            WHERE id = %s
            r   r   r   r   zEhttps://dev.ayudacatastro.co/api/crm/pqrsf/mailing_pqrsf.php?correos=z&ciudadano=uZ   &categoria=Petición&tipo_pqrsf=Horario de atención en taquilla&estado=3&fecha_respuesta=z&num_radicado=r   WhatsappzError en la llamada al PHP: r   u1   Ocurrió un error al intentar enviar el WhatsApp:u   Horario de atención en  taquilla	PETICION	De lunes a jueves a 7:30 am a 12:00 m y de 1:15 pm a 5:30 pm y los viernes de 7:30 am a 12:00 m y de 1:30 pm a 4:00 pm.u.   Ocurrió un error al registrar el PQR y logs: )rI   r   rJ   r   rO   rP   rK   r   r   rL   r   rQ   r   rT   r   rx   rN   )rc   	respuestare   r   rV   rJ   r   r   sql_insert_pqrsfr  r  r   r  
fecha_hora
log_iniciolog_solucionr  r   r   r   r  r   url_phpr  r   s                            r   pqr_horariora    sR   DT\ ]
!j&=&=&?&&$&7F &\\^445HIN&lln55jAO  NN+nh	S\^m-no &&G !//9I'[G9=L LJNN:g'>? "001DEJJ NN:'<=L NN<':)>?M
 NN=9,7)I#I.%k2	%,IQyk":"8,R eflemmx  zI  yJ  Jd  et  du  uC  DP  CQ  RG  (||G4H  ++s207	*- <X=Q=Q<RRTU]UbUbTcde
 | *113LLN 4:*113LLN 4: ! RMqQQR
  D?sCC *113LLN 4:D
 *113LLN 4:s[   F(J 1AI9 J 9	JJJ JJ 	K'$K"(K')K* "K''K* *6L c                    | dk(  ry	 t               }||j                         sdddS |j                  d      }	 |j                         r!|j	                          |j                         r!|j                  d| f       |j                         }|s&dd	| d
|j                          |j                          S |d   }|j                          |j                          t               }||j                         sdddS |j                  d      }	 |j                         r!|j	                          |j                         r!|j                  d|f       |j                         }|s%ddd|j                          |j                          S |d   }|j                         r!|j	                          |j                         r!|j                  d|f       |j	                         }	|	r@t        dt        |	       d| d       d|	d|j                          |j                          S t        d| d       ddd|j                          |j                          S # |j                          |j                          w xY w# |j                          |j                          w xY w# t        $ r }
t        d|
        dd|
 dcY d }
~
S d }
~
ww xY w)Nr   y   No se puede entregar la información porque el usuario no está logiado. Debe iniciar sesión para consultar sus predios.error1No se pudo conectar a la base de datos principal.r
  messageTr:   zw
                SELECT `num_doc_ident`
                FROM `ciudadanos`
                WHERE `id` = %s;
            uX   La persona no se encuentra registrada. No se puede proporcionar información de predios.)r
  rg  re   num_doc_ident6No se pudo conectar a la base de datos de propiedades.zv
                SELECT `FICHA`
                FROM `registro_1`
                WHERE `DOCUMENTO` = %s;
            zLNo se encontraron registros en 'registro_1' para el documento proporcionado.FICHAu  
                SELECT 
                    my_row_id, TOTAL_REGISTROS, NRO_ORDEN, COD_MUNICIPIO, MNCPIO_NOMBRE, NPN, SECTOR, CORREGIMIENTO, 
                    BARRIO, MNZVER, TERRENO, NRO_CONS, FICHA, CIRULO, MATRICULA, DIRECCION, NUMERO, PUNTOS, PISOS, 
                    COCINAS, HABITACIONES, LOCALES, BAÑOS, TIP_CONST, IDUSO, VR_IDNUSO_NOMBRE, TIP_NOMBRE, EDAD, 
                    PORC_CONS, UNDPRD_COEFICIENTE, TERRENO_HA, AREA_CONSTRM2, AREA_CONSTR_TOTAL_M2, VALOR_CONSTR, 
                    AVALUO_CONSTR_TOTAL, AVALUO_TERRENO, AVALUO_TOTAL, VIGENCIA, CEDCATAS, CARACTERISTICA, TIPO_PREDIO, 
                    SECTOR2
                FROM `registro_2`
                WHERE `FICHA` = %s;
            u   ✅ Se encontraron z predios asociados a la ficha .r   )r
  rw   u6   ⚠️ No se encontraron predios asociados a la ficha z5No se encontraron predios con la ficha proporcionada.u,   ❌ Error general al consultar los predios: u,   Ocurrió un error al consultar los predios: )rI   r   rJ   nextsetrM   rK   rL   rN   r   rT   r   rx   )re   rV   rJ   cliente	documentoconnection2cursor2	registro1fichaprediosr   s              r   predios_de_propietariort    s   D KYb ]
Z%<%<%>%2eff""d"3	.."! .." NN  	
 oo'G%y!* LLN  0ILLN #nk&>&>&@%2jkk$$$5/	 //#  " //# OO  	
  ((*I%mB MMO; g&E //#  " //# OO 
 
 &&(G+CL>9WX]W^^_`a"+W= MMO NugUVWX")6mn MMOq LLNl MMO b<QC@A!0\]^\_.`aabs    J% J% 0I -*I  J% 8I =A J% >J% 0J  )J  + J% 5J  AJ   J% 'J  : J% "I==J%  "J""J% %	K.K	K	Kc                 <	   | dk(  ryd }d }d }d }	 t               }||j                         s;ddd|r|j                          |r"|j                         r|j                          S S S |j                  d      }|j	                         r!|j                          |j	                         r!|j                  d| f       |j                         }|s;dd	d|r|j                          |r"|j                         r|j                          S S S |d
   }|j                          |j                          t               }||j                         s;ddd|r|j                          |r"|j                         r|j                          S S S |j                  d      }|j	                         r!|j                          |j	                         r!|j                  d|f       |j                         }|s;ddd|r|j                          |r"|j                         r|j                          S S S d}|D ]J  }	|	d   }
|j	                         r!|j                          |j	                         r!|j                  d|
f       |j                         }|r|d|
 dz  }|D ]  }|j                  dd       d|j                  dd       d|j                  dd       d|j                  dd       j                         }|r|n|j                  dd      }|d|d    d|d    d|d    d|d     d!|d"    d#| d$|j                  d%d       d&|j                  d'd       d(|j                  d)d       d*z  } B|d+|
 d,z  }M |j                         dk(  r;dd-d|r|j                          |r"|j                         r|j                          S S S |j                         |r|j                          |r"|j                         r|j                          S S S # t        $ rH}dd.| dcY d }~|r|j                          |r"|j                         r|j                          S S S d }~ww xY w# |r|j                          |r"|j                         r|j                          w w w xY w)/Nr   rc  rd  re  rf  Tr:   za
            SELECT num_doc_ident
            FROM ciudadanos
            WHERE id = %s;
        u!   El ciudadano no está registrado.rh  ri  z`
            SELECT FICHA
            FROM registro_1
            WHERE DOCUMENTO = %s;
        z:No se encontraron fichas prediales asociadas al ciudadano.r>   rj  a  
                SELECT 
                    r2.FICHA,
                    r2.MATRICULA,
                    r2.DIRECCION,
                    r2.AREA_CONSTR_TOTAL_M2,
                    r2.AVALUO_TERRENO,
                    r1.NOMBRE1,
                    r1.NOMBRE2,
                    r1.APELLIDO1,
                    r1.APELLIDO2,
                    r1.RAZON_SOCIAL,
                    r1.PORC_DERECHO,
                    r1.MODO_ADQUISICION,
                    r1.FECHA_REGISTRO
                FROM 
                    registro_2 r2
                INNER JOIN 
                    registro_1 r1 ON r2.NPN = r1.NPN
                WHERE 
                    r2.FICHA = %s;
            u&   
📌 Propietarios para ficha predial z:

NOMBRE1r   NOMBRE2	APELLIDO1	APELLIDO2RAZON_SOCIALzN/Au   🧾 Ficha: u   
📜 Matrícula: 	MATRICULAu   
📍 Dirección: 	DIRECCIONu$   
📐 Área construida total (m²): AREA_CONSTR_TOTAL_M2u   
🌍 Avalúo terreno: AVALUO_TERRENOu   
👤 Propietario: u   
🔢 Porcentaje derecho: PORC_DERECHOu   
📝 Modo de adquisición: MODO_ADQUISICIONu   
📅 Fecha de registro: FECHA_REGISTROz.
--------------------------------------------
u5   
⚠️ No se encontraron propietarios para la ficha z.
zINo se encontraron datos de propietarios para ninguna ficha del ciudadano.u1   Ocurrió un error al consultar los propietarios: )rI   r   rN   rJ   rl  rM   rK   rL   r   rQ   rE   rx   )re   rV   ro  rJ   rp  rm  rn  fichasr   	ficha_rowrr  propietariospr  nombre_finalr   s                   r   propietarios_del_predior  Y  s   D KJKFGn  ]
Z%<%<%>%2efN MMO;335 6;O ""d"3nnOO nn 	  \		
 //#%2UVr MMO;335 6;s O,	 #nk&>&>&@%2jk` MMO;335 6;a $$$5oo oo 	  \		
 !!#%2noD MMO;335 6;E 	 4	aIg&E//#  " //# OO * +, #++-LFugUSS	% A55B/0!%%	22F1Gq55b12!AEE+r4J3KMMRUW $ 7F?155Q_afKgL&qzl 3,,-kN+; <,,-kN+; <>>?@V>W=X Y1123C1D0E F--9N ;445EE.%4P3Q R667ee<NPU6V5W X334559I53Q2R SI	II& UV[U\\_``	i4	al ??"%2}~ MMO;335 6;   MMO;335 6;  g!0abcad.eff MMO;335 6;g MMO;335 6;sc    P 'AP *)P 
AP AP 	)P )=P 'D+P 	P 	Q QQ  Q# Q  Q# #8Rc                 L   |dk(  ryt               }|y	 |j                  d      }d}|j                  || f       |j                         }|rd|d    d	|d
    d|d    d|d    d|d    d|d    d|d    d|d    d|d    d|d    d|d    d|d    d|d    d |d!    d"|d#    }||j	                         r!|j                          |j                          S S 	 |j	                         r!|j                          |j                          y$y$# t        j                  j                  $ r@}d%| cY d }~|j	                         r!j                          |j                          S S d }~ww xY w# |j	                         r!j                          |j                          w w xY w)&Nr   r   r  Tr:   a)  
            SELECT 
                pq.id AS id_radicado,
                pq.num_radicado,
                pq.fecha_radicado,
                cat.categoria AS categoria_pqrs,
                tipos.tipo_pqrsf AS tipo_pqrs,
                tipos.area_encargada,
                pq.contenido_solicid,
                ciu.nombres AS nombre_ciudadano,
                ciu.apellidos AS apellido_ciudadano,
                emp.nombres AS nombre_encargado,
                emp.apellidos AS apellido_encargado,
                tipos.respuesta_ia,
                pq.respuesta_encargado,
                pq.fecha_respuesta,
                est.status AS estado
            FROM pqrsf pq
            INNER JOIN pqrsf_categoria cat ON pq.id_categoria_pqrs = cat.id
            INNER JOIN pqrsf_tipos tipos ON pq.id_tipo_pqrs = tipos.id
            INNER JOIN ciudadanos ciu ON pq.id_ciudadano = ciu.id
            INNER JOIN empleados emp ON pq.id_encargado = emp.id
            INNER JOIN pqrsf_status est ON pq.status = est.id
            WHERE pq.num_radicado = %s
        zID del Radicado: id_radicado   
Número de Radicado: r   
Fecha de Radicado: r      
Categoría PQRs: categoria_pqrs
Tipo PQRs: 	tipo_pqrsu   
Área Encargada: area_encargada
Contenido de la Solicitud: contenido_solicidz
Ciudadano: nombre_ciudadanor   apellido_ciudadanoz
Encargado: nombre_encargadoapellido_encargadoz
Respuesta IA: r   
Respuesta del Encargado: respuesta_encargado
Fecha de Respuesta: r   	
Estado: r   u9   No se encontraron resultados para el número de radicado.r  )	rI   rJ   rK   rL   r   rN   rR   rS   r   )r   re   rV   rJ   r!  resultresult_textr_   s           r   consulta_radicador    s6   DzJ8<""d"32 	u|o. " $F=$9#: ;((.~(>'? @&&,-=&>%? @$$*+;$<#= >$[12 3$$*+;$<#= >..45H.I-J K$%7896BV;W:X Y$%7896BV;W:X Y!!'!7 8 9,,23H,I+J K''-.?'@&A B!(+,.   ""$LLN % O ""$LLN %	 ??   =6se<< ""$LLN %	= ""$LLN %s0   BD E--E(1E-2E0 (E--E0 03F#c                    t               }|y	 |j                  d      }d}|j                  || f       |j                         }|s3	 |j	                         r!|j                          |j                          yyd}|j                  || f       |j                         }d|d    d	|d
    d|d    d|d    d|d    d|d    d|d    d|d    d|d    d}|rI|dz  }|D ]>  }|d|d    d|d    d|d     d!|d"    d#|d$    d%|d&    d'|d(    d)|d*    d|d+    d,z  }@ n|d-z  }||j	                         r!|j                          |j                          S S # t        j                  j                  $ r@}	d.|	 cY d }	~	|j	                         r!j                          |j                          S S d }	~	ww xY w# |j	                         r!j                          |j                          w w xY w)/Nr  Tr:   aH  
            SELECT 
                id, 
                nombres, 
                apellidos, 
                tipo_doc_ident, 
                num_doc_ident, 
                correo, 
                telefono, 
                direccion, 
                status 
            FROM ciudadanos 
            WHERE id = %s
        uG   No se encontró información para el ciudadano con el ID proporcionado.a  
            SELECT 
                pq.id AS id_radicado,
                pq.num_radicado,
                pq.fecha_radicado,
                cat.categoria AS categoria_pqrs,
                tipos.categoria AS tipo_pqrs,
                pq.contenido_solicid,
                pq.respuesta_encargado,
                pq.fecha_respuesta,
                est.status AS estado
            FROM pqrsf pq
            INNER JOIN pqrsf_categoria cat ON pq.id_categoria_pqrs = cat.id
            INNER JOIN pqrsf_tipos tipos ON pq.id_tipo_pqrs = tipos.id
            INNER JOIN pqrsf_status est ON pq.status = est.id
            WHERE pq.id_ciudadano = %s
        zDatos del Ciudadano:
ID: r   z
Nombre Completo: r   r   r   z
Tipo de Documento: tipo_doc_identu   
Número de Documento: rh  z	
Correo: r   u   
Teléfono: telefonou   
Dirección: 	direccionr  r
  

zRegistros Asociados en PQRSF:
z
ID del Radicado: r  r  r   r  r   r  r  r  r  r  r  r  r  r  r   r   rB   z/No se encontraron registros asociados en PQRSF.r  )
rI   rJ   rK   rL   r   rN   rM   rR   rS   r   )
id_ciudadanorV   rJ   query_ciudadanor   query_pqrsfregistros_pqrsfr   registror_   s
             r   consulta_ciudadanor    s   J8T""d"3 	8OO%	\x ""$LLN %s" 	{\O4 //+T?# $  )) 45Qy7M6N O""+,<"=!> ?%%.%?$@ A *+ ,#J/0 1$[12 3 *+41 	 ::I+ )(=*A)B C,,4^,D+E F**23C*D)E F((01A(B'C D""*;"7!8 922:;N2O1P Q0089N0O/P Q++34E+F*G H'12"6
	 JJI ""$LLN %	 ??   =6se<< ""$LLN %	= ""$LLN %s6   9E ;B/E F99F4=F9>F< 4F99F< <3G/c                     t               } | y	 | j                  d      }d}|j                  |       i }|j                         D ]  }|d   }|d   |d   |d   d	||<    d
}|j	                         D ]2  \  }}|d| dz  }|d|d    dz  }|d|d    dz  }|d|d    dz  }4 || j                         r!|j                          | j                          S S # t        j                  j                  $ r@}d| cY d }~| j                         r!j                          | j                          S S d }~ww xY w# | j                         r!j                          | j                          w w xY w)Nr  Tr:   u\   SELECT `id`, `Municipio`, `Dirección`, `Name_Operador` FROM `municipios_operadores` WHERE 1	Municipior   
   DirecciónName_Operador)IDr  Operadorr>   Municipio: rB     - ID: r  u     - Dirección: z  - Operador: r  r  r  
rI   rJ   rK   rM   itemsr   rN   rR   rS   r   	rV   rJ   r!  
municipiosr#  	municipiomunicipios_textoinfor_   s	            r   "municipios_actualizacion_catastralr  u  s   J8!""d"3 ou 
??$ 	CK(I$i!,/0%Jy!	 )//1 	HOIt+i[ ;;(4:,b 99"243E2Fb II.j1A0B$ GG		H   ""$LLN %	 ??   =6se<< ""$LLN %	= ""$LLN %s0   BC D99D4=D9>D< 4D99D< <3E/c                     t               } | y	 | j                  d      }d}|j                  |       i }|j                         D ]  }|d   }d|d   i||<    d}|j	                         D ]  \  }}|d	| d
z  }|d|d    dz  } || j                         r!|j                          | j                          S S # t        j                  j                  $ r@}d| cY d }~| j                         r!j                          | j                          S S d }~ww xY w# | j                         r!j                          | j                          w w xY w)Nr  Tr:   z4SELECT id, nombre_municipio FROM municipios_atencionnombre_municipior  r   r>   r  rB   r  r  r  r  r  s	            r   municipios_atencionr    sr   J8""d"3 Gu 
??$ 	C./Ic$i%Jy!	 )//1 	<OIt+i[ ;;(4:,d ;;	<   ""$LLN %	 ??   =6se<< ""$LLN %	= ""$LLN %s0   A;B< <DDDD DD 3Ec                 
   |dk(  rd}da nd}|dk7  r#t        |      }|d   }|d   a t         |d<   ||d<   	 |dk7  r?t        j                  j                  j
                  j                  | d|d	d
igdg       n6t        j                  j                  j
                  j                  | d|       t        j                  j                  j                  j                  | ||      }	t        d      D ]  }
t        j                  j                  j                  j                  | |	j                        }|j                  dk(  r n|j                  dk(  r5d|d<   |j                  }|j                  j                  }g }|D ]  }|j                  j                   }|j                  j"                  }t%        j&                  |      a||d<   d }	 |dk(  rt)               }||d<   |dk(  r9t+        t"        d   t"        d   t"        d   t"        d   t"        d   ||      }||d<   |dk(  rt-               }||d<   |dk(  rt/        t"        d         }||d<   |dk(  r!t1        t"        d    t"        d!   ||      }||d<   |d"k(  rt3        |      }||d<   |d#k(  rt5        |      }||d<   |d$k(  rt7        t"        d%   |      }||d<   |d&k(  rt9        t"        d%         }||d<   |d'k(  rt;        t"        d(   |      }||d<   |d)k(  rt=               }||d<   |d*k(  rt?               }||d<   |jA                  |j                  tC        |      d+        |rA	 t        j                  j                  j                  j                  | |	j                  |/      }	tU        jV                  d       |j                  jY                  d4d5      |d6<    tG        d7       y t        j                  j                  j
                  j[                  | 8      }|j\                  D ]8  }|j^                  d9k(  s|j`                  d   jb                  jd                  }|c S  y # tD        $ rG}tG        d,|       tG        d-t"               tG        d.t%        jH                  |             Y d }~ Md }~ww xY w# tD        $ r}tG        d0|       tG        d1tK        |      jL                         tO        jP                          t        j                  j                  j                  jS                  | |	j                        }tG        d2|j                         Y d }~ y3d }~ww xY w# tD        $ r}tG        d:|       Y d }~y d }~ww xY w);Nr   r>   r   sir8   u   tamaño_archivofile_idusertypefile_search)r  tools)rb   rolecontentattachmentsrb   r  r  )rb   assistant_idinstructions<   )rb   run_id	completedrequires_actionejecutando_funcionr   rtamysqlr  r   r   r  r  r   r(  rR  palabra_glosariora  rc   r[  rt  r  r  numeror  rX  nombrer  r  )tool_call_idoutputz,Error al enviar la respuesta al asistente 3:zArgumentos:zJson hasta el momento:)rb   r  tool_outputsz,Error al enviar la respuesta al asistente 2:u   Tipo de excepción:zRun cancelado:zOParece que hay intermitencia en la red, por favor envia tu pregunta nuevamente.in_progresszPensando...
run_statusu7   Tiempo de espera excedido para la ejecución del 'run'.)rb   	assistantzError al hacer la pregunta:)3   tamaño_archivor   rz   rt   r   messagesr   runsrangeretriever   r
  required_actionsubmit_tool_outputs
tool_callsfunctionname	argumentsr   loadsr   r  r(  rR  ra  rt  r  r  r  rX  r  r  r&   r   rx   rT   r   r  r4   	traceback	print_exccanceltimesleepreplacerv   rw   r  r  r   r3   )rb   rc   r   rd   ra   rW   re   r  files_idrun_r  r  r  tools_outputs	tool_callnombre_funcionarguments_jsonr  r   cancelarr  rg  r[  s                           r   hacer_preguntar    s    $"}(1:!!*'6	#$'	)\b=KK((//# '%}56 	 0  KK((//#  0 
 kk!!&&--im . 

 r |	A,,11::#CFF ; J   K/  $55/@	+,","<"<,@@KK
 !#!+ SI%.%7%7%<%<N%.%7%7%A%AN $

> :I6DI23  $HH)-DD'<'>H4<Ij1)_<'4 ). 9 )) 4 )*? @ )+ 6 ). 9 ) )(H 5=Ij1)-??'7'9H4<Ij1)[8'0;M1N'OH4<Ij1)]:'2 )* 5 )+ 6 ) )	(H 5=Ij1)-EE'= )(H 5=Ij1)-FF'> )(H 5=Ij1)-@@'8 )( 3 )(H 5=Ij1)-AA'9 )( 3(H 5=Ij1)-AA'9)H:Mx'XH4<Ij1)-QQ'I'KH4<Ij1)-BB':'<H4<Ij1 &,,,5LL&)(m. SSl !q$kk1166JJ&/#&66)6 K " JJqM&0&7&7&?&?}&]Il#s|	v KL;;&&//44y4I}} 	!G||{*#OOA.3399	  	!G % LaP}i87I9NO % 
qLaP3T!W5E5EF!++- $*;;#6#6#;#;#B#B&/ $C $ .@p
q0  +Q/s   FU E7Q
U A RAU AU !&U U 
	R;RU RU 	U&BU :U  UU 	U'U""U'c                     ddddddddd	d
dddd}|j                         D ]  \  }}| j                  ||      }  t        j                  dd|       j	                         } | S )N   á   é   í   ó   ú   ñ   Ñ   ü   É   Ú   Ó   Í   À)u   Ã¡u   Ã©u   Ã­u   Ã³u   Ãºu   Ã±u   Ã‘u   Ã¼u   Ã‰u   Ãšu   Ã“u   Ã�u   Ã€z\s+r   )r  r  rD  subrE   )r4  
reemplazos
incorrectocorrectos       r   limpiar_textor  r  sy     dD$tTD$tJ !+ 0 0 2 4
Hj(34 FF63&,,.ELr   c                    t        |      }	 t               }|t        d      	 	 |j	                  d      }d}|j                  || f       |j                         }|s5ddi|j                         r!|j                          |j                          S S |d   d	k(  rd
nd}d|d    d|d    d|d    d| }	d| d|	 d}
d|d    d}dt        j                  d}t        j                  |||
      }|j                  dk(  rt        j                  dd      }d| d |  d!}t        j                    | }t        j"                   | }t%        |d"      5 }|j'                  |j(                         d d d        ||j                         r!|j                          |j                          S S d#d$|j                   d%|j*                   d&|j                         r!|j                          |j                          S S # t        $ r}ddt        |       icY d }~S d }~ww xY w# 1 sw Y   xY w# |j                         r!j                          |j                          w w xY w)'Nr  rd  z(Error al conectar con la base de datos: Tr:   a  
            SELECT 
                asistentes.id_voz,
                voces.nombre_voz,
                voces.id_eleven,
                asistentes_voces.similarity_boost,
                asistentes_voces.stability,
                asistentes_voces.style,
                asistentes_voces.use_speaker_boost
            FROM asistentes
            INNER JOIN asistentes_voces ON asistentes.id_voz = asistentes_voces.id
            INNER JOIN voces ON asistentes_voces.id_modelo_voz = voces.id
            WHERE asistentes.id = %s
        u5   No se encontró un asistente con el ID proporcionado.use_speaker_boostr8   truefalsez"similarity_boost": similarity_boostz, "stability": 	stabilityz, "style": stylez, "use_speaker_boost": z5{
  "model_id": "eleven_multilingual_v2",
  "text": "z",
  "voice_settings": {
    z
  }
}z,https://api.elevenlabs.io/v1/text-to-speech/	id_elevenz9?optimize_streaming_latency=0&output_format=mp3_44100_128r   )r   z
xi-api-key)r   rw   r   i'  i audio_r  z.mp3r   FzError en ElevenLabs: z - )r   rd  )r  rI   rx   r   rJ   rK   rL   r   rN   r   r   r   r   r   randomrandintr   r   r   r   r  r   )rU   r4  texto_limpiorV   r   rJ   	query_vozra   r  voice_settingsr  api_urlr   r  numero_aleatorionombre_archivo
ruta_audio	audio_url
audio_files                      r   )obtener_configuracion_voz_y_generar_audior    s    'LN ]
EFF J""d"3	 	y</2OO%	TUf ""$LLN %a '00C&D&IFw %Y/A%B$C D'45 6#G,- .&&7%8: 	)N +--;,< = 	 A;AW@X  YR  S / ++
 =='H3&%~~eU;%&6%7qdKN"--.~.>?J!++,^,<=I j$' 3:  !1!123  ""$LLN % !01E1E0Fc(--Y ""$LLN %W  NCCF8LMMN@3 3 ""$LLN %sM   G= <H/ CH/ H#2	H/ -H/ =	H HH H #H,(H/ /3I"c                 `    t        j                  |      }t        |j                  |             S )u5   Calcula el número de tokens consumidos por un texto.)tiktokenencoding_for_modelr   encode)r4  modeloencodings      r   contar_tokensr!    s&    **62Hxu%&&r   c           
         t               }|y	 |j                         }d}d}t        ||      }t        ||      }	d}
| ||t        j                         ||||	|df
}|j                  |
|       |j                          	 |j                         r!|j                          |j                          yy# t        j                  j                  $ r@}d| cY d}~|j                         r!j                          |j                          S S d}~ww xY w# |j                         r!j                          |j                          w w xY w)	uZ   Registra la interacción en la base de datos con el cálculo de tokens usando GPT-4 Turbo.Nr  zgpt-4-turboWEBz
        INSERT INTO conversaciones (id_asistente, modelo, llegada, fecha_hora, pregunta, respuesta, input, output, usuario, telefono)
        VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
        0z!Registro insertado correctamente.z'Error al insertar en la base de datos: )r   rJ   r!  r   rO   rK   r   r   rN   rR   rS   r   )rU   rc   r[  re   rV   rJ   r  llegadatokens_inputtokens_outputr!  valoresr_   s                r   insertar_logsr)    sB    J8 ""$   %Xv6%i8
  (,,.(IWcert}  @C  Dug&2 ""$LLN %	 ??   ?8>> ""$LLN %	? ""$LLN %s0   A.B0 0DDDD DD 3Ec
           	         |dk(  r_t               }|rS||d<   ||d<   	 t               }
d|d<   t        j                  j                  j
                  j                  |dd|
        |rCt        |||||	||       }|r/|dk(  r|dk(  rt        ||      }||d<   t        ||||        ||d<   y y y # t        $ r}d	| |d
<   Y d }~y d }~ww xY w)NnadaTarea_Creadarb   zse paso el contexto enterofuncion_inicial_contextor  zxEste es el contexto inicial que debes tener en cuenta antes de responder cualquier pregunta que pueda tener el usuario:
r  z4Error ejecutando manualmente consultar_pqrsf_tipos: error_funcion_inicialr  r  	Respuesta)r   r   rz   rt   r   r  r   rx   r  r  r)  )re   rb   rW   rc   rU   volumenaudio_humanor   rd   ra   resultado_funcionr   r[  r  s                 r   r   r   	  s   FL	(1In%%.Ik"$9$;!8T	45 ##,,33' T,-/	 4  "9h	7IWdfop	$<4#7F|U^_
*4	,',)YG%.Ik"    7klmkn5o	12s   AB+ +	C4CC)zgpt-3.5-turbo)=r0  r   r   r  rD  pineconer   r   r   azure.storage.blobr   r   r   r   
a_env_varsmysql.connectorrR   r   sysr   r  r  r  dotenvr	   r    r   r   rx   r   rT   r   
SystemExitr`   intr   rI   r   r   r   r   r   r   r   r  r(  rR  rX  ra  rt  r  r  r  r  r  r  r  r  r!  r)  r   r   r   r   <module>r;     s       	  ( )  
     ! 
      	4f 4fl_F
EP5C 5C 53 5 55!$5475GJ55#&5r
,+\:6Zx&P0d0d_B]b~w rENZx'R#Ll\"Un'
(T#/s-  	.s1vh
78
Q-s   2C! !D&C??D