yasirlabs
make it as application
f63b452
Raw
History Blame Contribute Delete
6.37 kB
"""
Converts raw JSON data from each knowledge-base file type into a
human-readable plain-text block that gets fed to the vector store.
"""
import json
# ── Helpers ────────────────────────────────────────────────────────────────────
def _join(items: list, key: str | None = None) -> str:
if key:
return ", ".join(str(i.get(key, "")) for i in items)
return ", ".join(str(i) for i in items)
def _bullet_list(items: list) -> str:
return "\n".join(f"- {item}" for item in items)
# ── Formatters ─────────────────────────────────────────────────────────────────
def fmt_personal(d: dict) -> str:
langs = ", ".join(f"{l['language']} ({l['level']})" for l in d.get("languages", []))
projects = d.get("projects", [])
projects_text = ""
for p in projects:
link = p.get("demoLink") or p.get("githubLink") or "N/A"
cats = ", ".join(p.get("category", []))
featured = "yes" if p.get("isFeatured") else "no"
projects_text += f"\n- {p.get('title')} | Category: {cats} | Featured: {featured} | Link: {link}"
return f"""PERSONAL INFORMATION
Name: {d.get('name')} | Full name: {d.get('full_name')}
Title: {d.get('title')}
Summary: {d.get('summary')}
Email: {d.get('email')}
Phone: {d.get('phone')}
Location: {d.get('location')}
Website: {d.get('website')}
LinkedIn: {d.get('linkedin')}
GitHub: {d.get('github')}
Instagram: {d.get('instagram')}
YouTube: {d.get('youtube')}
Languages: {langs}
Open to: {d.get('open_to')}
COMPLETE PROJECT LIST (use this for all project listing questions):
{projects_text}"""
def fmt_education(d: dict) -> str:
lines = ["EDUCATION"]
for edu in d.get("education", []):
lines.append(f"""
Degree: {edu.get('degree')}
Institution: {edu.get('institution')} | Location: {edu.get('location')}
Period: {edu.get('period')}
GPA: {edu.get('gpa')}
Achievement: {edu.get('achievement')}
Link: {edu.get('link', 'N/A')}""")
return "\n".join(lines)
def fmt_skills(d: dict) -> str:
s = d.get("skills", {})
return f"""SKILLS
Programming Languages: {_join(s.get('languages', []))}
Frameworks: {_join(s.get('frameworks', []))}
AI & ML: {_join(s.get('ai_ml', []))}
Databases: {_join(s.get('databases', []))}
Tools: {_join(s.get('tools', []))}"""
def fmt_experience(d: dict) -> str:
lines = ["WORK EXPERIENCE"]
for exp in d.get("experience", []):
links = ", ".join(exp.get("links", [])) or "N/A"
lines.append(f"""
Title: {exp.get('title')} | Type: {exp.get('type')}
Company: {exp.get('company', 'Freelance')}
Period: {exp.get('period')}
Technologies: {_join(exp.get('technologies', []))}
Links: {links}
Highlights:
{_bullet_list(exp.get('highlights', []))}""")
lines.append("\nINTERNSHIPS")
for intern in d.get("internships", []):
lines.append(f"""
Title: {intern.get('title')} | Company: {intern.get('company')}
Location: {intern.get('location', '')}
Period: {intern.get('period')}
Technologies: {_join(intern.get('technologies', []))}
Highlights:
{_bullet_list(intern.get('highlights', []))}""")
return "\n".join(lines)
def fmt_volunteering(d: dict) -> str:
lines = ["VOLUNTEERING"]
for v in d.get("volunteering", []):
lines.append(f"""
Title: {v.get('title')}
Organization: {v.get('organization')}
Period: {v.get('period')}
Description: {v.get('description')}
Document: {v.get('document_image', 'N/A')}""")
return "\n".join(lines)
def fmt_certificates(d: dict) -> str:
lines = ["CERTIFICATES"]
for c in d.get("certificates", []):
lines.append(
f"- {c.get('title')} | {c.get('issuer')} | {c.get('year')} | Category: {c.get('category')}"
)
return "\n".join(lines)
def fmt_references(d: dict) -> str:
lines = ["REFERENCES"]
for r in d.get("references", []):
lines.append(f"""
Name: {r.get('name')}
Title: {r.get('title')}
Institution: {r.get('institution')}
Email: {r.get('email')}
Profile: {r.get('profile_url', 'N/A')}""")
return "\n".join(lines)
def _content_blocks(data: dict) -> str:
return "".join(
f"\n### {b.get('heading', '')}\n{b.get('content', '')}\n"
for b in data.get("contentBlocks", [])
if b.get("type") == 0
)
def fmt_project(d: dict) -> str:
results = "\n".join(
f"- {r.get('metric')}: {r.get('value')} β€” {r.get('description')}"
for r in d.get("results", [])
)
return f"""PROJECT: {d.get('title')}
Subtitle: {d.get('subtitle')}
Description: {d.get('description')}
Category: {_join(d.get('category', []))}
Tags: {_join(d.get('tags', []))}
Technologies: {_join(d.get('technologies', []), key='name')}
Date: {d.get('date')}
Duration: {d.get('duration', 'N/A')}
Team Size: {d.get('teamSize')}
Role: {d.get('role')}
Demo Link: {d.get('demoLink', 'N/A')}
GitHub: {d.get('githubLink', 'N/A')}
Featured: {d.get('isFeatured')}
Long Description:
{d.get('longDescription', '')}
{_content_blocks(d)}
Challenges:
{_bullet_list(d.get('challenges', []))}
Solutions:
{_bullet_list(d.get('solutions', []))}
Results:
{results}"""
def fmt_article(d: dict) -> str:
return f"""ARTICLE: {d.get('title')}
Subtitle: {d.get('subtitle', '')}
Description: {d.get('description', '')}
Category: {d.get('category', '')}
Tags: {_join(d.get('tags', []))}
Date: {d.get('date', '')}
Link: {d.get('link', d.get('demoLink', 'N/A'))}
{_content_blocks(d)}"""
# ── Dispatch ───────────────────────────────────────────────────────────────────
_FORMATTERS = {
"personal": fmt_personal,
"education": fmt_education,
"skills": fmt_skills,
"experience": fmt_experience,
"volunteering": fmt_volunteering,
"certificates": fmt_certificates,
"references": fmt_references,
"project": fmt_project,
"article": fmt_article,
}
def json_to_text(data: dict, source_type: str) -> str:
formatter = _FORMATTERS.get(source_type)
if formatter:
return formatter(data)
return json.dumps(data, ensure_ascii=False, indent=2)