OnyxMunk's picture
feat: Display test results in CodePreview and fix form syntax
4a05b37
Raw
History Blame Contribute Delete
7.54 kB
import React, { useState } from 'react';
const AgentForm = ({ onGenerate, isLoading, generatedCode, onTestResult }) => {
const [formData, setFormData] = useState({
name: '',
prompt: '',
task: '',
provider: 'anthropic',
model: 'claude-3-5-sonnet-20241022',
stream: false
});
const [isExecuting, setIsExecuting] = useState(false);
const handleChange = (e) => {
const { name, value, type, checked } = e.target;
setFormData(prev => {
const newData = {
...prev,
[name]: type === 'checkbox' ? checked : value
};
// Reset model when provider changes
if (name === 'provider' && value !== prev.provider) {
if (value === 'anthropic') {
newData.model = 'claude-3-5-sonnet-20241022';
} else if (value === 'huggingface') {
newData.model = 'meta-llama/Meta-Llama-3-8B-Instruct';
}
}
return newData;
});
};
const handleSubmit = (e) => {
e.preventDefault();
onGenerate(formData);
if (onTestResult) onTestResult(null);
};
const handleTestAgent = async () => {
if (!generatedCode) return;
setIsExecuting(true);
if (onTestResult) onTestResult(null);
try {
const response = await fetch('http://localhost:8000/api/execute', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
code: generatedCode,
task: formData.task
}),
});
const data = await response.json();
if (data.status === 'success') {
if (onTestResult) onTestResult(data.output);
} else {
if (onTestResult) onTestResult(`Error: ${data.detail}`);
}
} catch (error) {
if (onTestResult) onTestResult(`Error: ${error.message}`);
} finally {
setIsExecuting(false);
}
};
return (
<div className="card">
<h2 style={{ marginBottom: '1.5rem' }}>Configure Agent</h2>
<form onSubmit={handleSubmit}>
<div className="form-group">
<label htmlFor="name">Agent Name</label>
<input
type="text"
id="name"
name="name"
value={formData.name}
onChange={handleChange}
placeholder="e.g., CodeReviewer"
required
/>
</div>
<div className="form-group">
<label htmlFor="provider">Provider</label>
<select
id="provider"
name="provider"
value={formData.provider}
onChange={handleChange}
>
<option value="anthropic">Anthropic</option>
<option value="huggingface">Hugging Face</option>
</select>
</div>
<div className="form-group" style={{
background: 'rgba(59, 130, 246, 0.05)',
padding: '1rem',
borderRadius: '0.5rem',
border: '1px solid rgba(59, 130, 246, 0.2)',
marginTop: '0.5rem',
marginBottom: '1.5rem'
}}>
<label htmlFor="model" style={{ color: 'var(--accent-primary)', fontWeight: '600', display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
<span>🧠</span> Model
</label>
<select
id="model"
name="model"
value={formData.model}
onChange={handleChange}
style={{ background: 'rgba(15, 23, 42, 0.8)' }}
>
{formData.provider === 'anthropic' ? (
<>
<option value="claude-3-5-sonnet-20241022">Claude 3.5 Sonnet (Latest)</option>
<option value="claude-3-5-haiku-20241022">Claude 3.5 Haiku</option>
<option value="claude-3-opus-20240229">Claude 3 Opus</option>
<option value="claude-3-haiku-20240307">Claude 3 Haiku (Legacy)</option>
</>
) : (
<>
<option value="meta-llama/Meta-Llama-3-8B-Instruct">Meta Llama 3 8B Instruct</option>
<option value="mistralai/Mistral-7B-Instruct-v0.3">Mistral 7B Instruct v0.3</option>
</>
)}
</select>
</div>
<div className="form-group">
<label htmlFor="prompt">System Prompt</label>
<textarea
id="prompt"
name="prompt"
value={formData.prompt}
onChange={handleChange}
placeholder="You are a helpful AI assistant..."
rows="4"
required
/>
</div>
<div className="form-group">
<label htmlFor="task">Example Task</label>
<textarea
id="task"
name="task"
value={formData.task}
onChange={handleChange}
placeholder="Review this code for bugs..."
rows="3"
required
/>
</div>
<div className="form-group checkbox-group">
<label>
<input
type="checkbox"
name="stream"
checked={formData.stream}
onChange={handleChange}
/>
Stream Response
</label>
</div>
<div style={{ display: 'flex', gap: '1rem' }}>
<button type="submit" className="btn-primary" disabled={isLoading}>
{isLoading ? 'Generating...' : 'Generate Agent'}
</button>
{generatedCode && (
<button
type="button"
className="btn-secondary"
onClick={handleTestAgent}
disabled={isExecuting}
style={{ backgroundColor: '#6c757d', color: 'white', border: 'none', padding: '0.75rem 1.5rem', borderRadius: '4px', cursor: 'pointer' }}
>
{isExecuting ? 'Running...' : 'Test Agent'}
</button>
)}
</div>
</form>
</div >
);
};
export default AgentForm;