add show_page hook
This commit is contained in:
parent
41fd8e3d15
commit
dd1b79f7e7
5 changed files with 113 additions and 39 deletions
|
|
@ -4,7 +4,7 @@ from typing import Dict, Any, List, Optional
|
|||
|
||||
import httpx
|
||||
|
||||
from src.models import ApplicantParam, ChatHook, PlansParam
|
||||
from src.models import ApplicantParam, ChatHook, PlansParam, PageParam
|
||||
from .session_service import session_service
|
||||
from ..api.v1.models import Source, HistoryItem
|
||||
from ..config import settings
|
||||
|
|
@ -86,7 +86,16 @@ class ChatService:
|
|||
"chat_session_id": session_id,
|
||||
"message": f"I'm sorry, I'm experiencing technical difficulties. Please try again later. Error: {str(e)}"
|
||||
}
|
||||
|
||||
|
||||
async def add_message_to_history(self, session_id: str, message: list):
|
||||
async with await self.get_client() as client:
|
||||
response = await client.post(
|
||||
"/messages/",
|
||||
params={"chat_session_id": session_id,},
|
||||
json={"content": message}
|
||||
)
|
||||
return response.json()
|
||||
|
||||
async def get_chat_history(self, session_id: str) -> List[HistoryItem]:
|
||||
"""Get chat history for a session and format it properly"""
|
||||
async with await self.get_client() as client:
|
||||
|
|
@ -145,7 +154,6 @@ class ChatService:
|
|||
return None
|
||||
|
||||
|
||||
|
||||
def _extract_sources_from_response(self, response_text: str) -> List[Source]:
|
||||
"""Extract sources from RAG search results if available"""
|
||||
# This is a placeholder - in a real implementation, you would:
|
||||
|
|
@ -159,10 +167,10 @@ class ChatService:
|
|||
|
||||
async def get_user_session(self, uid: str) -> str | None:
|
||||
with Session() as session:
|
||||
session = session.query(UserSession).filter(UserSession.user_id == uid).first()
|
||||
if not session:
|
||||
user_session = session.query(UserSession).filter(UserSession.user_id == uid).first()
|
||||
if not user_session:
|
||||
return None
|
||||
return session.session_id
|
||||
return user_session.session_id
|
||||
|
||||
async def create_user_session(self, uid: str, session_id: str):
|
||||
with Session() as session:
|
||||
|
|
@ -173,50 +181,62 @@ class ChatService:
|
|||
session.add(user_session)
|
||||
session.commit()
|
||||
|
||||
async def initialize_chat(self, uid: str, application, name, first_visit):
|
||||
session_id = await self.get_user_session(uid)
|
||||
if not session_id or not await session_service.validate_session(session_id):
|
||||
session_id = await session_service.create_session(agent_id=settings.TALESTORM_AGENT_ID)
|
||||
try:
|
||||
await self.create_user_session(uid, session_id)
|
||||
except:
|
||||
pass
|
||||
async def update_user_page(self, uid: str, page_id: str | None):
|
||||
with Session() as session:
|
||||
user_session = session.query(UserSession).filter(UserSession.user_id == uid).first()
|
||||
old_page_id = user_session.page_id
|
||||
user_session.page_id = page_id
|
||||
session.add(user_session)
|
||||
session.commit()
|
||||
return old_page_id
|
||||
|
||||
def get_welcome_message(self, application, name, first_visit):
|
||||
try:
|
||||
if not name:
|
||||
name = application["applicants"][0]["firstName"]
|
||||
except:
|
||||
return {
|
||||
"session_id": session_id,
|
||||
"answer": INIT_MESSAGES[0],
|
||||
}
|
||||
return INIT_MESSAGES[0]
|
||||
|
||||
if first_visit:
|
||||
return {
|
||||
"session_id": session_id,
|
||||
"answer": INIT_MESSAGES[0],
|
||||
}
|
||||
return INIT_MESSAGES[0]
|
||||
|
||||
try:
|
||||
applicant = application["applicants"][0]
|
||||
except:
|
||||
return {
|
||||
"session_id": session_id,
|
||||
"answer": INIT_MESSAGES[2].format(name=name)
|
||||
}
|
||||
return INIT_MESSAGES[2].format(name=name)
|
||||
|
||||
if not applicant.get("gender") or not applicant.get("dob") or applicant.get("dob") == "-01-" or not applicant.get("weight") or applicant.get("heightFt") is None or applicant.get("heightIn") is None:
|
||||
return {
|
||||
"session_id": session_id,
|
||||
"answer": INIT_MESSAGES[2].format(name=name)
|
||||
}
|
||||
return INIT_MESSAGES[2].format(name=name)
|
||||
|
||||
return INIT_MESSAGES[1].format(name=name)
|
||||
|
||||
|
||||
async def initialize_chat(self, uid: str, application, name, first_visit, page_id):
|
||||
session_id = await self.get_user_session(uid)
|
||||
if not session_id or not await session_service.validate_session(session_id):
|
||||
session_id = await session_service.create_session(agent_id=settings.TALESTORM_AGENT_ID)
|
||||
try:
|
||||
await self.create_user_session(uid, session_id)
|
||||
except:
|
||||
pass
|
||||
await self.update_user_page(uid, page_id)
|
||||
|
||||
welcome_msg = self.get_welcome_message(application, name, first_visit)
|
||||
|
||||
msg_history_item = [
|
||||
{'parts': [{'content': 'Hi', 'part_kind': 'user-prompt'}],'kind': 'request'},
|
||||
{'parts': [{'content': welcome_msg, 'part_kind': 'text'}], 'kind': 'response'}
|
||||
]
|
||||
|
||||
await self.add_message_to_history(session_id, msg_history_item)
|
||||
|
||||
return {
|
||||
"session_id": session_id,
|
||||
"answer": INIT_MESSAGES[1].format(name=name)
|
||||
"answer": welcome_msg
|
||||
}
|
||||
|
||||
|
||||
async def process_insurance_chat(self, message: str, session_id: Optional[str] = None, uid: Optional[str] = None, current_page: Optional[str] = None, application: Optional[dict] = None) -> Dict[str, Any]:
|
||||
async def process_insurance_chat(self, message: str, session_id: Optional[str] = None, uid: Optional[str] = None, current_page: Optional[str] = None, application: Optional[dict] = None, page_id = None) -> Dict[str, Any]:
|
||||
"""Process an insurance chat request"""
|
||||
try:
|
||||
if not session_id or not await session_service.validate_session(session_id):
|
||||
|
|
@ -224,13 +244,14 @@ class ChatService:
|
|||
session_id = await self.get_user_session(uid)
|
||||
if not session_id or not await session_service.validate_session(session_id):
|
||||
session_id = await session_service.create_session(agent_id=settings.TALESTORM_AGENT_ID)
|
||||
try:
|
||||
await self.create_user_session(uid, session_id)
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
await self.create_user_session(uid, session_id)
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
session_id = await session_service.create_session(agent_id=settings.TALESTORM_AGENT_ID)
|
||||
|
||||
old_page_id = await self.update_user_page(uid, page_id)
|
||||
|
||||
instructions = ""
|
||||
if uid:
|
||||
|
|
@ -265,6 +286,7 @@ class ChatService:
|
|||
compare_plans = ai_response.get("compare_plans")
|
||||
show_plans = ai_response.get("show_plans")
|
||||
update_applicants = ai_response.get("update_applicants")
|
||||
show_page = ai_response.get("show_page")
|
||||
hooks = []
|
||||
if update_applicants:
|
||||
hooks.append(ChatHook(
|
||||
|
|
@ -283,7 +305,13 @@ class ChatService:
|
|||
tool="show_plans",
|
||||
params=PlansParam(plans=show_plans)
|
||||
))
|
||||
|
||||
elif show_page and old_page_id:
|
||||
hooks.append(ChatHook(
|
||||
tool="show_page",
|
||||
params=PageParam(page=old_page_id)
|
||||
))
|
||||
|
||||
|
||||
return {
|
||||
"session_id": session_id,
|
||||
"answer": ai_message,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue