Skip to content
This repository was archived by the owner on Jun 5, 2025. It is now read-only.

Commit d62fdfc

Browse files
committed
Add CRUD endpoints for system prompts
Closes: #673 Signed-off-by: Juan Antonio Osorio <[email protected]>
1 parent deff1be commit d62fdfc

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

src/codegate/api/v1.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,56 @@ async def get_workspace_messages(workspace_name: str) -> List[Conversation]:
142142
return await dashboard.parse_messages_in_conversations(prompts_outputs)
143143
except Exception:
144144
raise HTTPException(status_code=500, detail="Internal server error")
145+
146+
147+
@v1.get(
148+
"/workspaces/{workspace_name}/system-prompt",
149+
tags=["Workspaces"],
150+
generate_unique_id_function=uniq_name,
151+
)
152+
async def get_workspace_system_prompt(workspace_name: str) -> v1_models.Workspace:
153+
"""Get the system prompt for a workspace."""
154+
try:
155+
ws = await wscrud.get_workspace_by_name(workspace_name)
156+
except crud.WorkspaceDoesNotExistError:
157+
raise HTTPException(status_code=404, detail="Workspace does not exist")
158+
except Exception:
159+
raise HTTPException(status_code=500, detail="Internal server error")
160+
161+
return v1_models.SystemPrompt.from_db_workspace(ws)
162+
163+
164+
@v1.put(
165+
"/workspaces/{workspace_name}/system-prompt",
166+
tags=["Workspaces"],
167+
generate_unique_id_function=uniq_name,
168+
status_code=204,
169+
)
170+
async def set_workspace_system_prompt(workspace_name: str, request: v1_models.SystemPrompt):
171+
try:
172+
# This already checks if the workspace exists
173+
await wscrud.update_workspace_system_prompt(workspace_name, list(request.prompt))
174+
except crud.WorkspaceDoesNotExistError:
175+
raise HTTPException(status_code=404, detail="Workspace does not exist")
176+
except Exception:
177+
raise HTTPException(status_code=500, detail="Internal server error")
178+
179+
return Response(status_code=204)
180+
181+
182+
@v1.delete(
183+
"/workspaces/{workspace_name}/system-prompt",
184+
tags=["Workspaces"],
185+
generate_unique_id_function=uniq_name,
186+
status_code=204,
187+
)
188+
async def delete_workspace_system_prompt(workspace_name: str):
189+
try:
190+
# This already checks if the workspace exists
191+
await wscrud.update_workspace_system_prompt(workspace_name, [])
192+
except crud.WorkspaceDoesNotExistError:
193+
raise HTTPException(status_code=404, detail="Workspace does not exist")
194+
except Exception:
195+
raise HTTPException(status_code=500, detail="Internal server error")
196+
197+
return Response(status_code=204)

src/codegate/api/v1_models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ class Workspace(pydantic.BaseModel):
1010
is_active: bool
1111

1212

13+
class SystemPrompt(pydantic.BaseModel):
14+
prompt: str
15+
16+
@classmethod
17+
def from_db_workspace(cls, ws: db_models.Workspace) -> "SystemPrompt":
18+
return cls(prompt=ws.system_prompt)
19+
20+
1321
class ActiveWorkspace(Workspace):
1422
# TODO: use a more specific type for last_updated
1523
last_updated: Any

0 commit comments

Comments
 (0)