o
    "i                     @   s  d 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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/d0 d0eZG d1d2 d2eZG d3d4 d4eZG d5d6 d6eZG d7d8 d8eZG d9d: d:eZG d;d< d<eZd=S )>z.
Custom exception classes for the application
c                       s0   e Zd ZdZddededef fddZ  ZS )	AppExceptionz4Base exception class for application-specific errors  messagecodestatus_codec                    s$   || _ || _|| _t | j  d S N)r   r   r   super__init__)selfr   r   r   	__class__ ;/lsinfo/ai/hellotax_ai/base_platform/app/core/exceptions.pyr   	   s   zAppException.__init__)r   )__name__
__module____qualname____doc__strintr   __classcell__r   r   r
   r   r      s    $r   c                       "   e Zd Zdef fddZ  ZS )KnowledgeBaseNotFoundErrorbase_idc                       t  jd| dddd d S )NzKnowledge base 
 not foundKNOWLEDGE_BASE_NOT_FOUND  r   r   r   r   r   )r	   r   r
   r   r   r      
   

z#KnowledgeBaseNotFoundError.__init__r   r   r   r   r   r   r   r   r
   r   r          r   c                       r   )DocumentNotFoundErrordoc_idc                    r   )Nz	Document r   DOCUMENT_NOT_FOUNDr   r   r   )r	   r"   r
   r   r   r      r   zDocumentNotFoundError.__init__r   r   r   r
   r   r!      r    r!   c                       r   )CategoryNotFoundErrorcategory_idc                    r   )Nz	Category r   CATEGORY_NOT_FOUNDr   r   r   )r	   r%   r
   r   r   r   $   r   zCategoryNotFoundError.__init__r   r   r   r
   r   r$   #   r    r$   c                       r   )TagNotFoundErrortag_idc                    r   )NzTag r   TAG_NOT_FOUNDr   r   r   )r	   r(   r
   r   r   r   -   r   zTagNotFoundError.__init__r   r   r   r
   r   r'   ,   r    r'   c                       r   )QANotFoundErrorqa_idc                    r   )NzQ&A r   QA_NOT_FOUNDr   r   r   )r	   r+   r
   r   r   r   6   r   zQANotFoundError.__init__r   r   r   r
   r   r*   5   r    r*   c                       $   e Zd Zddef fddZ  ZS )VectorSearchErrorVector search failedreasonc                       t  j|ddd d S )NVECTOR_SEARCH_ERROR  r   r   r	   r0   r
   r   r   r   @   
   
zVectorSearchError.__init__)r/   r   r   r   r   r   r   r   r   r
   r   r.   ?       r.   c                          e Zd Z fddZ  ZS )VectorStoreConnectionErrorc                    s   t  jdddd d S )Nz!Failed to connect to vector storeVECTOR_STORE_CONNECTION_ERROR  r   r   r	   r
   r   r   r   I   r5   z#VectorStoreConnectionError.__init__r   r   r   r   r   r   r   r
   r   r9   H       r9   c                       r-   )EmbeddingGenerationErrorFailed to generate embeddingsr0   c                    r1   )NEMBEDDING_GENERATION_ERRORr3   r   r   r4   r
   r   r   r   R   r5   z!EmbeddingGenerationError.__init__)r@   r6   r   r   r
   r   r?   Q   r7   r?   c                       &   e Zd Zdedef fddZ  ZS )FileProcessingErrorfilenamer0   c                    "   t  jd| d| ddd d S )NzFailed to process file '': FILE_PROCESSING_ERRORr   r   r   r	   rD   r0   r
   r   r   r   \   
   
zFileProcessingError.__init__r6   r   r   r
   r   rC   [       rC   c                       r   )UnsupportedFileTypeError	file_typec                       t  jd| ddd d S )NzUnsupported file type: UNSUPPORTED_FILE_TYPEr   r   r   )r	   rL   r
   r   r   r   e   
   
z!UnsupportedFileTypeError.__init__r6   r   r   r
   r   rK   d   r    rK   c                       r   )ProviderNotFoundErrorprovider_idc                    r   )Nz	Provider r   PROVIDER_NOT_FOUNDr   r   r   )r	   rQ   r
   r   r   r   o   r   zProviderNotFoundError.__init__r   r   r   r
   r   rP   n   r    rP   c                       r   )ModelNotFoundErrormodel_idc                    r   )NzModel r   MODEL_NOT_FOUNDr   r   r   )r	   rT   r
   r   r   r   x   r   zModelNotFoundError.__init__r   r   r   r
   r   rS   w   r    rS   c                       r   )ProviderNotConfiguredErrorprovider_namec                    r   )Nz
Provider 'z' is not configuredPROVIDER_NOT_CONFIGUREDr   r   r   )r	   rW   r
   r   r   r      r   z#ProviderNotConfiguredError.__init__r6   r   r   r
   r   rV      r    rV   c                       rB   )InsufficientPermissionErrorresourceactionc                    s"   t  jd| d| ddd d S )NzInsufficient permission to  INSUFFICIENT_PERMISSIONi  r   r   )r	   rZ   r[   r
   r   r   r      rI   z$InsufficientPermissionError.__init__r6   r   r   r
   r   rY      rJ   rY   c                       r   )CircularReferenceErrorresource_typec                    rM   )NzCircular reference detected in CIRCULAR_REFERENCEr   r   r   r	   r_   r
   r   r   r      rO   zCircularReferenceError.__init__r6   r   r   r
   r   r^      r    r^   c                       r   )InvalidParentErrorr_   c                    rM   )NzInvalid parent for INVALID_PARENTr   r   r   ra   r
   r   r   r      rO   zInvalidParentError.__init__r6   r   r   r
   r   rb      r    rb   c                       r-   )TextChunkingErrorText chunking failedr0   c                    r1   )NTEXT_CHUNKING_ERRORr3   r   r   r4   r
   r   r   r      r5   zTextChunkingError.__init__)re   r6   r   r   r
   r   rd      r7   rd   c                       rB   )DocumentUploadErrorrD   r0   c                    rE   )NzFailed to upload document 'rF   DOCUMENT_UPLOAD_ERRORr   r   r   rH   r
   r   r   r      rI   zDocumentUploadError.__init__r6   r   r   r
   r   rg      rJ   rg   c                       r-   )DatabaseErrorDatabase operation failedr   c                    r1   )NDATABASE_ERRORr3   r   r   r	   r   r
   r   r   r      r5   zDatabaseError.__init__)rj   r6   r   r   r
   r   ri      r7   ri   c                       r-   )TransactionErrorTransaction failedr   c                    s   t  j|d d| _d S )Nr   TRANSACTION_ERRORr   r   r   rl   r
   r   r   r         
zTransactionError.__init__)rn   r6   r   r   r
   r   rm      r7   rm   c                       r-   )ConstraintViolationErrorunknown
constraintc                    s$   t  jd| d d| _d| _d S )NzDatabase constraint violation: ro   CONSTRAINT_VIOLATIONi  r   r   r   r   )r	   ru   r
   r   r   r      s   
z!ConstraintViolationError.__init__)rt   r6   r   r   r
   r   rs      r7   rs   c                       (   e Zd Zddedef fddZ  ZS )ExternalServiceErrorExternal service errorservicer   c                    s    t  j| d| ddd d S )Nz: EXTERNAL_SERVICE_ERRORi  r   r   )r	   r{   r   r
   r   r   r      s
   
zExternalServiceError.__init__)rz   r6   r   r   r
   r   ry           ry   c                       s&   e Zd Zdedef fddZ  ZS )ServiceTimeoutErrorr{   timeoutc                    s(   t  j|d| dd d| _d| _d S )NzRequest timeout after sr{   r   SERVICE_TIMEOUTi  rw   )r	   r{   r   r
   r   r   r      s   

zServiceTimeoutError.__init__)r   r   r   r   floatr   r   r   r   r
   r   r~      rJ   r~   c                       r   )ServiceUnavailableErrorr{   c                    s    t  j|dd d| _d| _d S )NzService unavailabler   SERVICE_UNAVAILABLEr;   rw   )r	   r{   r
   r   r   r      s   
z ServiceUnavailableError.__init__r6   r   r   r
   r   r      r    r   c                       r-   )AuthenticationErrorAuthentication failedr   c                    r1   )NAUTHENTICATION_ERRORi  r   r   rl   r
   r   r   r      r5   zAuthenticationError.__init__)r   r6   r   r   r
   r   r      r7   r   c                       r8   )TokenExpiredErrorc                       t  jdd d| _d S )NzToken has expiredro   TOKEN_EXPIREDrq   r<   r
   r   r   r      rr   zTokenExpiredError.__init__r=   r   r   r
   r   r      r>   r   c                       r8   )InvalidTokenErrorc                    r   )NzInvalid tokenro   INVALID_TOKENrq   r<   r
   r   r   r      rr   zInvalidTokenError.__init__r=   r   r   r
   r   r      r>   r   c                       r-   )RateLimitError<   retry_afterc                    s$   t  jd| dddd || _d S )Nz!Rate limit exceeded. Retry after z secondsRATE_LIMIT_EXCEEDEDi  r   )r   r   r   )r	   r   r
   r   r   r     s   

zRateLimitError.__init__)r   r   r   r   r
   r   r     r7   r   c                       rx   )StorageErrorNr   bucketc                    s4   |r
d| d| nd| }t  j|ddd d S )NzStorage error in bucket 'rF   zStorage error: STORAGE_ERRORr3   r   r   )r	   r   r   msgr
   r   r   r     s   
zStorageError.__init__r   r6   r   r   r
   r   r     r}   r   N) r   	Exceptionr   r   r!   r$   r'   r*   r.   r9   r?   rC   rK   rP   rS   rV   rY   r^   rb   rd   rg   ri   rm   rs   ry   r~   r   r   r   r   r   r   r   r   r   r   <module>   s>    				
		
	
		

	
	
		
	