reafactor: 重构项目

This commit is contained in:
2026-03-30 20:58:51 +08:00
parent f67bad0d8b
commit 35963bcb08
29 changed files with 1395 additions and 1234 deletions
+41
View File
@@ -0,0 +1,41 @@
"""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}')"