o
    ՂiH                     @   sd  d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZ G dd deZG dd deZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZG d#d$ d$eZ G d%d& d&eZ!d'S )(z
Knowledge Base models
    )ColumnStringTextBooleanInteger
ForeignKeyJSONUniqueConstraintFloatDate
BigInteger)relationship)	BaseModelc                   @   s   e Zd ZdZdZeedddZeedddZee	ddZ
eeddd	Zeedd
d	Zeeddd	Zeedd	Zeedd	Zeedd	Zeedd	ZeeeddddZeeeddddZeeddd	ZedddZdS )KnowledgeBasezU
    Knowledge Base model
    Represents a collection of documents and knowledge
    knowledge_basesd   FnullableT2   u   📚defaultgeneral   enabledr   public.tenants.idr   indexpublic.users.id	not_builtKnowledgeCategoryknowledge_baseback_populatesN)__name__
__module____qualname____doc____tablename__r   r   namecoder   descriptionicontypestatusr   	is_publicr   	doc_countqa_countentity_countr   	tenant_id
created_bygraph_statusr   
categories r6   r6   A/lsinfo/ai/hellotax_ai/base_platform/app/models/knowledge_base.pyr   	   s"    r   c                   @   s   e Zd ZdZdZeeedddZee	dddZ
eeddZeeedddZee	d	ddZee	d
ddZeeddZedddZedddZed ddegdZdS )r   zU
    Knowledge Category model
    Represents a category for organizing documents
    knowledge_categoriesknowledge_bases.idTr   r   Fknowledge_categories.idr   r   r   r   r   r5   r!   KnowledgeDocumentcategoryzKnowledgeCategory.idchildrenremote_sidebackrefforeign_keysN)r#   r$   r%   r&   r'   r   r   r   knowledge_base_idr   r(   r   r*   	parent_idr+   color
sort_orderr   r    	documentsparentr6   r6   r6   r7   r   $   s    r   c                   @   s   e Zd ZdZdZeeeddddZee	dddZ
ee	d	ddd
ZeeddZeeddZeeddZee	d	ddZee	dddZedddZdS )TagCategoryzV
    Tag Category model - represents taxonomy dimensions (Part 1, Part 2, Part 3)
    tag_categoriesr   FTr   r   r   r   r   uniquer   r   r   KnowledgeTagr<   r!   N)r#   r$   r%   r&   r'   r   r   r   r2   r   r(   r)   r   r*   part_numberrE   r+   rD   r   tagsr6   r6   r6   r7   rH   9   s    rH   c                   @   s*  e Zd ZdZdZeeeddddZee	ddddZ
eedd	Zeeed
dddZeeeddddZee	ddddZeedddZeeddZeedd	ZeeddZeeddZee	ddddZee	ddddZeeddZee	dddZedddZed ddegdZeddddZdS )rL   z
    Knowledge Tag model - supports both hierarchical user tags and predefined taxonomy tags
    Represents a tag for categorizing documents (tenant-level global)
    knowledge_tagsr   FTr   r   rJ   r   knowledge_tags.idztag_categories.id)r   r   r   g      ?r   u   🏷️)r   r   r   z#6366f1r   rH   rN   r!   zKnowledgeTag.idr=   r>   r;   document_tags)	secondaryr"   N) r#   r$   r%   r&   r'   r   r   r   r2   r   r(   r   r*   rC   tag_category_idtag_coder   is_predefined	is_systemr   keywordsr
   search_weightsearch_priorityr+   rD   rE   r-   r   r<   rG   rF   r6   r6   r6   r7   rL   O   s2    
rL   c                   @   s   e Zd ZdZdZeeeddddZeeeddddZ	ee
ddd	Zeedd	Zeed
dZeeddZeeddZedddZdS )TagAutoRulez]
    Tag Auto Rule model - defines rules for automatic tagging based on document content
    tag_auto_rulesr   FTr   rP   r   r   g333333?r   r   rL   
auto_rulesr@   N)r#   r$   r%   r&   r'   r   r   r   r2   tag_idr   	rule_typer   rule_configr
   confidence_thresholdr   	is_activepriorityr   tagr6   r6   r6   r7   rZ   w   s    rZ   c                   @   s  e Zd ZdZdZeeddddZeeddZ	eeddZ
eeeddddZeeed	dddZeeed
dddZeedddZeedddZeedddZeedddZeedddZeeddZeeddZeeddZeedddZeedddZeeddZeeddZeedddZeeddZeedddZeeddZ eeddZ!eedddZ"eedddZ#eeddZ$eeddZ%eeddZ&eeddZ'eeddZ(eedddZ)eedddZ*eedddZ+eeddZ,eeddZ-ee.ddZ/ee.ddZ0ee.ddZ1eedddZ2ee3ddZ4eeedddddZ5ee3ddZ6eeddZ7ee3ddZ8ee9ddZ:eeddddZ;eeddZ<e=ddd Z>e=d!egd"Z?e=d#d$d%Z@e=d&d'd(d)ZAe=d*d'd(d)ZBd+S ),r;   zP
    Knowledge Document model
    Represents a document in a knowledge base
    knowledge_documents   FTr   r   r:   r   r     r   r   draftr   r   r   pending	automatici     	recursive   )r   r   knowledge_documents.idzSET NULLondelete@      r   rF   r!   UserrA   rL   rQ   )rR   DocumentVectordocumentzall, delete-orphan)r"   cascadeDocumentVersionN)Cr#   r$   r%   r&   r'   r   r   titler   contentsummaryr   r   category_idr2   	author_idsourcereference_url	file_path	file_typer-   r   r.   
view_countis_vectorizedvector_modelvectorization_statusvectorization_progressvectorization_errorr4   r1   segmentation_mode
chunk_sizechunk_overlapsplitter_typewindow_sizeenable_parent_childenable_reference_extractioncharacter_countrecall_countdata_center_doc_iddoc_type
doc_numberissuing_authoritydoc_number_yeardoc_number_serialr   
issue_dateeffective_dateexpire_date
doc_statusr   supersedes_doc_idssuperseded_by_doc_idtax_type_tagshas_attachmentattachment_typesr
   parse_quality_scorecontent_hashversion_numberr   r<   authorrN   vectorsversionsr6   r6   r6   r7   r;      sn    r;   c                   @   sL   e Zd ZdZdZddiZeeedddddZ	eeed	ddddZ
d
Zd
S )DocumentTagz1
    Document Tag association (Many-to-Many)
    rQ   extend_existingTrn   CASCADEro   )primary_keyrP   N)r#   r$   r%   r&   r'   __table_args__r   r   r   document_idr^   idr6   r6   r6   r7   r      s    r   c                   @   sV  e Zd ZdZdZeeedddZeeddZ	ee
ddZeeddZeed	ddZeed	ddZeed	ddd
ZeeddddZeedddZeed	ddZeed	ddZeedddd
Zeed	ddZeed	ddZeeddZeed	ddd
ZeedddZeeddZeedddd
ZeedddZ e!dddZ"dS )ru   zP
    Document Vector model
    Stores vector embeddings for semantic search
    document_vectorsrn   Fr   r   r   Tr   r   false)server_defaultr   r   r   r   rg   r;   r   r!   N)#r#   r$   r%   r&   r'   r   r   r   r   chunk_indexr   
chunk_textr   vectorr   	milvus_id
model_nameparent_chunk_idr   	is_parentchunk_levelprev_chunk_idnext_chunk_idr   r   r   
referenceschunk_idr   r   issue_date_int
chunk_type
media_pathr   rv   r6   r6   r6   r7   ru      s0    ru   c                   @   s   e Zd ZdZdZeeedddZeeddZ	ee
dddZeeddZeeddZeeedddZed	d
dZedegdZdS )rx   zD
    Document Version model
    Tracks document version history
    document_versionsrn   Fr   rf   Tr   r;   r   r!   rs   rt   N)r#   r$   r%   r&   r'   r   r   r   r   r   r   ry   r   rz   change_summary	editor_idr   rv   editorr6   r6   r6   r7   rx     s    rx   c                   @   s   e Zd ZdZdZeeddZeeddZee	e
dddZeeddZeeddZeeddZeedddZee	d	dZee	d	dZeed
ddZee	e
dddZedZedegdZdS )KnowledgeQAzA
    Knowledge QA model
    Stores question and answer pairs
    knowledge_qaFr   r:   Tr   r   r   r   activer   r   rs   rt   N)r#   r$   r%   r&   r'   r   r   questionanswerr   r   r|   r   related_documentsr   r   question_vectorr   r   	use_counthelpful_countr-   r3   r   r<   creatorr6   r6   r6   r7   r   %  s     r   c                   @   s   e Zd ZdZdZeeeddddZee	dddZ
ee	dddZee	d	ddZeeddZee	d
ddZeeddZeeddZeeddZedddZeddddfZdS )KnowledgeMetadataFieldzb
    Knowledge Metadata Field model
    Defines metadata field templates for a knowledge base
    knowledge_metadata_fieldsr9   FTr   r   r   r   rg   r   r   r   metadata_fieldsr]   rB   	field_keyuq_kb_field_keyr(   N)r#   r$   r%   r&   r'   r   r   r   rB   r   
field_namer   
field_typer   field_optionsdefault_valuer   is_requiredrE   r   r*   r   r    r	   r   r6   r6   r6   r7   r   B  s    r   c                   @   sl   e Zd ZdZdZeeeddddZeeeddddZ	ee
ddZed	d
dZedZeddddfZdS )DocumentMetadataValuezP
    Document Metadata Value model
    Stores metadata values for documents
    document_metadata_valuesrn   FTr   zknowledge_metadata_fields.idr   r;   metadata_valuesr]   r   r   field_iduq_doc_fieldr   N)r#   r$   r%   r&   r'   r   r   r   r   r   r   valuer   rv   fieldr	   r   r6   r6   r6   r7   r   \  s    r   c                   @   s\   e Zd ZdZdZeeeddddZee	dddZ
eeddZeeddZeeddZd	S )
GraphBuildStatusz'Graph build status for a knowledge basegraph_build_statusr9   FTr   r   r   N)r#   r$   r%   r&   r'   r   r   r   rB   r   r-   r   error_message
node_count
edge_countr6   r6   r6   r7   r   q  s    r   c                   @   sT   e Zd ZdZdZeeeddddZee	dddZ
ee	d	ddZeeddZd
S )GraphEntityz5Graph entity (node) stored in PG as a mirror of Neo4jgraph_entitiesr9   FTr   r   r   rg   N)r#   r$   r%   r&   r'   r   r   r   kb_idr   entity_typeentity_namer   
propertiesr6   r6   r6   r7   r   |  s    r   c                   @   sD   e Zd ZdZdZeeeddddZee	dddZ
eeddZd	S )
KnowledgeBaseMetadataz/Key-value metadata attached to a knowledge baseknowledge_base_metadatar9   FTr   rk   r   N)r#   r$   r%   r&   r'   r   r   r   rB   r   keyr   r   r6   r6   r6   r7   r     s    r   c                   @   p   e Zd ZdZdZeeeddddZee	dddZ
ee	dddZee	d	ddZeedd
Zeedd
ZdS )KnowledgeBaseMetadataFieldz9Schema definition for metadata fields of a knowledge baseknowledge_base_metadata_fieldsr9   FTr   rk   r   r   r   r   Nr#   r$   r%   r&   r'   r   r   r   rB   r   r   field_labelr   r   r   rE   r6   r6   r6   r7   r         r   c                   @   r   )MetadataFieldz!Generic metadata field definitionr   r9   FTr   rk   r   r   r   r   Nr   r6   r6   r6   r7   r     r   r   N)"r&   
sqlalchemyr   r   r   r   r   r   r   r	   r
   r   r   sqlalchemy.ormr   app.models.baser   r   r   rH   rL   rZ   r;   r   ru   rx   r   r   r   r   r   r   r   r   r6   r6   r6   r7   <module>   s*    4(M,
	