|
|
from typing import Any, Dict, Optional |
|
|
from metrics import log_metric |
|
|
|
|
|
class RenderMicroFunction: |
|
|
def run(self, data: Dict[str, Any]) -> Dict[str, Any]: |
|
|
draft = data.get("draft", "") |
|
|
qa_result = data.get("qa_result", "") |
|
|
critique = data.get("critique", "") |
|
|
enriched_data = data.get("enriched", {}) |
|
|
quality_score = data.get("quality_score") |
|
|
|
|
|
try: |
|
|
|
|
|
rendered = self._create_final_output(draft, qa_result, critique, enriched_data, quality_score) |
|
|
|
|
|
|
|
|
bucket_facts = data.get("bucket_facts", {}) |
|
|
bucket_markdown = "" |
|
|
if bucket_facts: |
|
|
from bucket_map import map_facts |
|
|
from render_buckets import render_buckets |
|
|
|
|
|
buckets = map_facts(bucket_facts) |
|
|
bucket_markdown = render_buckets(bucket_facts, buckets) |
|
|
|
|
|
log_metric("bucket_missing", { |
|
|
"empty_buckets": len([k for k, v in buckets.items() if not v or (len(v) == 1 and "research needed" in v[0].lower())]) |
|
|
}) |
|
|
|
|
|
log_metric("render_success", { |
|
|
"total_length": len(rendered), |
|
|
"has_qa": bool(qa_result), |
|
|
"has_critique": bool(critique), |
|
|
"quality_score": quality_score, |
|
|
"has_buckets": bool(bucket_markdown) |
|
|
}) |
|
|
|
|
|
return {**data, "rendered_markdown": rendered, "bucket_markdown": bucket_markdown} |
|
|
|
|
|
except Exception as e: |
|
|
log_metric("render_error", {"error": str(e)}) |
|
|
fallback = f"# Job Analysis Results\n\n{draft}\n\n---\n\nQA: {qa_result}\n\nCritique: {critique}" |
|
|
return {**data, "rendered_markdown": fallback, "bucket_markdown": ""} |
|
|
|
|
|
def _create_final_output(self, draft: str, qa_result: str, critique: str, enriched_data: Dict, quality_score: Optional[float] = None) -> str: |
|
|
"""Create comprehensive final output""" |
|
|
|
|
|
|
|
|
quality_indicator = "" |
|
|
if quality_score: |
|
|
if quality_score >= 8: |
|
|
quality_indicator = "π’ High Quality" |
|
|
elif quality_score >= 6: |
|
|
quality_indicator = "π‘ Good Quality" |
|
|
else: |
|
|
quality_indicator = "π΄ Needs Improvement" |
|
|
|
|
|
|
|
|
role = enriched_data.get("role", "Unknown Role") |
|
|
company = enriched_data.get("company", "Unknown Company") |
|
|
level = enriched_data.get("level", "") |
|
|
|
|
|
header = f"""# π― {role} at {company} |
|
|
{f"**Level**: {level}" if level else ""} |
|
|
{f"**Quality**: {quality_indicator}" if quality_indicator else ""} |
|
|
|
|
|
--- |
|
|
""" |
|
|
|
|
|
|
|
|
main_content = draft if draft else "Content generation failed." |
|
|
|
|
|
|
|
|
qa_section = "" |
|
|
if qa_result and qa_result != "QA skipped due to draft errors.": |
|
|
qa_section = f""" |
|
|
|
|
|
<details> |
|
|
<summary>π Quality Assurance Results</summary> |
|
|
|
|
|
{qa_result} |
|
|
|
|
|
</details> |
|
|
""" |
|
|
|
|
|
critique_section = "" |
|
|
if critique and critique != "Critique skipped due to draft errors.": |
|
|
critique_section = f""" |
|
|
|
|
|
<details> |
|
|
<summary>π Expert Critique</summary> |
|
|
|
|
|
{critique} |
|
|
|
|
|
</details> |
|
|
""" |
|
|
|
|
|
|
|
|
tech_stack = enriched_data.get("tech_stack", []) |
|
|
work_mode = enriched_data.get("work_mode", "") |
|
|
salary_range = enriched_data.get("salary_range", "") |
|
|
|
|
|
metadata = [] |
|
|
if tech_stack: |
|
|
metadata.append(f"**Tech Stack**: {', '.join(tech_stack[:5])}") |
|
|
if work_mode: |
|
|
metadata.append(f"**Work Mode**: {work_mode}") |
|
|
if salary_range and salary_range != "Not specified": |
|
|
metadata.append(f"**Salary**: {salary_range}") |
|
|
|
|
|
footer = "" |
|
|
if metadata: |
|
|
footer = f""" |
|
|
|
|
|
--- |
|
|
## π Quick Facts |
|
|
{chr(10).join([f"- {item}" for item in metadata])} |
|
|
""" |
|
|
|
|
|
|
|
|
final_output = header + main_content + qa_section + critique_section + footer |
|
|
|
|
|
return final_output |