Move HR-related tools to their own folder, add print statement for BookPTO functionality, and add SILLY_MODE

This commit is contained in:
Laine
2025-03-14 10:20:11 -04:00
parent ece3ac1d3c
commit 5f8f81a15d
6 changed files with 30 additions and 10 deletions

View File

@@ -8,9 +8,9 @@ from .list_agents import list_agents
from .change_goal import change_goal
from .transfer_control import transfer_control
from .current_pto import current_pto
from .book_pto import book_pto
from .future_pto_calc import future_pto_calc
from .hr.current_pto import current_pto
from .hr.book_pto import book_pto
from .hr.future_pto_calc import future_pto_calc
def get_handler(tool_name: str):

View File

@@ -8,7 +8,7 @@
"hrsAddedPerMonth": 8
},
{
"email": "laine.smith@awesome.com",
"email": "lainecaseysmith@gmail.com",
"currentPTOHrs": 40,
"hrsAddedPerMonth": 12
}

View File

@@ -2,7 +2,22 @@ from typing import List
from models.tool_definitions import AgentGoal
import tools.tool_registry as tool_registry
starter_prompt_generic = "Welcome me, give me a description of what you can do, then ask me for the details you need to do your job. "
# Turn on Silly Mode - this should be a description of the persona you'd like the bot to have and can be a single word or a phrase.
# Example if you want the bot to be a specific person, like Mario or Christopher Walken, or to describe a specific tone:
#SILLY_MODE="Christopher Walken"
#SILLY_MODE="belligerent"
#
# Example if you want it to take on a persona (include 'a'):
#SILLY_MODE="a pirate"
# Note - this only works with certain LLMs. Grok for sure will stay in character, while OpenAI will not.
SILLY_MODE="off"
if SILLY_MODE is not None and SILLY_MODE != "off":
silly_prompt = "You are " + SILLY_MODE +", stay in character at all times. "
print("Silly mode is on: " + SILLY_MODE)
else:
silly_prompt = ""
starter_prompt_generic = silly_prompt + "Welcome me, give me a description of what you can do, then ask me for the details you need to do your job."
goal_choose_agent_type = AgentGoal(
id = "goal_choose_agent_type",
@@ -18,13 +33,13 @@ goal_choose_agent_type = AgentGoal(
"1. ListAgents: List agents available to interact with. Do not ask for user confirmation for this tool. "
"2. ChangeGoal: Change goal of agent "
"After these tools are complete, change your goal to the new goal as chosen by the user. ",
starter_prompt=starter_prompt_generic + "Begin by providing the output for the first tool included in this goal. ",
starter_prompt=starter_prompt_generic + "Begin by listing all details of all agents as provided by the output of the first tool included in this goal. ",
example_conversation_history="\n ".join(
[
"agent: Here are the currently available agents.",
"user_confirmed_tool_run: <user clicks confirm on ListAgents tool>",
"tool_result: { 'agent_name': 'Event Flight Finder', 'goal_id': 'goal_event_flight_invoice', 'agent_description': 'Helps users find interesting events and arrange travel to them' }",
"agent: The available agents are: 1. Event Flight Finder. Which agent would you like to speak to?",
"agent: The available agents are: 1. Event Flight Finder. \n Which agent would you like to speak to?",
"user: 1",
"user_confirmed_tool_run: <user clicks confirm on ChangeGoal tool>",
"tool_result: { 'new_goal': 'goal_event_flight_invoice' }",

View File

@@ -4,6 +4,8 @@ def book_pto(args: dict) -> dict:
start_date = args.get("start_date")
end_date = args.get("end_date")
print(f"[BookPTO] Totally would send an email confirmation of PTO from {start_date} to {end_date} to {email} here!")
return {
"status": "success"
}
}

View File

@@ -6,7 +6,7 @@ def current_pto(args: dict) -> dict:
email = args.get("email")
file_path = Path(__file__).resolve().parent / "data" / "employee_pto_data.json"
file_path = Path(__file__).resolve().parent.parent / "data" / "employee_pto_data.json"
if not file_path.exists():
return {"error": "Data file not found."}

View File

@@ -7,7 +7,7 @@ from dateutil.relativedelta import relativedelta
def future_pto_calc(args: dict) -> dict:
file_path = Path(__file__).resolve().parent / "data" / "employee_pto_data.json"
file_path = Path(__file__).resolve().parent.parent / "data" / "employee_pto_data.json"
if not file_path.exists():
return {"error": "Data file not found."}
@@ -28,6 +28,9 @@ def future_pto_calc(args: dict) -> dict:
#Get the number of business days, and then business hours (assume 8 hr biz day), included in the PTO request
biz_days_of_request = len(pandas.bdate_range(start=start_date, end=end_date, inclusive="both"))
if biz_days_of_request == 0:
return_msg = "There are no business days between " + args.get("start_date") + " and " + args.get("end_date")
return {"error": return_msg}
biz_hours_of_request = biz_days_of_request * 8
#Assume PTO is added on the first of every month - month math compares rolling dates, so compare the PTO request with the first day of the current month.