Skip to content

Commit d6b5487

Browse files
committed
Update remaining persona endpoints
1 parent 008a1ac commit d6b5487

2 files changed

Lines changed: 112 additions & 20 deletions

File tree

chat_server/blueprints/personas.py

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,9 @@
2626
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2727
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2828

29-
from fastapi import APIRouter, Query, Depends
29+
from fastapi import APIRouter, Depends
3030
from starlette.responses import JSONResponse
3131

32-
from chat_server.utils.enums import RequestModelType, UserRoles
3332
from chat_server.utils.http_exceptions import (
3433
ItemNotFoundException,
3534
DuplicatedItemException,
@@ -43,12 +42,18 @@
4342
TogglePersonaStatusModel,
4443
ListPersonasQueryModel,
4544
)
45+
from chat_server.utils.api_dependencies.models.personas import PersonaModel
4646
from chat_server.utils.api_dependencies.extractors import (
4747
CurrentUserData,
48-
PersonaData,
4948
)
50-
from chat_server.utils.api_dependencies.validators import permitted_access
51-
from chat_server.utils.api_dependencies.direct_query import list_personas_query
49+
from chat_server.utils.api_dependencies.direct_query import (
50+
list_personas_query,
51+
get_persona_query,
52+
add_persona_body,
53+
set_persona_body,
54+
delete_persona_query,
55+
toggle_persona_body,
56+
)
5257
from klatchat_utils.database_utils.mongo_utils import MongoFilter, MongoLogicalOperators
5358
from klatchat_utils.database_utils.mongo_utils.queries.wrapper import MongoDocumentsAPI
5459

@@ -92,7 +97,10 @@ async def list_personas(
9297

9398

9499
@router.get("/get/{persona_id}")
95-
async def get_persona(request_model: PersonaData = permitted_access(PersonaData)):
100+
async def get_persona(
101+
current_user: CurrentUserData,
102+
request_model: PersonaModel = Depends(get_persona_query),
103+
):
96104
"""Gets persona details for a given persona_id"""
97105
item = MongoDocumentsAPI.PERSONAS.get_item(item_id=request_model.persona_id)
98106
if not item:
@@ -102,9 +110,7 @@ async def get_persona(request_model: PersonaData = permitted_access(PersonaData)
102110

103111
@router.put("/add")
104112
async def add_persona(
105-
request_model: AddPersonaModel = permitted_access(
106-
AddPersonaModel, request_model_type=RequestModelType.DATA
107-
),
113+
request_model: AddPersonaModel = Depends(add_persona_body),
108114
):
109115
"""Adds new persona"""
110116
existing_model = MongoDocumentsAPI.PERSONAS.get_item(
@@ -118,9 +124,7 @@ async def add_persona(
118124

119125
@router.post("/set")
120126
async def set_persona(
121-
request_model: SetPersonaModel = permitted_access(
122-
SetPersonaModel, request_model_type=RequestModelType.DATA
123-
),
127+
request_model: SetPersonaModel = Depends(set_persona_body),
124128
):
125129
"""Sets persona's data"""
126130
existing_model = MongoDocumentsAPI.PERSONAS.get_item(
@@ -137,7 +141,7 @@ async def set_persona(
137141

138142
@router.delete("/delete")
139143
async def delete_persona(
140-
request_model: DeletePersonaModel = permitted_access(DeletePersonaModel),
144+
request_model: DeletePersonaModel = Depends(delete_persona_query),
141145
):
142146
"""Deletes persona"""
143147
MongoDocumentsAPI.PERSONAS.delete_item(item_id=request_model.persona_id)
@@ -146,12 +150,15 @@ async def delete_persona(
146150

147151
@router.post("/toggle")
148152
async def toggle_persona_state(
149-
request_model: TogglePersonaStatusModel = permitted_access(
150-
TogglePersonaStatusModel,
151-
min_required_role=UserRoles.AUTHORIZED_USER,
152-
request_model_type=RequestModelType.DATA,
153-
),
153+
current_user: CurrentUserData,
154+
request_model: TogglePersonaStatusModel = Depends(toggle_persona_body),
154155
):
156+
# Check if user has sufficient permissions (previously handled by permitted_access)
157+
if not current_user or current_user.is_tmp:
158+
from chat_server.utils.http_exceptions import UserUnauthorizedException
159+
160+
raise UserUnauthorizedException
161+
155162
updated_data = MongoDocumentsAPI.PERSONAS.update_item(
156163
filters=MongoFilter(key="_id", value=request_model.persona_id),
157164
data={"enabled": request_model.enabled},

chat_server/utils/api_dependencies/direct_query.py

Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,18 @@
2626
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2727
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2828

29-
from fastapi import Query
29+
from fastapi import Query, Path, Body
3030
from typing import Optional, List
3131

32-
from chat_server.utils.api_dependencies.models import ListPersonasQueryModel
32+
from chat_server.utils.api_dependencies.models import (
33+
ListPersonasQueryModel,
34+
AddPersonaModel,
35+
SetPersonaModel,
36+
DeletePersonaModel,
37+
TogglePersonaStatusModel,
38+
)
39+
from chat_server.utils.api_dependencies.models.personas import PersonaModel
40+
from chat_server.utils.api_dependencies.extractors.personas import PersonaData
3341

3442

3543
def list_personas_query(
@@ -42,3 +50,80 @@ def list_personas_query(
4250
This avoids the issue with FastAPI's dependency injection system.
4351
"""
4452
return ListPersonasQueryModel(llms=llms, user_id=user_id, only_enabled=only_enabled)
53+
54+
55+
def get_persona_query(
56+
persona_id: str = Path(..., description="ID of the persona to retrieve"),
57+
) -> PersonaModel:
58+
"""
59+
Creates a PersonaModel from a path parameter.
60+
"""
61+
return PersonaData(persona_id)
62+
63+
64+
def add_persona_body(
65+
persona_name: str = Body(...),
66+
user_id: Optional[str] = Body(None),
67+
supported_llms: List[str] = Body(default=[]),
68+
default_llm: Optional[str] = Body(None),
69+
description: str = Body(...),
70+
enabled: bool = Body(False),
71+
) -> AddPersonaModel:
72+
"""
73+
Creates an AddPersonaModel from body parameters.
74+
"""
75+
return AddPersonaModel(
76+
persona_name=persona_name,
77+
user_id=user_id,
78+
supported_llms=supported_llms,
79+
default_llm=default_llm,
80+
description=description,
81+
enabled=enabled,
82+
)
83+
84+
85+
def set_persona_body(
86+
persona_name: str = Body(...),
87+
user_id: Optional[str] = Body(None),
88+
supported_llms: List[str] = Body(default=[]),
89+
default_llm: Optional[str] = Body(None),
90+
description: str = Body(...),
91+
) -> SetPersonaModel:
92+
"""
93+
Creates a SetPersonaModel from body parameters.
94+
"""
95+
return SetPersonaModel(
96+
persona_name=persona_name,
97+
user_id=user_id,
98+
supported_llms=supported_llms,
99+
default_llm=default_llm,
100+
description=description,
101+
)
102+
103+
104+
def delete_persona_query(
105+
persona_name: str = Query(...),
106+
user_id: Optional[str] = Query(None),
107+
) -> DeletePersonaModel:
108+
"""
109+
Creates a DeletePersonaModel from query parameters.
110+
"""
111+
return DeletePersonaModel(
112+
persona_name=persona_name,
113+
user_id=user_id,
114+
)
115+
116+
117+
def toggle_persona_body(
118+
persona_name: str = Body(...),
119+
user_id: Optional[str] = Body(None),
120+
enabled: bool = Body(True),
121+
) -> TogglePersonaStatusModel:
122+
"""
123+
Creates a TogglePersonaStatusModel from body parameters.
124+
"""
125+
return TogglePersonaStatusModel(
126+
persona_name=persona_name,
127+
user_id=user_id,
128+
enabled=enabled,
129+
)

0 commit comments

Comments
 (0)