diff --git a/agenta-web/src/components/pages/evaluations/autoEvaluation/AutoEvaluation.tsx b/agenta-web/src/components/pages/evaluations/autoEvaluation/AutoEvaluation.tsx
index 30cc378d5..8de813dbe 100644
--- a/agenta-web/src/components/pages/evaluations/autoEvaluation/AutoEvaluation.tsx
+++ b/agenta-web/src/components/pages/evaluations/autoEvaluation/AutoEvaluation.tsx
@@ -540,7 +540,10 @@ const AutoEvaluation = () => {
}
className={classes.button}
- onClick={() => setIsConfigEvaluatorModalOpen("open")}
+ onClick={() => {
+ setIsConfigEvaluatorModalOpen("open")
+ setCurrent(0)
+ }}
>
Configure evaluators
diff --git a/agenta-web/src/components/pages/evaluations/autoEvaluation/EvaluatorsModal/EvaluatorsModal.tsx b/agenta-web/src/components/pages/evaluations/autoEvaluation/EvaluatorsModal/EvaluatorsModal.tsx
index afac6edf6..2d8a3c23a 100644
--- a/agenta-web/src/components/pages/evaluations/autoEvaluation/EvaluatorsModal/EvaluatorsModal.tsx
+++ b/agenta-web/src/components/pages/evaluations/autoEvaluation/EvaluatorsModal/EvaluatorsModal.tsx
@@ -79,14 +79,13 @@ const EvaluatorsModal = ({
.finally(() => setFetchingEvalConfigs(false))
}
- const {data} = useVariants(currentApp)({
- appId,
- onSuccess: (data) => {
- if (data?.variants?.length) {
- setSelectedVariant(data?.variants[0])
- }
- },
- })
+ const {data} = useVariants(currentApp)({appId})
+
+ useEffect(() => {
+ if (data?.variants?.length) {
+ setSelectedVariant(data?.variants[0].variant)
+ }
+ }, [data])
useEffect(() => {
Promise.all([fetchAllEvaluators(), fetchAllEvaluatorConfigs(appId), fetchTestsets()]).then(
diff --git a/agenta-web/src/lib/helpers/utils.ts b/agenta-web/src/lib/helpers/utils.ts
index 40bf58140..c3dc2780c 100644
--- a/agenta-web/src/lib/helpers/utils.ts
+++ b/agenta-web/src/lib/helpers/utils.ts
@@ -130,6 +130,51 @@ export const safeParse = (str: string, fallback: any = "") => {
}
}
+export const extractChatMessages = (testcase: any) => {
+ if (testcase.messages)
+ return formatMessages(normalizeMessages(parseStringToJson(testcase.messages)))
+ if (testcase.chat) return formatMessages(normalizeMessages(parseStringToJson(testcase.chat)))
+
+ const filteredEntries = Object.entries(testcase).filter(([key]) => key !== "correct_answer")
+
+ for (const [_, value] of filteredEntries) {
+ const parsedValue = parseStringToJson(value)
+ if (Array.isArray(parsedValue)) {
+ return formatMessages(parsedValue)
+ }
+ }
+
+ return []
+}
+
+const parseStringToJson = (value: any) => {
+ if (typeof value === "string") {
+ try {
+ return JSON.parse(value)
+ } catch {
+ return value
+ }
+ }
+ return value
+}
+
+const normalizeMessages = (messages: any) => {
+ if (!Array.isArray(messages) && typeof messages === "object") {
+ return [messages]
+ }
+ return messages
+}
+
+const formatMessages = (messages: any) => {
+ if (typeof messages === "object" && !Array.isArray(messages)) {
+ messages = Object.values(messages)
+ }
+
+ return Array.isArray(messages)
+ ? messages.map(({role, content, id}) => ({role, content, id}))
+ : []
+}
+
export const getAgentaApiUrl = () => {
const apiUrl = process.env.NEXT_PUBLIC_AGENTA_API_URL
diff --git a/agenta-web/src/services/api.ts b/agenta-web/src/services/api.ts
index a3d6fa621..faa6b31ad 100644
--- a/agenta-web/src/services/api.ts
+++ b/agenta-web/src/services/api.ts
@@ -107,7 +107,7 @@ export async function callVariant(
): Promise {
const isChatVariant = Array.isArray(chatMessages) && chatMessages.length > 0
// Separate input parameters into two dictionaries based on the 'input' property
- const mainInputParams: Record = {} // Parameters with input = true
+ const mainInputParams: Record = {} // Parameters with input = true
const secondaryInputParams: Record = {} // Parameters with input = false
for (let key of Object.keys(inputParametersDict)) {
@@ -118,6 +118,7 @@ export async function callVariant(
if (paramDefinition && !paramDefinition.input) {
secondaryInputParams[key] = inputParametersDict[key]
} else {
+ // Parse the value if key is "messages"
mainInputParams[key] = inputParametersDict[key]
}
}