import os
from typing import Mapping, Optional, Any

from langchain.llms.base import LLM


class MockLocalBinaryModel(LLM):
    """
    Mock Local Binary Model class, used for generating the string "a".

    Args:
        model_id (str): The ID of the model to be mocked.

    Attributes:
        model_path (str): The path to the model to be mocked.
        llm (str): The string "a".

    Raises:
        ValueError: If the model_path does not exist.
    """

    model_path: str = None
    llm: str = 'READY TO MOCK'

    def __init__(self, model_id: str = None):
        super().__init__()
        self.model_path = f'bot/question_answering/{model_id}'
        if not os.path.exists(self.model_path):
            raise ValueError(f'{self.model_path} does not exist')


    def _call(self, prompt: str, stop: Optional[list[str]] = None) -> str:
        return self.llm

    @property
    def _identifying_params(self) -> Mapping[str, Any]:
        return {'name_of_model': self.model_path}

    @property
    def _llm_type(self) -> str:
        return self.model_path