
    qj&                       d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZmZ d dlmZmZmZmZmZmZ d d	lmZmZ d d
lmZmZ d dlmZm Z m!Z!m"Z"m#Z$ d dl%m&Z&m'Z' d dl(m)Z*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1  eddddd      Z2 G d de      Z3 G d de      Z4 G d de      Z5 G d de      Z6 G d de      Z7 G d de      Z8e2js                  d      dJd       Z:dKd Z;e2jy                  d!      d"        Z=e2jy                  d#       e	d$d%&      fdLd'       Z>e2j                  d(       e	d$d%&      fdMd)       Z@e2j                  d*       e	d$d%&      fdLd+       ZAe2j                  d,       e	d$d%&      fdNd-       ZBe2jy                  d.       e	d$d%&      fdLd/       ZCe2j                  d0       e	d$d%&      fdOd1       ZDe2j                  d2       e	d$d%&      fdPd3       ZEe2j                  d4       e	d$d%&      fdQd5       ZFe2j                  d6       e	d$d%&      fdRd7       ZGe2j                  d8      d9 e	d$d%&      fdSd:       ZHe2jy                  d;       e	d$d%&      fdLd<       ZIe2jy                  d=       e	d$d%&      fdTd>       ZJe2j                  d?       e	d$d%&      fdUd@       ZKe2jy                  dA      d e	d$d%&      fdVdB       ZLe2jy                  dC       e	d$d%&      fdWdD       ZMe2jy                  dE      dF e	d$d%&      fdXdG       ZNe2j                  dH       e	d$d%&      fdWdI       ZOy)Y    )annotationsN)Path)Any)FastAPIHeaderHTTPException)FileResponseJSONResponse)	BaseModelField)analyze_textconfigure_providerprovider_catalogrouting_settingssave_routing_settingstest_provider)SOURCE_ROOTconnect)ensure_internal_tokeninit_core_schema)analyze_snapshotget_knowledgelist_knowledgeproduct_identificationsummary)
start_sync
sync_state)
configuredsave_secret)delete_snapshotget_snapshotinit_source_schemalist_snapshotssource_statuszORIGUS Core0.3.1)titleversiondocs_url	redoc_urlopenapi_urlc                  0    e Zd ZU ded<   ded<   dZded<   y)TechCredentialsstrusernamepasswordhttp://nps3.cntd.ru/docsbase_urlN)__name__
__module____qualname____annotations__r1        8/var/www/origus_pro_usr/data/www/origus.pro/core/main.pyr,   r,      s    LL+HS+r7   r,   c                      e Zd ZU dZded<   y)SyncPayloadN
str | Nonedocument_slug)r2   r3   r4   r<   r5   r6   r7   r8   r:   r:      s    M(r7   r:   c                  0    e Zd ZU ded<   ded<   dZded<   y)AIProviderPayloadr-   providerapi_keyNr;   model)r2   r3   r4   r5   rA   r6   r7   r8   r>   r>       s    LKE(r7   r>   c                  H    e Zd ZU dZded<   dZded<    ed       Zd	ed
<   y)AISettingsPayloadgroqr-   primary_providerFboolfallback_enabledc                 
    ddgS )Ngemini
openrouterr6   r6   r7   r8   <lambda>zAISettingsPayload.<lambda>(   s    8L:Q r7   default_factoryz	list[str]fallback_orderN)r2   r3   r4   rE   r5   rG   r   rN   r6   r7   r8   rC   rC   %   s(    ST"3QRN9Rr7   rC   c                  L    e Zd ZU ded<   ded<   dZded<   dZded<   dZded<   y)	AIAnalyzePayloadr-   purposetextNr;   instructionsrA   r?   )r2   r3   r4   r5   rS   rA   r?   r6   r7   r8   rP   rP   *   s*    K	HLE(HXr7   rP   c                  b    e Zd ZU dZded<   dZded<   dZded<    ee      Z	ded<   d	Z
d
ed<   y	)ProductIdentifyPayload r-   namerQ   descriptionrL   zdict[str, Any]characteristicsNr;   rA   )r2   r3   r4   rW   r5   rQ   rX   r   dictrY   rA   r6   r7   r8   rU   rU   1   s7    DKGCNK"'"=OM=E(r7   rU   startupc                 ,    t                t                y )N)r   r"   r6   r7   r8   r[   r[   8   s    *,r7   c                <    | r| t               k7  rt        dd      y )N  u+   Некорректный ORIGUS Core token.status_codedetail)r   r   )values    r8   _check_tokenrc   <   s#    E0223`aa 3r7   z/healthc                     ddddS )Nokzorigus-corer%   )statusservicer'   r6   r6   r7   r8   healthrh   @   s    #mgNNr7   z/api/statusrV   zX-ORIGUS-Core-Token)defaultaliasc           	         t        |        t        ddt               t               t	               dt               t               d      S )NTr%   )settings	providers)re   r'   
techexpertairuntime	knowledge)rc   r
   r$   r   r   r   knowledge_summaryx_core_tokens    r8   rf   rf   C   s?    G)+8H8JK,+<+>  r7   z&/api/connectors/techexpert/credentialsc                   t        |       | j                  j                         }|r| j                  st	        dd      | j
                  j                         xs d}t        d|| j                  |d       t               5 }|j                  d|f       |j                          d d d        dd	iS # 1 sw Y   dd	iS xY w)
N  u2   Логин и пароль обязательны.r_   r0   rn   )r.   r/   r1   zeUPDATE connectors SET status='configured',base_url=?,last_error=NULL WHERE connector_key='techexpert're   T)
rc   r.   stripr/   r   r1   r   r   executecommit)payloadrt   r.   basecons        r8   save_techexpert_credentialsr}   L   s    ##%H7++=S  YM  4N  .N						!	?%?DW=M=MY]^_	 Sc{  ~B  }D  	E  GJ  GQ  GQ  GSS;S;s   $B33B?z/api/connectors/techexpert/testc                   t        |        t        d      st        dd      dd l}dd l}t        t              j                         j                  }|j                  |j                  dddgt        |      d	d	d
      }|j                  xs ddz   |j                  xs dz   j                         }|j                  dk7  rt        d|dd  xs d      d	|dd  xs ddS )Nrn   rv   7   Сначала настройте Техэксперт.r_   r   z-mzconnectors.techexpertz
test-loginT   )cwdrR   capture_outputtimeoutrV   
iHu)   Авторизация не прошла.u   Авторизация: OK)re   message)rc   secret_configuredr   
subprocesssysr   __file__resolveparentrun
executabler-   stdoutstderrrw   
returncode)rt   r   r   r{   resultoutputs         r8   test_techexpertr   W   s    \*-C  XQ  3R  -R	h			!	(	(D>>3>>$/F|TY\]aYbhl  }A  JM>  NF]] b$&(;<CCEF!=Suv  IF  [F  $G  Guv N2NOOr7   z/api/connectors/techexpert/syncc                    t        |       t        d      st        dd      t        | j                  xs dj                         xs d       }d|dS # t        $ r}t        dt        |            |d }~ww xY w)Nrn   rv   r   r_   rV   T)re   pid)rc   r   r   r   r<   rw   RuntimeErrorr-   )rz   rt   r   excs       r8   sync_techexpertr   b   sx    \*-C  XQ  3R  -R..4";;=EFC   ]m3s8&TZ] ]]s   +A 	A9A44A9z/api/ai/providersc                D    t        |        dt               t               dS )NT)re   rl   rm   )rc   r   r   rs   s    r8   ai_providersr   j   s    T=M=O\l\n'o or7   z/api/ai/providers/configurec                    t        |       t        | j                  | j                  | j                        S # t
        $ r}t        dt        |            |d }~ww xY wNrv   r_   )rc   r   r?   r@   rA   	Exceptionr   r-   rz   rt   r   s      r8   ai_provider_configurer   n   sF    "7#3#3GOOGMMR	RZ=SC#QWZZZs   *7 	A AAz!/api/ai/providers/{provider}/testc                ~    t        |       t        |       S # t        $ r}t        dt	        |            |d }~ww xY wr   )rc   r   r   r   r-   )r?   rt   r   s      r8   ai_provider_testr   t   s4    h'	'Z=SC#QWZZZs   
 	<7<z/api/ai/settingsc                    t        |       dt        | j                  | j                  | j                        dS # t
        $ r}t        dt        |            |d }~ww xY w)NT)re   rl   rv   r_   )rc   r   rE   rG   rN   r   r   r-   r   s      r8   ai_settingsr   z   sc    &;G<T<TU\UmUmnu  oE  oE  'F  G  
GZ=SC#QWZZZs   -: 	AAAz/api/ai/analyzec                   t        |       	 t        | j                  j                         xs d| j                  | j
                  | j                  | j                        S # t        $ r}t        dt        |            |d }~ww xY w)Ngeneral)rQ   rR   rS   rA   r?   rv   r_   )rc   r   rQ   rw   rR   rS   rA   r?   r   r   r-   r   s      r8   
ai_analyzer      s    [GOO$9$9$;$Hygllhoh|h|  DK  DQ  DQ  [b  [k  [k  l  	lZ=SC#QWZZZs   AA! !	B*BBz./api/knowledge/snapshots/{snapshot_id}/analyzeFc                    t        |       t        | |      S # t        $ r}t        dt	        |            |d }~ww xY w)N)forcerv   r_   )rc   r   r   r   r-   )snapshot_idr   rt   r   s       r8   knowledge_analyze_snapshotr      s6     59	9Z=SC#QWZZZs    	>9>z/api/knowledgec                D    t        |        dt               t               dS )NT)re   r   items)rc   rr   r   rs   s    r8   knowledge_listr      s    T<M<OXfXh'i ir7   z/api/knowledge/{document_slug}c                X    t        |       t        |       }|st        dd      ddi|S )N  u9   Разбор документа ещё не создан.r_   re   T)rc   r   r   )r<   rt   items      r8   knowledge_documentr      s3    ]=%A}<wxxr7   z/api/product/identifyc                   t        |       | j                  j                         sM| j                  j                         s3| j                  j                         s| j
                  st        dd      	 t        | j                  j                         | j                  j                         | j                  j                         | j
                  | j                        S # t        $ r}t        dt        |            |d }~ww xY w)Nrv   u*   Нет данных о продукции.r_   )rW   rQ   rX   rY   rA   )rc   rW   rw   rQ   rX   rY   r   r   rA   r   r-   r   s      r8   identify_product_apir      s    LL GOO$9$9$;w?R?R?X?X?Z^e^u^u3_``[%7<<+=+=+?H]H]H_lsll  mF  mF  mH  Y`  Yp  Yp  w~  wD  wD  E  	EZ=SC#QWZZZs   4A+C   	D)D  Dz/api/snapshotsc                `    t        |       dt        | xs dj                         xs d       dS )NTrV   )re   r   )rc   r#   rw   )r<   rt   s     r8   	snapshotsr      s.    T.-J][]IdIdIfInjn:o'p pr7   z/api/snapshots/{snapshot_id}c                V    t        |       t        |       }|st        dd      d|dS )Nr   !   Версия не найдена.r_   T)re   r   )rc   r!   r   )r   rt   r   s      r8   snapshot_metar      s.    \+%>}<_``T""r7   z%/api/snapshots/{snapshot_id}/downloadsourcec                   t        |       t        |       }|st        dd      dddddj                  |      }|st        d	d
      |j                  |      }|st        dd      t	        |      j                         }|j                  t        j
                                |j                         st        dd      t        ||j                  ddi      S # t        $ r}t        dd      |d }~ww xY w)Nr   r   r_   	text_path	html_pathdownloaded_file_pathmanifest_path)rR   htmlr   manifestrv   u)   Неизвестный тип файла.u    Файл отсутствует.r^   u"   Некорректный путь.u   Файл не найден.zCache-Controlzprivate, no-store)filenameheaders)rc   r!   r   getr   r   relative_tor   
ValueErrorexistsr	   rW   )r   kindrt   r   fieldrawpathr   s           r8   snapshot_downloadr      s    \+%>}<_``[:P\k
l
p
pqu
vE#=hiiCm;]^^	c			D			+--/	0;;=#Eb ccdiiI\8]^^ wMcIm$ntwwws   #C 	C:'C55C:z#/api/snapshots/{snapshot_id}/deletec                    t        |       t        |       }d|dS # t        $ r}t        dt	        |            |d }~ww xY w)Nr   r_   T)re   r   )rc   r    r   r   r-   )r   rt   r   r   s       r8   snapshot_deleter      s@    ,v&& ]m3s8&TZ] ]]s    	A<A)returnNone)rb   r-   r   r   )rt   r-   )rz   r,   rt   r-   )rz   r:   rt   r-   )rz   r>   rt   r-   )r?   r-   rt   r-   )rz   rC   rt   r-   )rz   rP   rt   r-   )r   intr   rF   rt   r-   )r<   r-   rt   r-   )rz   rU   rt   r-   )r<   r;   rt   r-   )r   r   rt   r-   )r   r   r   r-   rt   r-   )P
__future__r   jsonpathlibr   typingr   fastapir   r   r   fastapi.responsesr	   r
   pydanticr   r   connectors.ai_providerr   r   r   r   r   r   core_dbr   r   core_schemar   r   rq   r   r   r   r   r   rr   rp   r   r   secret_storer   r   r   source_storer    r!   r"   r#   r$   appr,   r:   r>   rC   rP   rU   on_eventr[   rc   r   rh   rf   postr}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r7   r8   <module>r      s   "    2 2 8 %  ) ? { { * E i i-Y]^,i ,
 )  	 
S	 S
y Y  i- -b  N  N"24IJ   
23IOXZavIw  4 
+,%+B=R%S P -P 
+,9?Qf9g ! -! 	"(:O"P p p 
'(EKTV]rEs [ )[
 
-.39"K`3a [ /[
 
;A"Sh;i [ [
 
9?Qf9g [ [ 
:;:?QW`bi~Q [ <[
 	$*2<Q$R j j 	)*:@Rg:h  +
 
!"IOXZavIw [ #[ 	%)6"Sh;i q q 	'(39"K`3a # )#
 	01/7XZavIw _ 2_ 
/05;BMb5c ' 1'r7   