-
- {rec.recording_id}
+
+ {(rec.metadata?.original_filename as string) || rec.recording_id}
diff --git a/ui/src/app/workflow/[workflowId]/utils/layoutNodes.ts b/ui/src/app/workflow/[workflowId]/utils/layoutNodes.ts
index 0b14f9a..e35106b 100644
--- a/ui/src/app/workflow/[workflowId]/utils/layoutNodes.ts
+++ b/ui/src/app/workflow/[workflowId]/utils/layoutNodes.ts
@@ -18,14 +18,12 @@ export const layoutNodes = (
// Separate nodes by type
const triggerNodes = nodes.filter(n => n.type === NodeType.TRIGGER);
const webhookNodes = nodes.filter(n => n.type === NodeType.WEBHOOK);
- const globalNodes = nodes.filter(n => n.type === NodeType.GLOBAL_NODE || n.type === 'global');
+ const qaNodes = nodes.filter(n => n.type === NodeType.QA);
+ const globalNodes = nodes.filter(n => n.type === NodeType.GLOBAL_NODE);
const workflowNodes = nodes.filter(n =>
n.type === NodeType.START_CALL ||
n.type === NodeType.AGENT_NODE ||
- n.type === NodeType.END_CALL ||
- n.type === 'startCall' ||
- n.type === 'agentNode' ||
- n.type === 'endCall'
+ n.type === NodeType.END_CALL
);
// If no workflow nodes, just return original nodes
@@ -161,12 +159,26 @@ export const layoutNodes = (
};
});
+ // Position QA nodes below webhook nodes on the right side
+ const qaStartY = webhookNodes.length > 0
+ ? workflowCenterY - (webhookNodes.length * NODE_HEIGHT + (webhookNodes.length - 1) * VERTICAL_SPACING) / 2
+ + webhookNodes.length * (NODE_HEIGHT + VERTICAL_SPACING) + VERTICAL_SPACING
+ : workflowCenterY;
+ const positionedQaNodes = qaNodes.map((node, index) => ({
+ ...node,
+ position: {
+ x: webhookNodesX,
+ y: qaStartY + index * (NODE_HEIGHT + VERTICAL_SPACING)
+ }
+ }));
+
// Combine all positioned nodes
const allPositionedNodes = [
...positionedTriggerNodes,
...positionedGlobalNodes,
...positionedWorkflowNodes,
- ...positionedWebhookNodes
+ ...positionedWebhookNodes,
+ ...positionedQaNodes
];
// Create a map for quick lookup
diff --git a/ui/src/components/ServiceConfiguration.tsx b/ui/src/components/ServiceConfiguration.tsx
index f7229f1..75824a0 100644
--- a/ui/src/components/ServiceConfiguration.tsx
+++ b/ui/src/components/ServiceConfiguration.tsx
@@ -236,11 +236,21 @@ export default function ServiceConfiguration() {
}
});
selectedProviders[service] = userConfig?.[service]?.provider as string;
+ // Fill in schema defaults for fields not present in userConfig
+ const properties = response.data[service]?.[selectedProviders[service]]?.properties as Record;
+ if (properties) {
+ Object.entries(properties).forEach(([field, schema]) => {
+ const key = `${service}_${field}`;
+ if (field !== "provider" && field !== "api_key" && schema.default !== undefined && !(key in defaultValues)) {
+ defaultValues[key] = schema.default;
+ }
+ });
+ }
} else {
const properties = response.data[service]?.[selectedProviders[service]]?.properties as Record;
if (properties) {
Object.entries(properties).forEach(([field, schema]) => {
- if (field !== "provider" && schema.default) {
+ if (field !== "provider" && schema.default !== undefined) {
defaultValues[`${service}_${field}`] = schema.default;
}
});
diff --git a/ui/src/components/flow/MentionTextarea.tsx b/ui/src/components/flow/MentionTextarea.tsx
index 79f1f81..0c38606 100644
--- a/ui/src/components/flow/MentionTextarea.tsx
+++ b/ui/src/components/flow/MentionTextarea.tsx
@@ -15,6 +15,7 @@ export interface MentionItem {
id: string;
name: string;
description: string;
+ filename: string;
}
interface MentionTextareaProps {
@@ -46,6 +47,7 @@ export function MentionTextarea({
id: r.recording_id,
name: r.transcript,
description: r.transcript,
+ filename: (r.metadata?.original_filename as string) || r.recording_id,
})),
[recordings]
);
@@ -195,7 +197,7 @@ export function MentionTextarea({
>
- {item.id}
+ {item.filename}
{item.name}