Skip to content

Commit

Permalink
fix: use output json schema for routemaps in router node
Browse files Browse the repository at this point in the history
  • Loading branch information
srijanpatel committed Feb 20, 2025
1 parent ae50f98 commit 207d699
Showing 1 changed file with 28 additions and 16 deletions.
44 changes: 28 additions & 16 deletions frontend/src/components/nodes/logic/RouterNode.tsx
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
import React, { useState, useRef, useEffect, useMemo } from 'react'
import { Handle, useConnection, Position, useUpdateNodeInternals, NodeProps } from '@xyflow/react'
import BaseNode from '../BaseNode'
import { Input, Card, Divider, Button, Select, SelectItem, RadioGroup, Radio } from '@heroui/react'
import { useDispatch, useSelector } from 'react-redux'
import { updateNodeConfigOnly, deleteEdgeByHandle } from '../../../store/flowSlice'
import styles from '../DynamicNode.module.css'
import { FlowWorkflowNode } from '@/types/api_types/nodeTypeSchemas'
import { Button, Card, Divider, Input, Radio, RadioGroup, Select, SelectItem } from '@heroui/react'
import { Icon } from '@iconify/react'
import { Handle, NodeProps, Position, useConnection, useUpdateNodeInternals } from '@xyflow/react'
import React, { useEffect, useMemo, useRef, useState } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { deleteEdgeByHandle, updateNodeConfigOnly } from '../../../store/flowSlice'
import { RootState } from '../../../store/store'
import { ComparisonOperator, RouteConditionRule, RouteConditionGroup } from '../../../types/api_types/routerSchemas'
import { FlowWorkflowNode } from '@/types/api_types/nodeTypeSchemas'
import { ComparisonOperator, RouteConditionGroup, RouteConditionRule } from '../../../types/api_types/routerSchemas'
import BaseNode from '../BaseNode'
import styles from '../DynamicNode.module.css'
import NodeOutputModal from '../NodeOutputModal'


export interface RouterNodeProps extends NodeProps<FlowWorkflowNode> {
displayOutput?: boolean
readOnly?: boolean
displaySubflow?: boolean
displayResizer?: boolean
}


const OPERATORS: { value: ComparisonOperator; label: string }[] = [
{ value: ComparisonOperator.CONTAINS, label: 'Contains' },
{ value: ComparisonOperator.EQUALS, label: 'Equals' },
Expand All @@ -42,7 +40,13 @@ const DEFAULT_ROUTE: RouteConditionGroup = {
conditions: [{ ...DEFAULT_CONDITION }],
}

export const RouterNode: React.FC<RouterNodeProps> = ({ id, data, readOnly = false, positionAbsoluteX, positionAbsoluteY }) => {
export const RouterNode: React.FC<RouterNodeProps> = ({
id,
data,
readOnly = false,
positionAbsoluteX,
positionAbsoluteY,
}) => {
const [isCollapsed, setIsCollapsed] = useState(false)
const [isModalOpen, setIsModalOpen] = useState(false)
const nodeRef = useRef<HTMLDivElement | null>(null)
Expand Down Expand Up @@ -100,11 +104,20 @@ export const RouterNode: React.FC<RouterNodeProps> = ({ id, data, readOnly = fal

const predNodeConfig = nodeConfigs[node.id]
const nodeTitle = predNodeConfig?.title || node.id
const outputSchema = predNodeConfig?.output_schema || {}

return Object.entries(outputSchema).map(([key, type]) => ({
let schemaProperties = {}
try {
const parsedSchema = predNodeConfig?.output_json_schema
? JSON.parse(predNodeConfig.output_json_schema)
: {}
schemaProperties = parsedSchema.properties || {}
} catch (error) {
console.error('Error parsing output_json_schema:', error)
}

return Object.entries(schemaProperties).map(([key, value]) => ({
value: `${nodeTitle}.${key}`,
label: `${nodeTitle}.${key} (${type})`,
label: `${nodeTitle}.${key} (${(value as any).type || 'unknown'})`,
}))
})
}, [finalPredecessors, nodeConfigs])
Expand Down Expand Up @@ -246,7 +259,6 @@ export const RouterNode: React.FC<RouterNodeProps> = ({ id, data, readOnly = fal
{/* Routes */}
<div className="flex flex-col gap-4">
{Object.entries(nodeConfig.route_map).map(([routeKey, route]) => (

<Card
key={routeKey}
classNames={{
Expand Down

0 comments on commit 207d699

Please sign in to comment.