o
    6f6.                     @   s   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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mZ dd Zdd Zd	d
 Zdd ZdddZdS )    N)OpenAI)MistralClient)ChatMessagec                 C   s  | }t   t d t |  t d | d}|dkrN| |d d  } | d}|dkrM| d | } | d}| d}|}||k rC|}|dkrM| |d  } n| d}| d}| d	|d
 }d}|dkrp||k rp||k rpd}|dkrt| }d}	d}
d}d}d}|
|k r| |
 }|dkr|	d
7 }	|dkr|
}d}n|dkr|	d
8 }	|	dkr|dkr|
}q|
d
7 }
|
|k s| ||d
  } n| d	}| d}| ||d
  } | dd} | dd} d}|dkrd}| d}|dkr| d|}|dkrd}| d| | |t|   } |dkst   t d t |  t d i }zt| }W |S    t   t d t d t d t | t   t d|   t d t d Y |S )Nz6----------------- Make it compliant ------------------z6------------------------------------------------------z```jsonr      z```{[]   FT}
 Nonenullz//zF------------------------ After simplification ------------------------zF----------------------------------------------------------------------zT++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++z ERROR: impossible to parse [II]:zThe extracted string is )printfindlenrfindreplacejsonloads)respZoriginalRespidx1idx2Zidx31Zidx32Zidx3ZisArraynbcZnbpiZdstartZi1Zi2sZirdx1Zirdx2foundjresp r   :E:\wamp\www\apps\calme\nutritwin\resources\KCALLMEngine.pymakeTextJSONCompliant   s   













r!   c                 C   s   g }|  d}|dkr| |d  } nd|  } | d}|dkr(| d|d  } n| d } |  ddkr9| dd} | d	d
} | dd} | dd} | dd} | dd
} t| }z|D ]}|d }q_W |S    | Y S )Nr   r   r   r	   zun demir
   z'demiz'un demir   z""r   r   zAnswer:.r   name)r   r   r   r   r   )r   ZjDefRespr   r   r   jjr#   r   r   r    setJSONFormat   s0   



r%   c                 C   s:   i }t | }t|d|}z	|d  }W |S    Y |S )Nr   response)KCALLMPromptgetSplitPromptsrunLLMcopy)promptmodelpromptssplitPromptr   r   r   r    r.      s   
r.   c                 C   sX   g }|dkr| tj |S t|| }t|d|}z|d d  }W |S    Y |S )Nr   r&   intents)appendKCALLMConstINTENT_IMAGE_TO_FOODr'   getIntentDetectionPromptr)   r*   )
intentListr+   image64r,   r/   ZintentPromptr   r   r   r    getIntentsFromPrompt   s   r6   Tc                 C   s  i }d}|}|dkrt d t d t d tj}t|}|t_d}d}	t   t d t |  t d t   d}
|tjkrt|}|dkrfd| d	g}t|d
}|jjj	||d|dd}|j
d jj}
nt d dd| d}ddd| dddd| idgd	gdd}tjd||d}| }|d d d d }
nQ|tjkrd| d	g}td |d!}|jjj	||d"dd#}|j
d jj}
n-|tjkrt|}t|d
}|j|td| d	gd$}|j
d jj}
|jj}	|jj}nd S td td% t|
 td& g }d}z$|d'krt|
}n|
}z|d d( dkr&d)|d d(< W n   Y W n   Y t||d*< d+}d,}|| |	|  |d-< |S ).Ni  r   z+###########################################z+#   For image extraction, GPT4 is used    #r   zY==================================== Prompt =============================================zY=========================================================================================user)Zrolecontent)api_keyFg        )r,   messagesstream
max_tokenstemperaturezImage recognition....zapplication/jsonzBearer )zContent-TypeAuthorizationzgpt-4-vision-previewtext)typer?   	image_urlurlzdata:image/jpeg;base64,)r@   rA   i,  )r,   r:   r<   z*https://api.openai.com/v1/chat/completions)headersr   choicesmessager8   z%http://px101.prod.exalead.com:8110/v1)base_urlr9   i  )r,   r:   r<   r=   )r,   r:   zM------------------------------ LLM Raw response -----------------------------zM-----------------------------------------------------------------------------Teventunknownr&   ghUMu?ghUMu?Zcost)r   
KCALLMCore
MODEL_GPT4getKeyopenair9   r   ZchatZcompletionscreaterD   rE   r8   requestspostr   MODEL_MISTRALMODEL_MISTRAL_ONLINEr   r   usagecompletion_tokensprompt_tokensKCATraceTRACEr!   r*   deepcopy)r+   r5   mdlZisItJsonZrjsonZtokenMaxSizer,   keyrT   rS   r&   r:   clientr   rC   payloadr   Zchat_responsemessZinput_token_pricingZoutput_token_pricingr   r   r    r)      s   



	










r)   )T)osrL   r   r*   r   argparserN   timeuuidbase64r'   r1   rI   KCALLMTracerU   Zmistralai.clientr   Z mistralai.models.chat_completionr   r!   r%   r.   r6   r)   r   r   r   r    <module>   s*    j(