Files
DataPipeline/pipeline/strategies/base.py
T

43 lines
1.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Abstract base class for prompt construction strategies."""
from abc import ABC, abstractmethod
from typing import List
from pipeline.tokenizer import BpeTokenizer
class PromptStrategy(ABC):
"""Abstract base for prompt/response format strategies.
Strategies operate at the token level: the Processor tokenizes raw
text (query, response, …) and passes token lists to the Strategy,
which assembles them with pre-encoded format tokens.
"""
def __init__(self, tokenizer: BpeTokenizer):
self.tokenizer = tokenizer
def _encode_format(self, text: str) -> List[int]:
"""Encode a format string that may contain special tokens."""
return self.tokenizer.encode(text, add_special_tokens=False)
@property
@abstractmethod
def name(self) -> str:
pass
@abstractmethod
def assemble_prompt(self, query_tokens: List[int]) -> List[int]:
"""Assemble query tokens into a complete prompt with format tokens.
The prompt includes all tokens up to (and including) the response
start marker, e.g. ``<im▁start>assistant\n``.
"""
@abstractmethod
def assemble_response(self, response_tokens: List[int]) -> List[int]:
"""Wrap response tokens with format tokens (suffix, eos, etc)."""
def __repr__(self) -> str:
return f"{self.__class__.__name__}(name='{self.name}')"