@@ -19,97 +19,17 @@ import (
1919)
2020
2121type ChatPayload struct {
22- Text string `json:"text"`
23- Sid string `json:"sid"`
24- Agent string `json:"agent"`
25- Model string `json:"model"`
22+ Text string `json:"text"`
23+ Sid string `json:"sid"`
24+ Agent string `json:"agent"`
25+ Model string `json:"model"`
26+ Environ string `json:"environ"`
2627}
2728
2829type ChatResponsePayload struct {
2930 ResponseText string `json:"responseText"`
3031}
3132
32- func sessionCancel (r * runtime.Runtime , c * runtime.Client , m * runtime.Message ) {
33- var p SidRequest
34- if err := json .Unmarshal (m .Payload , & p ); err != nil {
35- log .Printf ("Error unmarshaling 'session.cancel' payload: %v" , err )
36- return
37- }
38-
39- s , ok := r .GetSession (p .Sid )
40- if ! ok && s == nil {
41- c .Mail ("session.cancel.error" , map [string ]string {
42- "sid" : p .Sid ,
43- "error" : "unknown sid" ,
44- })
45- return
46- }
47-
48- fmt .Println ("cancelling:" , p .Sid )
49-
50- s .StopFunc ()
51- c .Mail ("session.cancel.resp" , map [string ]string {
52- "sid" : p .Sid ,
53- })
54-
55- // lookup session
56- resp , err := r .S .Get (r .Ctx , & session.GetRequest {
57- AppName : r .AppName ,
58- UserID : c .User ,
59- SessionID : p .Sid ,
60- })
61- if err != nil {
62- // log.Printf("session.get: %v", err)
63- c .Mail ("session.cancel.error" , map [string ]string {
64- "sid" : p .Sid ,
65- "error" : err .Error (),
66- })
67- return
68- }
69- agent , err := resp .Session .State ().Get ("agent" )
70- if err != nil {
71- // log.Printf("session.get: %v", err)
72- c .Mail ("session.cancel.error" , map [string ]string {
73- "sid" : p .Sid ,
74- "error" : err .Error (),
75- })
76- return
77- }
78-
79- cEvt := & session.Event {
80- LLMResponse : model.LLMResponse {
81- FinishReason : "OTHER" ,
82- TurnComplete : true ,
83- Interrupted : true ,
84- },
85- Author : agent .(string ),
86- ID : uuid .NewString (),
87- InvocationID : uuid .NewString (),
88- Timestamp : time .Now ().UTC (),
89- Actions : session.EventActions {
90- StateDelta : map [string ]any {
91- "canceled" : true ,
92- },
93- },
94- }
95- fmt .Println ("saving:" , p .Sid , cEvt )
96- // "create" (put) the session (by using the same Sid)
97- err = r .S .AppendEvent (r .Ctx , resp .Session , cEvt )
98-
99- if err != nil {
100- // log.Printf("session.get: %v", err)
101- c .Mail ("session.cancel.error" , map [string ]string {
102- "sid" : p .Sid ,
103- "error" : err .Error (),
104- })
105- return
106- }
107-
108- c .Mail ("session.cancel.resp" , map [string ]string {
109- "sid" : p .Sid ,
110- })
111- }
112-
11333func chatUserMessage (r * runtime.Runtime , c * runtime.Client , m * runtime.Message ) {
11434
11535 var p ChatPayload
@@ -234,3 +154,84 @@ func chatUserMessage(r *runtime.Runtime, c *runtime.Client, m *runtime.Message)
234154 }
235155
236156}
157+
158+ func sessionCancel (r * runtime.Runtime , c * runtime.Client , m * runtime.Message ) {
159+ var p SidRequest
160+ if err := json .Unmarshal (m .Payload , & p ); err != nil {
161+ log .Printf ("Error unmarshaling 'session.cancel' payload: %v" , err )
162+ return
163+ }
164+
165+ s , ok := r .GetSession (p .Sid )
166+ if ! ok && s == nil {
167+ c .Mail ("session.cancel.error" , map [string ]string {
168+ "sid" : p .Sid ,
169+ "error" : "unknown sid" ,
170+ })
171+ return
172+ }
173+
174+ fmt .Println ("cancelling:" , p .Sid )
175+
176+ s .StopFunc ()
177+ c .Mail ("session.cancel.resp" , map [string ]string {
178+ "sid" : p .Sid ,
179+ })
180+
181+ // lookup session
182+ resp , err := r .S .Get (r .Ctx , & session.GetRequest {
183+ AppName : r .AppName ,
184+ UserID : c .User ,
185+ SessionID : p .Sid ,
186+ })
187+ if err != nil {
188+ // log.Printf("session.get: %v", err)
189+ c .Mail ("session.cancel.error" , map [string ]string {
190+ "sid" : p .Sid ,
191+ "error" : err .Error (),
192+ })
193+ return
194+ }
195+ agent , err := resp .Session .State ().Get ("agent" )
196+ if err != nil {
197+ // log.Printf("session.get: %v", err)
198+ c .Mail ("session.cancel.error" , map [string ]string {
199+ "sid" : p .Sid ,
200+ "error" : err .Error (),
201+ })
202+ return
203+ }
204+
205+ cEvt := & session.Event {
206+ LLMResponse : model.LLMResponse {
207+ FinishReason : "OTHER" ,
208+ TurnComplete : true ,
209+ Interrupted : true ,
210+ },
211+ Author : agent .(string ),
212+ ID : uuid .NewString (),
213+ InvocationID : uuid .NewString (),
214+ Timestamp : time .Now ().UTC (),
215+ Actions : session.EventActions {
216+ StateDelta : map [string ]any {
217+ "canceled" : true ,
218+ },
219+ },
220+ }
221+ fmt .Println ("saving:" , p .Sid , cEvt )
222+ // "create" (put) the session (by using the same Sid)
223+ err = r .S .AppendEvent (r .Ctx , resp .Session , cEvt )
224+
225+ if err != nil {
226+ // log.Printf("session.get: %v", err)
227+ c .Mail ("session.cancel.error" , map [string ]string {
228+ "sid" : p .Sid ,
229+ "error" : err .Error (),
230+ })
231+ return
232+ }
233+
234+ c .Mail ("session.cancel.resp" , map [string ]string {
235+ "sid" : p .Sid ,
236+ })
237+ }
0 commit comments