Ë
    ‘«êj  ã                  ót   — d Z ddlmZ ddlZddlmZ ddlZddlmZ  ej                  e
«      Z G d„ d«      Zy)u2   SluÅ¾ba pro generovÃ¡nÃ­ embeddingÅ¯ pÅ™es Ollama.é    )ÚannotationsN)ÚAny)ÚEmbeddingConfigc                  ó|   — e Zd ZdZddd„Zdd„Zddœdd„Zddœdd„Zdddœ	 	 	 	 	 	 	 dd	„Zdd
„Z	dd„Z
dd„Zdd„Zy)ÚEmbeddingServicez4Wrapper kolem Ollama /api/embed pro knowledge plane.Nc                óŠ   — |xs
 t        «       | _        t        j                  | j                  j                  d¬«      | _        y )Ng      N@)Úbase_urlÚtimeout)r   ÚconfigÚhttpxÚClientÚollama_base_urlÚ_client)Úselfr   s     úT/home/oem/CyberBrain26-unified/src/cyberbrain26/knowledge_plane/embedding_service.pyÚ__init__zEmbeddingService.__init__   s1   € ØÒ1¤Ó 1ˆŒÜ—|‘|Ø—[‘[×0Ñ0Øô
ˆ�ó    c                ó|   — | j                   j                  d|¬«      }|j                  «        |j                  «       S )Nz
/api/embed)Újson)r   ÚpostÚraise_for_statusr   )r   ÚpayloadÚresponses      r   Ú_requestzEmbeddingService._request   s3   € Ø—<‘<×$Ñ$ \¸Ð$Ó@ˆØ×!Ñ!Ô#Ø�}‰}‹Ðr   ©Únum_ctxc               ó|  — |xs | j                   j                  }| j                   j                  |d|idœ}| j                  |«      }|j	                  dg «      }|st        d«      ‚|d   }t        |«      | j                   j                  k7  r.t        d| j                   j                  › dt        |«      › �«      ‚|S )u!   VrÃ¡tÃ­ embedding pro jeden text.r   ©ÚmodelÚinputÚoptionsÚ
embeddingsu#   Ollama nevrÃ¡til Å¾Ã¡dnÃ½ embeddingr   õ   OÄ�ekÃ¡vanÃ¡ dimenze ú, dostal jsem )r   Úmax_contextr   r   ÚgetÚRuntimeErrorÚlenÚ
vector_dim)r   Útextr   Úctxr   Údatar"   Úvectors           r   Ú
embed_textzEmbeddingService.embed_text   s½   € àÒ0˜Ÿ™×0Ñ0ˆà—[‘[×&Ñ&ØØ! 3Ð'ñ&
ˆð
 �}‰}˜WÓ%ˆØ—X‘X˜l¨BÓ/ˆ
ÙÜÐDÓEÐEØ˜A‘ˆÜˆv‹;˜$Ÿ+™+×0Ñ0Ò0ÜØ'¨¯©×(>Ñ(>Ð'?ð @Ü" 6›{˜mð-óð ð ˆr   c          	     óÚ  — |xs | j                   j                  }| j                   j                  |d|idœ}| j                  |«      }|j	                  dg «      }t        |«      t        |«      k7  r#t        dt        |«      › dt        |«      › �«      ‚|D ]R  }t        |«      | j                   j                  k7  sŒ&t        d| j                   j                  › dt        |«      › �«      ‚ |S )u3   Batch embedding â€” Ollama podporuje pole promptÅ¯.r   r   r"   u   OÄ�ekÃ¡vanÃ½ch u    vektorÅ¯, dostal jsem r#   r$   )r   r%   r   r   r&   r(   r'   r)   )r   Útextsr   r+   r   r,   r"   r-   s           r   Úembed_textszEmbeddingService.embed_texts2   sî   € àÒ0˜Ÿ™×0Ñ0ˆà—[‘[×&Ñ&ØØ! 3Ð'ñ&
ˆð
 �}‰}˜WÓ%ˆØ—X‘X˜l¨BÓ/ˆ
Üˆz‹?œc %›jÒ(ÜØ!¤# e£* Ð-DÄSÈÃ_ÐDUÐVóð ð !ò 	ˆFÜ�6‹{˜dŸk™k×4Ñ4Ó4Ü"Ø+¨D¯K©K×,BÑ,BÐ+Cð D#Ü#& v£; -ð1óð ð	ð Ðr   )Úcontextr   c               óB   — |r	d|› d|› �}n|}| j                  ||¬«      S )z>JuraRAG-pattern: embed with optional domain context prepended.z	Context: z
Query: r   )r.   )r   r*   r2   r   Úenhanced_texts        r   Úembed_with_contextz#EmbeddingService.embed_with_contextH   s1   € ñ Ø'¨ y°	¸$¸Ð@‰Mà ˆMØ�‰˜}°gˆÓ>Ð>r   c                óþ   — 	 | j                   j                  d«      }|j                  dk(  }|d| j
                  j                  | j
                  j                  dœS # t        $ r}dt	        |«      dœcY d}~S d}~ww xY w)u'   RychlÃ¡ kontrola dostupnosti providera.ú/éÈ   F)ÚhealthyÚerrorNÚollama)r9   Úproviderr   r)   )r   r&   Ústatus_codeÚ	ExceptionÚstrr   r   r)   )r   r   ÚokÚexcs       r   Úhealth_checkzEmbeddingService.health_checkR   sx   € ð	9Ø—|‘|×'Ñ'¨Ó,ˆHØ×%Ñ%¨Ñ,ˆBð Ø Ø—[‘[×&Ñ&ØŸ+™+×0Ñ0ñ	
ð 	
øô ò 	9Ø$¬s°3«xÑ8Õ8ûð	9ús   ‚*A Á	A<Á$A7Á1A<Á7A<c                ó8   — | j                   j                  «        y ©N)r   Úclose©r   s    r   rE   zEmbeddingService.close`   s   € Ø�‰×ÑÕr   c                ó   — | S rD   © rF   s    r   Ú	__enter__zEmbeddingService.__enter__c   s   € Øˆr   c                ó$   — | j                  «        y rD   )rE   )r   Ú_excs     r   Ú__exit__zEmbeddingService.__exit__f   s   € Ø�
‰
�r   rD   )r   zEmbeddingConfig | NoneÚreturnÚNone)r   údict[str, object]rM   zdict[str, Any])r*   r?   r   ú
int | NonerM   úlist[float])r0   z	list[str]r   rP   rM   zlist[list[float]])r*   r?   r2   z
str | Noner   rP   rM   rQ   )rM   rO   )rM   rN   )rM   r   )rK   ÚobjectrM   rN   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r.   r1   r5   rB   rE   rI   rL   rH   r   r   r   r      sf   „ Ù>ô
óð
 >Bõ ð( FJõ ð. 37Èdñ?Øð?Ø%/ð?ØAKð?à	ó?ó
óóôr   r   )rV   Ú
__future__r   ÚloggingÚtypingr   r   Ú-cyberbrain26.knowledge_plane.embedding_configr   Ú	getLoggerrS   Úloggerr   rH   r   r   ú<module>r]      s5   ðÙ 8å "ã Ý ã å Ià	ˆ×	Ñ	˜8Ó	$€÷Xò Xr   