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 time import time
30-
3129from klatchat_utils .database_utils .mongo_utils .queries import mongo_queries
32- from klatchat_utils .database_utils .mongo_utils .queries .wrapper import MongoDocumentsAPI
30+ from klatchat_utils .database_utils .mongo_utils .queries .wrapper import (
31+ MongoDocumentsAPI ,
32+ )
3333from neon_utils .logger import LOG
34+ from neon_data_models .models .api .klat .socketio import (
35+ NewCcaiPrompt ,
36+ CcaiPromptCompleted ,
37+ GetPromptData ,
38+ PromptData ,
39+ )
3440from chat_server .sio .server import sio
3541
3642
@@ -40,33 +46,17 @@ async def new_prompt(sid, data):
4046 SIO event fired on new prompt data saving request
4147 :param sid: client session id
4248 :param data: user message data
43- Example:
44- ```
45- data = {'cid':'conversation id',
46- 'promptID': 'id of related prompt',
47- 'context': 'message context (optional)',
48- 'timeCreated': 'timestamp on which message was created'
49- }
50- ```
5149 """
52- prompt_id = data ["prompt_id" ]
53- cid = data ["cid" ]
54- prompt_text = data ["prompt_text" ]
55- created_on = int (data .get ("created_on" ) or time ())
56- context = data .get ("context" ) or {}
50+ prompt = NewCcaiPrompt (** data )
51+ LOG .debug (f"Creating new prompt: { prompt .prompt_text } " )
5752 try :
58- formatted_data = {
59- "_id" : prompt_id ,
60- "cid" : cid ,
61- "is_completed" : "0" ,
62- "data" : {"prompt_text" : prompt_text },
63- "context" : context ,
64- "created_on" : created_on ,
65- }
53+ formatted_data = prompt .to_db_query ()
6654 MongoDocumentsAPI .PROMPTS .add_item (data = formatted_data )
6755 await sio .emit ("new_prompt_created" , data = formatted_data )
6856 except Exception as ex :
69- LOG .error (f'Prompt "{ prompt_id } " was not created due to exception - { ex } ' )
57+ LOG .error (
58+ f'Prompt "{ prompt .prompt_id } " was not created due to exception - { ex } '
59+ )
7060
7161
7262@sio .event
@@ -76,17 +66,13 @@ async def prompt_completed(sid, data):
7666 :param sid: client session id
7767 :param data: user message data
7868 """
79- prompt_id = data ["context" ]["prompt" ]["prompt_id" ]
80-
81- LOG .info (f"setting { prompt_id = } as completed" )
82- MongoDocumentsAPI .PROMPTS .set_completed (
83- prompt_id = prompt_id , prompt_context = data ["context" ]
69+ prompt = CcaiPromptCompleted (** data )
70+ LOG .info (
71+ f"setting prompt_id={ prompt .prompt_id } as completed with: " f"{ prompt .winner } "
8472 )
85- formatted_data = {
86- "winner" : data ["context" ].get ("winner" , "" ),
87- "prompt_id" : prompt_id ,
88- }
89- await sio .emit ("set_prompt_completed" , data = formatted_data )
73+ MongoDocumentsAPI .PROMPTS .set_completed (** prompt .to_db_query ())
74+
75+ await sio .emit ("set_prompt_completed" , data = prompt .model_dump ())
9076
9177
9278@sio .event
@@ -95,41 +81,29 @@ async def get_prompt_data(sid, data):
9581 SIO event fired getting prompt data request
9682 :param sid: client session id
9783 :param data: user message data
98- Example:
99- ```
100- data = {'userID': 'emitted user id',
101- 'cid':'conversation id',
102- 'promptID': 'id of related prompt'}
103- ```
10484 """
105- prompt_id = data .get ("prompt_id" )
106- _prompt_data = mongo_queries .fetch_prompt_data (
107- cid = data ["cid" ],
108- limit = data .get ("limit" , 5 ),
109- prompt_ids = [prompt_id ],
110- fetch_user_data = True ,
111- )
112- if prompt_id :
113- prompt_data = {
114- "_id" : _prompt_data [0 ]["_id" ],
115- "is_completed" : _prompt_data [0 ].get ("is_completed" , "1" ),
116- ** _prompt_data [0 ].get ("data" , {}),
117- }
118- else :
119- prompt_data = []
120- for item in _prompt_data :
121- prompt_data .append (
122- {
123- "_id" : item ["_id" ],
124- "created_on" : item ["created_on" ],
125- "is_completed" : item .get ("is_completed" , "1" ),
126- ** item ["data" ],
127- }
128- )
129- result = dict (
130- data = prompt_data ,
131- receiver = data ["nick" ],
132- cid = data ["cid" ],
133- request_id = data ["request_id" ],
134- )
135- await sio .emit ("prompt_data" , data = result )
85+ try :
86+ requested_prompt_data = GetPromptData (** data )
87+ _prompt_data = PromptData (
88+ ** mongo_queries .fetch_prompt_data (** requested_prompt_data .to_db_query ())
89+ )
90+ if requested_prompt_data .prompt_id :
91+ if isinstance (_prompt_data .data , list ):
92+ prompt_data = _prompt_data .data [0 ].model_dump ()
93+ else :
94+ prompt_data = _prompt_data .data .model_dump ()
95+ else :
96+ prompt_data = []
97+ if isinstance (_prompt_data .data , list ):
98+ for item in _prompt_data :
99+ prompt_data .append (item .model_dump ())
100+ result = dict (
101+ data = prompt_data ,
102+ receiver = requested_prompt_data .nick ,
103+ cid = requested_prompt_data .cid ,
104+ request_id = requested_prompt_data .request_id ,
105+ )
106+ LOG .info (f"Emitting prompt_data: { result } " )
107+ await sio .emit ("prompt_data" , data = result )
108+ except Exception as ex :
109+ LOG .error (f"Failed to get prompt data due to exception - { ex } " )
0 commit comments