in neuron-explainer/neuron_explainer/explanations/prompt_builder.py [0:0]
def prompt_length_in_tokens(self, prompt_format: PromptFormat) -> int:
# TODO(sbills): Make the model/encoding configurable. This implementation assumes GPT-4.
encoding = tiktoken.get_encoding("cl100k_base")
if prompt_format == PromptFormat.HARMONY_V4:
# Approximately-correct implementation adapted from this documentation:
# https://platform.openai.com/docs/guides/chat/introduction
num_tokens = 0
for message in self._messages:
num_tokens += (
4 # every message follows <|im_start|>{role/name}\n{content}<|im_end|>\n
)
num_tokens += len(encoding.encode(message["content"], allowed_special="all"))
num_tokens += 2 # every reply is primed with <|im_start|>assistant
return num_tokens
else:
prompt_str = self.build(prompt_format)
assert isinstance(prompt_str, str)
return len(encoding.encode(prompt_str, allowed_special="all"))