Spaces:
Sleeping
Sleeping
Download frontend/src/lib/learnerContext.ts from BrainForge/AdvisoryBuilderWorkshop: direct link, hf CLI and curl.
- Browser
- Download file 2.13 kB
-
https://huggingface.co/spaces/BrainForge/AdvisoryBuilderWorkshop/resolve/main/frontend/src/lib/learnerContext.ts
- Command line
-
hf download hf://spaces/BrainForge/AdvisoryBuilderWorkshop/frontend/src/lib/learnerContext.ts
-
curl -L -o learnerContext.ts https://huggingface.co/spaces/BrainForge/AdvisoryBuilderWorkshop/resolve/main/frontend/src/lib/learnerContext.ts
2.13 kB
| import type { User } from '../context/AuthContext' | |
| const PERSONA_DRAFT_LS = 'persona_draft_v1' | |
| const ADVISOR_DRAFT_LS = 'advisor_draft_v1' | |
| function parseDraft(key: string): Record<string, unknown> { | |
| try { | |
| const s = localStorage.getItem(key) | |
| if (!s) return {} | |
| const j = JSON.parse(s) as unknown | |
| return j && typeof j === 'object' && !Array.isArray(j) ? (j as Record<string, unknown>) : {} | |
| } catch { | |
| return {} | |
| } | |
| } | |
| function draftLine(label: string, d: Record<string, unknown>): string | null { | |
| const keys = Object.keys(d).filter((k) => { | |
| const v = d[k] | |
| if (v == null) return false | |
| if (typeof v === 'string') return v.trim() !== '' | |
| if (typeof v === 'object') return Object.keys(v as object).length > 0 | |
| return true | |
| }) | |
| if (!keys.length) return null | |
| return `${label}: ${JSON.stringify(d)}` | |
| } | |
| /** | |
| * Text appended to interactive Q&A system prompts so the model can greet by name | |
| * and use wizard draft fields the learner already entered (localStorage + account). | |
| */ | |
| export function buildLearnerContextForChat(mode: 'persona' | 'advisor', user: User | null): string { | |
| const lines: string[] = [] | |
| if (user) { | |
| const first = user.firstName?.trim() | |
| const last = user.lastName?.trim() | |
| const full = [first, last].filter(Boolean).join(' ').trim() | |
| if (full) lines.push(`Preferred name: ${full}`) | |
| if (user.email) lines.push(`Email (do not read aloud unless relevant): ${user.email}`) | |
| } | |
| const personaDraft = parseDraft(PERSONA_DRAFT_LS) | |
| const advisorDraft = parseDraft(ADVISOR_DRAFT_LS) | |
| if (mode === 'persona') { | |
| const p = draftLine('Persona wizard draft (fields already filled)', personaDraft) | |
| if (p) lines.push(p) | |
| const a = draftLine('Advisor wizard draft (related context)', advisorDraft) | |
| if (a) lines.push(a) | |
| } else { | |
| const a = draftLine('Advisor wizard draft (fields already filled)', advisorDraft) | |
| if (a) lines.push(a) | |
| const p = draftLine('Persona wizard draft (related context)', personaDraft) | |
| if (p) lines.push(p) | |
| } | |
| return lines.join('\n').trim() | |
| } | |