| |
| |
| |
| |
| |
|
|
| 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 |
| } |
|
|