Spaces:
Running
Running
File size: 1,389 Bytes
f0f6e5c 853581f f0f6e5c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
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.
"""
@abstractmethod
def serialize_messages(self, message_history: MessageHistory) -> list[dict]: ...
@abstractmethod
def deserialize_messages(self, data: list[dict]) -> MessageHistory: ...
@abstractmethod
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))
|