
    Pjo
                     T    d Z ddlZddlmc mZ ddlZd Zd Z	d Z
d Zd Zd Zd	 Zy)
z?Protocol frame builders, hello-auth gate, and history trimming.    Nc            
         t         j                  } d} | |      }ddd}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x} x}x}x}}t         j                  }  |        }d
di}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}}t         j                  } d}d}d} | |||      }	ddddd}
|	|
k(  }|st        j                  d|fd|	|
f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d x} x}x}x}x}	x}}
t        j                  ddd       d   }d }||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd |iz  }t        t        j                  |            d x}x}}t         j                  } d!} | |      }d"d!d#}||k(  }|st        j                  d|fd$||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x} x}x}x}}t         j                  } d!} | |      }d%d!d#}||k(  }|st        j                  d|fd&||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x} x}x}x}}t         j                  }  |        }d
d'i}||k(  }|st        j                  d|fd(||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}}t         j                  } d)} | |      }d*d)d+}||k(  }|st        j                  d|fd,||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x} x}x}x}}t         j                   }  |        }d
d-i}||k(  }|st        j                  d|fd.||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}}y )/Nabcready)typesession==)zM%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.f_ready
}(%(py4)s)
} == %(py9)smainpy0py2py4py6py9assert %(py11)spy11r   ack)zD%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.f_ack
}()
} == %(py7)s)r   r   r   py7assert %(py9)sr      zHi.warmsentence)r   seqtextemotion)ze%(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.f_sentence
}(%(py4)s, %(py6)s, %(py8)s)
} == %(py13)s)r   r   r   r   py8py10py13zassert %(py15)spy15   zPlain.r   is)z%(py1)s is %(py4)spy1r   assert %(py6)sr      audio_start)r   r   )zS%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.f_audio_start
}(%(py4)s)
} == %(py9)s	audio_end)zQ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.f_audio_end
}(%(py4)s)
} == %(py9)sturn_end)zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.f_turn_end
}()
} == %(py7)sboomerror)r   message)zM%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.f_error
}(%(py4)s)
} == %(py9)spong)zE%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.f_pong
}()
} == %(py7)s)r
   f_ready
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationf_ack
f_sentencef_audio_startf_audio_end
f_turn_endf_errorf_pong)@py_assert1@py_assert3@py_assert5@py_assert8@py_assert7@py_format10@py_format12@py_assert6@py_format8@py_assert9@py_assert12@py_assert11@py_format14@py_format16@py_assert0@py_assert2@py_format5@py_format7s                     I/Users/ahmed/devFolder/Ultron/claude-voice/gateway/tests/test_protocol.pytest_frame_shapesrQ      s   <<EE<E7u"EE"EEEEE"EEEEEEE4EEE4EEE<EEEEEEEEE"EEEEEEEE::*:<*FE?*<?****<?******4***4***:***<***?*******?? H1 He HV H?1eV, H1e1H H, 1H H H H6G6GH, 1H H HAGH H/G/G  H H>Gi  H H>Gi  H H>Gi  H H>Gi $ H H>Gi &, H H>Gi - H H>Gi1H H H H H4G4GH H H??1h-i8@D@8D@@@@8D@@@8@@@D@@@@@@@EaEa E]1$EE $EEEEE $EEEEEEE4EEE4EEEEEEaEEE EEE$EEEEEEEEAAAAA;q"AA"AAAAA"AAAAAAA4AAA4AAAAAAAAAAAAA"AAAAAAAA??4?4 44 44444 444444444444444?444444 44444444<<GG<GG#GG#GGGGG#GGGGGGG4GGG4GGG<GGGGGGGGG#GGGGGGGG;;,;=,VV,,=,,,,,=,,,,,,,4,,,4,,,;,,,=,,,,,,,,,,,    c                  b   t        j                  ddd      } t        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}}y )
N   xdryr   r   z%(py1)s == %(py4)sr#   r%   r   )r
   r8   r9   r/   r0   r4   r5   r6   )sarL   r?   rM   rN   rO   s          rP   5test_sentence_always_precedes_audio_ordering_contractrZ      sx     	3&A1AU8qx8x8x8xrR   c                 N   | j                  dd       t        j                  }d } ||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}x}x}}t        j                  }d} ||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}x}x}}y )NGATEWAY_KEYF)raisingTr!   zN%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s._auth_ok
}(%(py4)s)
} is %(py9)sr
   r   r   r   anything)delenvr
   _auth_okr/   r0   r1   r2   r3   r4   r5   r6   monkeypatchr>   r?   r@   rA   rB   rC   rD   s           rP   #test_auth_gate_disabled_when_no_keyrd      sB   }e4==&&=&$&$&&&&$&&&&&&4&&&4&&&=&&&&&&&&&$&&&&&&&==,,=$,,$,,,,$,,,,,,4,,,4,,,=,,,,,,$,,,,,,,,,,,rR   c                 ^   | j                  dd       t        j                  }d} ||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}x}x}}t        j                  }d
} ||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}x}x}}t        j                  }d } ||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}x}x}}y )Nr\   s3cretTr!   r^   r
   r   r   r   wrongF)setenvr
   ra   r/   r0   r1   r2   r3   r4   r5   r6   rb   s           rP    test_auth_gate_enforced_with_keyri       s   }h/==**="*d*"d****"d******4***4***=******"***d*******==**=!*U*!U****!U******4***4***=******!***U*******==''='%'%''''%''''''4'''4'''='''''''''%''''''''rR   c                     t        j                  d       } g }t        d      D ]0  }|j                  dd| d       |j                  dd| d       2 | j	                  |      }|D cg c]  }|d   dk(  s| }}t        |      }t         j                  }||k(  }|s?t        j                  d	|fd
||f      dt        j                         v st        j                  t
              rt        j                  t
              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t               rt        j                  t               nd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}}y c c}w )Nws2   userurolecontent	assistantrY   rq   r   )zO%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py7)s
{%(py7)s = %(py5)s.MAX_TURNS
}lenusersr
   )r   r$   py3py5r   r   r   r   rW   r#   r%   r   rr   u10)r
   Sessionrangeappend_trimrt   	MAX_TURNSr/   r0   r1   r2   r3   r4   r5   r6   )sessmsgsitrimmedmru   rM   rE   @py_assert4rF   rC   rL   r?   rN   rO   s                  rP   3test_history_trim_keeps_last_turns_at_user_boundaryr   '   s   <<4 DD2YV!A389[qW=>  jjG711V9#6QE7u:'':'''':''''''3'''3''''''u'''u''':'''''''''''''''''''1:f'''''''''''''''''''1:i )E) E)))) E))) )))E))))))) 8s   ,K/:K/c                     t        j                  d       } ddddddg}| j                  } ||      }||k(  }|s/t        j                  d|fd||f      d	t        j                         v st        j                  |       rt        j                  |       nd	t        j                  |      d
t        j                         v st        j                  |      rt        j                  |      nd
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}x}}y )Nrk   rn   ro   rp   rs   rY   r   )zK%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s._trim
}(%(py3)s)
} == %(py7)sr~   r   )r   r   rv   rw   r   r   r   )r
   ry   r|   r/   r0   r1   r2   r3   r4   r5   r6   )r~   r   r>   r   rE   rF   rC   s          rP   %test_history_trim_noop_when_under_capr   5   s    <<4 D, S13D::#:d#t####t######4###4###:######d###d#########t###t#######rR   c                  l   t        j                  d       } | j                  ddd      }|j                  }d} ||      }|sddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}}| j                  dd	d
      }d}||v }|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}}| j                  ddd
      }|j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}}y )Nrk   hellotyped)r   sourcez[TYPED] zLassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.startswith
}(%(py4)s)
})r   r   r   r   gozfast, urgent)r   tonez(voice: fast, urgent))in)z%(py1)s in %(py3)stoned)r$   rv   zassert %(py5)srw   z(voice: laughing)z(voice:r   r   )zK%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.count
}(%(py4)s)
} == %(py9)spassthrur   r   r   )r
   ry   _compose_user
startswithr1   r2   r/   r3   r4   r5   r6   r0   count)r~   r   r>   r?   r@   rO   r   rL   rM   @py_format4@py_format6r   rA   rB   rC   rD   s                   rP   ,test_compose_user_adds_typed_marker_and_toner   <   s   <<4 D7CDE'J'J''''''''5'''5''''''J''''''''''nEFE"+"e++++"e+++"++++++e+++e+++++++!!49L"MNH>>)))>)$))$))))$))))))8)))8)))>)))))))$)))))))))))rR   )__doc__builtinsr1   _pytest.assertion.rewrite	assertionrewriter/   r
   rQ   rZ   rd   ri   r   r   r    rR   rP   <module>r      s2    E   
- -(*$*rR   