Source code for rllm.llm.parser.base
from abc import ABC, abstractmethod
from typing import Any, List
from rllm.llm.types import MessageRole, ChatMessage
# ===== Generic Model Output - Parser =====
[docs]
class BaseOutputParser(ABC):
"""Output parser class."""
[docs]
@abstractmethod
def parse(self, output: str) -> Any:
"""Parse, validate, and correct errors programmatically."""
raise NotImplementedError
[docs]
def format(self, query: str) -> str:
"""Format a query with structured output formatting instructions."""
return query
[docs]
def format_messages(
self,
messages: List[ChatMessage]
) -> List[ChatMessage]:
"""Format a list of messages with structured
output formatting instructions."""
# NOTE: apply output parser to either the first message
# if it's a system message or the last message
if messages:
if messages[0].role == MessageRole.SYSTEM:
messages[0].content = self.format(messages[0].content or "")
else:
messages[-1].content = self.format(messages[-1].content or "")
return messages