Skip to content

Commit 14fe6f3

Browse files
authored
Merge pull request #568 from cpp977/master
feat: parse token metrics when using ollama provider
2 parents b4372e4 + ad2d058 commit 14fe6f3

2 files changed

Lines changed: 9 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
- Keep `compact_chat` in the tool schema across normal and compact requests, preserving prompt-cache prefixes while rejecting calls outside active compaction.
66

7+
- Provide token metrics for ollama provider. #567.
8+
79
## 0.152.0
810

911
- Share chat history across git worktrees of the same repo, and merge workspace cache writes from concurrent servers instead of overwriting. #558

src/eca/llm_providers/ollama.clj

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@
164164
(defn chat! [{:keys [model user-messages reason? instructions api-url past-messages tools max-output-tokens
165165
extra-headers extra-payload cancelled? stream-idle-timeout-seconds]}
166166
{:keys [on-message-received on-error on-prepare-tool-call on-tools-called
167-
on-reason] :as callbacks}]
167+
on-reason on-usage-updated] :as callbacks}]
168168
(let [messages (concat
169169
(normalize-messages (concat [{:role "system" :content instructions}] past-messages))
170170
(normalize-messages user-messages))
@@ -182,7 +182,7 @@
182182
tool-calls* (atom {})
183183
on-stream-fn (when stream?
184184
(fn handle-stream [rid _event data reasoning?* reason-id]
185-
(let [{:keys [message done_reason]} data]
185+
(let [{:keys [message done_reason prompt_eval_count eval_count]} data]
186186
(cond
187187
(seq (:tool_calls message))
188188
(let [function (:function (first (seq (:tool_calls message))))
@@ -194,6 +194,10 @@
194194
(swap! tool-calls* assoc rid tool-call))
195195

196196
done_reason
197+
(do
198+
(when (and on-usage-updated (or prompt_eval_count eval_count))
199+
(on-usage-updated {:input-tokens (or prompt_eval_count 0)
200+
:output-tokens (or eval_count 0)}))
197201
(if-let [tool-call (get @tool-calls* rid)]
198202
;; TODO support multiple tool calls
199203
(when-let [{:keys [new-messages tools]} (on-tools-called [tool-call])]
@@ -210,7 +214,7 @@
210214
:on-error on-error
211215
:on-stream handle-stream})))
212216
(on-message-received {:type :finish
213-
:finish-reason done_reason}))
217+
:finish-reason done_reason})))
214218

215219
message
216220
(if (:thinking message)

0 commit comments

Comments
 (0)