Spaces:
Runtime error
Runtime error
| from loguru import logger | |
| from pydantic import ConfigDict | |
| from typing import Collection, Self | |
| from ctp_slack_bot.core import ApplicationComponentBase, Settings | |
| from ctp_slack_bot.enums import EventType | |
| from ctp_slack_bot.models import Chunk, SlackMessage, SlackResponse | |
| from .event_brokerage_service import EventBrokerageService | |
| from .language_model_service import LanguageModelService | |
| class AnswerRetrievalService(ApplicationComponentBase): | |
| """ | |
| Service for context-based answer retrievel from a language model. | |
| """ | |
| model_config = ConfigDict(frozen=True) | |
| settings: Settings | |
| event_brokerage_service: EventBrokerageService | |
| language_model_service: LanguageModelService | |
| async def push(self: Self, question: SlackMessage, context: Collection[Chunk]) -> None: | |
| channel_to_respond_to = question.channel | |
| thread_to_respond_to = question.thread_ts if question.thread_ts else question.ts | |
| answer = await self.language_model_service.answer_question(question.user, question.text, context) | |
| logger.debug("Pushing response to channel {} and thread {}: {}", channel_to_respond_to, thread_to_respond_to, answer) | |
| slack_response = SlackResponse(text=answer, channel=channel_to_respond_to, thread_ts=thread_to_respond_to) | |
| await self.event_brokerage_service.publish(EventType.OUTGOING_SLACK_RESPONSE, slack_response) | |
| def name(self: Self) -> str: | |
| return "answer_retrieval_service" | |