Skip to content

Commit 28dadae

Browse files
committed
Fix stop request
1 parent a2b0658 commit 28dadae

1 file changed

Lines changed: 31 additions & 48 deletions

File tree

src/eca/features/chat.clj

Lines changed: 31 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,20 @@
6161
ollama-model
6262
(:default-model db)))
6363

64-
(defn ^:private assert-chat-not-stopped! [chat-id request-id db* messenger]
64+
(defn finish-chat-prompt! [chat-id status messenger db*]
65+
(swap! db* assoc-in [:chats chat-id :status] status)
66+
(messenger/chat-content-received
67+
messenger
68+
{:chat-id chat-id
69+
:request-id (get-in @db* [:chats chat-id :current-request-id])
70+
:role :system
71+
:content {:type :progress
72+
:state :finished}}))
73+
74+
(defn ^:private assert-chat-not-stopped! [chat-id db* messenger]
6575
(when (identical? :stoping (get-in @db* [:chats chat-id :status]))
76+
(finish-chat-prompt! chat-id :idle messenger db*)
6677
(logger/info logger-tag "Chat prompt stopped:" chat-id)
67-
(messenger/chat-content-received
68-
messenger
69-
{:chat-id chat-id
70-
:request-id request-id
71-
:role :system
72-
:content {:type :progress
73-
:state :finished}})
74-
(swap! db* assoc-in [:chats chat-id :status] :idle)
7578
(throw (ex-info "Chat prompt stopped" {:silent? true
7679
:chat-id chat-id}))))
7780

@@ -82,10 +85,10 @@
8285
config]
8386
(let [chat-id (or chat-id
8487
(let [new-id (str (random-uuid))]
85-
(swap! db* assoc-in [:chats new-id] {:id new-id
86-
:status :running})
88+
(swap! db* assoc-in [:chats new-id] {:id new-id})
8789
new-id))
8890
_ (swap! db* assoc-in [:chats chat-id :current-request-id] request-id)
91+
_ (swap! db* assoc-in [:chats chat-id :status] :running)
8992
_ (messenger/chat-content-received
9093
messenger
9194
{:chat-id chat-id
@@ -132,7 +135,7 @@
132135
:config config
133136
:tools all-tools
134137
:on-first-message-received (fn [_]
135-
(assert-chat-not-stopped! chat-id request-id db* messenger)
138+
(assert-chat-not-stopped! chat-id db* messenger)
136139
(add-to-history! {:role "user" :content user-prompt})
137140
(messenger/chat-content-received
138141
messenger
@@ -143,7 +146,7 @@
143146
:state :running
144147
:text "Generating"}}))
145148
:on-message-received (fn [{:keys [type] :as msg}]
146-
(assert-chat-not-stopped! chat-id request-id db* messenger)
149+
(assert-chat-not-stopped! chat-id db* messenger)
147150
(case type
148151
:text (do
149152
(swap! received-msgs* str (:text msg))
@@ -164,16 +167,9 @@
164167
:url (:url msg)}})
165168
:finish (do
166169
(add-to-history! {:role "assistant" :content @received-msgs*})
167-
(swap! db* assoc-in [:chats chat-id :status] :idle)
168-
(messenger/chat-content-received
169-
messenger
170-
{:chat-id chat-id
171-
:request-id request-id
172-
:role :system
173-
:content {:type :progress
174-
:state :finished}}))))
170+
(finish-chat-prompt! chat-id :idle messenger db*))))
175171
:on-prepare-tool-call (fn [{:keys [id name argument]}]
176-
(assert-chat-not-stopped! chat-id request-id db* messenger)
172+
(assert-chat-not-stopped! chat-id db* messenger)
177173
(messenger/chat-content-received
178174
messenger
179175
{:chat-id chat-id
@@ -185,7 +181,7 @@
185181
:id id
186182
:manual-approval false}}))
187183
:on-tool-called (fn [{:keys [id name arguments] :as tool-call}]
188-
(assert-chat-not-stopped! chat-id request-id db* messenger)
184+
(assert-chat-not-stopped! chat-id db* messenger)
189185
(messenger/chat-content-received
190186
messenger
191187
{:chat-id chat-id
@@ -214,7 +210,7 @@
214210
:outputs (:contents result)}})
215211
result))
216212
:on-reason (fn [{:keys [status]}]
217-
(assert-chat-not-stopped! chat-id request-id db* messenger)
213+
(assert-chat-not-stopped! chat-id db* messenger)
218214
(let [msg (case status
219215
:started "Reasoning"
220216
:finished "Waiting model"
@@ -228,21 +224,14 @@
228224
:state :running
229225
:text msg}})))
230226
:on-error (fn [{:keys [message exception]}]
231-
(swap! db* assoc-in [:chats chat-id :status] :idle)
232227
(messenger/chat-content-received
233228
messenger
234229
{:chat-id chat-id
235230
:request-id request-id
236231
:role :system
237232
:content {:type :text
238233
:text (or message (ex-message exception))}})
239-
(messenger/chat-content-received
240-
messenger
241-
{:chat-id chat-id
242-
:request-id request-id
243-
:role :system
244-
:content {:type :progress
245-
:state :finished}}))})
234+
(finish-chat-prompt! chat-id :idle messenger db*))})
246235
{:chat-id chat-id
247236
:model chosen-model
248237
:status :success}))
@@ -280,19 +269,13 @@
280269
(set contexts))}))
281270
(defn prompt-stop
282271
[{:keys [chat-id]} db* messenger]
283-
(let [request-id (get-in @db* [:chats chat-id :current-request-id])]
284-
(swap! db* assoc-in [:chats chat-id :status] :stoping)
285-
(messenger/chat-content-received
286-
messenger
287-
{:chat-id chat-id
288-
:request-id request-id
289-
:role :system
290-
:content {:type :text
291-
:text "Prompt stopped"}})
292-
(messenger/chat-content-received
293-
messenger
294-
{:chat-id chat-id
295-
:request-id request-id
296-
:role :system
297-
:content {:type :progress
298-
:state :finished}})))
272+
(when (identical? :running (get-in @db* [:chats chat-id :status]))
273+
(let [request-id (get-in @db* [:chats chat-id :current-request-id])]
274+
(messenger/chat-content-received
275+
messenger
276+
{:chat-id chat-id
277+
:request-id request-id
278+
:role :system
279+
:content {:type :text
280+
:text "\nPrompt stopped"}})
281+
(finish-chat-prompt! chat-id :stoping messenger db*))))

0 commit comments

Comments
 (0)