o
    Ďi                     @   s   d dl Z d dlmZ zd dlmZ d dlmZ W n ey/   G dd dZG dd dZY nw d	ZG d
d deeZ	G dd deeZ
dS )    N)sleep)BaseProvider)FakeListLLMc                   @      e Zd ZdS )r   N__name__
__module____qualname__ r
   r
   [/home/jeff/fluffinator/venv/lib/python3.10/site-packages/IPython/terminal/tests/fake_llm.pyr   	       r   c                   @   r   )r   Nr   r
   r
   r
   r   r      r   r   zFdef fib(n):
    if n < 2: return n
    return fib(n - 1) + fib(n - 2)
c                       sH   e Zd ZdZdZdZdgZ fddZdd Zd	d
 Z	dddZ
  ZS )FibonacciCompletionProvidermy_providerzMy Providermodelmodel_ac                    s(   dg|d< d|d< t  jdi | d S )Nz2This fake response will not be used for completion	responsesr   model_idr
   )super__init__selfkwargs	__class__r
   r   r      s   
z$FibonacciCompletionProvider.__init__c                    s
   t d)Nz'IPython only supports streaming models.)
ValueError)r   requestr
   r
   r   generate_inline_completions#   s   z7FibonacciCompletionProvider.generate_inline_completionsc                 C  s   ddl m}m} |jdksJ d|j d}|j d }t|s%d S ||dd|dgd	|jd
V  | tt	|d  |j|2 z	3 d H W }|V  qC6 d S )Nr   )InlineCompletionListInlineCompletionReplyts0 T)
insertTextisIncompletetoken)items)listreply_to)
jupyter_ai.completions.modelsr   r   numberprefix
splitlines	FIBONACCI
startswith_streamlen)r   r   r   r   r%   	last_linereplyr
   r
   r   stream_inline_completions&   s*   

	z5FibonacciCompletionProvider.stream_inline_completionsr"   c                 C  sz   ddl m} |}|dD ] }tdI d H  |r|d7 }||7 }|d||d|ddV  q|d||d|d	dV  d S )
Nr   )InlineCompletionStreamChunk g?stream)r#   r%   F)typeresponser(   doneT)r)   r4   splitasyncior   )r   sentencerequest_numberr%   
start_withr4   
suggestionfragmentr
   r
   r   r/   C   s(   
z#FibonacciCompletionProvider._stream)r"   )r   r   r	   idnamemodel_id_keymodelsr   r   r3   r/   __classcell__r
   r
   r   r   r      s    r   c                       s.   e Zd ZdZdZdZdgZ fddZ  ZS )SlowStartingCompletionProviderslow_providerzSlow Providerr   r   c                    s0   dg|d< d|d< t d t jdi | d S )Nz.This fake response will be used for completionr   r   r   
   r
   )r   r   r   r   r   r
   r   r   c   s   
z'SlowStartingCompletionProvider.__init__)	r   r   r	   rA   rB   rC   rD   r   rE   r
   r
   r   r   rF   ]   s    rF   )r;   timer   jupyter_ai_magics.providersr   langchain_community.llmsr   ImportErrorr-   r   rF   r
   r
   r
   r   <module>   s    	F