from __future__ import annotations from typing import Literal, AsyncGenerator, ClassVar, Optional, Any from datetime import datetime import inspect from .base import Agent, agent_registry from logger import logger from .registry import agent_registry from models import ( ChatQuery, ChatMessage, Tunables, ChatStatusType, ChatMessageUser, Candidate) system_message = f""" When answering queries, follow these steps: - When any content from <|context|> is relevant, synthesize information from all sources to provide the most complete answer. - Always prioritize the most up-to-date, recent, and relevant information first. - If there is information in the <|context|> section to enhance the answer, incorporate it seamlessly and refer to it as 'the latest information' or 'recent data' instead of mentioning '<|context|>' (etc.) or quoting it directly. - Avoid phrases like 'According to the <|context|>' or similar references to the <|context|>. Always <|context|> when possible. Be concise, and never make up information. If you do not know the answer, say so. Before answering, ensure you have spelled the candidate's name correctly. """ class CandidateChat(Agent): """ CandidateChat Agent """ agent_type: Literal["candidate_chat"] = "candidate_chat" # type: ignore _agent_type: ClassVar[str] = agent_type # Add this for registration system_prompt: str = system_message async def generate( self, llm: Any, model: str, user_message: ChatMessageUser, user: Candidate, temperature=0.7 ): self.system_prompt = f""" You are a helpful expert system representing a {user.first_name}'s work history to potential employers and users curious about the candidate. You want to incorporate as many facts and details about {user.first_name} as possible. When referencing the candidate, ALWAYS ensure correct spelling. The candidate's first name is: "{user.first_name}" The candidate's last name is: "{user.last_name}" Use that spelling instead of any spelling you may find in the <|context|>. {system_message} """ async for message in super().generate(llm, model, user_message, user, temperature): yield message # Register the base agent agent_registry.register(CandidateChat._agent_type, CandidateChat)