o
    JiJ                     @   sB   d dl Z d dlZd dlZddddedededed	ef
d
dZdS )    N zapplication/octet-stream)filenamemimetypemodelprompt
file_bytesr   r   c              
   C   s  |  ds|  dkr>z'ddl}|j|dd}|d}ttdd}|j|d}	|		d	}d
}W n	 t
y=   Y nw z
ddlm}
m} W n t
yY } ztd|d}~ww |
 }t|d}d| d| }d|ddd|idg}z%|jjj| d|dgddid}|jd jj}t|trt|W S |W S  |y } zW Y d}~nd}~w t
y   Y nw d| }d|ddd|idg}|jjj| d|dgd}|jd jj}zt|trt|W S |W S  t
y   d|i Y S w )u  
    Interfaz estable para toda la plataforma.
    - JPG/PNG directo; si es PDF intenta convertir 1ª página a PNG con PyMuPDF si está disponible.
    - Usa SOLO chat.completions; sin 'temperature'.
    - Primer intento con response_format JSON; si el SDK/modelo no lo soporta, reintenta sin response_format
      y fuerza JSON por prompt.
    Devuelve dict (parse de JSON); si el modelo devuelve texto no-JSON en el fallback, retorna {"_raw": "..."}.
    pdfzapplication/pdfr   N)streamfiletypeWP_INVOICES_DEFAULT_DPI220)dpipngz	image/png)OpenAIBadRequestErrorz'openai SDK no instalado o incompatible.zutf-8zdata:z;base64,text)typer   	image_urlurl)r   r   user)rolecontentr   json_object)r   messagesresponse_formatuR   Responde ÚNICAMENTE con un objeto JSON válido, sin comentarios ni texto extra.

)r   r   _raw)lowerendswithfitzopen	load_pageintosgetenv
get_pixmaptobytes	Exceptionopenair   r   ImportErrorbase64	b64encodedecodechatcompletionscreatechoicesmessager   
isinstancestrjsonloads)r   r   r   r   r   r   docpager   pixr   r   eclientb64data_urlr   respr   fallback_promptcontent_fallback r?   3/var/www/html/flask_server/shared/openai_manager.pyrun_vision_json   sj   





rA   )r)   r3   r"   r2   bytesrA   r?   r?   r?   r@   <module>   s   *