dexter / client.py
Aarshay Jain
hide chat bar at the end of interview
00ba8c2
import os
from uuid import UUID
import requests
from pydantic import BaseModel
class GetAvailableInterviewsRequest(BaseModel):
user_hf_id: str
class InterviewMeta(BaseModel):
title: str
creator_name: str
id: str
class GetAvailableInterviewsResponse(BaseModel):
interviews: list[InterviewMeta]
class StartChatRequest(BaseModel):
user_hf_id: str
interview_id: str
class StartChatResponse(BaseModel):
chat_id: UUID
first_message: str
class GetChatRequest(BaseModel):
chat_id: UUID
user_message: str
class GetChatResponse(BaseModel):
chat_id: UUID
agent_message: str | None
error_message: str | None
end_interview: bool
class AppClient:
url_available_interviews = os.environ["ENDPOINT_AVAILABLE_CHAT"]
url_init_chat = os.environ["ENDPOINT_CHAT_INIT"]
url_chat_response = os.environ["ENDPOINT_CHAT_RESPONSE"]
@classmethod
def _call_endpoint(cls, endpoint, data):
headers = {
"Content-Type": "application/json",
}
response = requests.post(url=endpoint, json=data.model_dump(mode="json"), headers=headers)
if response.status_code == 200:
return response.json()
return None
@classmethod
def get_chats(cls, user_hf_id) -> list[InterviewMeta] | None:
request = GetAvailableInterviewsRequest(user_hf_id=user_hf_id)
response_json = cls._call_endpoint(cls.url_available_interviews, request)
if response_json is None:
return None
return GetAvailableInterviewsResponse.model_validate(response_json).interviews
@classmethod
def start_chat(cls, user_hf_id: str, interview_id: str) -> StartChatResponse | None:
request = StartChatRequest(user_hf_id=user_hf_id, interview_id=interview_id)
response_json = cls._call_endpoint(cls.url_init_chat, request)
if response_json is None:
return None
return StartChatResponse.model_validate(response_json)
@classmethod
def get_agent_response(cls, chat_id: UUID, user_message: str) -> GetChatResponse | None:
request = GetChatRequest(chat_id=chat_id, user_message=user_message)
response_json = cls._call_endpoint(cls.url_chat_response, request)
if response_json is None:
return None
return GetChatResponse.model_validate(response_json)