""" 
Module for counting tokens and splitting text into chunks
"""
from typing import List
from langchain_openai import ChatOpenAI
from langchain_ollama import ChatOllama
from langchain_mistralai import ChatMistralAI
from langchain_core.language_models.chat_models import BaseChatModel

def num_tokens_calculus(string: str, llm_model: BaseChatModel) -> int:
    """
    Returns the number of tokens in a text string.
    """
    if isinstance(llm_model, ChatOpenAI):
        from .tokenizers.tokenizer_openai import num_tokens_openai
        num_tokens_fn = num_tokens_openai

    elif isinstance(llm_model, ChatMistralAI):
        from .tokenizers.tokenizer_mistral import num_tokens_mistral
        num_tokens_fn = num_tokens_mistral

    elif isinstance(llm_model, ChatOllama):
        from .tokenizers.tokenizer_ollama import num_tokens_ollama
        num_tokens_fn = num_tokens_ollama

    else:
        from .tokenizers.tokenizer_openai import num_tokens_openai
        num_tokens_fn = num_tokens_openai

    num_tokens = num_tokens_fn(string, llm_model)
    return num_tokens
