
    ri                     V    d dl Zd dlmc mZ d dlZd dlZd dlm	Z	  G d d          Z
dS )    N)	GeminiLLMc                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestGeminiResiliencec                     d S N )selfs    :/root/projects/butler/tests/unit/test_gemini_resilience.pysetup_methodz!TestGeminiResilience.setup_method   s        c                 h   t                      }d}|j        } ||          }ddi}||k    }|st          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        |          t          j        |          dz  }d	d
|iz  }	t          t          j	        |	                    d x}x}x}}d S )Nz{"foo": "bar"}foobar==)zV%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s._safe_parse_json
}(%(py3)s)
} == %(py8)sllmdata)py0py2py3py5py8zassert %(py10)spy10
r   _safe_parse_json
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)
r	   mock_envr   r   @py_assert1@py_assert4@py_assert7@py_assert6@py_format9@py_format11s
             r
   test_safe_parse_json_validz/TestGeminiResilience.test_safe_parse_json_valid
   s[   kk#;##D));eU^;)^;;;;;;;;;;)^;;;;;;;;;;;;s;;;;;s;;;;;;#;;;;;;;;;;;D;;;;;D;;;;;;);;;;^;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r   c                    t                      }d}|                    |          }ddi}||k    }|st          j        d|fd||f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd	|iz  }t          t          j	        |                    d x}}d S )
Nz#{"foo": "bar"} // This is a commentr   r   r   z%(py0)s == %(py3)sresr   r   assert %(py5)sr   r   	r	   r$   r   r   r.   @py_assert2r%   @py_format4@py_format6s	            r
   "test_safe_parse_json_with_commentsz7TestGeminiResilience.test_safe_parse_json_with_comments   s    kk4""4((en$sn$$$$$$$$$$sn$$$$$$$$$$$$s$$$$$s$$$$$$n$$$$$$$$$$$$$$$$$$$$$$$$$$$r   c                    t                      }d}|                    |          }ddi}||k    }|st          j        d|fd||f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd	|iz  }t          t          j	        |                    d x}}d S )
Nz Here is the JSON: {"foo": "bar"}r   r   r   r-   r.   r/   r0   r   r   r1   s	            r
    test_safe_parse_json_with_prefixz5TestGeminiResilience.test_safe_parse_json_with_prefix   s    kk1""4((en$sn$$$$$$$$$$sn$$$$$$$$$$$$s$$$$$s$$$$$$n$$$$$$$$$$$$$$$$$$$$$$$$$$$r   c                 r   ddl m} t          j                                        5 }|                    dd             |            }ddz  }di |dg}|                    d	|d
          }t          |          }d
}	||	k    }
|
st          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        |          t          j        |	          dz  }dd|iz  }t          t          j        |                    dx}x}
}	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}}ddd           dS # 1 swxY w Y   dS )z<Test that _format_response truncates very long tool outputs.r   )MessageDispatcherzslack_sdk.WebClient.__init__c                     d S r   r   )r	   tokens     r
   <lambda>zFTestGeminiResilience.test_format_response_truncation.<locals>.<lambda>&   s    $ r   Ai'  test)toolargsresultz	Main texti  )
max_length)<=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} <= %(py6)slenresponse)r   py1r   py6zassert %(py8)sr   Nu   ⚠️ (Response truncated)in)z%(py1)s in %(py3)s)rF   r   r0   r   )slack_bot.dispatcherr9   pytestMonkeyPatchcontextsetattr_format_responserD   r   r   r   r   r    r!   r"   r#   )r	   r$   r9   m
dispatcherlong_tool_resulttool_resultsrE   r2   @py_assert5r&   @py_format7r)   @py_assert0r3   r4   s                   r
   test_format_response_truncationz4TestGeminiResilience.test_format_response_truncation   s   :::::: '')) 	<QII46N6NOOO**,,J"U{*  L "22;Y]2^^Hx==(D(=D((((((((((=D((((((((((((3(((((3(((((((((((((x(((((x((((((=((((D(((((((((((((((((((((((((((/;/8;;;;;;;;;;/8;;;;;/;;;;;;;;;;;8;;;;;8;;;;;;;;;;;;;;;;;;;;;;;;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   G:H,,H03H0N)__name__
__module____qualname__r   r+   r5   r7   rV   r   r   r
   r   r      s_          < < <
% % %% % %< < < < <r   r   )builtinsr   _pytest.assertion.rewrite	assertionrewriter   rJ   jsonslack_bot.llm.geminir   r   r   r   r
   <module>r`      su                   * * * * * */< /< /< /< /< /< /< /< /< /<r   