| | |
| | |
| | |
| | |
| | |
| |
|
| | export function parseCSVLine(line) { |
| | const res = [] |
| | let cur = '' |
| | let inQuotes = false |
| | for (let i = 0; i < line.length; i++) { |
| | const ch = line[i] |
| | if (inQuotes) { |
| | if (ch === '"') { |
| | if (i + 1 < line.length && line[i + 1] === '"') { cur += '"'; i++ } else { inQuotes = false } |
| | } else { cur += ch } |
| | } else { |
| | if (ch === ',') { res.push(cur); cur = '' } |
| | else if (ch === '"') { inQuotes = true } |
| | else { cur += ch } |
| | } |
| | } |
| | res.push(cur) |
| | return res |
| | } |
| |
|
| | export function parseCsvContent(txt) { |
| | const lines = txt.split(/\r?\n/) |
| | let headerIdx = null |
| | for (let i = 0; i < lines.length; i++) if (lines[i].trim().length > 0) { headerIdx = i; break } |
| | if (headerIdx === null) return { headers: [], rows: [] } |
| | const headers = parseCSVLine(lines[headerIdx]) |
| | const rows = [] |
| | for (let i = headerIdx + 1; i < lines.length; i++) { |
| | const l = lines[i] |
| | if (!l || l.trim() === '') continue |
| | const vals = parseCSVLine(l) |
| | const obj = {} |
| | for (let j = 0; j < headers.length; j++) obj[headers[j]] = vals[j] ?? '' |
| | rows.push(obj) |
| | } |
| | return { headers, rows } |
| | } |
| |
|
| | export function processModelNames(rows) { |
| | for (const row of rows) { |
| | if (row.model_name) { |
| | row.model_name = modifyString(row.model_name) |
| | } |
| | if (row.model_series) { |
| | row.model_series = modifyString(row.model_series) |
| | } |
| | } |
| | } |
| |
|
| | function modifyString(str) { |
| | str = str.replace(/glm/gi, 'GLM') |
| | str = str.replace(/gemma/gi, 'Gemma') |
| | str = str.replace(/Internlm/gi, 'InternLM') |
| | str = str.replace(/b/gi, 'B') |
| | str = str.replace(/-hf/gi, '-Base') |
| | return str |
| | } |
| |
|