mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-02-09 22:35:54 -05:00
Compare commits
3 Commits
fix/vector
...
bently/che
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ce5a89b1c0 | ||
|
|
dd8a6f9793 | ||
|
|
8357a4fbd0 |
@@ -38,6 +38,19 @@ interface ExecData {
|
|||||||
output_data: any;
|
output_data: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const FlashMessage: React.FC<{ message: string; onClose: () => void }> = ({ message, onClose }) => {
|
||||||
|
useEffect(() => {
|
||||||
|
const timer = setTimeout(onClose, 3000); // Flash message disappears after 3 seconds
|
||||||
|
return () => clearTimeout(timer);
|
||||||
|
}, [onClose]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flash-message">
|
||||||
|
{message}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const Flow: React.FC = () => {
|
const Flow: React.FC = () => {
|
||||||
const [nodes, setNodes] = useState<Node[]>(initialNodes);
|
const [nodes, setNodes] = useState<Node[]>(initialNodes);
|
||||||
const [edges, setEdges] = useState<Edge[]>(initialEdges);
|
const [edges, setEdges] = useState<Edge[]>(initialEdges);
|
||||||
@@ -54,6 +67,7 @@ const Flow: React.FC = () => {
|
|||||||
const [availableNodes, setAvailableNodes] = useState<AvailableNode[]>([]);
|
const [availableNodes, setAvailableNodes] = useState<AvailableNode[]>([]);
|
||||||
const [loadingStatus, setLoadingStatus] = useState<'loading' | 'failed' | 'loaded'>('loading');
|
const [loadingStatus, setLoadingStatus] = useState<'loading' | 'failed' | 'loaded'>('loading');
|
||||||
const [agentId, setAgentId] = useState<string | null>(null);
|
const [agentId, setAgentId] = useState<string | null>(null);
|
||||||
|
const [flashMessage, setFlashMessage] = useState<string | null>(null);
|
||||||
|
|
||||||
const apiUrl = 'http://localhost:8000'
|
const apiUrl = 'http://localhost:8000'
|
||||||
|
|
||||||
@@ -252,7 +266,35 @@ const Flow: React.FC = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const validateNodeInputs = (nodes: Node[], edges: Edge[]): boolean => {
|
||||||
|
for (const node of nodes) {
|
||||||
|
const nodeSchema = availableNodes.find(n => n.id === node.data.block_id);
|
||||||
|
if (nodeSchema && nodeSchema.inputSchema) {
|
||||||
|
const inputProperties = nodeSchema.inputSchema.properties;
|
||||||
|
for (const prop of Object.keys(inputProperties)) {
|
||||||
|
const inputEdges = edges.filter(edge => edge.target === node.id && edge.targetHandle === prop);
|
||||||
|
if (inputEdges.length === 0 && !node.data.hardcodedValues[prop]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
const runAgent = async () => {
|
const runAgent = async () => {
|
||||||
|
if (nodes.length === 0) {
|
||||||
|
setFlashMessage("Please add nodes before pressing run");
|
||||||
|
setTimeout(() => setFlashMessage(null), 3000); // Ensure the flash message disappears after 3 seconds
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!validateNodeInputs(nodes, edges)) {
|
||||||
|
setFlashMessage("Please make sure you have added values to all inputs");
|
||||||
|
setTimeout(() => setFlashMessage(null), 3000); // Ensure the flash message disappears after 3 seconds
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const formattedNodes = nodes.map(node => {
|
const formattedNodes = nodes.map(node => {
|
||||||
const inputDefault = prepareNodeInputData(node, nodes, edges);
|
const inputDefault = prepareNodeInputData(node, nodes, edges);
|
||||||
@@ -421,6 +463,7 @@ const Flow: React.FC = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flow-container">
|
<div className="flow-container">
|
||||||
|
{flashMessage && <FlashMessage message={flashMessage} onClose={() => setFlashMessage(null)} />}
|
||||||
<div className={`flow-controls ${isSidebarOpen ? 'open' : ''}`}>
|
<div className={`flow-controls ${isSidebarOpen ? 'open' : ''}`}>
|
||||||
<button className="nodes-button" onClick={toggleSidebar}>
|
<button className="nodes-button" onClick={toggleSidebar}>
|
||||||
Nodes
|
Nodes
|
||||||
|
|||||||
@@ -148,3 +148,16 @@ input::placeholder, textarea::placeholder {
|
|||||||
.flow-controls.open {
|
.flow-controls.open {
|
||||||
transform: translateX(350px);
|
transform: translateX(350px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flash-message {
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
background-color: #ff4444;
|
||||||
|
color: white;
|
||||||
|
padding: 10px 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
font-size: 16px;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user