Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Copy this file to .env and fill in your keys.
# The .env file is git-ignored and should NEVER be committed.

# Google Gemini API key (https://aistudio.google.com/app/apikey)
GEMINI_API_KEY=your_gemini_api_key_here

# Google Maps Platform API key (https://console.cloud.google.com/google/maps-apis)
# Needs: Directions API, Places API, Geocoding API
GOOGLE_MAPS_API_KEY=your_google_maps_api_key_here
44 changes: 44 additions & 0 deletions debug_cases.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import sys, json
sys.path.insert(0, "cactus/python/src")
from main import generate_cactus, _preflight, _validate

ALARM_TOOL = {
"name": "set_alarm",
"description": "Set an alarm for a given time",
"parameters": {
"type": "object",
"properties": {
"hour": {"type": "integer", "description": "Hour to set the alarm for"},
"minute": {"type": "integer", "description": "Minute to set the alarm for"},
},
"required": ["hour", "minute"],
},
}
REMINDER_TOOL = {
"name": "create_reminder",
"description": "Create a reminder with a title and time",
"parameters": {
"type": "object",
"properties": {
"title": {"type": "string", "description": "Reminder title"},
"time": {"type": "string", "description": "Time for the reminder (e.g. 3:00 PM)"},
},
"required": ["title", "time"],
},
}

cases = [
("alarm_10am", [{"role": "user", "content": "Set an alarm for 10 AM."}], [ALARM_TOOL]),
("alarm_9am", [{"role": "user", "content": "Set an alarm for 9 AM."}], [ALARM_TOOL]),
("alarm_6am", [{"role": "user", "content": "Wake me up at 6 AM."}], [ALARM_TOOL]),
("reminder_meeting",[{"role": "user", "content": "Remind me about the meeting at 3:00 PM."}], [REMINDER_TOOL]),
("timer_7min", [{"role": "user", "content": "Set a timer for 7 minutes."}],
[{"name": "set_timer", "description": "Set a countdown timer",
"parameters": {"type": "object", "properties": {"minutes": {"type": "integer", "description": "Number of minutes"}}, "required": ["minutes"]}}]),
]

for name, messages, tools in cases:
result = generate_cactus(messages, tools)
complexity = _preflight(messages, tools)
valid, reason = _validate(result, tools, complexity, messages)
print(f"{name}: calls={json.dumps(result['function_calls'])} conf={result['confidence']:.3f} valid={valid} reason={reason}")
22 changes: 22 additions & 0 deletions debug_cloud.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import sys, json, os
sys.path.insert(0, "cactus/python/src")
from main import generate_cloud

# message_among_four: "Text Dave saying I'll be late"
messages = [{"role": "user", "content": "Text Dave saying I'll be late."}]
tools = [
{"name": "get_weather", "description": "Get current weather for a location",
"parameters": {"type": "object", "properties": {"location": {"type": "string", "description": "City name"}}, "required": ["location"]}},
{"name": "set_timer", "description": "Set a countdown timer",
"parameters": {"type": "object", "properties": {"minutes": {"type": "integer", "description": "Number of minutes"}}, "required": ["minutes"]}},
{"name": "send_message", "description": "Send a message to a contact",
"parameters": {"type": "object", "properties": {"recipient": {"type": "string", "description": "Name of person"}, "message": {"type": "string", "description": "Message content"}}, "required": ["recipient", "message"]}},
{"name": "play_music", "description": "Play a song or playlist",
"parameters": {"type": "object", "properties": {"song": {"type": "string", "description": "Song name"}}, "required": ["song"]}},
]

for i in range(3):
result = generate_cloud(messages, tools)
print(f"Run {i+1}: {json.dumps(result['function_calls'])}")

print("\nExpected: send_message(recipient='Dave', message=\"I'll be late\")")
6 changes: 6 additions & 0 deletions debug_main1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import sys
sys.path.insert(0, "cactus/python/src")
print("step 1: importing main1...")
import main1
print("step 2: main1 loaded, attributes:", [a for a in dir(main1) if not a.startswith("_")])
print("step 3: hasattr generate_hybrid:", hasattr(main1, "generate_hybrid"))
1 change: 1 addition & 0 deletions handsfree/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# HandsFree — voice-first personal agent package
Loading