@@ -3,17 +3,26 @@ import { useAuth } from "@workos-inc/authkit-react";
3
3
import { useConvexAuth , useQuery } from "convex/react" ;
4
4
import { FlaskConical } from "lucide-react" ;
5
5
import { EmptyState } from "@/components/ui/empty-state" ;
6
+ import { Tabs , TabsContent , TabsList , TabsTrigger } from "@/components/ui/tabs" ;
6
7
import type { EvalCase , EvalIteration , EvalSuite } from "./evals/types" ;
7
8
import { aggregateSuite } from "./evals/helpers" ;
8
9
import { SuitesOverview } from "./evals/suites-overview" ;
9
10
import { SuiteIterationsView } from "./evals/suite-iterations-view" ;
11
+ import { EvalRunner } from "./evals/eval-runner" ;
12
+ import { useChat } from "@/hooks/use-chat" ;
10
13
11
14
export function EvalsTab ( ) {
12
15
const { isAuthenticated, isLoading } = useConvexAuth ( ) ;
13
16
const { user } = useAuth ( ) ;
14
17
15
18
const [ selectedSuiteId , setSelectedSuiteId ] = useState < string | null > ( null ) ;
16
19
20
+ const { availableModels } = useChat ( {
21
+ systemPrompt : "" ,
22
+ temperature : 1 ,
23
+ selectedServers : [ ] ,
24
+ } ) ;
25
+
17
26
// Fetch overview data for authenticated user - only suites with metadata
18
27
const enableOverviewQuery = isAuthenticated && ! ! user ;
19
28
const overviewData = useQuery (
@@ -106,40 +115,53 @@ export function EvalsTab() {
106
115
return (
107
116
< div className = "p-6 space-y-6" >
108
117
< div className = "flex items-center justify-between" >
109
- < div className = "flex items-center space-x-2" >
110
- < h1 className = "text-2xl font-bold" > Evals</ h1 >
111
- { overviewData ?. metadata && (
112
- < div className = "text-sm text-muted-foreground" >
113
- { overviewData . metadata . iterationsPassed } passed ·{ " " }
114
- { overviewData . metadata . iterationsFailed } failed
118
+ < h1 className = "text-2xl font-bold" > Evals</ h1 >
119
+ { overviewData ?. metadata && (
120
+ < div className = "text-sm text-muted-foreground" >
121
+ { overviewData . metadata . iterationsPassed } passed ·{ " " }
122
+ { overviewData . metadata . iterationsFailed } failed
123
+ </ div >
124
+ ) }
125
+ </ div >
126
+
127
+ < Tabs defaultValue = "results" className = "w-full" >
128
+ < TabsList >
129
+ < TabsTrigger value = "results" > Results</ TabsTrigger >
130
+ < TabsTrigger value = "create" > Create Run</ TabsTrigger >
131
+ </ TabsList >
132
+
133
+ < TabsContent value = "results" className = "mt-6" >
134
+ { ! selectedSuite ? (
135
+ < SuitesOverview
136
+ suites = { suites || [ ] }
137
+ onSelectSuite = { setSelectedSuiteId }
138
+ />
139
+ ) : isSuiteDetailsLoading ? (
140
+ < div className = "flex items-center justify-center h-64" >
141
+ < div className = "text-center" >
142
+ < div className = "animate-spin rounded-full h-8 w-8 border-b-2 border-primary mx-auto" />
143
+ < p className = "mt-4 text-muted-foreground" >
144
+ Loading suite details...
145
+ </ p >
146
+ </ div >
115
147
</ div >
148
+ ) : (
149
+ < SuiteIterationsView
150
+ suite = { selectedSuite }
151
+ cases = { suiteDetails ?. testCases || [ ] }
152
+ iterations = { iterationsForSelectedSuite }
153
+ aggregate = { suiteAggregate }
154
+ onBack = { ( ) => setSelectedSuiteId ( null ) }
155
+ />
116
156
) }
117
- </ div >
118
- </ div >
157
+ </ TabsContent >
119
158
120
- { ! selectedSuite ? (
121
- < SuitesOverview
122
- suites = { suites || [ ] }
123
- onSelectSuite = { setSelectedSuiteId }
124
- />
125
- ) : isSuiteDetailsLoading ? (
126
- < div className = "flex items-center justify-center h-64" >
127
- < div className = "text-center" >
128
- < div className = "animate-spin rounded-full h-8 w-8 border-b-2 border-primary mx-auto" />
129
- < p className = "mt-4 text-muted-foreground" >
130
- Loading suite details...
131
- </ p >
159
+ < TabsContent value = "create" className = "mt-6" >
160
+ < div className = "max-w-4xl" >
161
+ < EvalRunner availableModels = { availableModels } inline = { true } />
132
162
</ div >
133
- </ div >
134
- ) : (
135
- < SuiteIterationsView
136
- suite = { selectedSuite }
137
- cases = { suiteDetails ?. testCases || [ ] }
138
- iterations = { iterationsForSelectedSuite }
139
- aggregate = { suiteAggregate }
140
- onBack = { ( ) => setSelectedSuiteId ( null ) }
141
- />
142
- ) }
163
+ </ TabsContent >
164
+ </ Tabs >
143
165
</ div >
144
166
) ;
145
167
}
0 commit comments