Skip to content

Commit cdb13df

Browse files
fix: resolved all PR comments
1 parent be6edc8 commit cdb13df

4 files changed

Lines changed: 79 additions & 38 deletions

File tree

kits/agentic/mockai/actions/orchestrate.ts

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import { lamaticClient } from "@/lib/lamatic-client"
44
import { config } from "../orchestrate.js"
5+
import { z } from "zod"
56

67
export async function generateQuestions(
78
jobTitle: string,
@@ -27,16 +28,27 @@ export async function generateQuestions(
2728
jobDesc
2829
}
2930

31+
const inputSchema = z.object({
32+
jobTitle: z.string().min(1, "Job title is required"),
33+
yearsOfExp: z.number().min(0, "Years of experience must be a valid number"),
34+
jobDesc: z.string().optional()
35+
})
36+
37+
inputSchema.parse(inputs)
38+
3039
// console.log(`[v0] Executing flow: ${flow.workflowId}`)
3140

3241
const resData = await lamaticClient.executeFlow(flow.workflowId, inputs)
3342
// console.log("[v0] Flow execution completed")
3443

35-
const questions = resData?.result?.data
44+
const responseSchema = z.object({
45+
result: z.object({
46+
data: z.array(z.string()).min(1, "No questions found in response")
47+
})
48+
})
3649

37-
if (!questions || !Array.isArray(questions) || questions.length === 0) {
38-
throw new Error("No questions found in response")
39-
}
50+
const validatedResponse = responseSchema.parse(resData)
51+
const questions = validatedResponse.result.data
4052

4153
return {
4254
success: true,
@@ -46,7 +58,9 @@ export async function generateQuestions(
4658
console.error("[v0] Generation error:", error)
4759

4860
let errorMessage = "Unknown error occurred"
49-
if (error instanceof Error) {
61+
if (error instanceof z.ZodError) {
62+
errorMessage = "Validation error: Invalid data format."
63+
} else if (error instanceof Error) {
5064
errorMessage = error.message
5165
if (error.message.includes("fetch failed")) {
5266
errorMessage =
@@ -84,30 +98,48 @@ export async function evaluateAnswers(
8498
candidateResponses
8599
}
86100

101+
const inputSchema = z.object({
102+
candidateResponses: z.array(
103+
z.object({
104+
question: z.string(),
105+
answers: z.string()
106+
})
107+
).min(1, "At least one candidate response is required")
108+
})
109+
110+
inputSchema.parse(inputs)
111+
87112
// console.log(`[v0] Executing flow: ${flow.workflowId}`)
88113

89114
const resData = await lamaticClient.executeFlow(flow.workflowId, inputs)
90115
console.log("[v0] Flow execution completed")
91116

92-
const result = resData?.result
117+
const responseSchema = z.object({
118+
result: z.object({
119+
positives: z.array(z.string()).optional().default([]),
120+
negatives: z.array(z.string()).optional().default([]),
121+
rating: z.number()
122+
})
123+
})
93124

94-
if (!result || typeof result.rating !== 'number') {
95-
throw new Error("No feedback found in response")
96-
}
125+
const validatedResponse = responseSchema.parse(resData)
126+
const result = validatedResponse.result
97127

98128
return {
99129
success: true,
100130
feedback: {
101-
positives: result.positives || [],
102-
negatives: result.negatives || [],
131+
positives: result.positives,
132+
negatives: result.negatives,
103133
rating: result.rating
104134
},
105135
}
106136
} catch (error) {
107137
console.error("[v0] Evaluation error:", error)
108138

109139
let errorMessage = "Unknown error occurred"
110-
if (error instanceof Error) {
140+
if (error instanceof z.ZodError) {
141+
errorMessage = "Validation error: Invalid data format."
142+
} else if (error instanceof Error) {
111143
errorMessage = error.message
112144
if (error.message.includes("fetch failed")) {
113145
errorMessage =

kits/agentic/mockai/components/ui/sidebar.tsx

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ const SIDEBAR_KEYBOARD_SHORTCUT = 'b'
3535
type SidebarContextProps = {
3636
state: 'expanded' | 'collapsed'
3737
open: boolean
38-
setOpen: (open: boolean) => void
38+
setOpen: React.Dispatch<React.SetStateAction<boolean>>
3939
openMobile: boolean
40-
setOpenMobile: (open: boolean) => void
40+
setOpenMobile: React.Dispatch<React.SetStateAction<boolean>>
4141
isMobile: boolean
4242
toggleSidebar: () => void
4343
}
@@ -64,7 +64,7 @@ function SidebarProvider({
6464
}: React.ComponentProps<'div'> & {
6565
defaultOpen?: boolean
6666
open?: boolean
67-
onOpenChange?: (open: boolean) => void
67+
onOpenChange?: React.Dispatch<React.SetStateAction<boolean>>
6868
}) {
6969
const isMobile = useIsMobile()
7070
const [openMobile, setOpenMobile] = React.useState(false)
@@ -75,15 +75,22 @@ function SidebarProvider({
7575
const open = openProp ?? _open
7676
const setOpen = React.useCallback(
7777
(value: boolean | ((value: boolean) => boolean)) => {
78-
const openState = typeof value === 'function' ? value(open) : value
78+
const valueSetter = typeof value === 'function' ? value : () => value
79+
7980
if (setOpenProp) {
80-
setOpenProp(openState)
81+
setOpenProp(valueSetter)
82+
83+
// This sets the cookie to keep the sidebar state.
84+
document.cookie = `${SIDEBAR_COOKIE_NAME}=${valueSetter(open)}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`
8185
} else {
82-
_setOpen(openState)
83-
}
86+
_setOpen((prev) => {
87+
const openState = valueSetter(prev)
8488

85-
// This sets the cookie to keep the sidebar state.
86-
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`
89+
// This sets the cookie to keep the sidebar state.
90+
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`
91+
return openState
92+
})
93+
}
8794
},
8895
[setOpenProp, open],
8996
)

kits/agentic/mockai/components/ui/tooltip.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,7 @@ function TooltipProvider({
99
delayDuration = 0,
1010
...props
1111
}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
12-
return (
13-
<TooltipPrimitive.Provider
14-
data-slot="tooltip-provider"
15-
delayDuration={delayDuration}
16-
{...props}
17-
/>
18-
)
12+
return <TooltipPrimitive.Root data-slot="tooltip" {...props} />
1913
}
2014

2115
function Tooltip({

kits/agentic/mockai/config.json

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
{
2-
"name": "Generative AI",
3-
"description": "Generate text, JSON, or images intelligently based on the given context.",
4-
"tags": ["🤖 Agentic", "✨ Generative"],
2+
"name": "Mockai - AI Interview Prep",
3+
"description": "AI-powered mock interviewer that conducts dynamic interviews with real-time speech-to-text and provides instant feedback.",
4+
"tags": [
5+
"🤖 Agentic",
6+
"🎤 Interview"
7+
],
58
"author": {
69
"name": "Lamatic AI",
710
"email": "info@lamatic.ai"
811
},
912
"steps": [
1013
{
11-
"id": "agentic-generate-content",
14+
"id": "question-flow",
15+
"type": "mandatory",
16+
"envKey": "AGENTIC_QUESTION_FLOW_ID"
17+
},
18+
{
19+
"id": "feedback-flow",
1220
"type": "mandatory",
13-
"envKey": "AGENTIC_GENERATE_CONTENT"
21+
"envKey": "AGENTIC_FEEDBACK_FLOW_ID"
1422
}
1523
],
1624
"integrations": [],
1725
"features": [],
18-
"demoUrl": "https://agent-kit-generation.vercel.app/",
19-
"githubUrl": "https://github.com/Lamatic/AgentKit/tree/main/kits/agentic/generation",
20-
"deployUrl": "https://vercel.com/new/clone?repository-url=https://github.com/Lamatic/AgentKit&root-directory=kits/agentic/generation&env=AGENTIC_GENERATE_CONTENT,LAMATIC_API_URL,LAMATIC_PROJECT_ID,LAMATIC_API_KEY&envDescription=Your%20Lamatic%20Generation%20keys%20are%20required.&envLink=https://lamatic.ai/templates/agentkits/agentic/agent-kit-generation",
21-
"documentationUrl": "https://lamatic.ai/templates/agentkits/agentic/agent-kit-generation"
22-
}
26+
"demoUrl": "https://agent-kit-mockai.vercel.app/",
27+
"githubUrl": "https://github.com/Lamatic/AgentKit/tree/main/kits/agentic/mockai",
28+
"deployUrl": "https://vercel.com/new/clone?repository-url=https://github.com/Lamatic/AgentKit&root-directory=kits/agentic/mockai&env=AGENTIC_QUESTION_FLOW_ID,AGENTIC_FEEDBACK_FLOW_ID,LAMATIC_API_URL,LAMATIC_PROJECT_ID,LAMATIC_API_KEY&envDescription=Your%20Lamatic%20MockAI%20keys%20are%20required.&envLink=https://lamatic.ai/templates/agentkits/agentic/agent-kit-mockai",
29+
"documentationUrl": "https://lamatic.ai/templates/agentkits/agentic/agent-kit-mockai"
30+
}

0 commit comments

Comments
 (0)