"""neurotools - общие инструменты Нейролаба."""
MODEL_LIMIT = 4096
def cell_div(a, b):
"""Деление целых a >= 0 и b > 0 с округлением вверх."""
return (a + b - 1) // b
def count_tokens(text):
"""Число токенов: длина текста без пробелов по краям, делённая на 4 с округлением вверх."""
if not text:
return 0
stripped_text = text.strip()
if not stripped_text:
return 0
return cell_div(len(stripped_text), 4)
def cost(text, price_per_1000=200):
"""Стоимость запроса в рублях: токены x цена за 1000 токенов, делённая на 1000 с округлением вверх до целого рубля."""
tokens = count_tokens(text)
return cell_div(tokens * price_per_1000, 1000)
def fits(text, limit=MODEL_LIMIT):
"""True, если токенов не больше limit, иначе False."""
return count_tokens(text) <= limit
if __name__ == "__main__":
# Не менее трёх проверок, в том числе граничные случаи
assert cell_div(0, 5) == 0
assert cell_div(10, 3) == 4
assert cell_div(9, 3) == 3
assert count_tokens("") == 0
assert count_tokens(" ") == 0
assert count_tokens("abcd") == 1
assert count_tokens("abcde") == 2
assert cost("") == 0
assert cost("a" * 4) == 200
assert cost("a" * 5) == 400
assert fits("a" * 4) is True
assert fits("a" * 16384) is True # 16384 / 4 = 4096
assert fits("a" * 16385) is False # 16385 / 4 = 4097
print("neurotools: все проверки пройдены")