ciyidogan commited on
Commit
55b48d2
Β·
verified Β·
1 Parent(s): e36122e

Update controllers/project_controller.py

Browse files
Files changed (1) hide show
  1. controllers/project_controller.py +118 -26
controllers/project_controller.py CHANGED
@@ -7,6 +7,19 @@ router = APIRouter()
7
  service_config = ServiceConfig()
8
  service_config.load()
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  @router.get("/list_projects")
11
  def list_projects():
12
  projects = list(service_config.projects.keys())
@@ -29,19 +42,7 @@ async def add_project(request: Request):
29
  "llm": {},
30
  "intents": []
31
  }
32
-
33
- with open(service_config.config_path, "w", encoding="utf-8") as f:
34
- json.dump({
35
- "config": {
36
- "work_mode": service_config.work_mode,
37
- "cloud_token": service_config.cloud_token,
38
- "system_prompt": service_config.system_prompt,
39
- "llm_inference_service_url": service_config.llm_inference_service_url
40
- },
41
- "projects": service_config.projects,
42
- "apis": service_config.apis
43
- }, f, indent=2)
44
-
45
  log(f"πŸ†• Added project: {project_name}")
46
  return {"message": f"Project {project_name} added."}
47
 
@@ -53,18 +54,109 @@ async def delete_project(request: Request):
53
  return {"error": "Project not found."}
54
 
55
  del service_config.projects[project_name]
56
-
57
- with open(service_config.config_path, "w", encoding="utf-8") as f:
58
- json.dump({
59
- "config": {
60
- "work_mode": service_config.work_mode,
61
- "cloud_token": service_config.cloud_token,
62
- "system_prompt": service_config.system_prompt,
63
- "llm_inference_service_url": service_config.llm_inference_service_url
64
- },
65
- "projects": service_config.projects,
66
- "apis": service_config.apis
67
- }, f, indent=2)
68
-
69
  log(f"πŸ—‘οΈ Deleted project: {project_name}")
70
  return {"message": f"Project {project_name} deleted."}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  service_config = ServiceConfig()
8
  service_config.load()
9
 
10
+ def save_config():
11
+ with open(service_config.config_path, "w", encoding="utf-8") as f:
12
+ json.dump({
13
+ "config": {
14
+ "work_mode": service_config.work_mode,
15
+ "cloud_token": service_config.cloud_token,
16
+ "system_prompt": service_config.system_prompt,
17
+ "llm_inference_service_url": service_config.llm_inference_service_url
18
+ },
19
+ "projects": service_config.projects,
20
+ "apis": service_config.apis
21
+ }, f, indent=2)
22
+
23
  @router.get("/list_projects")
24
  def list_projects():
25
  projects = list(service_config.projects.keys())
 
42
  "llm": {},
43
  "intents": []
44
  }
45
+ save_config()
 
 
 
 
 
 
 
 
 
 
 
 
46
  log(f"πŸ†• Added project: {project_name}")
47
  return {"message": f"Project {project_name} added."}
48
 
 
54
  return {"error": "Project not found."}
55
 
56
  del service_config.projects[project_name]
57
+ save_config()
 
 
 
 
 
 
 
 
 
 
 
 
58
  log(f"πŸ—‘οΈ Deleted project: {project_name}")
59
  return {"message": f"Project {project_name} deleted."}
60
+
61
+ # === INTENT CRUD ===
62
+
63
+ @router.get("/list_intents")
64
+ def list_intents(project_name: str):
65
+ project = service_config.get_project(project_name)
66
+ if not project:
67
+ return {"error": "Project not found."}
68
+ intent_names = [intent["name"] for intent in project["intents"]]
69
+ log(f"πŸ“‹ Listing intents for project: {project_name}")
70
+ return {"intents": intent_names}
71
+
72
+ @router.post("/add_intent")
73
+ async def add_intent(request: Request):
74
+ data = await request.json()
75
+ project_name = data.get("project_name")
76
+ intent_name = data.get("intent_name")
77
+ if not project_name or not intent_name:
78
+ return {"error": "Project name and intent name required."}
79
+
80
+ project = service_config.get_project(project_name)
81
+ if not project:
82
+ return {"error": "Project not found."}
83
+
84
+ if any(intent["name"] == intent_name for intent in project["intents"]):
85
+ return {"error": "Intent already exists."}
86
+
87
+ new_intent = {
88
+ "name": intent_name,
89
+ "examples": [],
90
+ "parameters": [],
91
+ "action": "",
92
+ "fallback_timeout_message": "",
93
+ "fallback_error_message": "",
94
+ "humanization_prompt": ""
95
+ }
96
+ project["intents"].append(new_intent)
97
+ save_config()
98
+ log(f"πŸ†• Added intent: {intent_name} to project: {project_name}")
99
+ return {"message": f"Intent {intent_name} added to project {project_name}."}
100
+
101
+ @router.post("/delete_intent")
102
+ async def delete_intent(request: Request):
103
+ data = await request.json()
104
+ project_name = data.get("project_name")
105
+ intent_name = data.get("intent_name")
106
+ if not project_name or not intent_name:
107
+ return {"error": "Project name and intent name required."}
108
+
109
+ project = service_config.get_project(project_name)
110
+ if not project:
111
+ return {"error": "Project not found."}
112
+
113
+ project["intents"] = [intent for intent in project["intents"] if intent["name"] != intent_name]
114
+ save_config()
115
+ log(f"πŸ—‘οΈ Deleted intent: {intent_name} from project: {project_name}")
116
+ return {"message": f"Intent {intent_name} deleted from project {project_name}."}
117
+
118
+ # === PARAMETER CRUD ===
119
+
120
+ @router.post("/add_parameter")
121
+ async def add_parameter(request: Request):
122
+ data = await request.json()
123
+ project_name = data.get("project_name")
124
+ intent_name = data.get("intent_name")
125
+ parameter = data.get("parameter") # {name, type, regex, validation_message, extraction_prompt}
126
+ if not project_name or not intent_name or not parameter:
127
+ return {"error": "Project, intent, and parameter data required."}
128
+
129
+ project = service_config.get_project(project_name)
130
+ if not project:
131
+ return {"error": "Project not found."}
132
+
133
+ intent = next((i for i in project["intents"] if i["name"] == intent_name), None)
134
+ if not intent:
135
+ return {"error": "Intent not found."}
136
+
137
+ intent["parameters"].append(parameter)
138
+ save_config()
139
+ log(f"βž• Added parameter: {parameter['name']} to intent: {intent_name}")
140
+ return {"message": f"Parameter {parameter['name']} added to intent {intent_name}."}
141
+
142
+ @router.post("/delete_parameter")
143
+ async def delete_parameter(request: Request):
144
+ data = await request.json()
145
+ project_name = data.get("project_name")
146
+ intent_name = data.get("intent_name")
147
+ parameter_name = data.get("parameter_name")
148
+ if not project_name or not intent_name or not parameter_name:
149
+ return {"error": "Project, intent, and parameter name required."}
150
+
151
+ project = service_config.get_project(project_name)
152
+ if not project:
153
+ return {"error": "Project not found."}
154
+
155
+ intent = next((i for i in project["intents"] if i["name"] == intent_name), None)
156
+ if not intent:
157
+ return {"error": "Intent not found."}
158
+
159
+ intent["parameters"] = [p for p in intent["parameters"] if p["name"] != parameter_name]
160
+ save_config()
161
+ log(f"πŸ—‘οΈ Deleted parameter: {parameter_name} from intent: {intent_name}")
162
+ return {"message": f"Parameter {parameter_name} deleted from intent {intent_name}."}