
    g                     r    d Z ddlmZmZmZmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZ ddlmZ  G d d	e      Zy
)zQ
Translate from OpenAI's `/v1/chat/completions` to Groq's `/v1/chat/completions`
    )ListOptionalTupleUnion)	BaseModelget_secret_str)AllMessageValuesChatCompletionAssistantMessageChatCompletionToolParam$ChatCompletionToolParamFunctionChunk   )OpenAIGPTConfigc                       e Zd ZU dZee   ed<   dZeee	e
f      ed<   dZee   ed<   dZee
   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZeee	ef      ed	<   dZee   ed
<   dZee   ed<   dZee
   ed<   dZee   ed<   dZeee	e
f      ed<   	 	 	 	 	 	 	 	 	 	 	 	 	 ddee   deee	e
f      dee   dee
   dee   dee   dee   d	eee	ef      d
ee   dee   dee
   dee   deee	e
f      ddfdZe fd       Zdee   de	defdZdee	   dee	   deee	   ee	   f   fdZde
defdZ de
fdZ!	 d de
de
de	dede
f
 fdZ" xZ#S )!GroqChatConfigNfrequency_penaltyfunction_call	functions
logit_bias
max_tokensnpresence_penaltystoptemperaturetop_presponse_formattoolstool_choicereturnc                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nself)localscopyitemssetattr	__class__)r!   r   r   r   r   r   r   r   r   r   r   r   r   r   locals_keyvalues                    Z/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/groq/chat/transformation.py__init__zGroqChatConfig.__init__$   sA      (--/!--/JCf}!2U3 *    c                      t         |          S )N)super
get_config)clsr&   s    r*   r/   zGroqChatConfig.get_config9   s    w!##r,   messagesmodelc                    t        |      D ]q  \  }}	 t        |t              r|j                         }n|}|j	                  d      dk(  }|sAt        d      }|j                         D ]  \  }}	|		|	||<    |||<   s |S )Nrole	assistant)r4   )	enumerate
isinstancer   
model_dumpgetr   r$   )
r!   r1   r2   idxmessage_messageassistant_messagenew_messagekvs
             r*   _transform_messagesz"GroqChatConfig._transform_messages=   s    %h/LC '9-"--/" (V 4 C <+N$NN,DAq})*A - !, 0  r,   api_baseapi_keyc                 N    |xs t        d      xs d}|xs t        d      }||fS )NGROQ_API_BASEzhttps://api.groq.com/openai/v1GROQ_API_KEYr   )r!   rB   rC   dynamic_api_keys       r*   $_get_openai_compatible_provider_infoz3GroqChatConfig._get_openai_compatible_provider_infoP   s=    
  0o.0/ 	
 "C^N%C((r,   optional_paramsc                 (    |j                  d      yy)zH
        Groq doesn't support 'response_format' while streaming
        r   TF)r9   )r!   rI   s     r*   _should_fake_streamz"GroqChatConfig._should_fake_stream\   s     01=r,   json_schemac                 2    t        dt        d|            S )a3  
        Handles creating a tool call for getting responses in JSON format.

        Args:
            json_schema (Optional[dict]): The JSON schema the response should be in

        Returns:
            AnthropicMessagesTool: The tool call to send to Anthropic API to get responses in JSON format
        functionjson_tool_call)name
parameterstyperN   )r   r   )r!   rL   s     r*   *_create_json_tool_call_for_response_formatz9GroqChatConfig._create_json_tool_call_for_response_formate   s"     '9%&
 	
r,   non_default_paramsdrop_paramsc                    |j                  d      }|ft        |t              rVd }d|v r|d   }nd|v r|d   d   }	 |;dddid}| j                  |	      }|g|d
<   ||d<   d|d<   |j	                  dd        t
        	|   ||||      S )Nr   response_schemarL   schemarN   rP   rO   rR   )rL   r   r   T	json_mode)r9   r7   dictrT   popr.   map_openai_params)
r!   rU   rI   r2   rV   _response_formatrL   _tool_choice_toolr&   s
            r*   r]   z GroqChatConfig.map_openai_paramsz   s     .112CD'J7G,N*.K $44./@A"22.}=hG &&!')9 :  GG + H  -27(1=./3,"&&%t w(
 	
r,   )NNNNNNNNNNNNN)F)$__name__
__module____qualname__r   r   int__annotations__r   r   strr[   r   listr   r   r   r   r   r   r   r   r   r   r+   classmethodr/   r   r
   rA   r   rH   boolrK   rT   r]   __classcell__)r&   s   @r*   r   r      s   '+x}+04M8E#t),-4 $Ix~$!%J% $J$Ax}&*hsm*'+D(5d#
$+!%K#%E8C=&*OXd^* E8D> .2K%T	*+2 ,048$(%)$(*.+/%)#*. $264#C=4  c4i 014 D>	4
 TN4 SM4 C=4 #3-4 uS$Y'(4 c]4 }4 "$4 ~4 eCI./4 
4* $ $D1A,B 3 SW &
) 
)08
)	x}hsm+	,
)4 D 

4 "$
 $
 $
 	$

 $
 
$
 $
r,   r   N)__doc__typingr   r   r   r   pydanticr   litellm.secret_managers.mainr	   litellm.types.llms.openair
   r   r   r   openai.chat.gpt_transformationr   r    r,   r*   <module>rr      s5    0 /  7  >J
_ J
r,   