Skip to content

Commit fb16b64

Browse files
Merge pull request #174 from Light-Heart-Labs/fix/voice-agent-public-release-cleanup
fix: sanitize voice-agent framework for public release
2 parents 3d9cb04 + 8a70f56 commit fb16b64

17 files changed

Lines changed: 236 additions & 278 deletions
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Python
2+
__pycache__/
3+
*.py[cod]
4+
*.egg-info/
5+
dist/
6+
build/
7+
.eggs/
8+
9+
# Environment
10+
.env
11+
.venv/
12+
venv/
13+
env/
14+
15+
# Recordings
16+
recordings/
17+
18+
# IDE
19+
.vscode/
20+
.idea/
21+
*.swp
22+
*.swo
23+
24+
# OS
25+
.DS_Store
26+
Thumbs.db

resources/frameworks/voice-agent/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
### Rollback Instructions
2323
\\\ash
2424
sudo systemctl stop hvac-grace-agent
25-
cp -r /home/michael/HVAC_Grace_Rollback/* /home/michael/HVAC_Grace/
25+
cp -r ./rollback/* ./
2626
sudo systemctl start hvac-grace-agent
2727
\\\
2828

resources/frameworks/voice-agent/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
**Origin:** [GLO (Grace Local Ocean)](https://github.com/Light-Heart-Labs/GLO) — Multi-Voice Agent Framework for Local Systems
44

55
**Status:** Production (Silver Build, Feb 2026)
6+
n**Requirements:** Python >= 3.9, LiveKit account (cloud or self-hosted)
67

78
A complete multi-agent voice system built on LiveKit, designed for commercial HVAC customer service but easily adaptable to any domain. Uses DreamServer's own services (Whisper STT, Kokoro TTS, local LLM) as the AI backbone.
89

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
1-
# HVAC Grace Environment Configuration
2-
# Copy this to .env and fill in your values
1+
# === LiveKit Configuration ===
2+
# LiveKit Cloud: use wss://your-project.livekit.cloud
3+
# Self-hosted: use ws://localhost:7880
4+
LIVEKIT_URL=wss://your-project.livekit.cloud
5+
LIVEKIT_API_KEY=your-api-key
6+
LIVEKIT_API_SECRET=your-api-secret
37

4-
# LiveKit Cloud Credentials (GET THESE FROM YOUR NEW HVAC LIVEKIT PROJECT)
5-
# Create at: https://cloud.livekit.io
6-
LIVEKIT_URL=wss://your-hvac-project.livekit.cloud
7-
LIVEKIT_API_KEY=your-hvac-api-key
8-
LIVEKIT_API_SECRET=your-hvac-api-secret
8+
# === AI Service Endpoints (DreamServer defaults) ===
9+
LLM_BASE_URL=http://localhost:8080/v1
10+
STT_BASE_URL=http://localhost:9000/v1
11+
TTS_BASE_URL=http://localhost:8880/v1
912

10-
# Local AI Services (SHARED with healthcare - same ports)
11-
LLM_URL=http://localhost:8000/v1/chat/completions
12-
WHISPER_URL=http://localhost:8001/v1
13-
TTS_URL=http://localhost:8002/v1
13+
# === Model Configuration ===
14+
LLM_MODEL=Qwen/Qwen2.5-32B-Instruct-AWQ
15+
STT_MODEL=Systran/faster-whisper-large-v3
16+
TTS_VOICE=af_heart
1417

15-
# n8n Webhook (HVAC-specific port 5679)
16-
N8N_INTAKE_URL=https://hvac-n8n.lightheartcloud.com/webhook/ticket
18+
# === Company Configuration ===
19+
COMPANY_NAME=Light Heart Mechanical
1720

18-
# Company Info (customize these)
19-
COMPANY_NAME=Comfort Air Solutions
20-
COMPANY_PHONE=555-HVAC
21-
SERVICE_AREA=Greater Springfield Area
21+
# === n8n Workflow Integration (optional) ===
22+
# Local n8n: http://localhost:5679/webhook/ticket
23+
N8N_INTAKE_URL=http://localhost:5679/webhook/ticket
24+
25+
# === Recordings ===
26+
RECORDINGS_DIR=./recordings
Lines changed: 147 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,154 @@
11
{
2-
"company": {
3-
"name": "Light Heart Mechanical",
4-
"phone": "215-555-4822",
5-
"address": "4300 Industrial Boulevard, Philadelphia, PA 19124",
6-
"website": "www.lightheartmechanical.com",
7-
"email": "service@lightheartmechanical.com"
2+
"_note": "This is fictional example data for the HVAC demo. Replace with your own company information.",
3+
"company": {
4+
"name": "Light Heart Mechanical",
5+
"phone": "215-555-4822",
6+
"address": "4300 Industrial Boulevard, Philadelphia, PA 19124",
7+
"website": "www.lightheartmechanical.com",
8+
"email": "service@lightheartmechanical.com"
9+
},
10+
"hours": {
11+
"office": "Monday through Friday, 7 AM to 5 PM Eastern",
12+
"dispatch": "Dispatch available 6 AM to 8 PM weekdays",
13+
"emergency": "24/7 emergency service available, call main number",
14+
"holidays": "Closed Thanksgiving, Christmas, New Year's Day. Emergency service available."
15+
},
16+
"services": {
17+
"commercial_hvac": "We install, repair, and maintain commercial HVAC systems including rooftop units, split systems, chillers, boilers, and cooling towers.",
18+
"building_automation": "Full building automation and controls services including Niagara, Trane, Honeywell, and Johnson Controls systems.",
19+
"preventive_maintenance": "Customized PM programs for all commercial equipment. Quarterly, semi-annual, or annual plans available.",
20+
"emergency_service": "24/7 emergency response for critical failures. On-call technicians dispatched within 1 hour for emergencies.",
21+
"installation": "New construction and retrofit HVAC installations for commercial and industrial facilities.",
22+
"energy_services": "Energy audits, efficiency upgrades, and utility rebate assistance."
23+
},
24+
"service_area": {
25+
"primary": "Greater Philadelphia area",
26+
"counties": "Philadelphia, Bucks, Montgomery, Chester, Delaware, and Camden counties",
27+
"extended": "Extended service area available for large commercial accounts"
28+
},
29+
"brands_serviced": [
30+
"Carrier",
31+
"Trane",
32+
"Lennox",
33+
"York",
34+
"Daikin",
35+
"Rheem",
36+
"Ruud",
37+
"Mitsubishi",
38+
"LG",
39+
"Fujitsu",
40+
"Liebert",
41+
"Bard",
42+
"McQuay",
43+
"Weil-McLain",
44+
"Burnham",
45+
"Lochinvar",
46+
"Raypak",
47+
"Marley",
48+
"Evapco",
49+
"Baltimore Aircoil"
50+
],
51+
"policies": {
52+
"emergency_rates": "After-hours service (before 7 AM, after 5 PM, weekends, holidays) is billed at 1.5x standard labor rates.",
53+
"payment_terms": "Net 30 for established accounts. COD for new customers. Credit cards accepted with 3% processing fee.",
54+
"warranty": "90-day labor warranty on all repairs. Manufacturer warranty on parts. Extended warranties available.",
55+
"estimates": "Free estimates for PM contracts and replacement projects. Diagnostic fee applies for service calls.",
56+
"cancellation": "24-hour notice required for scheduled appointments. Emergency calls cannot be cancelled."
57+
},
58+
"common_questions": [
59+
{
60+
"patterns": [
61+
"hours",
62+
"open",
63+
"close",
64+
"when are you",
65+
"office hours"
66+
],
67+
"answer": "Our office is open Monday through Friday, 7 AM to 5 PM. We have 24/7 emergency service available."
868
},
9-
"hours": {
10-
"office": "Monday through Friday, 7 AM to 5 PM Eastern",
11-
"dispatch": "Dispatch available 6 AM to 8 PM weekdays",
12-
"emergency": "24/7 emergency service available, call main number",
13-
"holidays": "Closed Thanksgiving, Christmas, New Year's Day. Emergency service available."
69+
{
70+
"patterns": [
71+
"address",
72+
"located",
73+
"where are you",
74+
"location",
75+
"find you"
76+
],
77+
"answer": "We're located at 4300 Industrial Boulevard in Philadelphia, PA 19124."
1478
},
15-
"services": {
16-
"commercial_hvac": "We install, repair, and maintain commercial HVAC systems including rooftop units, split systems, chillers, boilers, and cooling towers.",
17-
"building_automation": "Full building automation and controls services including Niagara, Trane, Honeywell, and Johnson Controls systems.",
18-
"preventive_maintenance": "Customized PM programs for all commercial equipment. Quarterly, semi-annual, or annual plans available.",
19-
"emergency_service": "24/7 emergency response for critical failures. On-call technicians dispatched within 1 hour for emergencies.",
20-
"installation": "New construction and retrofit HVAC installations for commercial and industrial facilities.",
21-
"energy_services": "Energy audits, efficiency upgrades, and utility rebate assistance."
79+
{
80+
"patterns": [
81+
"phone",
82+
"number",
83+
"call",
84+
"reach you"
85+
],
86+
"answer": "Our main number is 215-555-4822. For emergencies after hours, call the same number and follow the prompts."
2287
},
23-
"service_area": {
24-
"primary": "Greater Philadelphia area",
25-
"counties": "Philadelphia, Bucks, Montgomery, Chester, Delaware, and Camden counties",
26-
"extended": "Extended service area available for large commercial accounts"
88+
{
89+
"patterns": [
90+
"emergency",
91+
"after hours",
92+
"overtime",
93+
"weekend",
94+
"24/7"
95+
],
96+
"answer": "We offer 24/7 emergency service. After-hours calls are billed at time-and-a-half for labor. Just call our main number."
2797
},
28-
"brands_serviced": [
29-
"Carrier", "Trane", "Lennox", "York", "Daikin", "Rheem", "Ruud",
30-
"Mitsubishi", "LG", "Fujitsu", "Liebert", "Bard", "McQuay",
31-
"Weil-McLain", "Burnham", "Lochinvar", "Raypak",
32-
"Marley", "Evapco", "Baltimore Aircoil"
33-
],
34-
"policies": {
35-
"emergency_rates": "After-hours service (before 7 AM, after 5 PM, weekends, holidays) is billed at 1.5x standard labor rates.",
36-
"payment_terms": "Net 30 for established accounts. COD for new customers. Credit cards accepted with 3% processing fee.",
37-
"warranty": "90-day labor warranty on all repairs. Manufacturer warranty on parts. Extended warranties available.",
38-
"estimates": "Free estimates for PM contracts and replacement projects. Diagnostic fee applies for service calls.",
39-
"cancellation": "24-hour notice required for scheduled appointments. Emergency calls cannot be cancelled."
98+
{
99+
"patterns": [
100+
"residential",
101+
"home",
102+
"house",
103+
"apartment"
104+
],
105+
"answer": "We're a commercial contractor and don't service residential homes or apartments. For residential service, I'd recommend looking up residential HVAC contractors in your area."
40106
},
41-
"common_questions": [
42-
{
43-
"patterns": ["hours", "open", "close", "when are you", "office hours"],
44-
"answer": "Our office is open Monday through Friday, 7 AM to 5 PM. We have 24/7 emergency service available."
45-
},
46-
{
47-
"patterns": ["address", "located", "where are you", "location", "find you"],
48-
"answer": "We're located at 4300 Industrial Boulevard in Philadelphia, PA 19124."
49-
},
50-
{
51-
"patterns": ["phone", "number", "call", "reach you"],
52-
"answer": "Our main number is 215-555-4822. For emergencies after hours, call the same number and follow the prompts."
53-
},
54-
{
55-
"patterns": ["emergency", "after hours", "overtime", "weekend", "24/7"],
56-
"answer": "We offer 24/7 emergency service. After-hours calls are billed at time-and-a-half for labor. Just call our main number."
57-
},
58-
{
59-
"patterns": ["residential", "home", "house", "apartment"],
60-
"answer": "We're a commercial contractor and don't service residential homes or apartments. For residential service, I'd recommend looking up residential HVAC contractors in your area."
61-
},
62-
{
63-
"patterns": ["payment", "pay", "credit card", "check", "invoice"],
64-
"answer": "We accept checks and ACH payments. Credit cards are accepted with a 3% processing fee. Established accounts get net 30 terms."
65-
},
66-
{
67-
"patterns": ["warranty", "guarantee", "stand behind"],
68-
"answer": "All our repairs come with a 90-day labor warranty. Parts are covered by manufacturer warranty. We also offer extended warranty options."
69-
},
70-
{
71-
"patterns": ["area", "serve", "service area", "travel"],
72-
"answer": "We serve the greater Philadelphia area including Philadelphia, Bucks, Montgomery, Chester, Delaware, and Camden counties."
73-
},
74-
{
75-
"patterns": ["estimate", "quote", "cost", "price", "how much"],
76-
"answer": "We provide free estimates for PM contracts and equipment replacements. For service calls, a diagnostic fee applies which is waived if you proceed with the repair."
77-
},
78-
{
79-
"patterns": ["maintenance", "pm", "preventive", "contract"],
80-
"answer": "We offer customized preventive maintenance programs with quarterly, semi-annual, or annual visits depending on your equipment and needs. These help prevent breakdowns and extend equipment life."
81-
}
82-
]
107+
{
108+
"patterns": [
109+
"payment",
110+
"pay",
111+
"credit card",
112+
"check",
113+
"invoice"
114+
],
115+
"answer": "We accept checks and ACH payments. Credit cards are accepted with a 3% processing fee. Established accounts get net 30 terms."
116+
},
117+
{
118+
"patterns": [
119+
"warranty",
120+
"guarantee",
121+
"stand behind"
122+
],
123+
"answer": "All our repairs come with a 90-day labor warranty. Parts are covered by manufacturer warranty. We also offer extended warranty options."
124+
},
125+
{
126+
"patterns": [
127+
"area",
128+
"serve",
129+
"service area",
130+
"travel"
131+
],
132+
"answer": "We serve the greater Philadelphia area including Philadelphia, Bucks, Montgomery, Chester, Delaware, and Camden counties."
133+
},
134+
{
135+
"patterns": [
136+
"estimate",
137+
"quote",
138+
"cost",
139+
"price",
140+
"how much"
141+
],
142+
"answer": "We provide free estimates for PM contracts and equipment replacements. For service calls, a diagnostic fee applies which is waived if you proceed with the repair."
143+
},
144+
{
145+
"patterns": [
146+
"maintenance",
147+
"pm",
148+
"preventive",
149+
"contract"
150+
],
151+
"answer": "We offer customized preventive maintenance programs with quarterly, semi-annual, or annual visits depending on your equipment and needs. These help prevent breakdowns and extend equipment life."
152+
}
153+
]
83154
}

resources/frameworks/voice-agent/config/requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ requests>=2.31.0
1414
# Flask API server
1515
flask>=3.0.0
1616
flask-cors>=4.0.0
17-
psycopg2-binary>=2.9.9
1817

1918
# Audio processing
2019
numpy>=1.26.0
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Voice agent core modules

resources/frameworks/voice-agent/core/hvac-token-server.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#!/usr/bin/env python3
22
"""
33
HVAC LiveKit Token Server
4-
Runs on port 8096 (separate from healthcare on 8095)
4+
Runs on port 8096 (token server on 8095)
55
6-
Deploy to: /home/michael/hvac-token-server.py
6+
Deploy alongside hvac_agent.py
77
"""
88

99
from http.server import HTTPServer, BaseHTTPRequestHandler
@@ -97,7 +97,7 @@ def do_POST(self):
9797
body = self.rfile.read(content_length)
9898
data = json.loads(body) if body else {}
9999

100-
# HVAC-specific room naming (different from healthcare)
100+
# HVAC-specific room naming
101101
timestamp = int(time.time())
102102
identity = data.get('identity', f'caller-{timestamp}')
103103
room = data.get('room', f'hvac-ticket-{timestamp}')
@@ -136,7 +136,7 @@ def log_message(self, format, *args):
136136
print(f"[HVAC Token] {args[0]}")
137137

138138
if __name__ == '__main__':
139-
PORT = 8096 # Different from healthcare (8095)
139+
PORT = 8096 # Token server port
140140
server = HTTPServer(('0.0.0.0', PORT), TokenHandler)
141141
print(f"HVAC LiveKit Token Server running on port {PORT}")
142142
print(f"LiveKit URL: {LIVEKIT_URL}")

0 commit comments

Comments
 (0)