gouravshah commited on
Commit
62af38c
·
1 Parent(s): 6dd31bd

working tech stack advisor app

Browse files
Files changed (4) hide show
  1. .dockerignore +38 -0
  2. app.py +31 -0
  3. requirements.txt +4 -0
  4. train.py +36 -0
.dockerignore ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Ignore virtual environments
2
+ .venv/
3
+ venv/
4
+
5
+ # Python cache
6
+ __pycache__/
7
+ *.pyc
8
+ *.pyo
9
+ *.pyd
10
+ *.pyc
11
+ *.pyo
12
+ *.pyd
13
+ *.pdb
14
+ *.egg-info/
15
+
16
+ # Jupyter Notebook checkpoints (if applicable)
17
+ .ipynb_checkpoints/
18
+
19
+ # MacOS metadata
20
+ .DS_Store
21
+
22
+ # VSCode or other IDE settings
23
+ .vscode/
24
+ .idea/
25
+
26
+ # Git files
27
+ .git
28
+ .gitignore
29
+
30
+ # Test folders or data artifacts (if any)
31
+ *.log
32
+ *.csv
33
+ *.tsv
34
+ *.xlsx
35
+
36
+ # Docker-specific
37
+ Dockerfile.*
38
+ .dockerignore
app.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pickle
3
+ import numpy as np
4
+
5
+ # Load trained model and encoders
6
+ model = pickle.load(open("model.pkl", "rb"))
7
+ encoders = pickle.load(open("encoders.pkl", "rb"))
8
+
9
+ def recommend_stack(project_type, team_size, perf_need, experience):
10
+ pt = encoders["project_type"].transform([project_type])[0]
11
+ pn = encoders["perf_need"].transform([perf_need])[0]
12
+ ex = encoders["experience"].transform([experience])[0]
13
+ input_data = np.array([[pt, team_size, pn, ex]])
14
+ pred_encoded = model.predict(input_data)[0]
15
+ return f"🔧 Recommended Tech Stack: {encoders['stack'].inverse_transform([pred_encoded])[0]}"
16
+
17
+ demo = gr.Interface(
18
+ fn=recommend_stack,
19
+ inputs=[
20
+ gr.Radio(["Web App", "API", "ML App", "Real-time App"], label="Project Type"),
21
+ gr.Slider(1, 10, step=1, label="Team Size"),
22
+ gr.Radio(["Low", "Medium", "High"], label="Performance Need"),
23
+ gr.Radio(["Beginner", "Intermediate", "Expert"], label="Experience Level")
24
+ ],
25
+ outputs="text",
26
+ title="Tech Stack Advisor",
27
+ description="Get a recommended tech stack based on your project and team!"
28
+ )
29
+
30
+ demo.launch(server_name="0.0.0.0", server_port=7860)
31
+
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ scikit-learn==1.3.2
2
+ pandas==2.1.4
3
+ numpy==1.26.4
4
+ gradio==4.44.1
train.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ from sklearn.preprocessing import LabelEncoder
3
+ from sklearn.tree import DecisionTreeClassifier
4
+ import pickle
5
+
6
+ # Sample synthetic data
7
+ data = {
8
+ "project_type": ["Web App", "API", "ML App", "Real-time App", "Web App"],
9
+ "team_size": [3, 2, 5, 6, 1],
10
+ "perf_need": ["Medium", "Low", "Medium", "High", "Low"],
11
+ "experience": ["Intermediate", "Beginner", "Expert", "Expert", "Beginner"],
12
+ "stack": ["Django + PostgreSQL", "Flask + SQLite", "FastAPI + TensorFlow", "Node.js + Redis", "Django + SQLite"]
13
+ }
14
+
15
+ df = pd.DataFrame(data)
16
+
17
+ # Encode categorical variables
18
+ encoders = {}
19
+ for col in ["project_type", "perf_need", "experience", "stack"]:
20
+ le = LabelEncoder()
21
+ df[col] = le.fit_transform(df[col])
22
+ encoders[col] = le
23
+
24
+ # Train model
25
+ X = df[["project_type", "team_size", "perf_need", "experience"]]
26
+ y = df["stack"]
27
+ model = DecisionTreeClassifier()
28
+ model.fit(X, y)
29
+
30
+ # Save model
31
+ with open("model.pkl", "wb") as f:
32
+ pickle.dump(model, f)
33
+
34
+ # Save encoders for use in app
35
+ with open("encoders.pkl", "wb") as f:
36
+ pickle.dump(encoders, f)