brestok commited on
Commit
f000a3c
·
1 Parent(s): 3a56394

Add feedback support to messages

Browse files

Introduced 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 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)