o
    ؚi                  	   @   sd  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	m
Z
 d dlZd dlmZ ejejeZeddZd&ddZdefd	d
ZdedefddZe  dejd< ed edej edej dedefddZ d'dedede!defddZ"dedededefddZ#d ede
ee	f fd!d"Z$d#d$ Z%e&d%kre%  dS dS )(    N)AnyDict)run_kyc_auto_variantKYC_OCR_MODELzgpt-5.2returnc               	   C   s  t jtddf} | D ]t}t j|sqzbt|dddQ}|D ]F}| }|r,|dr-q|dr<|tdd  }d	|vrAq|	d	d
\}}| }|sPq|  d}|re|t j
vre|t j
|< qW d   n1 spw   Y  W q ty   Y qw dS )zOLoad environment variables from local .env if missing from current environment.z.envz/var/www/html/.envrzutf-8encoding#zexport N=   z"')ospathjoin
_REPO_ROOTisfileopenstrip
startswithlensplitenvironOSError)
candidatesr   fraw_linelinekeyvalue r   run_kyc_cli.py_load_dotenv   s>   

r!   c                   C   s"   t dpt dpt dptS )Nr   OPENAI_MODELKYC_GEMINI_MODEL)r   getenv_DEFAULT_OPENAI_MODELr   r   r   r    _default_openai_model2   s   
r&   r   c                 C   s    t | ot| to|  dS )Nzsk-)bool
isinstancestrr   r   )r   r   r   r    _looks_like_openai_key;   s    r*   ignorePYTHONWARNINGSinsightfacenumpysc                 C   s$   | pd   } | dp| dS )N zhttp://zhttps://)r   lowerr   )r/   r   r   r    _is_urlG   s   r2         4@urlout_path	timeout_sc                 C   s   dddd}t jj| |dd}t jj||d}| }W d    n1 s&w   Y  t|d}|| W d    |S 1 sAw   Y  |S )	NzMozilla/5.0 (TrendoKYC/1.0)z*/*close)z
User-AgentAccept
ConnectionGET)headersmethod)timeoutwb)urllibrequestRequesturlopenreadr   write)r4   r5   r6   r;   reqrespdatar   r   r   r    	_downloadL   s   

rH   path_or_urltmpdirnamec                 C   s8   | sdS t | rd}tj|| | }t| |S | S )Nr0   z.jpg)r2   r   r   r   rH   )rI   rJ   rK   extoutr   r   r    resolve_imageZ   s   
rN   argc                 C   sl   | si S |   } | dr1| dd    }t|ddd}t|W  d    S 1 s,w   Y  t| S )N@r   r   z	utf-8-sigr   )r   r   r   jsonloadloads)rO   r   r   r   r   r    load_user_inputd   s   
 
rT   c            
      C   s  t  } | jdddd | jdddd | jd	dd
d | jdddd | jdddd | jdddd | jdddd | jddd | jddd | jdt dd | jdddd | jdddd | jddd d | jd!dd"d | jd#dd$d% |  }t|j}|jrd&ndtj	d'< t
|jr|jnd}|std(pd}|st
|jr|j}|st
td)drtd)d}|r|tj	d(< |jp|jpt }|r|tj	d*< d+d,lm} |jr|jtj	d-< |jrd&tj	d.< t I}t|j|d/}|jrt|j|d0nd }tt|j|j|j|j|||||jd1d2d3|jpdt|jd4|j d5}	t!t"j#|	d6d7d8 W d    d S 1 s:w   Y  d S )9Nz--php-endpointTzPolicy server endpoint (PHP))requiredhelpz--model-pathr0   z9YOLO model path (.pt) [optional; server policy preferred])defaultrV   z
--doc-typeze.g. id_cardz	--countryze.g. IRz--doczDocument image path OR URLz--selfiez#Selfie image path OR URL (optional)z--user-inputzJSON string OR @file.jsonz--device0)rW   z--debug
store_true)actionz--openai-modelzChatGPT OCR model overridez--openai-api-keyzOpenAI API key overridez--gemini-modelz&Legacy alias; mapped to --openai-modelz--gemini-api-keyz(Legacy alias; mapped to --openai-api-keyz--identity-rulesz:Path to identity_rules.json (country ID formats/checksums)z--strict-identityz2Fail (REVIEW) if a strict key has no identity rule)rZ   rV   1KYC_OCR_DEBUGOPENAI_API_KEYKYC_GEMINI_API_KEYr   r   )llm_ocrKYC_IDENTITY_RULES_PATHKYC_STRICT_IDENTITY_REGISTRYdocselfieg
ףp=
?g(\?gq=
ףp?)face_match_thresholdapprove_min_extractionapprove_min_match_coreidentity_rules_pathstrict_identity_registry)kyc_engine_modulephp_endpoint_url
model_pathdoc_typecountrydoc_image_pathselfie_image_path
user_inputr_   debugdefaultsdeviceF   )ensure_asciiindent)$argparseArgumentParseradd_argumentr&   
parse_argsrT   rp   rq   r   r   r*   openai_api_keyr$   gemini_api_keyopenai_modelgemini_modelllm_ocr_openair_   identity_rulesstrict_identitytempfileTemporaryDirectoryrN   rb   rc   r   kycphp_endpointrk   rl   rm   r'   rs   printrQ   dumps)
apargsrp   r{   r}   r_   rJ   doc_pathselfie_pathresr   r   r    maino   s   






$r   __main__)r   N)r3   )'rw   rQ   r   warningsloggingr   urllib.requestr?   typingr   r   kyc_policy_engine_llm_v2r   policy_provider_llm_v2r   r   dirnameabspath__file__r   r$   r%   r!   r)   r&   r'   r*   r   filterwarnings	getLoggersetLevelERRORr2   floatrH   rN   rT   r   __name__r   r   r   r    <module>   s8   
	


b
