import apiClient from './apiClient.js'; class DatasetsModelsView { constructor(section) { this.section = section; this.datasetsBody = section.querySelector('[data-datasets-body]'); this.modelsBody = section.querySelector('[data-models-body]'); this.previewButton = section.querySelector('[data-preview-dataset]'); this.previewModal = section.querySelector('[data-dataset-modal]'); this.previewContent = section.querySelector('[data-dataset-modal-content]'); this.closePreview = section.querySelector('[data-close-dataset-modal]'); this.modelTestForm = section.querySelector('[data-model-test-form]'); this.modelTestOutput = section.querySelector('[data-model-test-output]'); this.datasets = []; this.models = []; } async init() { await Promise.all([this.loadDatasets(), this.loadModels()]); this.bindEvents(); } bindEvents() { if (this.closePreview) { this.closePreview.addEventListener('click', () => this.toggleModal(false)); } if (this.previewModal) { this.previewModal.addEventListener('click', (event) => { if (event.target === this.previewModal) this.toggleModal(false); }); } if (this.modelTestForm && this.modelTestOutput) { this.modelTestForm.addEventListener('submit', async (event) => { event.preventDefault(); const formData = new FormData(this.modelTestForm); this.modelTestOutput.innerHTML = '
Sending prompt to model...
'; const result = await apiClient.testModel({ model: formData.get('model'), text: formData.get('input'), }); if (!result.ok) { this.modelTestOutput.innerHTML = ``; return; } this.modelTestOutput.innerHTML = `${JSON.stringify(result.data, null, 2)}`;
});
}
}
async loadDatasets() {
if (!this.datasetsBody) return;
const result = await apiClient.getDatasetsList();
if (!result.ok) {
this.datasetsBody.innerHTML = `Loading ${name} sample...
`; const result = await apiClient.getDatasetSample(name); if (!result.ok) { this.previewContent.innerHTML = ``; return; } const rows = result.data || []; if (!rows.length) { this.previewContent.innerHTML = 'No sample rows available.
'; return; } const headers = Object.keys(rows[0]); this.previewContent.innerHTML = `| ${h} | `).join('')}
|---|
| ${row[h]} | `).join('')}