Spaces:
Running
on
Zero
Running
on
Zero
# Copyright (c) 2025 Ye Liu. Licensed under the BSD-3-Clause License. | |
from dataclasses import dataclass | |
from typing import List | |
class Conversation: | |
style: str | |
system: str | |
roles: List[str] | |
seps: List[str] | |
messages: List[str] | |
def append_message(self, role, msg): | |
self.messages.append([role, msg]) | |
def clear(self): | |
self.messages = [] | |
def get_prompt(self): | |
assert self.style in ('chatml', ) | |
prompt = self.system + self.seps[0] if self.system is not None else '' | |
for i, (role, msg) in enumerate(self.messages): | |
prompt += role | |
sep = self.seps[i % 2] | |
if msg is not None: | |
prompt += msg | |
if not prompt.endswith(sep): | |
prompt += sep | |
prompt = prompt.lstrip('\n') | |
return prompt | |
def get_conv(conv_type): | |
if conv_type == 'chatml': | |
conv = Conversation( | |
style='chatml', | |
system='<|im_start|>system\nYou are a helpful assistant.', | |
roles=('\n<|im_start|>user\n', '\n<|im_start|>assistant\n'), | |
seps=('<|im_end|>', '<|im_end|>'), | |
messages=[]) | |
else: | |
raise ValueError(f'unknown conversation type: {conv_type}') | |
return conv | |