moahmedwafy commited on
Commit
7c6de6f
·
1 Parent(s): 7d83587

feat: create workout fitness model

Browse files
models-server/models/fitness_model.py CHANGED
@@ -252,6 +252,7 @@ class FitnessModel:
252
 
253
  @classmethod
254
  def load(cls):
 
255
  with open(FITNESS_MODEL_PATH, "rb") as f:
256
  fitness_model = pickle.load(f)
257
 
 
252
 
253
  @classmethod
254
  def load(cls):
255
+
256
  with open(FITNESS_MODEL_PATH, "rb") as f:
257
  fitness_model = pickle.load(f)
258
 
src/configs/config.ts CHANGED
@@ -14,6 +14,7 @@ export interface Config {
14
  expiresIn: string;
15
  };
16
  saltRounds: number;
 
17
  }
18
 
19
  export const config: Config = {
@@ -28,4 +29,5 @@ export const config: Config = {
28
  expiresIn: Env.get("JWT_EXPIRES_IN").toString(),
29
  },
30
  saltRounds: Env.get("SALT_ROUNDS", 5).toNumber(),
 
31
  };
 
14
  expiresIn: string;
15
  };
16
  saltRounds: number;
17
+ modelsServerUrl: string;
18
  }
19
 
20
  export const config: Config = {
 
29
  expiresIn: Env.get("JWT_EXPIRES_IN").toString(),
30
  },
31
  saltRounds: Env.get("SALT_ROUNDS", 5).toNumber(),
32
+ modelsServerUrl: `${Env.get("MODELS_HOST", 'http://127.0.0.1').toString()}:${Env.get("MODELS_PORT", '3030').toString()}`,
33
  };
src/lib/models/fitness-model.ts CHANGED
@@ -1,6 +1,59 @@
1
- import path from "path"
 
 
 
2
 
3
- path.join(__dirname, ..."../../resources/models/fitness_model.pkl".split("/"));
4
- const modelPath = `${__dirname}/../../resources/models/fitness_model.pkl`
5
 
6
- export class FitnessModel {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { FitnessGoal } from "@common/enums/fitness-goal.enum";
2
+ import { FitnessLevel } from "@common/enums/fitness-level.enum";
3
+ import { Gender } from "@common/enums/gender.enum";
4
+ import { config } from "@configs/config";
5
 
6
+ const endpoint = '/fitness';
 
7
 
8
+ export interface IFitnessPredictionItem {
9
+ bodyPart: string;
10
+ equipment: string;
11
+ name: string;
12
+ repetitions: number;
13
+ sets: number;
14
+ target: string;
15
+ type: string;
16
+ weights_or_duration: number;
17
+ }
18
+
19
+ // Fitness Workout Params
20
+ export interface IFWParams {
21
+ home_or_gym: 0 | 1; // 0 for home, 1 for gym
22
+ level: FitnessLevel;
23
+ goal: FitnessGoal;
24
+ gender: Gender;
25
+ age: number;
26
+ feedback: boolean;
27
+ old_weight: number;
28
+ equipments: string[];
29
+ }
30
+
31
+ export class FitnessModel {
32
+ public static async predictWorkout(
33
+ params: IFWParams
34
+ ): Promise<IFitnessPredictionItem[][]> {
35
+ params.level = params.level.split(' ').map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join(' ') as FitnessLevel;
36
+ params.goal = params.goal.split(' ').map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join(' ') as FitnessGoal;
37
+ params.gender = params.gender.toUpperCase() as Gender;
38
+
39
+ const response = await fetch(
40
+ `${config.modelsServerUrl}${endpoint}`,
41
+ {
42
+ method: "POST",
43
+ headers: {
44
+ "Content-Type": "application/json",
45
+ },
46
+ body: JSON.stringify(params),
47
+ }
48
+ );
49
+
50
+ if (!response.ok) {
51
+ console.error(await response.text());
52
+ throw new Error("Failed to fetch data from the server");
53
+ }
54
+
55
+ return response.json().then((data) => {
56
+ return data.result;
57
+ });
58
+ }
59
+ }