Spaces:
Sleeping
Sleeping
| import json | |
| from services.notifier import Notifier | |
| from utils.metrics import metrics | |
| from utils.logger import get_logger, log_email, log_unknown, log_message | |
| logger = get_logger(__name__) | |
| notifier = Notifier() | |
| def record_user_details(email, name="Lead", notes="", session_id=""): | |
| """Record user details (email, name) and notify. | |
| Args: | |
| email: User's email address | |
| name: User's name (default: 'Lead') | |
| notes: Additional notes | |
| session_id: User's Gradio session hash for CSV logging | |
| """ | |
| log_email(email, session_id=session_id) | |
| notifier.notify_lead(name, email, session_id=session_id) | |
| metrics.record_lead() | |
| return {"status": "lead recorded"} | |
| def record_unknown_question(question, session_id=""): | |
| """Record an unanswered question and notify. | |
| Args: | |
| question: The user's question that couldn't be answered | |
| session_id: User's Gradio session hash for CSV logging | |
| """ | |
| log_unknown(question, session_id=session_id) | |
| notifier.notify_unknown(question, session_id=session_id) | |
| metrics.record_unknown() | |
| return {"status": "unknown recorded"} | |
| tools = [ | |
| { | |
| "type": "function", | |
| "function": { | |
| "name": "record_user_details", | |
| "parameters": { | |
| "type": "object", | |
| "properties": { | |
| "email": {"type": "string"}, | |
| "name": {"type": "string"}, | |
| "notes": {"type": "string"} | |
| }, | |
| "required": ["email"] | |
| } | |
| } | |
| }, | |
| { | |
| "type": "function", | |
| "function": { | |
| "name": "record_unknown_question", | |
| "description": "Use when the assistant cannot find the answer in the profile context. This records unanswered recruiter questions.", | |
| "parameters": { | |
| "type": "object", | |
| "properties": { | |
| "question": { | |
| "type": "string", | |
| "description": "The user's question that could not be answered" | |
| } | |
| }, | |
| "required": ["question"] | |
| } | |
| } | |
| } | |
| ] | |
| def handle_tool_call(tool_calls, session_id=""): | |
| """Execute tool calls and collect results. | |
| Args: | |
| tool_calls: List of tool calls from LLM | |
| session_id: User's Gradio session hash to pass to tool functions | |
| Returns: | |
| List of assistant messages for tool call results | |
| """ | |
| results = [] | |
| json_dump = "" | |
| for call in tool_calls: | |
| name = call.function.name | |
| args = json.loads(call.function.arguments) | |
| args["session_id"] = session_id # Inject session_id into tool function args | |
| fn = globals().get(name) | |
| result = fn(**args) if fn else {} | |
| json_dump = json.dumps(result) | |
| results.append({ | |
| "role": "tool", | |
| "content": json_dump, | |
| "tool_call_id": call.id | |
| }) | |
| log_message("TOOL RESULTS:" + json_dump) | |
| return results |