Prechádzať zdrojové kódy

修改 dockerfile, 创建 python 环境

罗俊辉 1 rok pred
rodič
commit
f5450ab466
1 zmenil súbory, kde vykonal 75 pridanie a 8 odobranie
  1. 75 8
      applications/functions.py

+ 75 - 8
applications/functions.py

@@ -16,6 +16,9 @@ class ParamProcess(object):
         self.model_v1 = models.model_v1
         self.model_v2 = models.model_v2
         self.label_encoder = models.label_encoder
+        self.features_v1 = ["channel", "type", "title"]
+        self.features_v2 = ["channel", "out_user_id", "mode", "out_play_cnt", "out_like_cnt", "out_share_cnt", "title",
+                            "lop", "duration"]
 
     async def title_to_tags(self, features):
         """
@@ -38,7 +41,6 @@ class ParamProcess(object):
                 features['tag2'] = None
                 features['tag3'] = None
         df = pd.DataFrame([features])
-        # print("data_frame", df.columns)
         df = df.drop('title', axis=1)
         return df
 
@@ -47,7 +49,7 @@ class ParamProcess(object):
         预测
         :param version: 模型版本
         :param features: 视频被 label_encoder 之后的features
-        :return: score: 返回的分数
+        :return: data
         """
         match version:
             case "v1":
@@ -67,7 +69,11 @@ class ParamProcess(object):
                         "benchmark": 0.06,
                         "is_good_video": 0
                     }
-                return obj
+                return {
+                    "code": 0,
+                    "message": "success",
+                    "data": obj
+                }
             case "v2":
                 result = self.model_v2.predict(features)
                 result = list(result)
@@ -85,13 +91,17 @@ class ParamProcess(object):
                         "benchmark": 0.3,
                         "is_good_video": 0
                     }
-                return obj
+                return {
+                    "code": 0,
+                    "message": "success",
+                    "data": obj
+                }
 
     async def process_label(self, params):
         """
         处理类别 features 和 float features
         :param params: 接收到的参数
-        :return:
+        :return: 转化好的类别特征的 dataframe
         """
         version = params['version']
         features = params['features']
@@ -124,6 +134,63 @@ class ParamProcess(object):
         :param params:
         :return:
         """
-        version, features = await self.process_label(params)
-        # print(version, features)
-        return await self.predict_score(version, features)
+        # check params
+        v = params.get("version")
+        if v == "v1":
+            features = params.get("features")
+            if len(features) != 3:
+                return {
+                    "code": 1,
+                    "message": "参数错误,v1,features长度应该是 3,传参长度是{}".format(len(features)),
+                    "data": None
+                }
+            for feature in self.features_v1:
+                if feature in features:
+                    continue
+                else:
+                    return {
+                        "code": 1,
+                        "message": "参数错误, 缺少参数{}".format(feature),
+                        "data": None
+                    }
+        if v == "v2":
+            features = params.get("features")
+            if len(features) != 9:
+                return {
+                    "code": 1,
+                    "message": "参数错误,v2,features长度应该是 9,传参长度是{}".format(len(features)),
+                    "data": None
+                }
+            for feature in self.features_v2:
+                if feature in features:
+                    continue
+                else:
+                    return {
+                        "code": 1,
+                        "message": "参数错误, 缺少参数{}".format(feature),
+                        "data": None
+                    }
+        else:
+            return {
+                "code": 1,
+                "message": "参数错误,version 应该是 v1 or v2, 传参是{}".format(v),
+                "data": None
+            }
+        try:
+            version, features = await self.process_label(params)
+        except Exception as e:
+            return {
+                "code": 2,
+                "message": "系统错误,定位在 process_label, 报错内容是{}:".format(e),
+                "data": None
+            }
+        try:
+            res = await self.predict_score(version, features)
+            return res
+        except Exception as e:
+            return {
+                "code": 2,
+                "message": "系统异常, 定位在 predict_score, 报错是{}:".format(e),
+                "data": None
+            }
+