Spaces:
Running
Running
import itertools | |
from abc import ABC, abstractmethod | |
from pydantic import BaseModel | |
from proxy_lite.history import MessageAdapter, MessageHistory | |
from proxy_lite.tools import Tool | |
class BaseSerializer(BaseModel, ABC): | |
"""Base class for serializers. | |
Serializers are responsible for converting between the internal MessageHistory/Tool | |
objects and the external API format. Deserialise is not always possible, so raise | |
appropriate warnings. | |
""" | |
def serialize_messages(self, message_history: MessageHistory) -> list[dict]: ... | |
def deserialize_messages(self, data: list[dict]) -> MessageHistory: ... | |
def serialize_tools(self, tools: list[Tool]) -> list[dict]: ... | |
class OpenAICompatibleSerializer(BaseSerializer): | |
def serialize_messages(self, message_history: MessageHistory) -> list[dict]: | |
return message_history.to_dict(exclude={"label"}) | |
def deserialize_messages(self, data: list[dict]) -> MessageHistory: | |
return MessageHistory( | |
messages=[MessageAdapter.validate_python(message) for message in data], | |
) | |
def serialize_tools(self, tools: list[Tool]) -> list[dict]: | |
tool_schemas = [[{"type": "function", "function": schema} for schema in tool.schema] for tool in tools] | |
return list(itertools.chain.from_iterable(tool_schemas)) | |