Spaces:
Sleeping
Sleeping
Add feedback support to messages
Browse filesIntroduced a `Feedback` model and integrated it into `MessageModel` for storing user feedback. Added API endpoint for updating message feedback and implemented database logic to handle feedback updates. Updated corresponding imports and removed unused functions in the AI engine.
- trauma/api/message/ai/engine.py +1 -3
- trauma/api/message/db_requests.py +12 -1
- trauma/api/message/dto.py +4 -0
- trauma/api/message/model.py +2 -1
- trauma/api/message/views.py +13 -1
trauma/api/message/ai/engine.py
CHANGED
@@ -14,9 +14,7 @@ from trauma.api.message.ai.openai_request import (update_entity_data_with_ai,
|
|
14 |
choose_closest_treatment_area,
|
15 |
check_is_valid_request,
|
16 |
generate_invalid_response,
|
17 |
-
set_entity_score
|
18 |
-
retrieve_semantic_answer,
|
19 |
-
generate_searched_entity_response)
|
20 |
from trauma.api.message.db_requests import (save_assistant_user_message,
|
21 |
filter_entities_by_age_location,
|
22 |
update_entity_data_obj, get_entity_by_index)
|
|
|
14 |
choose_closest_treatment_area,
|
15 |
check_is_valid_request,
|
16 |
generate_invalid_response,
|
17 |
+
set_entity_score)
|
|
|
|
|
18 |
from trauma.api.message.db_requests import (save_assistant_user_message,
|
19 |
filter_entities_by_age_location,
|
20 |
update_entity_data_obj, get_entity_by_index)
|
trauma/api/message/db_requests.py
CHANGED
@@ -6,7 +6,7 @@ from trauma.api.account.dto import AccountType
|
|
6 |
from trauma.api.account.model import AccountModel
|
7 |
from trauma.api.chat.model import ChatModel
|
8 |
from trauma.api.data.model import EntityModel, EntityModelExtended
|
9 |
-
from trauma.api.message.dto import Author
|
10 |
from trauma.api.message.model import MessageModel
|
11 |
from trauma.api.message.schemas import CreateMessageRequest
|
12 |
from trauma.core.config import settings
|
@@ -89,3 +89,14 @@ async def filter_entities_by_age_location(entity_data: dict) -> list[int]:
|
|
89 |
async def get_entity_by_index(index: int) -> EntityModel:
|
90 |
entity = await settings.DB_CLIENT.entities.find_one({"index": index})
|
91 |
return EntityModel.from_mongo(entity)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
from trauma.api.account.model import AccountModel
|
7 |
from trauma.api.chat.model import ChatModel
|
8 |
from trauma.api.data.model import EntityModel, EntityModelExtended
|
9 |
+
from trauma.api.message.dto import Author, Feedback
|
10 |
from trauma.api.message.model import MessageModel
|
11 |
from trauma.api.message.schemas import CreateMessageRequest
|
12 |
from trauma.core.config import settings
|
|
|
89 |
async def get_entity_by_index(index: int) -> EntityModel:
|
90 |
entity = await settings.DB_CLIENT.entities.find_one({"index": index})
|
91 |
return EntityModel.from_mongo(entity)
|
92 |
+
|
93 |
+
|
94 |
+
async def update_message_feedback_obj(message_id: str, feedback_data: Feedback) -> MessageModel:
|
95 |
+
message = await settings.DB_CLIENT.messages.find_one({"id": message_id})
|
96 |
+
if not message:
|
97 |
+
raise HTTPException(status_code=404, detail="Message not found")
|
98 |
+
message = MessageModel.from_mongo(message)
|
99 |
+
message.feedback = feedback_data
|
100 |
+
await settings.DB_CLIENT.messages.update_one({"id": message_id},
|
101 |
+
{"$set": {"feedback": feedback_data.model_dump(mode='json')}})
|
102 |
+
return message
|
trauma/api/message/dto.py
CHANGED
@@ -11,3 +11,7 @@ class Author(Enum):
|
|
11 |
class File(BaseModel):
|
12 |
name: str
|
13 |
url: str
|
|
|
|
|
|
|
|
|
|
11 |
class File(BaseModel):
|
12 |
name: str
|
13 |
url: str
|
14 |
+
|
15 |
+
class Feedback(BaseModel):
|
16 |
+
isPositive: bool
|
17 |
+
comment: str | None = None
|
trauma/api/message/model.py
CHANGED
@@ -3,7 +3,7 @@ from datetime import datetime
|
|
3 |
from pydantic import Field
|
4 |
|
5 |
from trauma.api.data.model import EntityModelExtended
|
6 |
-
from trauma.api.message.dto import Author
|
7 |
from trauma.core.database import MongoBaseModel
|
8 |
|
9 |
|
@@ -12,5 +12,6 @@ class MessageModel(MongoBaseModel):
|
|
12 |
author: Author
|
13 |
text: str
|
14 |
entities: list[EntityModelExtended] | None = None
|
|
|
15 |
datetimeInserted: datetime = Field(default_factory=datetime.now)
|
16 |
datetimeUpdated: datetime = Field(default_factory=datetime.now)
|
|
|
3 |
from pydantic import Field
|
4 |
|
5 |
from trauma.api.data.model import EntityModelExtended
|
6 |
+
from trauma.api.message.dto import Author, Feedback
|
7 |
from trauma.core.database import MongoBaseModel
|
8 |
|
9 |
|
|
|
12 |
author: Author
|
13 |
text: str
|
14 |
entities: list[EntityModelExtended] | None = None
|
15 |
+
feedback: Feedback | None = None
|
16 |
datetimeInserted: datetime = Field(default_factory=datetime.now)
|
17 |
datetimeUpdated: datetime = Field(default_factory=datetime.now)
|
trauma/api/message/views.py
CHANGED
@@ -5,7 +5,9 @@ from trauma.api.account.model import AccountModel
|
|
5 |
from trauma.api.common.dto import Paging
|
6 |
from trauma.api.message import message_router
|
7 |
from trauma.api.message.ai.engine import search_entities
|
8 |
-
from trauma.api.message.db_requests import get_all_chat_messages_obj
|
|
|
|
|
9 |
from trauma.api.message.schemas import (AllMessageWrapper,
|
10 |
AllMessageResponse,
|
11 |
CreateMessageRequest,
|
@@ -38,3 +40,13 @@ async def create_message(
|
|
38 |
message_history = transform_messages_to_openai(messages)
|
39 |
response = await search_entities(message_data.text, message_history, chat)
|
40 |
return TraumaResponseWrapper(data=response)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
from trauma.api.common.dto import Paging
|
6 |
from trauma.api.message import message_router
|
7 |
from trauma.api.message.ai.engine import search_entities
|
8 |
+
from trauma.api.message.db_requests import get_all_chat_messages_obj, update_message_feedback_obj
|
9 |
+
from trauma.api.message.dto import Feedback
|
10 |
+
from trauma.api.message.model import MessageModel
|
11 |
from trauma.api.message.schemas import (AllMessageWrapper,
|
12 |
AllMessageResponse,
|
13 |
CreateMessageRequest,
|
|
|
40 |
message_history = transform_messages_to_openai(messages)
|
41 |
response = await search_entities(message_data.text, message_history, chat)
|
42 |
return TraumaResponseWrapper(data=response)
|
43 |
+
|
44 |
+
|
45 |
+
@message_router.patch('/{messageId}/feedback')
|
46 |
+
async def create_feedback(
|
47 |
+
messageId: str,
|
48 |
+
feedback_data: Feedback,
|
49 |
+
_: AccountModel = Depends(PermissionDependency([AccountType.Admin, AccountType.User]))
|
50 |
+
) -> TraumaResponseWrapper[MessageModel]:
|
51 |
+
message = await update_message_feedback_obj(messageId, feedback_data)
|
52 |
+
return TraumaResponseWrapper(data=message)
|