File size: 5,616 Bytes
d34fea5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import os
import gradio as gr
from dotenv import load_dotenv
from openai import OpenAI

from github_analyzer import analyze_github_profile
from knowledge_base import setup_knowledge_base, get_market_context

# --- INITIALIZATION & CONFIGURATION ---
load_dotenv()

OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")

if not OPENROUTER_API_KEY:
    raise ValueError("Error: OPENROUTER_API_KEY not found in .env file.")

client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key=OPENROUTER_API_KEY,
)

setup_knowledge_base()

def generate_roadmap(github_url, career_goal, preferred_stack):
    try:
        github_data = analyze_github_profile(github_url)
        market_context = get_market_context(career_goal)

        prompt = f"""
        **Situation:**
        You are an expert AI Tech Mentor and Career Analyst. Your primary task is to generate a project roadmap that is precisely tailored to any specific career goal a user provides.

        **CRITICAL INSTRUCTIONS (Follow this logic precisely):**
        1.  **Dynamically Analyze the Career Goal to Define Project Scope:** This is your most important task. Do not rely on a fixed list of jobs. Instead, deconstruct the user's stated career goal into its core technical components and propose a project that logically combines them.
            - **Example 1:** If the goal is 'Cloud Security Engineer', you should identify 'Cloud' and 'Security' as the core components. The project scope must therefore be about 'Cloud Security Automation', like building a tool to audit AWS security policies.
            - **Example 2:** If the goal is 'Game Developer with a focus on Physics Engines', you identify 'Game Development' and 'Physics'. The project scope must be 'Game Physics Simulation', not a full-stack web app.
            - **Example 3:** If the goal is just 'Backend Developer', the project scope should be 'Backend-focused API'.
            - You MUST state the determined scope in the 'Project Scope' field.
        2.  **PRIORITY #1 - Career Goal:** The final project idea MUST be directly relevant to the user's stated '[Stated Career Goal]'.
        3.  **PRIORITY #2 - Preferred Tech Stack:** The 'Tech Stack' section MUST be primarily based on the user's '[Preferred Tech Stack]'. Synthesize it intelligently with their GitHub skills.
        4.  **PRIORITY #3 - GitHub Analysis:** Use the '[GitHub Analysis]' for supplementary insights. For example, if they have used 'Docker', suggest containerizing the application.
        5.  **NEGATIVE CONSTRAINT:** You MUST NOT suggest a project related to 'roadmap generation' or 'career coaching'. Propose a completely new, unrelated idea.
        6.  **FORMATTING:** The entire output MUST be in plain text and follow the specified `Output Format` exactly.

        --- DEVELOPER PROFILE ---
        [GitHub Analysis of Existing Projects]:
        {github_data}

        [Stated Career Goal]:
        {career_goal}

        [Preferred Tech Stack (MUST BE PRIORITIZED)]:
        {preferred_stack if preferred_stack else "Not provided."}

        [Current Market Context for this Goal]:
        {market_context}
        --- END PROFILE ---

        **Task:**
        Synthesize all the above information according to the priority rules and generate a comprehensive project proposal using the following exact format.

        **Output Format:**
        Title: [Innovative Project Name Aligned With The Career Goal]

        Project Scope: [e.g., Cloud Security Automation, Game Physics Simulation, Backend-focused API]

        Existing Methodology:
        - Current Approach: [Description of a relevant existing system]
        - Limitations: [Challenges or inefficiencies in the current method]

        Tech Stack:
        - [Category 1 e.g., Core Logic]: [Technology based on scope and preferences]
        - [Category 2 e.g., Infrastructure]: [Technology based on scope and preferences]
        - [Category 3 e.g., Testing/Deployment]: [Technology based on scope and preferences]

        Innovative Enhancements:
        - Technological Improvement: [Clear explanation of how this project is an upgrade]
        - Unique Value Proposition: [What makes this project stand out]

        Learning Roadmap:
        - Step 1: [Initial setup relevant to the project scope]
        - Step 2: [Core functionality implementation]
        - Step 3: [Advanced feature development]
        - Step 4: [Testing and deployment relevant to the project scope]

        Enhancements Over Existing Methodology:
        - [Specific upgrade #1]
        - [Specific upgrade #2]
        - [Specific upgrade #3 showing unique innovation]
        """

        completion = client.chat.completions.create(
            model="deepseek/deepseek-chat-v3.1:free",
            messages=[
                {
                    "role": "user",
                    "content": prompt
                }
            ]
        )
        return completion.choices[0].message.content

    except Exception as e:
        return f"Error: {str(e)}"

with gr.Blocks() as demo:
    gr.Markdown("# AI Project Roadmap Generator")
    github_url = gr.Textbox(label="GitHub Profile URL")
    career_goal = gr.Textbox(label="Career Goal")
    preferred_stack = gr.Textbox(label="Preferred Tech Stack (optional)")
    output = gr.Textbox(label="Generated Roadmap", lines=20)
    generate_btn = gr.Button("Generate Roadmap")

    generate_btn.click(
        fn=generate_roadmap,
        inputs=[github_url, career_goal, preferred_stack],
        outputs=output
    )

demo.launch(server_name="0.0.0.0",server_port=7860,debug=True)