Spaces:
Paused
Paused
| 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)) | |