Ë
    _Ái  ã                  ó<   — d Z ddlmZ ddlmZmZ dZ G d„ d«      Zy)u¦  M-24 Fake LLM í´ë¼ì´ì–¸íŠ¸.

ì™¸ë¶€ LLM API í˜¸ì¶œ ì—†ì´ ë¯¸ë¦¬ ì •í•´ì§„ ì‘ë‹µì„ ìˆœí™˜ ë°˜í™˜í•œë‹¤.
ë™ê¸°(complete) ë° ë¹„ë™ê¸°(complete_async) ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ëª¨ë‘ ì§€ì›í•œë‹¤.

Usage:
    client = FakeLLMClient(responses=["answer1", "answer2"])
    assert client.complete("hello") == "answer1"
    assert client.complete("world") == "answer2"
    assert client.complete("again") == "answer1"  # ìˆœí™˜
é    )Úannotations)ÚAnyÚ	Coroutinezfake responsec                  óH   — e Zd ZdZd	d
d„Zddd„Zddd„Zddd„Zdd„Zdd„Z	y)ÚFakeLLMClientuH   ë¯¸ë¦¬ ì„¤ì •ëœ ì‘ë‹µì„ ìˆœí™˜ ë°˜í™˜í•˜ëŠ” Fake LLM í´ë¼ì´ì–¸íŠ¸.Nc                ón   — |rt        |«      nt        g| _        d| _        d| _        d| _        d| _        y)up   ì´ˆê¸°í™”.

        Args:
            responses: ìˆœí™˜ ì‘ë‹µ ëª©ë¡. Noneì´ë©´ ê¸°ë³¸ ì‘ë‹µ ì‚¬ìš©.
        r   N)ÚlistÚ_DEFAULT_RESPONSEÚ
_responsesÚ_indexÚ
call_countÚlast_promptÚ
last_model©ÚselfÚ	responsess     ú2/home/jay/workspace/tests/fakes/fake_llm_client.pyÚ__init__zFakeLLMClient.__init__   s5   € ñ 9B¤T¨)¤_ÔHYÐGZˆŒØˆŒØ ˆŒØ'+ˆÔØ&*ˆó    c                óÔ   — | xj                   dz  c_         || _        || _        | j                  | j                  t        | j                  «      z     }| xj                  dz  c_        |S )u  ë‹¤ìŒ ì‘ë‹µì„ ë°˜í™˜í•œë‹¤ (ìˆœí™˜).

        Args:
            prompt: ìž…ë ¥ í”„ë¡¬í”„íŠ¸.
            model: ëª¨ë¸ ì´ë¦„.
            **kwargs: ì¶”ê°€ íŒŒë¼ë¯¸í„° (ë¬´ì‹œë¨).

        Returns:
            ë¯¸ë¦¬ ì„¤ì •ëœ ì‘ë‹µ ë¬¸ìžì—´.
        é   )r   r   r   r   r   Úlen)r   ÚpromptÚmodelÚkwargsÚresponses        r   ÚcompletezFakeLLMClient.complete#   sT   € ð 	Š˜1ÑØ!ˆÔØˆŒØ—?‘? 4§;¡;´°T·_±_Ó1EÑ#EÑFˆØŠqÑØˆr   c              ‹  ó4   K  —  | j                   |fd|i|¤ŽS ­w)u   ë¹„ë™ê¸° ë‚´ë¶€ êµ¬í˜„.r   )r   ©r   r   r   r   s       r   Ú_async_completezFakeLLMClient._async_complete5   s!   è ø€ àˆt}‰}˜VÑ;¨5Ð;°FÑ;Ð;ùs   ‚c                ó,   —  | j                   |fd|i|¤ŽS )u  ë¹„ë™ê¸° ë²„ì „ â€” complete()ì™€ ë™ì¼í•œ ìˆœí™˜ ì‘ë‹µ.

        Args:
            prompt: ìž…ë ¥ í”„ë¡¬í”„íŠ¸.
            model: ëª¨ë¸ ì´ë¦„.
            **kwargs: ì¶”ê°€ íŒŒë¼ë¯¸í„° (ë¬´ì‹œë¨).

        Returns:
            strì„ ë°˜í™˜í•˜ëŠ” ì½”ë£¨í‹´.
        r   )r    r   s       r   Úcomplete_asynczFakeLLMClient.complete_async9   s!   € ð $ˆt×#Ñ# FÑB°%ÐB¸6ÑBÐBr   c                ó2   — t        |«      | _        d| _        y)uƒ   ì‘ë‹µ ëª©ë¡ì„ êµì²´í•˜ê³  ì¸ë±ìŠ¤ë¥¼ ì´ˆê¸°í™”í•œë‹¤.

        Args:
            responses: ìƒˆë¡œìš´ ì‘ë‹µ ëª©ë¡.
        r   N)r	   r   r   r   s     r   Úset_responseszFakeLLMClient.set_responsesF   s   € ô ˜y›/ˆŒØˆr   c                ó<   — d| _         d| _        d| _        d| _        y)uK   í˜¸ì¶œ íšŸìˆ˜, ë§ˆì§€ë§‰ í”„ë¡¬í”„íŠ¸/ëª¨ë¸, ì¸ë±ìŠ¤ë¥¼ ì´ˆê¸°í™”í•œë‹¤.r   N)r   r   r   r   )r   s    r   ÚresetzFakeLLMClient.resetO   s   € àˆŒØˆÔØˆŒØˆr   )N)r   zlist[str] | NoneÚreturnÚNone)z
fake-model)r   Ústrr   r)   r   r   r'   r)   )r   r)   r   r)   r   r   r'   zCoroutine[Any, Any, str])r   z	list[str]r'   r(   )r'   r(   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r    r"   r$   r&   © r   r   r   r      s$   „ ÙRô
+ôô$<ôCóôr   r   N)r-   Ú
__future__r   Útypingr   r   r
   r   r.   r   r   ú<module>r1      s$   ðñ
õ #ç !à#Ð ÷@ò @r   