Skip to content

router

django_spire.ai.chat.router

BaseChatRouter

Bases: ABC

workflow abstractmethod

Source code in django_spire/ai/chat/router.py
@abstractmethod
def workflow(
    self,
    request: WSGIRequest,
    user_input: str,
    message_history: MessageHistory | None = None
) -> BaseMessageIntel:
    raise NotImplementedError

process

Source code in django_spire/ai/chat/router.py
@recorder_to_html_file('spire_ai_chat_workflow')
def process(
    self,
    request: WSGIRequest,
    user_input: str,
    message_history: MessageHistory | None = None
) -> BaseMessageIntel:
    @log_ai_interaction_from_recorder(request.user)
    def run_workflow_process() -> BaseMessageIntel | None:
        return self.workflow(
            request=request,
            user_input=user_input,
            message_history=message_history,
        )

    message_intel = run_workflow_process()

    if not isinstance(message_intel, BaseMessageIntel):
        if message_intel is None:
            return DefaultMessageIntel(
                text='I apologize, but I was unable to process your request.'
            )

        message = f'{self.__class__.__name__}.workflow must return an instance of a {BaseMessageIntel.__name__} sub class.'
        raise TypeError(message)

    return message_intel

SpireChatRouter

Bases: BaseChatRouter

workflow

Source code in django_spire/ai/chat/router.py
def workflow(
    self,
    request: WSGIRequest,
    user_input: str,
    message_history: MessageHistory | None = None
) -> BaseMessageIntel:
    intent_decoder = generate_intent_decoder(
        request=request,
        default_callable=self._default_chat_callable,
    )

    intent_process = intent_decoder.process(user_input, max_return_values=1)[0]

    return intent_process(
        request=request,
        user_input=user_input,
        message_history=message_history
    )