فهرست منبع

Update abtest: fix experiment result init

StrayWarrior 3 روز پیش
والد
کامیت
b43ac07365
2فایلهای تغییر یافته به همراه28 افزوده شده و 12 حذف شده
  1. 6 3
      pqai_agent/abtest/client.py
  2. 22 9
      pqai_agent/abtest/models.py

+ 6 - 3
pqai_agent/abtest/client.py

@@ -49,7 +49,7 @@ class ExperimentClient:
         projects: List[ListProjectsResponseBodyProjects] = projects_response.body.projects
 
         for project_data in projects:
-            project = Project(project_name=project_data.name, project_id=project_data.project_id)
+            project = Project(name=project_data.name, project_id=project_data.project_id)
             logger.debug(f"[Project] {project_data}")
 
             # 获取项目的域
@@ -115,6 +115,7 @@ class ExperimentClient:
                         for version_data in versions_response.body.experiment_versions:
                             logger.debug(f'[ExperimentVersion] {version_data}')
                             version = ExperimentVersion(exp_version_id=version_data.experiment_version_id,
+                                                        exp_id=experiment.id,
                                                         flow=int(version_data.flow),
                                                         buckets=version_data.buckets,
                                                         debug_users=version_data.debug_users,
@@ -135,13 +136,15 @@ class ExperimentClient:
                     continue
                 layer.add_domain(domain)
 
-            project_map[project.project_name] = project
+            project_map[project.name] = project
 
         self.project_map = project_map
 
     def match_experiment(self, project_name, experiment_context) -> ExperimentResult:
         if project_name not in self.project_map:
-            return ExperimentResult(project_name=project_name, experiment_context=experiment_context)
+            experiment_result = ExperimentResult(experiment_context=experiment_context)
+            experiment_result.project_name = project_name
+            return experiment_result
 
         project = self.project_map[project_name]
         experiment_result = ExperimentResult(project=project, experiment_context=experiment_context)

+ 22 - 9
pqai_agent/abtest/models.py

@@ -160,10 +160,11 @@ class Experiment:
 
 
 class ExperimentVersion:
-    def __init__(self, exp_version_id, flow, buckets: str, exp_version_name=None, debug_users: str = '',
-                 config=None, debug_crowd_ids=None):
+    def __init__(self, exp_version_id, flow, buckets: str, exp_id: int, exp_version_name=None,
+                 debug_users: str = '', config=None, debug_crowd_ids=None):
         self.id = int(exp_version_id)
         self.exp_version_name = exp_version_name
+        self.exp_id = int(exp_id)
         self.config = config
         self.debug_crowd_ids = debug_crowd_ids
         self.debug_users = debug_users
@@ -197,8 +198,8 @@ class ExperimentVersion:
 
 
 class Project:
-    def __init__(self, project_name=None, project_id=None):
-        self.project_name = project_name
+    def __init__(self, name=None, project_id=None):
+        self.name = name
         self.id = int(project_id)
         self.domains = []
         self.layers = []
@@ -219,12 +220,16 @@ class Project:
 
 
 class ExperimentResult:
-    def __init__(self, project=None, experiment_context=None, project_name=None):
+    def __init__(self, project=None, experiment_context=None):
         self.project = project
+        if project:
+            self.project_name = project.name
+        else:
+            self.project_name = None
         self.experiment_context = experiment_context
-        self.project_name = project_name
         self.params = {}
-        self.experiment_versions = []
+        self.experiment_versions: List[ExperimentVersion] = []
+        self.exp_id = ""
 
     def add_params(self, params: Dict[str, str]):
         self.params.update(params)
@@ -233,8 +238,16 @@ class ExperimentResult:
         self.experiment_versions.append(version)
 
     def init(self):
-        # Initialize result-specific logic
-        pass
+        buf = []
+        if self.project:
+            buf.append(f"ER{self.project.id}")
+
+        if self.experiment_versions:
+            for experiment_version in self.experiment_versions:
+                buf.append(f"_E{experiment_version.exp_id}")
+                buf.append(f"#EV{experiment_version.id}")
+
+            self.exp_id = "".join(buf)
 
     def __str__(self):
         return f"ExperimentResult(project={self.project_name}, params={self.params}, experiment_context={self.experiment_context}, experiment_versions={self.experiment_versions})"