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