@ema.co/mcp-toolkit 2026.1.25 → 2026.1.26-4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @ema.co/mcp-toolkit might be problematic. Click here for more details.
- package/README.md +10 -2
- package/dist/mcp/handlers/action/index.js +3 -18
- package/dist/mcp/handlers/data/index.js +385 -41
- package/dist/mcp/handlers/data/templates.js +107 -0
- package/dist/mcp/handlers/deprecation.js +50 -0
- package/dist/mcp/handlers/env/index.js +8 -4
- package/dist/mcp/handlers/knowledge/index.js +44 -237
- package/dist/mcp/handlers/persona/create.js +47 -18
- package/dist/mcp/handlers/persona/index.js +14 -11
- package/dist/mcp/handlers/persona/update.js +4 -2
- package/dist/mcp/handlers/persona/version.js +234 -0
- package/dist/mcp/handlers/sync/index.js +3 -18
- package/dist/mcp/handlers/template/index.js +75 -10
- package/dist/mcp/handlers/workflow/analyze.js +171 -0
- package/dist/mcp/handlers/workflow/compare.js +70 -0
- package/dist/mcp/handlers/workflow/deploy.js +73 -0
- package/dist/mcp/handlers/workflow/generate.js +350 -0
- package/dist/mcp/handlers/workflow/index.js +294 -0
- package/dist/mcp/handlers/workflow/modify.js +456 -0
- package/dist/mcp/handlers/workflow/optimize.js +136 -0
- package/dist/mcp/handlers/workflow/types.js +4 -0
- package/dist/mcp/handlers/workflow/utils.js +30 -0
- package/dist/mcp/handlers-consolidated.js +73 -2696
- package/dist/mcp/prompts.js +83 -43
- package/dist/mcp/resources.js +382 -57
- package/dist/mcp/server.js +199 -391
- package/dist/mcp/{tools-v2.js → tools.js} +20 -54
- package/dist/mcp/workflow-operations.js +2 -2
- package/dist/sdk/client-adapter.js +267 -32
- package/dist/sdk/client.js +45 -16
- package/dist/sdk/ema-client.js +183 -0
- package/dist/sdk/generated/deprecated-actions.js +171 -0
- package/dist/sdk/generated/template-fallbacks.js +123 -0
- package/dist/sdk/guidance.js +65 -11
- package/dist/sdk/index.js +3 -1
- package/dist/sdk/knowledge.js +139 -86
- package/dist/sdk/workflow-intent.js +27 -0
- package/dist/sdk/workflow-transformer.js +0 -342
- package/docs/mcp-tools-guide.md +37 -45
- package/package.json +10 -4
- package/dist/mcp/handlers/persona/analyze.js +0 -275
- package/dist/mcp/handlers/persona/compare.js +0 -32
- package/dist/mcp/tools-consolidated.js +0 -875
- package/dist/mcp/tools-legacy.js +0 -736
- package/docs/CODEBASE-ANALYSIS-2026-01-23.md +0 -936
- package/docs/CODEBASE-ANALYSIS-PRIORITIZED.md +0 -774
- package/docs/api-contracts.md +0 -216
- package/docs/auto-builder-analysis.md +0 -271
- package/docs/blog/mcp-tool-design-lessons.md +0 -309
- package/docs/data-architecture.md +0 -166
- package/docs/demos/ap-invoice-generation.md +0 -347
- package/docs/demos/ap-invoice-processing.md +0 -271
- package/docs/ema-auto-builder-guide.html +0 -394
- package/docs/lessons-learned.md +0 -209
- package/docs/llm-native-workflow-design.md +0 -252
- package/docs/local-generation.md +0 -508
- package/docs/mcp-flow-diagram.md +0 -135
- package/docs/migration/action-composition-migration.md +0 -270
- package/docs/naming-conventions.md +0 -278
- package/docs/proposals/HANDOFF-tool-restructure.md +0 -526
- package/docs/proposals/action-composition.md +0 -490
- package/docs/proposals/explicit-method-restructure.md +0 -328
- package/docs/proposals/mcp-tool-restructure-2026-01.md +0 -366
- package/docs/proposals/self-contained-guidance.md +0 -427
- package/docs/proto-sdk-generation.md +0 -242
- package/docs/release-impact.md +0 -102
- package/docs/release-process.md +0 -157
- package/docs/staging.RULE.md +0 -142
- package/docs/test-persona-creation.md +0 -196
- package/docs/tool-consolidation-v2.md +0 -225
- package/docs/tool-response-standards.md +0 -256
- package/resources/demo-kits/README.md +0 -175
- package/resources/demo-kits/finance-ap/manifest.json +0 -150
- package/resources/demo-kits/tags.json +0 -91
- package/resources/docs/getting-started.md +0 -97
- package/resources/templates/auto-builder-rules.md +0 -224
- package/resources/templates/chat-ai/README.md +0 -119
- package/resources/templates/chat-ai/persona-config.json +0 -111
- package/resources/templates/dashboard-ai/README.md +0 -156
- package/resources/templates/dashboard-ai/persona-config.json +0 -180
- package/resources/templates/demo-scenarios/README.md +0 -63
- package/resources/templates/demo-scenarios/test-published-package.md +0 -116
- package/resources/templates/document-gen-ai/README.md +0 -132
- package/resources/templates/document-gen-ai/persona-config.json +0 -316
- package/resources/templates/voice-ai/README.md +0 -123
- package/resources/templates/voice-ai/persona-config.json +0 -74
- package/resources/templates/voice-ai/workflow-prompt.md +0 -121
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
# Document Generation AI - Resume Analysis Report Generator
|
|
2
|
-
|
|
3
|
-
This template provides a document generation persona for creating comprehensive resume analysis reports.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The Resume Analysis Report Generator helps HR teams and hiring managers quickly evaluate candidates through AI-powered resume analysis. It extracts structured data from resumes, validates candidates against configurable criteria, and generates detailed assessment reports.
|
|
8
|
-
|
|
9
|
-
## Report Types
|
|
10
|
-
|
|
11
|
-
### 1. Candidate Assessment Report
|
|
12
|
-
Comprehensive analysis of a single candidate including:
|
|
13
|
-
- Executive summary with overall recommendation
|
|
14
|
-
- Skills assessment (technical and soft skills)
|
|
15
|
-
- Experience analysis and career trajectory
|
|
16
|
-
- Education and credentials review
|
|
17
|
-
- Fit scoring (technical, cultural, overall on 1-10 scale)
|
|
18
|
-
- Concerns, red flags, and recommendations
|
|
19
|
-
|
|
20
|
-
### 2. Skills Gap Analysis
|
|
21
|
-
Compare candidate qualifications against job requirements:
|
|
22
|
-
- Required skills inventory from job description
|
|
23
|
-
- Candidate skills inventory from resume
|
|
24
|
-
- Gap identification matrix
|
|
25
|
-
- Severity assessment (critical, moderate, minor)
|
|
26
|
-
- Training and development recommendations
|
|
27
|
-
- Time-to-proficiency estimates
|
|
28
|
-
|
|
29
|
-
### 3. Candidate Comparison Report
|
|
30
|
-
Side-by-side comparison of multiple candidates:
|
|
31
|
-
- Summary comparison table
|
|
32
|
-
- Individual candidate profiles
|
|
33
|
-
- Skills matrix comparison
|
|
34
|
-
- Experience level comparison
|
|
35
|
-
- Ranked recommendations
|
|
36
|
-
- Interview priority order
|
|
37
|
-
|
|
38
|
-
## Key Features
|
|
39
|
-
|
|
40
|
-
### Entity Extraction
|
|
41
|
-
Automatically extracts structured data from resumes:
|
|
42
|
-
- Candidate name and contact information
|
|
43
|
-
- Total years of experience
|
|
44
|
-
- Current/most recent role
|
|
45
|
-
- Education history (degrees, institutions, fields)
|
|
46
|
-
- Technical skills inventory
|
|
47
|
-
- Professional certifications
|
|
48
|
-
- Complete work history with achievements
|
|
49
|
-
|
|
50
|
-
### Rule Validation
|
|
51
|
-
Validates candidates against configurable hiring criteria:
|
|
52
|
-
- Minimum experience requirements
|
|
53
|
-
- Education standards
|
|
54
|
-
- Communication skills evidence
|
|
55
|
-
- Career progression patterns
|
|
56
|
-
- Employment gap analysis
|
|
57
|
-
|
|
58
|
-
### Fit Scoring
|
|
59
|
-
Provides quantified assessment across dimensions:
|
|
60
|
-
- Technical Fit (40% weight) - Skills match to requirements
|
|
61
|
-
- Experience Fit (35% weight) - Relevance and depth
|
|
62
|
-
- Cultural Fit (25% weight) - Values and team alignment
|
|
63
|
-
- Overall Recommendation: Strong Yes / Yes / Maybe / No
|
|
64
|
-
|
|
65
|
-
## Configuration
|
|
66
|
-
|
|
67
|
-
### Required Inputs
|
|
68
|
-
- Resume documents (PDF, DOCX)
|
|
69
|
-
|
|
70
|
-
### Optional Inputs
|
|
71
|
-
- Job description for comparison analysis
|
|
72
|
-
- Analysis instructions (focus areas, scoring criteria)
|
|
73
|
-
- Candidate tags for categorization
|
|
74
|
-
|
|
75
|
-
### Data Protection
|
|
76
|
-
By default, the following are redacted from LLM processing:
|
|
77
|
-
- Phone numbers
|
|
78
|
-
- Email addresses
|
|
79
|
-
- Physical addresses
|
|
80
|
-
- Social security numbers
|
|
81
|
-
|
|
82
|
-
## Usage with MCP
|
|
83
|
-
|
|
84
|
-
```typescript
|
|
85
|
-
// Create persona from template
|
|
86
|
-
persona(input="Create a Resume Analysis Report Generator for our Engineering team", type="dashboard")
|
|
87
|
-
|
|
88
|
-
// Upload resume for analysis
|
|
89
|
-
data(persona_id="...", action="upload", file="candidate_resume.pdf")
|
|
90
|
-
|
|
91
|
-
// Generate assessment report
|
|
92
|
-
// (Done through Ema dashboard UI)
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## Customization
|
|
96
|
-
|
|
97
|
-
### Adding Extraction Fields
|
|
98
|
-
Modify the `extraction_columns` in the workflow definition to extract additional data points:
|
|
99
|
-
- Languages spoken
|
|
100
|
-
- Salary expectations
|
|
101
|
-
- Notice period
|
|
102
|
-
- Remote work preferences
|
|
103
|
-
- Portfolio/GitHub links
|
|
104
|
-
|
|
105
|
-
### Custom Validation Rules
|
|
106
|
-
Add rules to the `all_rulesets` configuration:
|
|
107
|
-
- Industry-specific requirements
|
|
108
|
-
- Skill-based criteria
|
|
109
|
-
- Certification requirements
|
|
110
|
-
- Location preferences
|
|
111
|
-
|
|
112
|
-
### Report Sections
|
|
113
|
-
Configure `sectionConfigWidget` to customize report structure:
|
|
114
|
-
- Add/remove sections
|
|
115
|
-
- Reorder sections
|
|
116
|
-
- Add custom section types
|
|
117
|
-
|
|
118
|
-
## File Support
|
|
119
|
-
|
|
120
|
-
Supported resume formats:
|
|
121
|
-
- PDF
|
|
122
|
-
- DOCX
|
|
123
|
-
- DOC
|
|
124
|
-
- TXT
|
|
125
|
-
|
|
126
|
-
## Best Practices
|
|
127
|
-
|
|
128
|
-
1. **Upload job descriptions** - Enables more accurate fit scoring and gap analysis
|
|
129
|
-
2. **Customize validation rules** - Tailor criteria to your specific role requirements
|
|
130
|
-
3. **Use tags** - Categorize candidates by role type, experience level, location
|
|
131
|
-
4. **Review extraction accuracy** - Validate extracted data on first few resumes
|
|
132
|
-
5. **Iterate on prompts** - Refine analysis instructions based on report quality
|
|
@@ -1,316 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ema.co/schemas/persona-config-document-gen.json",
|
|
3
|
-
"$comment": "Document Generation AI Persona Configuration - Resume Analysis Report Generator",
|
|
4
|
-
|
|
5
|
-
"personaType": "document_generation",
|
|
6
|
-
"projectType": 7,
|
|
7
|
-
"name": "Resume Analysis Report Generator",
|
|
8
|
-
"description": "Generates comprehensive analysis reports from uploaded resumes/CVs, including skills assessment, experience evaluation, and fit scoring for specified roles.",
|
|
9
|
-
|
|
10
|
-
"category": "EMPLOYEE_EXPERIENCE",
|
|
11
|
-
"triggerType": "DASHBOARD",
|
|
12
|
-
|
|
13
|
-
"documentTypes": [
|
|
14
|
-
{
|
|
15
|
-
"type": 1,
|
|
16
|
-
"name": "Candidate Assessment Report",
|
|
17
|
-
"description": "Comprehensive analysis of a single candidate's resume with scoring and recommendations",
|
|
18
|
-
"sections": [
|
|
19
|
-
{
|
|
20
|
-
"name": "executive_summary",
|
|
21
|
-
"title": "Executive Summary",
|
|
22
|
-
"description": "High-level overview and recommendation"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"name": "candidate_profile",
|
|
26
|
-
"title": "Candidate Profile",
|
|
27
|
-
"description": "Contact info, current role, key highlights"
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"name": "skills_assessment",
|
|
31
|
-
"title": "Skills Assessment",
|
|
32
|
-
"description": "Technical and soft skills evaluation"
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"name": "experience_analysis",
|
|
36
|
-
"title": "Experience Analysis",
|
|
37
|
-
"description": "Work history and career progression"
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
"name": "education_credentials",
|
|
41
|
-
"title": "Education & Credentials",
|
|
42
|
-
"description": "Degrees, certifications, and training"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"name": "fit_scoring",
|
|
46
|
-
"title": "Fit Scoring",
|
|
47
|
-
"description": "Quantified assessment (technical fit, cultural fit, overall)"
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
"name": "recommendations",
|
|
51
|
-
"title": "Recommendations",
|
|
52
|
-
"description": "Hiring recommendation and next steps"
|
|
53
|
-
}
|
|
54
|
-
]
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"type": 2,
|
|
58
|
-
"name": "Skills Gap Analysis",
|
|
59
|
-
"description": "Compare candidate skills against job requirements and identify gaps",
|
|
60
|
-
"sections": [
|
|
61
|
-
{
|
|
62
|
-
"name": "overview",
|
|
63
|
-
"title": "Analysis Overview",
|
|
64
|
-
"description": "Summary of gap analysis findings"
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"name": "required_skills",
|
|
68
|
-
"title": "Required Skills Inventory",
|
|
69
|
-
"description": "Skills needed for the role"
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
"name": "candidate_skills",
|
|
73
|
-
"title": "Candidate Skills Inventory",
|
|
74
|
-
"description": "Skills the candidate possesses"
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"name": "gap_matrix",
|
|
78
|
-
"title": "Gap Identification Matrix",
|
|
79
|
-
"description": "Detailed skill-by-skill gap analysis"
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
"name": "severity_assessment",
|
|
83
|
-
"title": "Gap Severity Assessment",
|
|
84
|
-
"description": "Critical, moderate, minor gap classification"
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
"name": "development_plan",
|
|
88
|
-
"title": "Development Recommendations",
|
|
89
|
-
"description": "Training and development suggestions"
|
|
90
|
-
}
|
|
91
|
-
]
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
"type": 3,
|
|
95
|
-
"name": "Candidate Comparison Report",
|
|
96
|
-
"description": "Side-by-side comparison of multiple candidates for a role",
|
|
97
|
-
"sections": [
|
|
98
|
-
{
|
|
99
|
-
"name": "comparison_summary",
|
|
100
|
-
"title": "Comparison Summary",
|
|
101
|
-
"description": "Quick comparison table and rankings"
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
"name": "candidate_profiles",
|
|
105
|
-
"title": "Individual Candidate Profiles",
|
|
106
|
-
"description": "Brief profile of each candidate"
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
"name": "skills_matrix",
|
|
110
|
-
"title": "Skills Comparison Matrix",
|
|
111
|
-
"description": "Side-by-side skills comparison"
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
"name": "experience_comparison",
|
|
115
|
-
"title": "Experience Comparison",
|
|
116
|
-
"description": "Years, industries, and role levels"
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
"name": "rankings",
|
|
120
|
-
"title": "Overall Rankings",
|
|
121
|
-
"description": "Ranked list with rationale"
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
"name": "interview_recommendations",
|
|
125
|
-
"title": "Interview Recommendations",
|
|
126
|
-
"description": "Priority order and focus areas per candidate"
|
|
127
|
-
}
|
|
128
|
-
]
|
|
129
|
-
}
|
|
130
|
-
],
|
|
131
|
-
|
|
132
|
-
"entityExtraction": {
|
|
133
|
-
"columns": [
|
|
134
|
-
{
|
|
135
|
-
"id": "candidate_name",
|
|
136
|
-
"name": "Candidate Name",
|
|
137
|
-
"type": "string",
|
|
138
|
-
"description": "Full name of the candidate"
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
"id": "contact_info",
|
|
142
|
-
"name": "Contact Information",
|
|
143
|
-
"type": "object",
|
|
144
|
-
"description": "Email and phone number",
|
|
145
|
-
"fields": [
|
|
146
|
-
{"name": "email", "type": "string"},
|
|
147
|
-
{"name": "phone", "type": "string"}
|
|
148
|
-
]
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
"id": "years_experience",
|
|
152
|
-
"name": "Total Years of Experience",
|
|
153
|
-
"type": "number",
|
|
154
|
-
"description": "Total professional work experience in years"
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
"id": "current_role",
|
|
158
|
-
"name": "Current/Most Recent Role",
|
|
159
|
-
"type": "string",
|
|
160
|
-
"description": "Current or most recent job title and company"
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
"id": "education",
|
|
164
|
-
"name": "Education",
|
|
165
|
-
"type": "array",
|
|
166
|
-
"description": "Educational background",
|
|
167
|
-
"itemType": "object",
|
|
168
|
-
"itemFields": [
|
|
169
|
-
{"name": "degree", "type": "string", "description": "Degree type"},
|
|
170
|
-
{"name": "institution", "type": "string", "description": "School/university name"},
|
|
171
|
-
{"name": "field", "type": "string", "description": "Field of study"},
|
|
172
|
-
{"name": "year", "type": "number", "description": "Graduation year"}
|
|
173
|
-
]
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
"id": "technical_skills",
|
|
177
|
-
"name": "Technical Skills",
|
|
178
|
-
"type": "array",
|
|
179
|
-
"description": "List of technical skills, tools, and technologies"
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
"id": "certifications",
|
|
183
|
-
"name": "Certifications",
|
|
184
|
-
"type": "array",
|
|
185
|
-
"description": "Professional certifications and licenses"
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
"id": "work_history",
|
|
189
|
-
"name": "Work History",
|
|
190
|
-
"type": "array",
|
|
191
|
-
"description": "Employment history",
|
|
192
|
-
"itemType": "object",
|
|
193
|
-
"itemFields": [
|
|
194
|
-
{"name": "company", "type": "string"},
|
|
195
|
-
{"name": "title", "type": "string"},
|
|
196
|
-
{"name": "duration", "type": "string"},
|
|
197
|
-
{"name": "highlights", "type": "string"}
|
|
198
|
-
]
|
|
199
|
-
}
|
|
200
|
-
]
|
|
201
|
-
},
|
|
202
|
-
|
|
203
|
-
"ruleValidation": {
|
|
204
|
-
"rulesets": [
|
|
205
|
-
{
|
|
206
|
-
"id": "basic_requirements",
|
|
207
|
-
"name": "Basic Requirements",
|
|
208
|
-
"description": "Standard hiring criteria",
|
|
209
|
-
"rules": [
|
|
210
|
-
{
|
|
211
|
-
"id": "min_experience",
|
|
212
|
-
"name": "Minimum Experience",
|
|
213
|
-
"description": "Candidate must have at least 2 years of professional work experience",
|
|
214
|
-
"severity": "required"
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
"id": "education",
|
|
218
|
-
"name": "Education Requirement",
|
|
219
|
-
"description": "Candidate should have at least a Bachelor's degree or equivalent experience",
|
|
220
|
-
"severity": "preferred"
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
"id": "communication",
|
|
224
|
-
"name": "Communication Skills",
|
|
225
|
-
"description": "Resume demonstrates strong written communication skills",
|
|
226
|
-
"severity": "preferred"
|
|
227
|
-
},
|
|
228
|
-
{
|
|
229
|
-
"id": "career_progression",
|
|
230
|
-
"name": "Career Progression",
|
|
231
|
-
"description": "Career shows logical progression with increasing responsibilities",
|
|
232
|
-
"severity": "preferred"
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
"id": "employment_continuity",
|
|
236
|
-
"name": "Employment Continuity",
|
|
237
|
-
"description": "No unexplained employment gaps longer than 12 months",
|
|
238
|
-
"severity": "warning"
|
|
239
|
-
}
|
|
240
|
-
],
|
|
241
|
-
"aggregation": "(min_experience AND education) OR (communication AND career_progression)"
|
|
242
|
-
}
|
|
243
|
-
]
|
|
244
|
-
},
|
|
245
|
-
|
|
246
|
-
"fileUpload": {
|
|
247
|
-
"acceptedTypes": [
|
|
248
|
-
"application/pdf",
|
|
249
|
-
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
250
|
-
"application/msword",
|
|
251
|
-
"text/plain"
|
|
252
|
-
],
|
|
253
|
-
"tags": {
|
|
254
|
-
"default": ["resume_documents"],
|
|
255
|
-
"jobDescription": ["job_description"],
|
|
256
|
-
"comparison": ["comparison_resumes"],
|
|
257
|
-
"gapAnalysis": ["gap_analysis_resume", "gap_requirements"]
|
|
258
|
-
}
|
|
259
|
-
},
|
|
260
|
-
|
|
261
|
-
"dataProtection": {
|
|
262
|
-
"protectedClasses": [
|
|
263
|
-
"phone_number",
|
|
264
|
-
"email",
|
|
265
|
-
"address",
|
|
266
|
-
"social_security_number"
|
|
267
|
-
],
|
|
268
|
-
"$comment": "Sensitive data to redact from LLM processing"
|
|
269
|
-
},
|
|
270
|
-
|
|
271
|
-
"fusionModel": {
|
|
272
|
-
"allModels": true,
|
|
273
|
-
"selectedModels": [],
|
|
274
|
-
"$comment": "Use all available LLMs for optimal analysis accuracy"
|
|
275
|
-
},
|
|
276
|
-
|
|
277
|
-
"scoringCriteria": {
|
|
278
|
-
"scales": [
|
|
279
|
-
{
|
|
280
|
-
"name": "fit_score",
|
|
281
|
-
"min": 1,
|
|
282
|
-
"max": 10,
|
|
283
|
-
"description": "How well candidate matches requirements"
|
|
284
|
-
}
|
|
285
|
-
],
|
|
286
|
-
"recommendations": [
|
|
287
|
-
"Strong Yes",
|
|
288
|
-
"Yes",
|
|
289
|
-
"Maybe",
|
|
290
|
-
"No"
|
|
291
|
-
],
|
|
292
|
-
"dimensions": [
|
|
293
|
-
{
|
|
294
|
-
"name": "technical_fit",
|
|
295
|
-
"weight": 0.4,
|
|
296
|
-
"description": "Match of technical skills to requirements"
|
|
297
|
-
},
|
|
298
|
-
{
|
|
299
|
-
"name": "experience_fit",
|
|
300
|
-
"weight": 0.35,
|
|
301
|
-
"description": "Relevance and depth of experience"
|
|
302
|
-
},
|
|
303
|
-
{
|
|
304
|
-
"name": "cultural_fit",
|
|
305
|
-
"weight": 0.25,
|
|
306
|
-
"description": "Alignment with company values and team dynamics"
|
|
307
|
-
}
|
|
308
|
-
]
|
|
309
|
-
},
|
|
310
|
-
|
|
311
|
-
"samplePrompts": {
|
|
312
|
-
"candidateAssessment": "Generate a comprehensive candidate assessment report for this resume. Analyze skills, experience, education, and provide a fit score (1-10) for each dimension: technical fit, experience fit, and cultural fit. Include a final recommendation (Strong Yes/Yes/Maybe/No) with rationale.",
|
|
313
|
-
"skillsGap": "Compare this candidate's skills against the job requirements. Identify all gaps, categorize them by severity (critical, moderate, minor), and provide specific training or development recommendations for each gap.",
|
|
314
|
-
"candidateComparison": "Compare these candidates for the specified role. Create a comparison matrix, rank the candidates, and provide a recommended interview order with specific focus areas for each candidate."
|
|
315
|
-
}
|
|
316
|
-
}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
# {Persona Name}
|
|
2
|
-
|
|
3
|
-
**Type**: Voice AI
|
|
4
|
-
**Created**: {Date}
|
|
5
|
-
**Version**: 1.0
|
|
6
|
-
|
|
7
|
-
## Overview
|
|
8
|
-
|
|
9
|
-
{Brief description of what this Voice AI Employee does}
|
|
10
|
-
|
|
11
|
-
## Deployment Steps
|
|
12
|
-
|
|
13
|
-
### Step 1: Create Workflow in Auto Builder
|
|
14
|
-
|
|
15
|
-
1. Go to [Ema Auto Builder](https://builder.ema.co/)
|
|
16
|
-
2. Create new AI Employee → Select **Voice AI**
|
|
17
|
-
3. Copy contents of `workflow-prompt.md` into the prompt field
|
|
18
|
-
4. Click "Generate Workflow"
|
|
19
|
-
5. Review generated nodes and verify:
|
|
20
|
-
- All categorizers have edges for every category
|
|
21
|
-
- Search nodes connect to respond nodes correctly
|
|
22
|
-
- Fallback paths are present
|
|
23
|
-
|
|
24
|
-
### Step 2: Configure Conversational Behavior
|
|
25
|
-
|
|
26
|
-
1. Navigate to "Conversational Behavior" section
|
|
27
|
-
2. Apply settings from `persona-config.json`:
|
|
28
|
-
|
|
29
|
-
| Field | Source |
|
|
30
|
-
|-------|--------|
|
|
31
|
-
| Welcome Message | `conversationSettings.welcomeMessage` |
|
|
32
|
-
| Identity & Purpose | `conversationSettings.identityAndPurpose` |
|
|
33
|
-
| Take Action Instructions | `conversationSettings.takeActionInstructions` |
|
|
34
|
-
| Hangup Instructions | `conversationSettings.hangupInstructions` |
|
|
35
|
-
| Transfer Call Instructions | `conversationSettings.transferCallInstructions` |
|
|
36
|
-
| Speech Characteristics | `conversationSettings.speechCharacteristics` |
|
|
37
|
-
| System Prompt | `conversationSettings.systemPrompt` |
|
|
38
|
-
| Wait Message | `conversationSettings.waitMessage` |
|
|
39
|
-
|
|
40
|
-
### Step 3: Configure Voice Settings
|
|
41
|
-
|
|
42
|
-
1. Navigate to "Voice Settings" section
|
|
43
|
-
2. Apply settings:
|
|
44
|
-
- Language: From `voiceSettings.languageHints`
|
|
45
|
-
- Voice Model: From `voiceSettings.voiceModel`
|
|
46
|
-
|
|
47
|
-
### Step 4: Configure VAD & Data Storage
|
|
48
|
-
|
|
49
|
-
1. **VAD Settings** (Voice Activity Detection):
|
|
50
|
-
- Turn Timeout: `vadSettings.turnTimeout` seconds
|
|
51
|
-
- Silence End Call: `vadSettings.silenceEndCallTimeout` seconds
|
|
52
|
-
- Max Duration: `vadSettings.maxConversationDuration` seconds
|
|
53
|
-
|
|
54
|
-
2. **Data Storage**:
|
|
55
|
-
- Store Audio: `dataStorageSettings.storeAudioRecording`
|
|
56
|
-
- Store Transcripts: `dataStorageSettings.storeTranscripts`
|
|
57
|
-
|
|
58
|
-
### Step 5: Upload Knowledge Base (if applicable)
|
|
59
|
-
|
|
60
|
-
1. Navigate to "Knowledge Base" section
|
|
61
|
-
2. Upload documents from `docs/` folder
|
|
62
|
-
3. Apply tags as specified in `docs/_metadata.json`
|
|
63
|
-
|
|
64
|
-
### Step 6: Test
|
|
65
|
-
|
|
66
|
-
1. **Simulator Test**: Use the built-in call simulator
|
|
67
|
-
2. **Test Calls**:
|
|
68
|
-
- Test happy path (main use case)
|
|
69
|
-
- Test each category branch
|
|
70
|
-
- Test fallback handling
|
|
71
|
-
- Test verification flows (if applicable)
|
|
72
|
-
3. **Edge Cases**:
|
|
73
|
-
- Test with unexpected inputs
|
|
74
|
-
- Test silence handling
|
|
75
|
-
- Test interruption handling
|
|
76
|
-
|
|
77
|
-
## Files
|
|
78
|
-
|
|
79
|
-
| File | Description |
|
|
80
|
-
|------|-------------|
|
|
81
|
-
| `workflow-prompt.md` | Auto Builder prompt with safeguards |
|
|
82
|
-
| `persona-config.json` | Voice AI configuration |
|
|
83
|
-
| `proto-config.json` | Full API-deployable config |
|
|
84
|
-
| `docs/` | Knowledge base documents |
|
|
85
|
-
|
|
86
|
-
## Testing Checklist
|
|
87
|
-
|
|
88
|
-
- [ ] Workflow generates without validation errors
|
|
89
|
-
- [ ] All category paths work correctly
|
|
90
|
-
- [ ] Fallback provides helpful response
|
|
91
|
-
- [ ] Voice sounds natural and appropriate
|
|
92
|
-
- [ ] Actions/tools execute correctly
|
|
93
|
-
- [ ] Handoff to human works (if applicable)
|
|
94
|
-
- [ ] Call ends appropriately
|
|
95
|
-
|
|
96
|
-
## Maintenance
|
|
97
|
-
|
|
98
|
-
| Change Type | Action |
|
|
99
|
-
|-------------|--------|
|
|
100
|
-
| Workflow logic | Update `workflow-prompt.md`, re-generate |
|
|
101
|
-
| Persona behavior | Update `persona-config.json`, apply in UI |
|
|
102
|
-
| Knowledge content | Update docs in `docs/`, re-upload |
|
|
103
|
-
| Voice settings | Update `persona-config.json`, apply in UI |
|
|
104
|
-
|
|
105
|
-
## Troubleshooting
|
|
106
|
-
|
|
107
|
-
### "Validation failed" in Auto Builder
|
|
108
|
-
|
|
109
|
-
- Check that all categorizers have Fallback category
|
|
110
|
-
- Verify edge format: `category_<Name>` not `category::<Name>`
|
|
111
|
-
- Ensure all nodes have required inputs
|
|
112
|
-
|
|
113
|
-
### Voice sounds unnatural
|
|
114
|
-
|
|
115
|
-
- Review `speechCharacteristics` for TTS rules
|
|
116
|
-
- Add pronunciation guides for technical terms
|
|
117
|
-
- Adjust pauses and pacing instructions
|
|
118
|
-
|
|
119
|
-
### Actions not triggering
|
|
120
|
-
|
|
121
|
-
- Check `takeActionInstructions` uses correct `</Case N>` format
|
|
122
|
-
- Verify tool names match exactly
|
|
123
|
-
- Review `systemPrompt` for tool calling rules
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ema.co/schemas/persona-config-voice.json",
|
|
3
|
-
"$comment": "Voice AI Persona Configuration - Fill in all {placeholder} values",
|
|
4
|
-
|
|
5
|
-
"personaType": "voice",
|
|
6
|
-
"projectType": 5,
|
|
7
|
-
"name": "{Persona Name}",
|
|
8
|
-
"description": "{Brief description of what this Voice AI does}",
|
|
9
|
-
|
|
10
|
-
"conversationSettings": {
|
|
11
|
-
"name": "{AI Name - e.g., 'Sofia', 'Alex', 'Service Agent'}",
|
|
12
|
-
|
|
13
|
-
"welcomeMessage": "{Opening greeting when call connects}\n\nExample:\nHello, thank you for calling {Company}. This is {AI Name}. How can I help you today?",
|
|
14
|
-
|
|
15
|
-
"identityAndPurpose": "You are {AI Name}, a Voice AI assistant for {Company}.\n\nPrimary responsibility: {Main purpose}\n\nYour responsibilities:\n1. {Responsibility 1}\n2. {Responsibility 2}\n3. {Responsibility 3}\n\nRules:\n- {Rule 1}\n- {Rule 2}",
|
|
16
|
-
|
|
17
|
-
"takeActionInstructions": "</Case 1>\n{Action 1 Name}\n\nTrigger When:\n{Condition that triggers this action}\n\nIntent for tool call: \"{Tool Intent Name}\"\n\nRequired parameters:\n{ \"{param1}\": \"\", \"{param2}\": \"\" }\n</Case 1>\n\n</Case 2>\n{Action 2 Name}\n\nTrigger When:\n{Condition that triggers this action}\n\nIntent for tool call: \"{Tool Intent Name}\"\n\nRequired parameters:\n{ \"{param1}\": \"\" }\n</Case 2>",
|
|
18
|
-
|
|
19
|
-
"hangupInstructions": "End the call when:\n- The caller explicitly says goodbye or asks to hang up\n- The caller confirms they have no more questions\n- {Additional hangup conditions}\n\nBefore ending:\n- Confirm all issues are resolved\n- Offer any follow-up information\n- Thank the caller",
|
|
20
|
-
|
|
21
|
-
"transferCallInstructions": "Transfer the call when:\n- The caller explicitly requests a human agent\n- {Condition requiring human}\n- {Complex scenario}\n\nBefore transferring:\n- Inform the caller you're transferring them\n- Provide brief context to the human agent\n- {Additional transfer instructions}",
|
|
22
|
-
|
|
23
|
-
"speechCharacteristics": "**Conversational Style:**\n- Keep responses brief (2-3 sentences per turn)\n- Use warm, professional tone\n- Speak clearly at moderate pace\n\n**Natural Speech:**\n- Use brief pauses between sentences\n- Acknowledge with 'I understand', 'Of course', 'Certainly'\n- Avoid robotic language\n\n**TTS Pronunciation Rules:**\n- Spell out IDs: 'A-B-C-1-2-3'\n- Pause between numbers: 'Your code is... 1... 2... 3... 4'\n- {Domain-specific pronunciation rules}",
|
|
24
|
-
|
|
25
|
-
"systemPrompt": "Tool Calling Instructions:\n\n1. Always collect required parameters before calling tools\n2. Confirm parameter values with the caller\n3. Handle tool errors gracefully\n4. {Additional tool calling rules}\n\nParameter Collection:\n- {Param 1}: {How to collect}\n- {Param 2}: {How to collect}",
|
|
26
|
-
|
|
27
|
-
"formFillingInstructions": "{Instructions for collecting form data, if applicable}\n\nExample:\nWhen collecting booking information:\n1. Ask for name first\n2. Then ask for date preference\n3. Confirm all details before proceeding",
|
|
28
|
-
|
|
29
|
-
"waitMessage": "One moment while I look that up for you..."
|
|
30
|
-
},
|
|
31
|
-
|
|
32
|
-
"voiceSettings": {
|
|
33
|
-
"languageHints": ["en-US"],
|
|
34
|
-
"voiceModel": "default",
|
|
35
|
-
"$comment_voiceModel": "Options: default, professional-male, professional-female, casual"
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
"vadSettings": {
|
|
39
|
-
"turnTimeout": 3,
|
|
40
|
-
"$comment_turnTimeout": "Seconds to wait for caller to finish speaking",
|
|
41
|
-
"silenceEndCallTimeout": 30,
|
|
42
|
-
"$comment_silenceEndCallTimeout": "Seconds of silence before ending call",
|
|
43
|
-
"maxConversationDuration": 600,
|
|
44
|
-
"$comment_maxConversationDuration": "Maximum call length in seconds (600 = 10 minutes)"
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
"dataStorageSettings": {
|
|
48
|
-
"storeAudioRecording": true,
|
|
49
|
-
"storeTranscripts": true,
|
|
50
|
-
"storeAgentTranscript": true
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
"callSettings": {
|
|
54
|
-
"enableCallForwarding": false,
|
|
55
|
-
"callForwardingNumber": "",
|
|
56
|
-
"enableSpamCallPrevention": true,
|
|
57
|
-
"enableDisconnectCall": false
|
|
58
|
-
},
|
|
59
|
-
|
|
60
|
-
"dataProtection": {
|
|
61
|
-
"protectedClasses": [
|
|
62
|
-
"ssn",
|
|
63
|
-
"credit_card",
|
|
64
|
-
"phone_number"
|
|
65
|
-
],
|
|
66
|
-
"$comment_protectedClasses": "PII classes to redact. Options: ssn, credit_card, phone_number, email, address, dob, account_number"
|
|
67
|
-
},
|
|
68
|
-
|
|
69
|
-
"fusionModel": {
|
|
70
|
-
"allModels": true,
|
|
71
|
-
"selectedModels": [],
|
|
72
|
-
"$comment": "Leave allModels: true for best results, or specify models: ['gpt-4', 'claude-3']"
|
|
73
|
-
}
|
|
74
|
-
}
|