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" | |