Files
LocalAGI/webui/react-ui/src/utils/api.js
2025-04-03 14:46:04 +01:00

240 lines
6.8 KiB
JavaScript

/**
* API utility for communicating with the Go backend
*/
import { API_CONFIG } from './config';
// Helper function for handling API responses
const handleResponse = async (response) => {
if (!response.ok) {
const errorData = await response.json().catch(() => ({}));
throw new Error(errorData.error || `API error: ${response.status}`);
}
// Check if response is JSON
const contentType = response.headers.get('content-type');
if (contentType && contentType.includes('application/json')) {
return response.json();
}
return response.text();
};
// Helper function to build a full URL
const buildUrl = (endpoint) => {
return `${API_CONFIG.baseUrl}${endpoint.startsWith('/') ? endpoint.substring(1) : endpoint}`;
};
// Agent-related API calls
export const agentApi = {
// Get list of all agents
getAgents: async () => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.agents), {
headers: API_CONFIG.headers
});
return handleResponse(response);
},
// Get a specific agent's configuration
getAgentConfig: async (name) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.agentConfig(name)), {
headers: API_CONFIG.headers
});
return handleResponse(response);
},
// Get agent configuration metadata
getAgentConfigMetadata: async () => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.agentConfigMetadata), {
headers: API_CONFIG.headers
});
const metadata = await handleResponse(response);
// Process metadata to group by section
if (metadata) {
const groupedMetadata = {};
// Handle Fields - Group by section
if (metadata.Fields) {
metadata.Fields.forEach(field => {
const section = field.tags?.section || 'Other';
const sectionKey = `${section}Section`; // Add "Section" postfix
if (!groupedMetadata[sectionKey]) {
groupedMetadata[sectionKey] = [];
}
groupedMetadata[sectionKey].push(field);
});
}
// Pass through connectors and actions field groups directly
// Make sure to assign the correct metadata to each section
if (metadata.Connectors) {
groupedMetadata.connectors = metadata.Connectors;
}
if (metadata.Actions) {
groupedMetadata.actions = metadata.Actions;
}
groupedMetadata.dynamicPrompts = metadata.DynamicPrompts;
return groupedMetadata;
}
return metadata;
},
// Create a new agent
createAgent: async (config) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.createAgent), {
method: 'POST',
headers: API_CONFIG.headers,
body: JSON.stringify(config),
});
return handleResponse(response);
},
// Update an existing agent's configuration
updateAgentConfig: async (name, config) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.agentConfig(name)), {
method: 'PUT',
headers: API_CONFIG.headers,
body: JSON.stringify(config),
});
return handleResponse(response);
},
// Delete an agent
deleteAgent: async (name) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.deleteAgent(name)), {
method: 'DELETE',
headers: API_CONFIG.headers,
});
return handleResponse(response);
},
// Pause an agent
pauseAgent: async (name) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.pauseAgent(name)), {
method: 'PUT',
headers: API_CONFIG.headers,
body: JSON.stringify({}),
});
return handleResponse(response);
},
// Start an agent
startAgent: async (name) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.startAgent(name)), {
method: 'PUT',
headers: API_CONFIG.headers,
body: JSON.stringify({}),
});
return handleResponse(response);
},
// Export agent configuration
exportAgentConfig: async (name) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.exportAgent(name)), {
headers: API_CONFIG.headers
});
return handleResponse(response);
},
// Import agent configuration
importAgent: async (formData) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.importAgent), {
method: 'POST',
body: formData,
});
return handleResponse(response);
},
// Generate group profiles
generateGroupProfiles: async (data) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.generateGroupProfiles), {
method: 'POST',
headers: API_CONFIG.headers,
body: JSON.stringify(data),
});
return handleResponse(response);
},
// Create a group of agents
createGroup: async (data) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.createGroup), {
method: 'POST',
headers: API_CONFIG.headers,
body: JSON.stringify(data),
});
return handleResponse(response);
},
};
// Chat-related API calls
export const chatApi = {
// Send a message to an agent using the JSON-based API
sendMessage: async (name, message) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.chat(name)), {
method: 'POST',
headers: API_CONFIG.headers,
body: JSON.stringify({ message }),
});
return handleResponse(response);
},
// Send a notification to an agent
sendNotification: async (name, message) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.notify(name)), {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({ message }),
});
return handleResponse(response);
},
// Get responses from an agent
getResponses: async (data) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.responses), {
method: 'POST',
headers: API_CONFIG.headers,
body: JSON.stringify(data),
});
return handleResponse(response);
},
};
// Action-related API calls
export const actionApi = {
// List available actions
listActions: async () => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.listActions), {
headers: API_CONFIG.headers
});
return handleResponse(response);
},
// Execute an action for an agent
executeAction: async (name, actionData) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.executeAction(name)), {
method: 'POST',
headers: API_CONFIG.headers,
body: JSON.stringify(actionData),
});
return handleResponse(response);
},
};
// Status-related API calls
export const statusApi = {
// Get agent status history
getStatusHistory: async (name) => {
const response = await fetch(buildUrl(API_CONFIG.endpoints.status(name)), {
headers: API_CONFIG.headers
});
return handleResponse(response);
},
};