leaderboard / spitfight /prompt.py
Jae-Won Chung
Do not standardize system prompts
e38f79f
"""An abstraction layer for prompting different models."""
from __future__ import annotations
import enum
from fastchat.model.model_adapter import get_conversation_template
class Task(enum.Enum):
"""Different system prompt styles."""
CHAT = "chat"
CHAT_CONCISE = "chat-concise"
INSTRUCT = "instruct"
INSTRUCT_CONCISE = "instruct-concise"
SYSTEM_PROMPTS = {
Task.CHAT: (
"A chat between a human user (prompter) and an artificial intelligence (AI) assistant. "
"The assistant gives helpful, detailed, and polite answers to the user's questions. "
),
Task.CHAT_CONCISE: (
"A chat between a human user (prompter) and an artificial intelligence (AI) assistant. "
"The assistant gives helpful, detailed, and polite answers to the user's questions. "
"The assistant's answers are very concise. "
),
Task.INSTRUCT: (
"Below is an instruction that describes a task. "
"Write a response that appropriately completes the request. "
),
Task.INSTRUCT_CONCISE: (
"Below is an instruction that describes a task. "
"Write a response that appropriately completes the request. "
"The response should be very concise. "
),
}
def get_system_prompt(task: Task | str) -> str:
"""Get the system prompt for a given task."""
if isinstance(task, str):
task = Task(task)
return SYSTEM_PROMPTS[task]
def apply_model_characteristics(
prompt: str,
model_name: str,
system_prompt: str | None = None,
) -> tuple[str, str | None, list[int]]:
"""Apply and return model-specific differences."""
conv = get_conversation_template(model_name)
if system_prompt is not None:
conv.system_message = system_prompt
conv.messages = []
conv.offset = 0
conv.append_message(conv.roles[0], prompt)
conv.append_message(conv.roles[1], "")
stop_str = None if conv.stop_str is None or not conv.stop_str else conv.stop_str
return conv.get_prompt(), stop_str, (conv.stop_token_ids or [])