Загрузка данных


"""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: все проверки пройдены")