Spaces:
Sleeping
Sleeping
| import json | |
| from typing import List | |
| from pydantic import BaseModel, Field | |
| from . import llm_service | |
| class AnalysisResult(BaseModel): | |
| """Structured result from job description and user analysis.""" | |
| key_skills: List[str] = Field(description="Key skills required for the job") | |
| match_points: List[str] = Field(description="Points where user matches job requirements") | |
| gap_points: List[str] = Field(description="Areas where user lacks required skills") | |
| suggestions: List[str] = Field(description="Actionable suggestions for improvement") | |
| pitch: str = Field(description="A compelling pitch for the user") | |
| def _parse_analysis_response(response: str) -> AnalysisResult: | |
| """ | |
| Parses a JSON string from the LLM response into AnalysisResult. | |
| """ | |
| try: | |
| # Remove code block markers if present | |
| if "```json" in response: | |
| start = response.find("```json") + 7 | |
| end = response.find("```", start) | |
| if end != -1: | |
| json_block = response[start:end].strip() | |
| else: | |
| json_block = response[start:].strip() | |
| elif "```" in response and "{" in response: | |
| # Handle cases where code blocks exist but without json marker | |
| start = response.find("```") + 3 | |
| end = response.find("```", start) | |
| if end != -1: | |
| json_block = response[start:end].strip() | |
| else: | |
| json_block = response[start:].strip() | |
| else: | |
| # Find JSON object boundaries | |
| start = response.find('{') | |
| end = response.rfind('}') + 1 | |
| if start == -1 or end == 0: | |
| raise ValueError("No JSON object found in response") | |
| json_block = response[start:end] | |
| # Clean up the JSON block | |
| json_block = json_block.strip() | |
| data = json.loads(json_block) | |
| return AnalysisResult(**data) | |
| except (json.JSONDecodeError, IndexError, ValueError) as e: | |
| print(f"Failed to parse JSON response: {e}\nResponse was: {response[:500]}...") | |
| raise ValueError("LLM response was not in the expected JSON format.") | |
| def analyse(jd: str, user_info: str) -> AnalysisResult: | |
| """ | |
| Analyzes the job description and user information. | |
| """ | |
| if not jd or not user_info: | |
| raise ValueError("Job Description and User Info cannot be empty.") | |
| response_text = llm_service.analyse_llm(jd, user_info) | |
| return _parse_analysis_response(response_text) | |
| def refine(summary: AnalysisResult, feedback: str) -> AnalysisResult: | |
| """ | |
| Refines the analysis based on user feedback. | |
| """ | |
| if not summary or not feedback: | |
| raise ValueError("Summary and feedback cannot be empty.") | |
| summary_json = summary.model_dump_json(indent=2) | |
| response_text = llm_service.refine_llm(summary_json, feedback) | |
| return _parse_analysis_response(response_text) | |
| if __name__ == "__main__": | |
| # Test data | |
| test_jd = """ | |
| Seit 25 Jahren unterstützen wir bei inovex mit rund 500 IT-Expert:innen Unternehmen bei der Digitalisierung und Agilisierung ihres Kerngeschäfts an 8 Standorten deutschlandweit. | |
| Im Team Application Development entwickeln wir die verschiedensten Anwendungen, von skalierbaren Backends über performante Web Frontends bis hin zu modernen Apps, die teilweise von mehreren Millionen Menschen täglich benutzt werden. Unsere Konzepte implementieren wir bevorzugt mit Open Source Software im Rahmen agiler Projekte. Bei uns verläuft kein Projekt wie das andere – je nach Kunde, Team und Technologie-Stack ist jede Lösung einzigartig. | |
| *Wir bei inovex mögen Vielfalt und Individualität. Deshalb freuen wir uns, wenn du unser Team noch bunter machst. | |
| Was du bei uns bewegen kannst | |
| Gemeinsam mit deinem agilen Projektteam setzt du Projekte für Kunden unterschiedlicher Branchen um. Ihr seid cross-funktional aufgestellt und liefert alles aus einer Hand – von der Architektur über die Entwicklung bis zum DevOps-Betrieb. You build it, you run it. | |
| Dein Job beginnt nicht erst mit der Entwicklung von Software: Du unterstützt bei der Aufnahme und Analyse der Kundenanforderungen und stimmst dich eng mit deinem Team ab. | |
| Du fühlst dich gleichermaßen im Frontend wie im Backend zu Hause und bringst deine Erfahrung in beiden Bereichen ein – egal, ob es um Architekturen oder die Gestaltung von Single Page Applications geht. | |
| Du unterstützt deine Kolleg:innen mithilfe automatisierter Testing-Verfahren (Unit Testing, CI/CD, Ende-zu-Ende-Tests u. v. m.) und sorgst somit für eine kontinuierliche Qualitätskontrolle und -optimierung. | |
| In unseren Projekten verwenden wir häufig folgende Technologien: | |
| Kotlin, Java, Go, Python oder C# | |
| Angular, React, TypeScript, Vue.js., Next.js | |
| Docker, Gitlab | |
| AWS, GCP, Azure, Kubernetes | |
| Wer gut zu uns passen würde | |
| Ob du ein Studium oder eine Ausbildung im IT-Bereich abgeschlossen hast, ist für uns nebensächlich – für uns zählen deine fachlichen Skills und deine Persönlichkeit: | |
| Du hast mehr als ein Jahr Berufserfahrung und fundierte Kenntnisse in mehreren der oben genannten Technologien. Idealerweise hast du bereits erste Berührungspunkte mit Cloud-Umgebungen gesammelt. | |
| Du hast den Anspruch, dich in neue Technologien einzuarbeiten und sie in Bezug auf den Projekteinsatz zu prüfen. | |
| Du beteiligst dich gerne an Code Reviews und setzt dich konstruktiv mit deiner Arbeit auseinander. | |
| Es ist dir wichtig, ein umfassendes Verständnis der Standpunkte deiner Team-Mitglieder und Kunden zu entwickeln. | |
| Sehr gute Deutschkenntnisse sind Voraussetzung (mind. Level C1), gute Englischkenntnisse runden dein Profil ab. | |
| Ab Oktober freuen wir uns auf Verstärkung in unserem Team! | |
| Was wir dir bieten | |
| inovex Culture: Kommunikation auf Augenhöhe, flache Hierarchien, Arbeiten in selbstorganisierten und agilen Teams, Vertrauen und Offenheit, starker Zusammenhalt | |
| Level Up: Weiterbildungsbudget, eigene inovex Academy, Onboarding- und Mentoring-Programm, enger Austausch mit der Community | |
| Balance: Flexibles und mobiles Arbeiten, keine Kernarbeitszeiten, Workation, 30 Tage Urlaub | |
| Familienfreundlichkeit: Flexibles Arbeitszeitmodell, Zuschuss zur Kinderbetreuung, Überstunden nur im Ausnahmefall | |
| Individualität: Betriebliche Altersvorsorge, E-Gym Wellpass, inovex Sportgruppen/ Sport-Community | |
| Mobilität: JobRad, Firmenwagen-Leasing | |
| """ | |
| test_user_info = """ | |
| Start Hanbin Chen | |
| Master Informatik-Absolvent | LLM-Forscher | Full-Stack-Softwareentwickler | |
| Ausbildung | |
| RWTH Aachen University, Master | Informatik 2020.10 - 2025.07 | |
| Masterarbeit: MedKGC (Medical Knowledge Graph Construction) | |
| • Entwicklung einer End-to-End-Pipeline für die medizinische Wissensextraktion aus Ra- | |
| diologieberichten mittels LLMs und deren Darstellung in Knowledge Graphs. | |
| • Implementierung von Named Entity Recognition mit GPT-4o und Llama3 unter Verwen- | |
| dung eines neuartigen RAG-Ansatzes und Integration von UMLS-Ontologien. | |
| • Durchführung von Few-Shot Prompting zur Bewertung der LLM-Leistung. | |
| Fachhochschule Hannover(HsH), Bachelor | Angewandte Informatik 2017.09 - 2020.09 | |
| Berufsprofil | |
| Erfahrener Softwareentwickler | |
| spezialisiert auf skalierbare Agenten- | |
| basierte LLM-Anwendungen. | |
| Vertraut mit modernen KI-Tools | |
| und nutzt diese zur Steigerung | |
| von Produktivität und Qualität. | |
| Projekterfahrung | |
| Technische Fähigkeiten | |
| Programmiersprachen | |
| Python JavaScript Java | |
| Webtechnologien & Frameworks | |
| React Next.js TailwindCSS | |
| Backend & Frameworks | |
| RESTful API FASTapi Spring Boot | |
| Datenbank PostgreSQL MySQL | |
| ORM SQLAlchemy Hibernate | |
| Entwicklung & Project | |
| Agile Scrum TDD DDD | |
| KI & LLMs | |
| RAG Agent n8n Dify | |
| GitHub Copilot Cursor Claude Code | |
| DevOps & Cloud | |
| Docker CI/CD GitHub Actions | |
| AWS Vercel Supabase | |
| Sprachen | |
| • Full-Stack Entwickler | EmAilX - KI-gestützte E-Mail-Management SaaS (2025.07) | |
| – Aufbau einer Web Anwendung mit React, Next.js und TailwindCSS. | |
| – Integration von Azure OpenAI und Agent LLM für intelligente E-Mail-Erstellung. | |
| – Implementierung Unternehmens-Authentifizierung und Deployment auf Vercel. | |
| • Full-Stack-Entwickler | KI-verstärkte Scrum-Management-Plattform (2025.06) | |
| – Aufbau einer Full-Stack-Plattform mit React, Next.js und TailwindCSS. | |
| – Implementierung interaktiver Kanban-Boards und Chatbot-UI. | |
| – Aufbau eines LLM-Agent-Systems zur Anforderungsanalyse und automatischen | |
| Generierung von Projekt-Issues. | |
| • Full-Stack-Entwickler | AWS Hackathon (Top 25/1000+ auf Devpost) (2024.09– | |
| 2024.10) | |
| – Aufbau eines Vue.js-Frontends und Gradio-Chatbots mit Amazon Bedrock und LLaMA | |
| 3.1, ermöglicht RAG-basierte Teambildung und Spielereinblicke für VALORANT. | |
| – Leitung der Datenvorverarbeitung und des SQL-Agent-Designs. | |
| – Deployment der Full-Stack-App auf AWS EC2. | |
| • Android-Anwendungsentwickler | Should I Stay or Should I Go (2019.09 - 2020.09) | |
| – Entwicklung einer standortbasierten Anwendung mit MVVM-Architektur und Kotlin. | |
| – Anwendung der Test-Driven Development (TDD)-Methodik, mit Tests vor der Im- | |
| plementierung zur Gewährleistung der Codequalität. | |
| • Java-Desktop-Entwickler | Vier-Gewinnt-Spiel (2018.09 - 2019.05) | |
| – Implementierung eines Brettspiels in Java mit KI-Gegner (Minimax-Algorithmus). | |
| – Anwendung von TDD mit Unit-Tests für robuste Entwicklung und Codequalität. | |
| Studentische Tätigkeiten | |
| Deutsch (C1) Englisch (Fließend) | |
| Kontaktinformationen | |
| +49 15732636211 | |
| hanbin.9797@gmail.com | |
| HanbinChen97 | |
| Hanbin Chen | |
| Persönliche Website | |
| • Full-Stack-Entwickler | MedAgent (RWTH Aachen University) (2024.03 -2025.07) | |
| – Architektur und Entwicklung des Frontends mit React und Next.js auf Basis einer | |
| modernen Architektur. | |
| – Implementierung eines RESTful-API-Backends mit Fokus auf Skalierbarkeit und | |
| Wartbarkeit. | |
| – Nutzung von CI/CD-Pipelines mit GitHub Actions und Docker. | |
| • Datenanalyst | KlimDim (ISAC GmbH) (2023.03 - 2023.12) | |
| – Entwicklung von Datenverarbeitungs-Pipelines und -visualisierung. | |
| – Nutzung von GitLab-Pipeline und Docker für Entwicklung und automatisierte Tests. | |
| """ | |
| try: | |
| # Test analyse function | |
| print("Testing analyse function...") | |
| analysis_result = analyse(test_jd, test_user_info) | |
| print("Analysis Result:") | |
| print("=" * 50) | |
| print(f"key_skills: {analysis_result.key_skills}") | |
| print(f"match_points: {analysis_result.match_points}") | |
| print(f"gap_points: {analysis_result.gap_points}") | |
| print(f"suggestions: {analysis_result.suggestions}") | |
| print(f"pitch: {analysis_result.pitch}") | |
| print("\n") | |
| # Test refine function | |
| print("Testing refine function...") | |
| test_feedback = "Please emphasize more on my Python skills and cloud experience" | |
| refined_result = refine(analysis_result, test_feedback) | |
| print("Refined Result:") | |
| print("=" * 50) | |
| print(f"key_skills: {refined_result.key_skills}") | |
| print(f"match_points: {refined_result.match_points}") | |
| print(f"gap_points: {refined_result.gap_points}") | |
| print(f"suggestions: {refined_result.suggestions}") | |
| print(f"pitch: {refined_result.pitch}") | |
| except Exception as e: | |
| print(f"Error during analysis: {e}") | |