Source code for langchain_community.chat_models.javelin_ai_gateway
importloggingfromtypingimportAny,Dict,List,Mapping,Optional,castfromlangchain_core.callbacksimport(AsyncCallbackManagerForLLMRun,CallbackManagerForLLMRun,)fromlangchain_core.language_models.chat_modelsimportBaseChatModelfromlangchain_core.messagesimport(AIMessage,BaseMessage,ChatMessage,FunctionMessage,HumanMessage,SystemMessage,)fromlangchain_core.outputsimport(ChatGeneration,ChatResult,)frompydanticimportBaseModel,ConfigDict,Field,SecretStrlogger=logging.getLogger(__name__)# Ignoring type because below is valid pydantic code# Unexpected keyword argument "extra" for "__init_subclass__" of "object" [call-arg]
[docs]classChatParams(BaseModel,extra="allow"):"""Parameters for the `Javelin AI Gateway` LLM."""temperature:float=0.0stop:Optional[List[str]]=Nonemax_tokens:Optional[int]=None
[docs]classChatJavelinAIGateway(BaseChatModel):"""`Javelin AI Gateway` chat models API. To use, you should have the ``javelin_sdk`` python package installed. For more information, see https://docs.getjavelin.io Example: .. code-block:: python from langchain_community.chat_models import ChatJavelinAIGateway chat = ChatJavelinAIGateway( gateway_uri="<javelin-ai-gateway-uri>", route="<javelin-ai-gateway-chat-route>", params={ "temperature": 0.1 } ) """route:str"""The route to use for the Javelin AI Gateway API."""gateway_uri:Optional[str]=None"""The URI for the Javelin AI Gateway API."""params:Optional[ChatParams]=None"""Parameters for the Javelin AI Gateway LLM."""client:Any=None"""javelin client."""javelin_api_key:Optional[SecretStr]=Field(None,alias="api_key")"""The API key for the Javelin AI Gateway."""model_config=ConfigDict(populate_by_name=True,)def__init__(self,**kwargs:Any):try:fromjavelin_sdkimport(JavelinClient,UnauthorizedError,)exceptImportError:raiseImportError("Could not import javelin_sdk python package. ""Please install it with `pip install javelin_sdk`.")super().__init__(**kwargs)ifself.gateway_uri:try:self.client=JavelinClient(base_url=self.gateway_uri,api_key=cast(SecretStr,self.javelin_api_key).get_secret_value(),)exceptUnauthorizedErrorase:raiseValueError("Javelin: Incorrect API Key.")frome@propertydef_default_params(self)->Dict[str,Any]:params:Dict[str,Any]={"gateway_uri":self.gateway_uri,"javelin_api_key":cast(SecretStr,self.javelin_api_key).get_secret_value(),"route":self.route,**(self.params.dict()ifself.paramselse{}),}returnparamsdef_generate(self,messages:List[BaseMessage],stop:Optional[List[str]]=None,run_manager:Optional[CallbackManagerForLLMRun]=None,**kwargs:Any,)->ChatResult:message_dicts=[ChatJavelinAIGateway._convert_message_to_dict(message)formessageinmessages]data:Dict[str,Any]={"messages":message_dicts,**(self.params.dict()ifself.paramselse{}),}resp=self.client.query_route(self.route,query_body=data)returnChatJavelinAIGateway._create_chat_result(resp.dict())asyncdef_agenerate(self,messages:List[BaseMessage],stop:Optional[List[str]]=None,run_manager:Optional[AsyncCallbackManagerForLLMRun]=None,**kwargs:Any,)->ChatResult:message_dicts=[ChatJavelinAIGateway._convert_message_to_dict(message)formessageinmessages]data:Dict[str,Any]={"messages":message_dicts,**(self.params.dict()ifself.paramselse{}),}resp=awaitself.client.aquery_route(self.route,query_body=data)returnChatJavelinAIGateway._create_chat_result(resp.dict())@propertydef_identifying_params(self)->Dict[str,Any]:returnself._default_paramsdef_get_invocation_params(self,stop:Optional[List[str]]=None,**kwargs:Any)->Dict[str,Any]:"""Get the parameters used to invoke the model FOR THE CALLBACKS."""return{**self._default_params,**super()._get_invocation_params(stop=stop,**kwargs),}@propertydef_llm_type(self)->str:"""Return type of chat model."""return"javelin-ai-gateway-chat"@staticmethoddef_convert_dict_to_message(_dict:Mapping[str,Any])->BaseMessage:role=_dict["role"]content=_dict["content"]ifrole=="user":returnHumanMessage(content=content)elifrole=="assistant":returnAIMessage(content=content)elifrole=="system":returnSystemMessage(content=content)else:returnChatMessage(content=content,role=role)@staticmethoddef_raise_functions_not_supported()->None:raiseValueError("Function messages are not supported by the Javelin AI Gateway. Please"" create a feature request at https://docs.getjavelin.io")@staticmethoddef_convert_message_to_dict(message:BaseMessage)->dict:ifisinstance(message,ChatMessage):message_dict={"role":message.role,"content":message.content}elifisinstance(message,HumanMessage):message_dict={"role":"user","content":message.content}elifisinstance(message,AIMessage):message_dict={"role":"assistant","content":message.content}elifisinstance(message,SystemMessage):message_dict={"role":"system","content":message.content}elifisinstance(message,FunctionMessage):raiseValueError("Function messages are not supported by the Javelin AI Gateway. Please"" create a feature request at https://docs.getjavelin.io")else:raiseValueError(f"Got unknown message type: {message}")if"function_call"inmessage.additional_kwargs:ChatJavelinAIGateway._raise_functions_not_supported()ifmessage.additional_kwargs:logger.warning("Additional message arguments are unsupported by Javelin AI Gateway "" and will be ignored: %s",message.additional_kwargs,)returnmessage_dict@staticmethoddef_create_chat_result(response:Mapping[str,Any])->ChatResult:generations=[]forcandidateinresponse["llm_response"]["choices"]:message=ChatJavelinAIGateway._convert_dict_to_message(candidate["message"])message_metadata=candidate.get("metadata",{})gen=ChatGeneration(message=message,generation_info=dict(message_metadata),)generations.append(gen)response_metadata=response.get("metadata",{})returnChatResult(generations=generations,llm_output=response_metadata)