
    +#h                     *    d dl mZmZ  G d de      Zy)    )ABCabstractmethodc                   z    e Zd ZdZd Zed        Zd ZddedefdZ	ddedefdZ
dd	ed
efdZedd       Zd Zy)LMz#Abstract class for language models.c                 >    |ddddddd| _         d| _        g | _        y )Ng              r   )modeltemperature
max_tokenstop_pfrequency_penaltypresence_penaltyndefault)kwargsproviderhistory)selfr
   s     K/var/www/html/sandstorm/venv/lib/python3.12/site-packages/dsp/modules/lm.py__init__zLM.__init__   s0    !" !
 "    c                      y N r   promptr   s      r   basic_requestzLM.basic_request       r   c                 (     | j                   |fi |S r   )r   r   s      r   requestz
LM.request   s    !t!!&3F33r   textendc                 *    dt        |      z   dz   |z   S )Nz[32m[0mstrr   r"   r#   s      r   print_greenzLM.print_green       CI%	1C77r   c                 *    dt        |      z   dz   |z   S )Nz[31mr%   r&   r(   s      r   	print_redzLM.print_red   r*   r   r   skipc                    | j                   }d}g }||z   }t        | j                  dd       D ]  }|d   }||k7  r|dk(  s|dk(  s|dk(  s
|dk(  s|dk(  r|j                  ||d	   f       n|d
k(  rL|d	   j                  D cg c]   }|j
                  dk(  sd|j                  i" }	}|j                  ||	f       ne|dk(  r!|j                  ||d	   j                  f       n?|dk(  r!|j                  ||d	   j                  f       n|j                  ||d	   d   f       |}t        |      |k\  s n d}
t        t        |            D ]  \  }\  }}||z
  dz
  |k  r|
dz  }
|
|z  }
d}|dk(  s
|dk(  s|dk(  r|}n|dk(  s|dk(  r&d| j                  |d         j                         z   }na|dk(  s|dk(  r|}nT|dk(  rd|z   }nI|dk(  r|d   j                  d   j                  }n'|dk(  r|d   j                  j                  }n|d   d   }|
| j                  |d      z  }
t        |      dkD  r&|
| j                  dt        |      dz
   dd      z  }
|
dz  }
 t!        |
       |
S c c}w )zPrints the last n prompts and their completions.

        TODO: print the valid choice that contains filled output field instead of the first.
        Nir   clarifaigooglegroqBedrock	Sagemakerresponse	anthropicr"   coheremistralchoices r	   z


openaiollama r   claude)r#   z 	 (and z other completions))r   reversedr   appendcontenttyper"   r8   len	enumerate_get_choice_textstrippartsmessager)   r,   print)r   r   r-   r   last_promptprintedxr   blockblocksprinting_valueidxr8   r"   s                 r   inspect_historyzLM.inspect_history"   s   
 H$,,tu-. 	Ax[F$z)X-AXQWEW[cgp[pt|  AL  uLNNFAjM#:;,@A*@U@UnuY^YcYcgmYmvuzz2nFnNNFF#34)NNFAjM,>,>#?@*NNFAjM,A,A#BCNNFAjM),D#EF K7|q '	* &/0A&B 	'"C"&'C!t#h&Nf$ND8#x9'<K@WX%X)=T2271:>DDFFZ'8x+?V#W}X%qz''*//Y&qz))11qz&)d..t.<<N7|a$..9S\!^<LL_1`fh."iih&N7	': 	n[ os   I1I1c                      y r   r   )r   r   only_completedreturn_sortedr   s        r   __call__zLM.__call__c   r   r   c                 l    i | j                   |}|j                  d      } | j                  dd|i|S )z>Returns a copy of the language model with the same parameters.r
   r   )r   pop	__class__)r   r   r
   s      r   copyzLM.copyg   s<    *DKK*6*

7#t~~4E4V44r   N)
)r	   r   )TF)__name__
__module____qualname____doc__r   r   r   r!   r'   r)   r,   intrP   rT   rX   r   r   r   r   r      sv    -  48 8# 88c 8 8? ? ?B  5r   r   N)abcr   r   r   r   r   r   <module>r`      s    #h5 h5r   