Skip to content

Commit c40d0e2

Browse files
committed
Improve progress chat report
1 parent 271dfd9 commit c40d0e2

File tree

2 files changed

+94
-78
lines changed

2 files changed

+94
-78
lines changed

src/eca/features/chat.clj

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -87,57 +87,67 @@
8787
past-messages (get-in db [:chats chat-id :messages] [])
8888
user-prompt message
8989
received-msgs* (atom "")]
90+
(swap! db* update-in [:chats chat-id :messages] (fnil conj []) {:role "user" :content user-prompt})
9091
(messenger/chat-content-received
9192
messenger
9293
{:chat-id chat-id
9394
:request-id request-id
9495
:role :system
9596
:content {:type :progress
9697
:state :running
97-
:text "Generating"}})
98-
(swap! db* update-in [:chats chat-id :messages] (fnil conj []) {:role "user" :content user-prompt})
99-
(llm-api/complete! {:model chosen-model
100-
:user-prompt user-prompt
101-
:context context-str
102-
:past-messages past-messages
103-
:config config
104-
:on-message-received (fn [{:keys [message finish-reason]}]
105-
(when message
106-
(swap! received-msgs* str message)
107-
(messenger/chat-content-received
108-
messenger
109-
{:chat-id chat-id
110-
:request-id request-id
111-
:role :assistant
112-
:content {:type :text
113-
:text message}}))
114-
(when finish-reason
115-
(swap! db* update-in [:chats chat-id :messages]
116-
(fnil conj [])
117-
{:role "assistant"
118-
:content @received-msgs*})
119-
(messenger/chat-content-received
120-
messenger
121-
{:chat-id chat-id
122-
:request-id request-id
123-
:role :system
124-
:content {:type :progress
125-
:state :finished}})))
126-
:on-error (fn [{:keys [message exception]}]
127-
(messenger/chat-content-received
128-
messenger
129-
{:chat-id chat-id
130-
:request-id request-id
131-
:role :system
132-
:content {:type :text
133-
:text (str (or message (ex-message exception)) "\n")}})
134-
(messenger/chat-content-received
135-
messenger
136-
{:chat-id chat-id
137-
:request-id request-id
138-
:role :system
139-
:content {:type :progress
140-
:state :finished}}))})
98+
:text "Waiting model"}})
99+
(llm-api/complete!
100+
{:model chosen-model
101+
:user-prompt user-prompt
102+
:context context-str
103+
:past-messages past-messages
104+
:config config
105+
:on-first-message-received (fn [_]
106+
(messenger/chat-content-received
107+
messenger
108+
{:chat-id chat-id
109+
:request-id request-id
110+
:role :system
111+
:content {:type :progress
112+
:state :running
113+
:text "Generating"}}))
114+
:on-message-received (fn [{:keys [message finish-reason]}]
115+
(when message
116+
(swap! received-msgs* str message)
117+
(messenger/chat-content-received
118+
messenger
119+
{:chat-id chat-id
120+
:request-id request-id
121+
:role :assistant
122+
:content {:type :text
123+
:text message}}))
124+
(when finish-reason
125+
(swap! db* update-in [:chats chat-id :messages]
126+
(fnil conj [])
127+
{:role "assistant"
128+
:content @received-msgs*})
129+
(messenger/chat-content-received
130+
messenger
131+
{:chat-id chat-id
132+
:request-id request-id
133+
:role :system
134+
:content {:type :progress
135+
:state :finished}})))
136+
:on-error (fn [{:keys [message exception]}]
137+
(messenger/chat-content-received
138+
messenger
139+
{:chat-id chat-id
140+
:request-id request-id
141+
:role :system
142+
:content {:type :text
143+
:text (str (or message (ex-message exception)) "\n")}})
144+
(messenger/chat-content-received
145+
messenger
146+
{:chat-id chat-id
147+
:request-id request-id
148+
:role :system
149+
:content {:type :progress
150+
:state :finished}}))})
141151
{:chat-id chat-id
142152
:model chosen-model
143153
:status :success}))

src/eca/llm_api.clj

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -17,40 +17,46 @@
1717
(slurp path))
1818

1919
(defn complete!
20-
[{:keys [model context user-prompt config on-message-received on-error past-messages]}]
21-
(cond
22-
(contains? #{"o4-mini" "gpt-4.1"} model)
23-
(llm-providers.openai/completion!
24-
{:model model
25-
:context context
26-
:user-prompt user-prompt
27-
:past-messages past-messages
28-
:api-key (:openai-api-key config)}
29-
{:on-message-received on-message-received
30-
:on-error on-error})
20+
[{:keys [model context user-prompt config on-first-message-received on-message-received on-error past-messages]}]
21+
(let [first-message-received* (atom false)
22+
on-message-received-wrapper (fn [& args]
23+
(when-not @first-message-received*
24+
(reset! first-message-received* true)
25+
(apply on-first-message-received args))
26+
(apply on-message-received args))]
27+
(cond
28+
(contains? #{"o4-mini" "gpt-4.1"} model)
29+
(llm-providers.openai/completion!
30+
{:model model
31+
:context context
32+
:user-prompt user-prompt
33+
:past-messages past-messages
34+
:api-key (:openai-api-key config)}
35+
{:on-message-received on-message-received-wrapper
36+
:on-error on-error})
3137

32-
(contains? #{"claude-sonnet-4-0"
33-
"claude-opus-4-0"
34-
"claude-3-5-haiku-latest"} model)
35-
(llm-providers.anthropic/completion!
36-
{:model model
37-
:context context
38-
:user-prompt user-prompt
39-
:past-messages past-messages
40-
:api-key (:anthropic-api-key config)}
41-
{:on-message-received on-message-received
42-
:on-error on-error})
38+
(contains? #{"claude-sonnet-4-0"
39+
"claude-opus-4-0"
40+
"claude-3-5-haiku-latest"} model)
41+
(llm-providers.anthropic/completion!
42+
{:model model
43+
:context context
44+
:user-prompt user-prompt
45+
:past-messages past-messages
46+
:api-key (:anthropic-api-key config)}
47+
{:on-message-received on-message-received-wrapper
48+
:on-error on-error})
4349

44-
(string/starts-with? model config/ollama-model-prefix)
45-
(llm-providers.ollama/completion!
46-
{:host (-> config :ollama :host)
47-
:port (-> config :ollama :port)
48-
:model (string/replace-first model config/ollama-model-prefix "")
49-
:past-messages past-messages
50-
:context context
51-
:user-prompt user-prompt}
52-
{:on-message-received on-message-received
53-
:on-error on-error})
50+
(string/starts-with? model config/ollama-model-prefix)
51+
(llm-providers.ollama/completion!
52+
{:host (-> config :ollama :host)
53+
:port (-> config :ollama :port)
54+
:model (string/replace-first model config/ollama-model-prefix "")
55+
:past-messages past-messages
56+
:context context
57+
:user-prompt user-prompt}
58+
{:on-message-received on-message-received-wrapper
59+
:on-error on-error})
5460

55-
:else
56-
(on-error {:msg (str "ECA Unsupported model: " model)})))
61+
:else
62+
(on-error {:msg (str "ECA Unsupported model: " model)}))))

0 commit comments

Comments
 (0)