
    ri                     d    d dl Zd dlmc mZ d dlmZ  G d d          Zd Z	d Z
d Zd Zd ZdS )	    Nc                       e Zd Zd Zd ZdS )_FakeSessionc                 8    dddg| _         d| _        d| _        d S )NuserhellorolecontentUntitledr   )messagestitlesavedselfs    8/home/ubuntu/hermes-webui/tests/test_streaming_errors.py__init__z_FakeSession.__init__   s&    "(W==>



    c                 &    | xj         dz  c_         d S )N   )r   r   s    r   savez_FakeSession.save
   s    

a



r   N)__name__
__module____qualname__r   r    r   r   r   r      s2          
    r   r   c                 :  
 t                      
|                     t          d
fd           |                     t          dd            t          j        dddd           
j        }d	}||k    }|st          j        d
|fd||f          dt          j                    v st          j	        
          rt          j
        
          ndt          j
        |          t          j
        |          dz  }dd|iz  }t          t          j        |                    d x}x}}
j        }d}||k    }|st          j        d
|fd||f          dt          j                    v st          j	        
          rt          j
        
          ndt          j
        |          t          j
        |          dz  }dd|iz  }t          t          j        |                    d x}x}}
j        d         d         }d}||k    }|slt          j        d
|fd||f          t          j
        |          t          j
        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d}
j        d         d         }||v }|slt          j        d|fd||f          t          j
        |          t          j
        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d}
j        d         d         }||v }|slt          j        d|fd||f          t          j
        |          t          j
        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d}
j        d         d         }||v }|slt          j        d|fd||f          t          j
        |          t          j
        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d S )Nget_sessionc                     S Nr   _sidfakes    r   <lambda>zEtest_persist_stream_error_appends_assistant_message.<locals>.<lambda>       t r   
title_fromc                     dS NUpdated titler   r   fallbacks     r   r"   zEtest_persist_stream_error_appends_assistant_message.<locals>.<lambda>       O r   sess-1
rate_limitHTTP 429 upstream rate limitTry again in a moment.r   ==z-%(py2)s
{%(py2)s = %(py0)s.saved
} == %(py5)sr!   py0py2py5assert %(py7)spy7r'   )z-%(py2)s
{%(py2)s = %(py0)s.title
} == %(py5)sr	   	assistantz%(py1)s == %(py4)spy1py4assert %(py6)spy6Rate limit reachedr
   inz%(py1)s in %(py4)s)r   setattr	streaming_persist_stream_errorr   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr   r   )monkeypatch@py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_assert2@py_format5@py_format7r!   s             @r   3test_persist_stream_error_appends_assistant_messagerY      s   >>D	=2C2C2C2CDDD	<1[1[\\\#& 	   ::?:44::((:((((((((((:((((((((((((4(((((4((((((:(((((((((((((((((((((((((((((((=V$33$3333333333$33333$3333333333333333333333333333333?4=#4Y#??#???????????#??????????#????????????????????????????)IT]2->y-II)-IIIIIIIIIII)-IIIIII)IIII-IIIIIIIIIIIIIIIIIIIIIIIIIIII#Ct}R'8'CC#'CCCCCCCCCCC#'CCCCCC#CCCC'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr   c                   
 t                      
d}
j                            d|d           |                     t          d
fd           t	          j        ddd           
j        }d	}||k    }|st          j        d
|fd||f          dt          j
                    v st          j        
          rt          j        
          ndt          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}
j        d         d         }||k    }|st          j        d
|fd||f          t          j        |          dt          j
                    v st          j        |          rt          j        |          nddz  }	dd|	iz  }t          t          j        |                    d x}}d S )Nu   **⚠️ Error:** Boomr9   r   r   c                     S r   r   r   s    r   r"   zEtest_persist_stream_error_deduplicates_same_message.<locals>.<lambda>&   r#   r   r+   errorBoomr   r/   r1   r!   r2   r6   r7   r8   r
   )z%(py1)s == %(py3)s)r<   py3zassert %(py5)sr5   )r   r   appendrD   rE   rF   r   rG   rH   rI   rJ   rK   rL   rM   rN   )rO   r
   rP   rQ   rR   rS   rT   rU   rV   @py_format4r!   s             @r   3test_persist_stream_error_deduplicates_same_messagera   "   s   >>D&GM+'BBCCC	=2C2C2C2CDDD#Hgv>>>::?:44:=Y'2'72222222222'722222'22222222222722222722222222222222222222222222222r   c                 ^  
 t                      
g 
_        t                      dddg_        |                     t          d
fd           |                     t          dt	          ddd	t          fd
          i                     |                     t          dd            t          j        dddd           j        }d}||k    }|st          j	        d|fd||f          dt          j                    v st          j                  rt          j                  ndt          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}j        d         d         }d}||k    }|slt          j	        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}j        d         d         }d}||k    }|slt          j	        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d }j        d         d!         }||v }|slt          j	        d"|fd#||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}d S )$Nr   testr   r   c                     S r   r   )r    cacheds    r   r"   zVtest_persist_stream_error_uses_persisted_session_when_cache_is_stale.<locals>.<lambda>4   s    v r   SessionFakeSessionLoaderr   loadc                     S r   r   )r    	persisteds    r   r"   zVtest_persist_stream_error_uses_persisted_session_when_cache_is_stale.<locals>.<lambda>6   s    ) r   r$   c                     dS r&   r   r(   s     r   r"   zVtest_persist_stream_error_uses_persisted_session_when_cache_is_stale.<locals>.<lambda>8   r*   r   r+   r,   r-   r.   r   r/   r1   rj   r2   r6   r7   r   r	   r:   r;   r>   r?   r8   r9   r@   r
   rA   rC   )r   r   rD   rE   typestaticmethodrF   r   rG   rH   rI   rJ   rK   rL   rM   rN   )rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   re   rj   s             @@r   Dtest_persist_stream_error_uses_persisted_session_when_cache_is_stalern   .   s   ^^FFOI#)f==>I	=2E2E2E2EFFF	9d3F333344M / /    	<1[1[\\\#& 	   ?a?a?a99?aa (2F2(F2222222222(F22222(2222F222222222222222222222222222b!&)8[8)[8888888888)[88888)8888[888888888888888888888888888D9#5b#9)#DD#DDDDDDDDDDD#DDDDDDDDDD#DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDr   c                  x   dddg} t          j        | d          }|d         d         }d}||k    }|slt          j        d|fd	||f          t          j        |          t          j        |          d
z  }dd|iz  }t          t          j        |                    d x}x}}|d         d         }d}||k    }|slt          j        d|fd	||f          t          j        |          t          j        |          d
z  }dd|iz  }t          t          j        |                    d x}x}}|d         d         }d}||k    }|slt          j        d|fd	||f          t          j        |          t          j        |          d
z  }dd|iz  }t          t          j        |                    d x}x}}d S )Nr   rc   r   API call failed after 3 retriesr8   r	   r9   r/   r:   r;   r>   r?   r
   r   )rE   _ensure_final_response_messagerG   rH   rL   rM   rN   )r   updatedrU   rR   rV   rW   rX   s          r   <test_ensure_final_response_message_appends_missing_assistantrs   G   s6   F334H6xAbccG2;v-+-+----------+---------+---------------------------2;y!F%FF!%FFFFFFFFFFF!%FFFFFF!FFFF%FFFFFFFFFFFFFFFFFFFFFFFFFFFF1:f''''''''''''''''''''''''''''''''''''''''''''''''''r   c                     ddddddg} t          j        | d          }|| k    }|st          j        d|fd|| f          dt	          j                    v st          j        |          rt          j        |          ndd	t	          j                    v st          j        |           rt          j        |           nd	d
z  }dd|iz  }t          t          j	        |                    d }d S )Nr   rc   r   r9   rp   r/   )z%(py0)s == %(py2)srr   r   )r3   r4   zassert %(py4)sr=   )
rE   rq   rG   rH   rI   rJ   rK   rL   rM   rN   )r   rr   rP   @py_format3rW   s        r   <test_ensure_final_response_message_skips_duplicate_assistantrv   P   s   F++)JKKH 6xAbccGh7h77hhr   )builtinsrI   _pytest.assertion.rewrite	assertionrewriterG   api.streamingrE   r   rY   ra   rn   rs   rv   r   r   r   <module>r|      s                  ! ! ! ! ! !       D D D(	3 	3 	3E E E2( ( (    r   