connection bug solved
This commit is contained in:
parent
7e300d62e2
commit
fb9d8d4fd5
5 changed files with 244 additions and 11 deletions
|
|
@ -51,7 +51,7 @@ export default function ParameterComponent({
|
||||||
position={left ? Position.Left : Position.Right}
|
position={left ? Position.Left : Position.Right}
|
||||||
id={id}
|
id={id}
|
||||||
isValidConnection={(connection) =>
|
isValidConnection={(connection) =>
|
||||||
isValidConnection(data, connection)
|
isValidConnection(connection,reactFlowInstance)
|
||||||
}
|
}
|
||||||
className={
|
className={
|
||||||
(left ? "-ml-0.5 " : "-mr-0.5 ") +
|
(left ? "-ml-0.5 " : "-mr-0.5 ") +
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ type TabsContextType={
|
||||||
setTabIndex:(index:number)=>void;
|
setTabIndex:(index:number)=>void;
|
||||||
flows:Array<flow>
|
flows:Array<flow>
|
||||||
removeFlow:(id:string)=>void;
|
removeFlow:(id:string)=>void;
|
||||||
addFlow:()=>void;
|
addFlow:(flowData?:any)=>void;
|
||||||
updateFlow:(newFlow:flow)=>void;
|
updateFlow:(newFlow:flow)=>void;
|
||||||
nodeId:number;
|
nodeId:number;
|
||||||
}
|
}
|
||||||
|
|
@ -17,7 +17,7 @@ const TabsContextInitialValue = {
|
||||||
setTabIndex:(index:number)=>{},
|
setTabIndex:(index:number)=>{},
|
||||||
flows:[],
|
flows:[],
|
||||||
removeFlow:(id:string)=>{},
|
removeFlow:(id:string)=>{},
|
||||||
addFlow:()=>{},
|
addFlow:(flowData?:any)=>{},
|
||||||
updateFlow:(newFlow:flow)=>{},
|
updateFlow:(newFlow:flow)=>{},
|
||||||
nodeId:0,
|
nodeId:0,
|
||||||
|
|
||||||
|
|
@ -65,8 +65,9 @@ export function TabsProvider({children}){
|
||||||
return newFlows;
|
return newFlows;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function addFlow() {
|
function addFlow(flowData?:flow) {
|
||||||
let newFlow: flow = {name: "flow"+id, id: id.toString(), data:null}
|
const data = flowData?flowData:null
|
||||||
|
let newFlow: flow = {name: "flow"+id, id: id.toString(), data}
|
||||||
setId((old) => old+1);
|
setId((old) => old+1);
|
||||||
setFlows(prevState => {
|
setFlows(prevState => {
|
||||||
const newFlows = [...prevState, newFlow];
|
const newFlows = [...prevState, newFlow];
|
||||||
|
|
|
||||||
231
space_flow/src/data_assets/example.ts
Normal file
231
space_flow/src/data_assets/example.ts
Normal file
|
|
@ -0,0 +1,231 @@
|
||||||
|
export const example = {
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"width": 384,
|
||||||
|
"height": 413,
|
||||||
|
"id": "dndnode_1",
|
||||||
|
"type": "genericNode",
|
||||||
|
"position": {
|
||||||
|
"x": 124.66903342355295,
|
||||||
|
"y": -20.27227649302739
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"type": "OpenAI",
|
||||||
|
"node": {
|
||||||
|
"template": {
|
||||||
|
"_type": "openai",
|
||||||
|
"cache": {
|
||||||
|
"type": "bool",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"verbose": {
|
||||||
|
"type": "bool",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": true,
|
||||||
|
"multline": false,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"client": {
|
||||||
|
"type": "Any",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"model_name": {
|
||||||
|
"type": "str",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": "text-davinci-003"
|
||||||
|
},
|
||||||
|
"temperature": {
|
||||||
|
"type": "float",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": 0.7
|
||||||
|
},
|
||||||
|
"max_tokens": {
|
||||||
|
"type": "int",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": 256
|
||||||
|
},
|
||||||
|
"top_p": {
|
||||||
|
"type": "float",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"frequency_penalty": {
|
||||||
|
"type": "float",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"presence_penalty": {
|
||||||
|
"type": "float",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"n": {
|
||||||
|
"type": "int",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"best_of": {
|
||||||
|
"type": "int",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"model_kwargs": {
|
||||||
|
"type": "dict[str, Any]",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"openai_api_key": {
|
||||||
|
"type": "str",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": true,
|
||||||
|
"multline": false,
|
||||||
|
"value": "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"
|
||||||
|
},
|
||||||
|
"batch_size": {
|
||||||
|
"type": "int",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": 20
|
||||||
|
},
|
||||||
|
"request_timeout": {
|
||||||
|
"type": "Union[float, Tuple[float, float], NoneType]",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"logit_bias": {
|
||||||
|
"type": "dict[str, float]",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"max_retries": {
|
||||||
|
"type": "int",
|
||||||
|
"required": false,
|
||||||
|
"placeholder": "",
|
||||||
|
"list": false,
|
||||||
|
"show": false,
|
||||||
|
"multline": false,
|
||||||
|
"value": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Generic OpenAI class that uses model name.",
|
||||||
|
"base_classes": [
|
||||||
|
"BaseOpenAI",
|
||||||
|
"BaseLLM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"id": "dndnode_1",
|
||||||
|
"value": null,
|
||||||
|
"reactFlowInstance": {
|
||||||
|
"viewportInitialized": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"selected": false,
|
||||||
|
"positionAbsolute": {
|
||||||
|
"x": 124.66903342355295,
|
||||||
|
"y": -20.27227649302739
|
||||||
|
},
|
||||||
|
"dragging": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 152,
|
||||||
|
"height": 62,
|
||||||
|
"id": "dndnode_2",
|
||||||
|
"type": "chatOutputNode",
|
||||||
|
"position": {
|
||||||
|
"x": 688.2448440290276,
|
||||||
|
"y": 315.1849334347801
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"type": "chatOutput",
|
||||||
|
"id": "dndnode_2",
|
||||||
|
"value": null,
|
||||||
|
"reactFlowInstance": {
|
||||||
|
"viewportInitialized": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"selected": false,
|
||||||
|
"positionAbsolute": {
|
||||||
|
"x": 688.2448440290276,
|
||||||
|
"y": 315.1849334347801
|
||||||
|
},
|
||||||
|
"dragging": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"edges": [
|
||||||
|
{
|
||||||
|
"source": "dndnode_1",
|
||||||
|
"sourceHandle": "OpenAI|dndnode_1|BaseOpenAI,|BaseLLM",
|
||||||
|
"target": "dndnode_2",
|
||||||
|
"targetHandle": "str|output|dndnode_2",
|
||||||
|
"className": "animate-pulse",
|
||||||
|
"id": "reactflow__edge-dndnode_1OpenAI|dndnode_1|BaseOpenAI,|BaseLLM-dndnode_2str|output|dndnode_2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"viewport": {
|
||||||
|
"x": 283.7086041469587,
|
||||||
|
"y": 207.97093260601437,
|
||||||
|
"zoom": 0.5937798330367052
|
||||||
|
},
|
||||||
|
"message": "Tell me a joke."
|
||||||
|
}
|
||||||
|
|
@ -3,13 +3,14 @@ import { ReactFlowProvider } from "reactflow";
|
||||||
import FlowPage from "..";
|
import FlowPage from "..";
|
||||||
import { TabsContext } from "../../../contexts/tabsContext";
|
import { TabsContext } from "../../../contexts/tabsContext";
|
||||||
import TabComponent from "./tabComponent";
|
import TabComponent from "./tabComponent";
|
||||||
|
import { example } from "../../../data_assets/example";
|
||||||
var _ = require("lodash");
|
var _ = require("lodash");
|
||||||
|
|
||||||
export function TabsManager() {
|
export function TabsManager() {
|
||||||
const { flows, addFlow, tabIndex, setTabIndex } = useContext(TabsContext);
|
const { flows, addFlow, tabIndex, setTabIndex } = useContext(TabsContext);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (flows.length === 0) {
|
if (flows.length === 0) {
|
||||||
addFlow();
|
addFlow(example);
|
||||||
}
|
}
|
||||||
}, [addFlow, flows.length]);
|
}, [addFlow, flows.length]);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -335,18 +335,18 @@ export function getConnectedNodes(edge: Edge, nodes: Array<Node>): Array<Node> {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isValidConnection(
|
export function isValidConnection(
|
||||||
data,
|
{ source, target, sourceHandle, targetHandle },
|
||||||
{ source, target, sourceHandle, targetHandle }
|
reactFlowInstance
|
||||||
) {
|
) {
|
||||||
if (
|
if (
|
||||||
targetHandle.split('|')[0] === sourceHandle.split("|")[0] ||
|
targetHandle.split('|')[0] === sourceHandle.split("|")[0] ||
|
||||||
targetHandle.split('|').slice(2).some((t) => t === sourceHandle.split("|")[0]) ||
|
targetHandle.split('|').slice(2).some((t) => t === sourceHandle.split("|")[0]) ||
|
||||||
sourceHandle.split("|")[0] === "str"
|
sourceHandle.split("|")[0] === "str"
|
||||||
) {
|
) {
|
||||||
let sourceNode = data.reactFlowInstance.getNode(source).data.node;
|
let sourceNode = reactFlowInstance.getNode(source).data.node;
|
||||||
if (!sourceNode) {
|
if (!sourceNode) {
|
||||||
if (
|
if (
|
||||||
!data.reactFlowInstance
|
!reactFlowInstance
|
||||||
.getEdges()
|
.getEdges()
|
||||||
.find((e) => e.sourceHandle === sourceHandle)
|
.find((e) => e.sourceHandle === sourceHandle)
|
||||||
) {
|
) {
|
||||||
|
|
@ -354,7 +354,7 @@ export function isValidConnection(
|
||||||
}
|
}
|
||||||
} else if (
|
} else if (
|
||||||
(!sourceNode.template[sourceHandle.split("|")[1]].list &&
|
(!sourceNode.template[sourceHandle.split("|")[1]].list &&
|
||||||
!data.reactFlowInstance
|
!reactFlowInstance
|
||||||
.getEdges()
|
.getEdges()
|
||||||
.find((e) => e.sourceHandle === sourceHandle)) ||
|
.find((e) => e.sourceHandle === sourceHandle)) ||
|
||||||
sourceNode.template[sourceHandle.split("|")[1]].list
|
sourceNode.template[sourceHandle.split("|")[1]].list
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue