33 lines
909 B
Python
33 lines
909 B
Python
from abc import ABC, abstractmethod
|
|
|
|
from guardrails.llm_providers import (
|
|
ArbitraryCallable,
|
|
AsyncPromptCallableBase,
|
|
PromptCallableBase,
|
|
)
|
|
|
|
|
|
class BaseFormatter(ABC):
|
|
"""A Formatter takes an LLM Callable and wraps the method into an abstract
|
|
callable.
|
|
|
|
Used to perform manipulations of the input or the output, like JSON
|
|
constrained- decoding.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def wrap_callable(self, llm_callable: PromptCallableBase) -> ArbitraryCallable: ...
|
|
|
|
@abstractmethod
|
|
def wrap_async_callable(
|
|
self, llm_callable: PromptCallableBase
|
|
) -> AsyncPromptCallableBase: ...
|
|
|
|
|
|
class PassthroughFormatter(BaseFormatter):
|
|
def wrap_callable(self, llm_callable: PromptCallableBase): # type: ignore
|
|
return llm_callable # Noop
|
|
|
|
def wrap_async_callable(self, llm_callable: PromptCallableBase): # type: ignore
|
|
return llm_callable # Noop
|