ciyidogan commited on
Commit
2605800
·
verified ·
1 Parent(s): 2ad7ea9

Update config_provider.py

Browse files
Files changed (1) hide show
  1. config_provider.py +73 -105
config_provider.py CHANGED
@@ -97,8 +97,7 @@ class LLMConfig(BaseModel):
97
  fine_tune_zip: str = ""
98
 
99
  class VersionConfig(BaseModel):
100
- id: int = Field(..., alias="version_number")
101
- no: Optional[int] = None
102
  caption: Optional[str] = ""
103
  description: Optional[str] = ""
104
  published: bool = False
@@ -116,7 +115,6 @@ class VersionConfig(BaseModel):
116
 
117
  class Config:
118
  extra = "allow"
119
- populate_by_name = True
120
 
121
  class ProjectConfig(BaseModel):
122
  id: Optional[int] = None
@@ -125,10 +123,8 @@ class ProjectConfig(BaseModel):
125
  icon: Optional[str] = "folder"
126
  description: Optional[str] = ""
127
  enabled: bool = True
128
- last_version_number: Optional[int] = None
129
- version_id_counter: int = 1
130
  versions: List[VersionConfig]
131
- # Language settings - changed from default_language/supported_languages
132
  default_locale: str = "tr"
133
  supported_locales: List[str] = ["tr"]
134
  timezone: Optional[str] = "Europe/Istanbul"
@@ -225,17 +221,21 @@ class ParameterConfig(BaseModel):
225
 
226
  class IntentConfig(BaseModel):
227
  name: str
228
- caption: Optional[str] = ""
229
  dependencies: List[str] = []
230
- requiresApproval: bool = False
231
  examples: List[LocalizedExample] = []
232
- detection_prompt: Optional[str] = None
233
  parameters: List[ParameterConfig] = []
234
  action: str
235
- requiresApproval: bool = False
236
  fallback_timeout_prompt: Optional[str] = None
237
  fallback_error_prompt: Optional[str] = None
238
-
 
 
 
 
 
239
  class Config:
240
  extra = "allow"
241
 
@@ -667,11 +667,48 @@ class ConfigProvider:
667
  @classmethod
668
  def add_activity_log(cls, username: str, action: str, entity_type: str,
669
  entity_id: Optional[int] = None, entity_name: Optional[str] = None,
670
- details: Optional[str] = None):
671
- """Add activity log entry"""
672
  if cls._instance is None:
673
  cls.get()
674
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
675
  entry = ActivityLogEntry(
676
  timestamp=datetime.now().isoformat() + "Z",
677
  username=username,
@@ -679,7 +716,7 @@ class ConfigProvider:
679
  entity_type=entity_type,
680
  entity_id=entity_id,
681
  entity_name=entity_name,
682
- details=details
683
  )
684
 
685
  cls._instance.activity_log.append(entry)
@@ -687,6 +724,9 @@ class ConfigProvider:
687
  # Keep only last 1000 entries
688
  if len(cls._instance.activity_log) > 1000:
689
  cls._instance.activity_log = cls._instance.activity_log[-1000:]
 
 
 
690
 
691
  @classmethod
692
  def update_environment(cls, update_data: dict, username: str) -> None:
@@ -747,6 +787,9 @@ class ConfigProvider:
747
  if any(p.name == project_data['name'] for p in cls._instance.projects if not p.deleted):
748
  raise ValueError(f"Project name '{project_data['name']}' already exists")
749
 
 
 
 
750
  # Create project
751
  new_project = ProjectConfig(
752
  id=cls._instance.project_id_counter,
@@ -770,9 +813,7 @@ class ConfigProvider:
770
 
771
  # Create initial version
772
  initial_version = VersionConfig(
773
- id=1,
774
- version_number=1,
775
- no=1,
776
  caption="Version 1",
777
  description="Initial version",
778
  published=False,
@@ -782,23 +823,21 @@ class ConfigProvider:
782
  last_update_date=datetime.now().isoformat() + "Z",
783
  last_update_user=username,
784
  general_prompt="You are a helpful assistant.",
 
785
  llm=LLMConfig(
786
- repo_id="",
787
  generation_config={
788
- "max_new_tokens": 512,
789
- "temperature": 0.7,
790
- "top_p": 0.95
791
  }
792
  ),
793
  intents=[]
794
  )
795
 
796
  new_project.versions.append(initial_version)
797
- new_project.last_version_number = 1
798
 
799
  # Add to config
800
  cls._instance.projects.append(new_project)
801
- cls._instance.project_id_counter += 1
802
 
803
  # Add activity log
804
  cls.add_activity_log(username, "CREATE_PROJECT", "project", new_project.id, new_project.name)
@@ -1037,93 +1076,22 @@ class ConfigProvider:
1037
  # Import versions
1038
  for idx, version_data in enumerate(project_data.get("versions", [])):
1039
  new_version = VersionConfig(
1040
- id=idx + 1,
1041
- version_number=idx + 1,
1042
  no=idx + 1,
1043
- caption=version_data.get("caption", f"Version {idx + 1}"),
1044
  description=version_data.get("description", ""),
1045
- published=False,
1046
- deleted=False,
1047
- created_date=datetime.now().isoformat() + "Z",
1048
- created_by=username,
1049
- last_update_date=datetime.now().isoformat() + "Z",
1050
- last_update_user=username,
1051
  general_prompt=version_data.get("general_prompt", ""),
1052
- llm=LLMConfig(**version_data.get("llm", {})) if version_data.get("llm") else LLMConfig(
1053
- repo_id="",
1054
- generation_config={
1055
- "max_new_tokens": 512,
1056
- "temperature": 0.7,
1057
- "top_p": 0.95
1058
- }
1059
- ),
1060
- intents=[]
1061
  )
1062
-
1063
- # Import intents
1064
- for intent_data in version_data.get("intents", []):
1065
- intent = IntentConfig(
1066
- name=intent_data.get("name", ""),
1067
- caption=intent_data.get("caption", ""),
1068
- detection_prompt=intent_data.get("detection_prompt", ""),
1069
- action=intent_data.get("action", ""),
1070
- fallback_timeout_prompt=intent_data.get("fallback_timeout_prompt"),
1071
- fallback_error_prompt=intent_data.get("fallback_error_prompt"),
1072
- examples=[],
1073
- parameters=[]
1074
- )
1075
-
1076
- # Convert examples
1077
- if "examples" in intent_data:
1078
- if isinstance(intent_data["examples"], list):
1079
- for example in intent_data["examples"]:
1080
- if isinstance(example, str):
1081
- # Old format - use project default locale
1082
- intent.examples.append(LocalizedExample(
1083
- locale_code=new_project.default_locale,
1084
- example=example
1085
- ))
1086
- elif isinstance(example, dict):
1087
- # New format
1088
- intent.examples.append(LocalizedExample(**example))
1089
-
1090
- # Convert parameters
1091
- for param_data in intent_data.get("parameters", []):
1092
- param = ParameterConfig(
1093
- name=param_data.get("name", ""),
1094
- type=param_data.get("type", "str"),
1095
- required=param_data.get("required", True),
1096
- variable_name=param_data.get("variable_name", param_data.get("name", "")),
1097
- extraction_prompt=param_data.get("extraction_prompt"),
1098
- validation_regex=param_data.get("validation_regex"),
1099
- invalid_prompt=param_data.get("invalid_prompt"),
1100
- type_error_prompt=param_data.get("type_error_prompt"),
1101
- caption=[]
1102
- )
1103
-
1104
- # Convert caption
1105
- if "caption" in param_data:
1106
- if isinstance(param_data["caption"], str):
1107
- # Old format
1108
- param.caption.append(LocalizedCaption(
1109
- locale_code=new_project.default_locale,
1110
- caption=param_data["caption"]
1111
- ))
1112
- elif isinstance(param_data["caption"], list):
1113
- # New format
1114
- for cap in param_data["caption"]:
1115
- param.caption.append(LocalizedCaption(**cap))
1116
-
1117
- intent.parameters.append(param)
1118
-
1119
- new_version.intents.append(intent)
1120
-
1121
  new_project.versions.append(new_version)
1122
- new_project.last_version_number = new_version.id
1123
-
1124
- # Update project counter if needed
1125
- new_project.version_id_counter = len(new_project.versions) + 1
1126
-
1127
  # Save
1128
  cls._instance.save()
1129
 
 
97
  fine_tune_zip: str = ""
98
 
99
  class VersionConfig(BaseModel):
100
+ no: int # Tek version numarası alanı
 
101
  caption: Optional[str] = ""
102
  description: Optional[str] = ""
103
  published: bool = False
 
115
 
116
  class Config:
117
  extra = "allow"
 
118
 
119
  class ProjectConfig(BaseModel):
120
  id: Optional[int] = None
 
123
  icon: Optional[str] = "folder"
124
  description: Optional[str] = ""
125
  enabled: bool = True
126
+ version_id_counter: int = 1 # last_version_number yerine sadece bu kullanılacak
 
127
  versions: List[VersionConfig]
 
128
  default_locale: str = "tr"
129
  supported_locales: List[str] = ["tr"]
130
  timezone: Optional[str] = "Europe/Istanbul"
 
221
 
222
  class IntentConfig(BaseModel):
223
  name: str
224
+ caption: Union[str, List[LocalizedCaption]]
225
  dependencies: List[str] = []
226
+ requiresApproval: bool = False # YENİ ALAN
227
  examples: List[LocalizedExample] = []
228
+ detection_prompt: str
229
  parameters: List[ParameterConfig] = []
230
  action: str
 
231
  fallback_timeout_prompt: Optional[str] = None
232
  fallback_error_prompt: Optional[str] = None
233
+ deleted: bool = False
234
+ created_date: Optional[str] = None
235
+ created_by: Optional[str] = None
236
+ last_update_date: Optional[str] = None
237
+ last_update_user: Optional[str] = None
238
+
239
  class Config:
240
  extra = "allow"
241
 
 
667
  @classmethod
668
  def add_activity_log(cls, username: str, action: str, entity_type: str,
669
  entity_id: Optional[int] = None, entity_name: Optional[str] = None,
670
+ details: Optional[Dict[str, Any]] = None) -> None:
671
+ """Add activity log entry with detailed context"""
672
  if cls._instance is None:
673
  cls.get()
674
 
675
+ # Build detailed context
676
+ detail_str = None
677
+ if details:
678
+ detail_str = json.dumps(details, ensure_ascii=False)
679
+ else:
680
+ # Auto-generate details based on action
681
+ if action == "CREATE_PROJECT":
682
+ detail_str = f"Created new project '{entity_name}'"
683
+ elif action == "UPDATE_PROJECT":
684
+ detail_str = f"Updated project configuration"
685
+ elif action == "DELETE_PROJECT":
686
+ detail_str = f"Soft deleted project '{entity_name}'"
687
+ elif action == "CREATE_VERSION":
688
+ detail_str = f"Created new version for {entity_name}"
689
+ elif action == "PUBLISH_VERSION":
690
+ detail_str = f"Published version {entity_id}"
691
+ elif action == "CREATE_INTENT":
692
+ detail_str = f"Added intent '{entity_name}'"
693
+ elif action == "UPDATE_INTENT":
694
+ detail_str = f"Modified intent configuration"
695
+ elif action == "DELETE_INTENT":
696
+ detail_str = f"Removed intent '{entity_name}'"
697
+ elif action == "CREATE_API":
698
+ detail_str = f"Created API endpoint '{entity_name}'"
699
+ elif action == "UPDATE_API":
700
+ detail_str = f"Modified API configuration"
701
+ elif action == "DELETE_API":
702
+ detail_str = f"Soft deleted API '{entity_name}'"
703
+ elif action == "LOGIN":
704
+ detail_str = f"User logged in"
705
+ elif action == "LOGOUT":
706
+ detail_str = f"User logged out"
707
+ elif action == "IMPORT_PROJECT":
708
+ detail_str = f"Imported project from file"
709
+ elif action == "EXPORT_PROJECT":
710
+ detail_str = f"Exported project '{entity_name}'"
711
+
712
  entry = ActivityLogEntry(
713
  timestamp=datetime.now().isoformat() + "Z",
714
  username=username,
 
716
  entity_type=entity_type,
717
  entity_id=entity_id,
718
  entity_name=entity_name,
719
+ details=detail_str
720
  )
721
 
722
  cls._instance.activity_log.append(entry)
 
724
  # Keep only last 1000 entries
725
  if len(cls._instance.activity_log) > 1000:
726
  cls._instance.activity_log = cls._instance.activity_log[-1000:]
727
+
728
+ # Save immediately for audit trail
729
+ cls._instance.save()
730
 
731
  @classmethod
732
  def update_environment(cls, update_data: dict, username: str) -> None:
 
787
  if any(p.name == project_data['name'] for p in cls._instance.projects if not p.deleted):
788
  raise ValueError(f"Project name '{project_data['name']}' already exists")
789
 
790
+ # Increment global project counter
791
+ cls._instance.project_id_counter += 1
792
+
793
  # Create project
794
  new_project = ProjectConfig(
795
  id=cls._instance.project_id_counter,
 
813
 
814
  # Create initial version
815
  initial_version = VersionConfig(
816
+ no=1, # Sadece no kullan
 
 
817
  caption="Version 1",
818
  description="Initial version",
819
  published=False,
 
823
  last_update_date=datetime.now().isoformat() + "Z",
824
  last_update_user=username,
825
  general_prompt="You are a helpful assistant.",
826
+ welcome_prompt=None,
827
  llm=LLMConfig(
828
+ repo_id="ytu-ce-cosmos/Turkish-Llama-8b-Instruct-v0.1",
829
  generation_config={
830
+ "max_new_tokens": 256,
831
+ "temperature": 0.7
 
832
  }
833
  ),
834
  intents=[]
835
  )
836
 
837
  new_project.versions.append(initial_version)
 
838
 
839
  # Add to config
840
  cls._instance.projects.append(new_project)
 
841
 
842
  # Add activity log
843
  cls.add_activity_log(username, "CREATE_PROJECT", "project", new_project.id, new_project.name)
 
1076
  # Import versions
1077
  for idx, version_data in enumerate(project_data.get("versions", [])):
1078
  new_version = VersionConfig(
 
 
1079
  no=idx + 1,
1080
+ caption=version_data.get("caption", f"v{idx + 1}"),
1081
  description=version_data.get("description", ""),
1082
+ published=version_data.get("published", False),
 
 
 
 
 
1083
  general_prompt=version_data.get("general_prompt", ""),
1084
+ welcome_prompt=version_data.get("welcome_prompt"),
1085
+ llm=LLMConfig(**version_data.get("llm", {})),
1086
+ intents=[IntentConfig(**i) for i in version_data.get("intents", [])],
1087
+ created_date=datetime.now().isoformat() + "Z",
1088
+ created_by=username
 
 
 
 
1089
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1090
  new_project.versions.append(new_version)
1091
+
1092
+ # Update version counter
1093
+ new_project.version_id_counter = max(new_project.version_id_counter, new_version.no)
1094
+
 
1095
  # Save
1096
  cls._instance.save()
1097