Skip to content

Commit 73cfc7e

Browse files
committed
Add --log-level option
1 parent 3855205 commit 73cfc7e

File tree

7 files changed

+40
-8
lines changed

7 files changed

+40
-8
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
- Add web_search capability
77
- Add `o3` model support.
88
- Support custom API urls for OpenAI and Anthropic
9+
- Add `--log-level <level>` option for better debugging.
910

1011
## 0.0.3
1112

src/eca/llm_providers/anthropic.clj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
content-block* (atom nil)
7373
on-response-fn
7474
(fn handle-response [event data]
75+
(llm-util/log-response logger-tag event data)
7576
(case event
7677
"content_block_delta" (case (-> data :delta :type)
7778
"text_delta" (on-message-received {:type :text

src/eca/llm_providers/ollama.clj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
(:require
33
[cheshire.core :as json]
44
[clojure.java.io :as io]
5+
[eca.llm-util :as llm-util]
56
[eca.logger :as logger]
67
[hato.client :as http]))
78

@@ -23,7 +24,9 @@
2324
{:throw-exceptions? false
2425
:as :json})]
2526
(if (= 200 status)
26-
(:models body)
27+
(do
28+
(llm-util/log-response logger-tag "api_ps" body)
29+
(:models body))
2730
(do
2831
(logger/warn logger-tag "Unknown status code:" status)
2932
[])))
@@ -72,6 +75,7 @@
7275
:stream true}
7376
url (format chat-url (base-url host port))
7477
on-response-fn (fn handle-response [data]
78+
(llm-util/log-response logger-tag "chat" data)
7579
(let [{:keys [message done_reason]} data]
7680
(on-message-received
7781
(cond-> {}

src/eca/llm_providers/openai.clj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
web-search (conj {:type "web_search_preview"}))
5858
:stream true}
5959
on-response-fn (fn handle-response [event data]
60+
(llm-util/log-response logger-tag event data)
6061
(case event
6162
"response.output_text.delta" (on-message-received {:type :text
6263
:text (:delta data)})

src/eca/llm_util.clj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
(ns eca.llm-util
22
(:require
33
[cheshire.core :as json]
4-
[clojure.string :as string])
4+
[clojure.string :as string]
5+
[eca.logger :as logger])
56
(:import
67
[java.io BufferedReader]))
78

@@ -14,3 +15,6 @@
1415
(cons [(subs event 7)
1516
(json/parse-string (subs data 6) true)]
1617
(lazy-seq (event-data-seq rdr))))))))
18+
19+
(defn log-response [tag event data]
20+
(logger/debug tag event data))

src/eca/logger.clj

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,27 @@
22

33
(set! *warn-on-reflection* true)
44

5-
(defn ^:private stderr-print [& args]
6-
(binding [*out* *err*]
7-
(apply println args)))
5+
(def ^:dynamic *level* :info)
6+
7+
(def ^:private level->value
8+
{:error 1
9+
:warn 2
10+
:info 3
11+
:debug 4})
12+
13+
(defn ^:private stderr-print [level & args]
14+
(when (<= (level->value level) (level->value *level*))
15+
(binding [*out* *err*]
16+
(apply println args))))
817

9-
;; TODO create better logger capability.
1018
(defn info [& args]
11-
(apply stderr-print args))
19+
(apply stderr-print :info args))
1220

1321
(defn warn [& args]
14-
(apply stderr-print args))
22+
(apply stderr-print :warn args))
23+
24+
(defn debug [& args]
25+
(apply stderr-print :debug args))
1526

1627
(defn format-time-delta-ms [start-time end-time]
1728
(format "%.0fms" (float (/ (- end-time start-time) 1000000))))

src/eca/main.clj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
[borkdude.dynaload]
77
[clojure.string :as string]
88
[eca.config :as config]
9+
[eca.logger :as logger]
910
[eca.server :as server]))
1011

1112
(set! *warn-on-reflection* true)
@@ -37,11 +38,19 @@
3738
(str "The following errors occurred while parsing your command:\n\n"
3839
(string/join \newline errors)))
3940

41+
(def log-levels #{"error" "warn" "info" "debug"})
42+
4043
(def cli-spec
4144
{:order [:help :version :verbose]
4245
:spec {:help {:alias :h
4346
:desc "Print the available commands and its options"}
4447
:version {:desc "Print eca version"}
48+
:log-level {:ref "<LEVEL>"
49+
:desc "The log level of eca logs, accepts. Defaults to 'info'."
50+
:default "info"
51+
:validate {:pred log-levels
52+
:ex-msg (fn [{:keys [_option _value]}]
53+
(format "Must be in %s" log-levels))}}
4554
:verbose {:desc "Use stdout for eca logs instead of default log settings"}}})
4655

4756
(defn ^:private parse-opts
@@ -81,6 +90,7 @@
8190
(defn ^:private handle-action!
8291
[action options]
8392
(when (= "server" action)
93+
(alter-var-root #'logger/*level* (constantly (keyword (:log-level options))))
8494
(let [finished @(server/run-io-server! (:verbose options))]
8595
{:result-code (if (= :done finished) 0 1)})))
8696

0 commit comments

Comments
 (0)