Spaces:
Running
Running
File size: 2,044 Bytes
b0b150b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
import React, { createContext, useState, useContext, useEffect, useCallback } from 'react';
import client from '../api/client';
import { useAuth } from './AuthContext';
const AgentContext = createContext(null);
export const AgentProvider = ({ children }) => {
const [agents, setAgents] = useState([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const { user } = useAuth();
const fetchAgents = useCallback(async () => {
if (!user) return;
setLoading(true);
try {
const response = await client.get('/api/agents/');
setAgents(response.data);
setError(null);
} catch (err) {
console.error('Error fetching agents:', err);
setError('Failed to load agents');
} finally {
setLoading(false);
}
}, [user]);
useEffect(() => {
if (user) {
fetchAgents();
} else {
setAgents([]);
}
}, [user, fetchAgents]);
const addAgent = async (name, systemPrompt) => {
try {
const response = await client.post('/api/agents/', {
name,
system_prompt: systemPrompt
});
setAgents(prev => [...prev, response.data]);
return response.data;
} catch (err) {
throw err;
}
};
const deleteAgent = async (name) => {
try {
await client.delete(`/api/agents/${name}`);
setAgents(prev => prev.filter(a => a.name !== name));
} catch (err) {
throw err;
}
};
return (
<AgentContext.Provider value={{ agents, loading, error, fetchAgents, addAgent, deleteAgent }}>
{children}
</AgentContext.Provider>
);
};
export const useAgents = () => {
const context = useContext(AgentContext);
if (!context) {
throw new Error('useAgents must be used within an AgentProvider');
}
return context;
};
|