Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
dappier.py162 linesDownload Raw Back to chat_models
1from typing import Any, Dict, List, Optional, Union2 3from aiohttp import ClientSession4from langchain_core.callbacks import (5    AsyncCallbackManagerForLLMRun,6    CallbackManagerForLLMRun,7)8from langchain_core.language_models.chat_models import (9    BaseChatModel,10)11from langchain_core.messages import (12    AIMessage,13    BaseMessage,14)15from langchain_core.outputs import ChatGeneration, ChatResult16from langchain_core.utils import convert_to_secret_str, get_from_dict_or_env17from pydantic import ConfigDict, Field, SecretStr, model_validator18 19from langchain_community.utilities.requests import Requests20 21 22def _format_dappier_messages(23    messages: List[BaseMessage],24) -> List[Dict[str, Union[str, List[Union[str, Dict[Any, Any]]]]]]:25    formatted_messages = []26 27    for message in messages:28        if message.type == "human":29            formatted_messages.append({"role": "user", "content": message.content})30        elif message.type == "system":31            formatted_messages.append({"role": "system", "content": message.content})32 33    return formatted_messages34 35 36class ChatDappierAI(BaseChatModel):37    """`Dappier` chat large language models.38 39    `Dappier` is a platform enabling access to diverse, real-time data models.40    Enhance your AI applications with Dappier's pre-trained, LLM-ready data models41    and ensure accurate, current responses with reduced inaccuracies.42 43    To use one of our Dappier AI Data Models, you will need an API key.44    Please visit Dappier Platform (https://platform.dappier.com/) to log in45    and create an API key in your profile.46 47    Example:48        .. code-block:: python49 50            from langchain_community.chat_models import ChatDappierAI51            from langchain_core.messages import HumanMessage52 53            # Initialize `ChatDappierAI` with the desired configuration54            chat = ChatDappierAI(55                dappier_endpoint="https://api.dappier.com/app/datamodel/dm_01hpsxyfm2fwdt2zet9cg6fdxt",56                dappier_api_key="<YOUR_KEY>")57 58            # Create a list of messages to interact with the model59            messages = [HumanMessage(content="hello")]60 61            # Invoke the model with the provided messages62            chat.invoke(messages)63 64 65    you can find more details here : https://docs.dappier.com/introduction"""66 67    dappier_endpoint: str = "https://api.dappier.com/app/datamodelconversation"68 69    dappier_model: str = "dm_01hpsxyfm2fwdt2zet9cg6fdxt"70 71    dappier_api_key: Optional[SecretStr] = Field(None, description="Dappier API Token")72 73    model_config = ConfigDict(74        extra="forbid",75    )76 77    @model_validator(mode="before")78    @classmethod79    def validate_environment(cls, values: Dict) -> Any:80        """Validate that api key exists in environment."""81        values["dappier_api_key"] = convert_to_secret_str(82            get_from_dict_or_env(values, "dappier_api_key", "DAPPIER_API_KEY")83        )84        return values85 86    @staticmethod87    def get_user_agent() -> str:88        from langchain_community import __version__89 90        return f"langchain/{__version__}"91 92    @property93    def _llm_type(self) -> str:94        """Return type of chat model."""95        return "dappier-realtimesearch-chat"96 97    @property98    def _api_key(self) -> str:99        if self.dappier_api_key:100            return self.dappier_api_key.get_secret_value()101        return ""102 103    def _generate(104        self,105        messages: List[BaseMessage],106        stop: Optional[List[str]] = None,107        run_manager: Optional[CallbackManagerForLLMRun] = None,108        **kwargs: Any,109    ) -> ChatResult:110        url = f"{self.dappier_endpoint}"111        headers = {112            "Authorization": f"Bearer {self._api_key}",113            "User-Agent": self.get_user_agent(),114        }115        user_query = _format_dappier_messages(messages=messages)116        payload: Dict[str, Any] = {117            "model": self.dappier_model,118            "conversation": user_query,119        }120 121        request = Requests(headers=headers)122        response = request.post(url=url, data=payload)123        response.raise_for_status()124 125        data = response.json()126 127        message_response = data["message"]128 129        return ChatResult(130            generations=[ChatGeneration(message=AIMessage(content=message_response))]131        )132 133    async def _agenerate(134        self,135        messages: List[BaseMessage],136        stop: Optional[List[str]] = None,137        run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,138        **kwargs: Any,139    ) -> ChatResult:140        url = f"{self.dappier_endpoint}"141        headers = {142            "Authorization": f"Bearer {self._api_key}",143            "User-Agent": self.get_user_agent(),144        }145        user_query = _format_dappier_messages(messages=messages)146        payload: Dict[str, Any] = {147            "model": self.dappier_model,148            "conversation": user_query,149        }150 151        async with ClientSession() as session:152            async with session.post(url, json=payload, headers=headers) as response:153                response.raise_for_status()154                data = await response.json()155                message_response = data["message"]156 157                return ChatResult(158                    generations=[159                        ChatGeneration(message=AIMessage(content=message_response))160                    ]161                )162 
codekingpro/portable-devtools · Team Ai