|
8 | 8 | [eca.features.tools.mcp :as f.mcp] |
9 | 9 | [eca.logger :as logger] |
10 | 10 | [eca.messenger :as messenger] |
| 11 | + [eca.metrics :as metrics] |
11 | 12 | [eca.models :as models] |
12 | 13 | [eca.shared :as shared])) |
13 | 14 |
|
14 | 15 | (set! *warn-on-reflection* true) |
15 | 16 |
|
16 | 17 | (defn initialize [{:keys [db*]} params] |
17 | | - (logger/logging-task |
| 18 | + (metrics/task |
18 | 19 | :eca/initialize |
19 | 20 | (reset! config/initialization-config* (shared/map->camel-cased-map (:initialization-options params))) |
20 | 21 | (let [config (config/all @db*)] |
|
42 | 43 | (:welcomeMessage config))})))) |
43 | 44 |
|
44 | 45 | (defn initialized [{:keys [db* messenger config]}] |
45 | | - (let [sync-models-and-notify! (fn [config] |
46 | | - (let [new-providers-hash (hash (:providers config))] |
47 | | - (when (not= (:providers-config-hash @db*) new-providers-hash) |
48 | | - (swap! db* assoc :providers-config-hash new-providers-hash) |
49 | | - (models/sync-models! db* config (fn [models] |
50 | | - (let [db @db*] |
51 | | - (config/notify-fields-changed-only! |
52 | | - {:chat |
53 | | - {:models (sort (keys models)) |
54 | | - :behaviors (distinct (keys (:behavior config))) |
55 | | - :select-model (f.chat/default-model db config) |
56 | | - :select-behavior (config/validate-behavior-name |
57 | | - (or (:defaultBehavior (:chat config)) ;;legacy |
58 | | - (:defaultBehavior config)) |
59 | | - config) |
60 | | - :welcome-message (or (:welcomeMessage (:chat config)) ;;legacy |
61 | | - (:welcomeMessage config)) |
62 | | - ;; Deprecated, remove after changing emacs, vscode and intellij. |
63 | | - :default-model (f.chat/default-model db config) |
64 | | - :default-behavior (config/validate-behavior-name |
65 | | - (or (:defaultBehavior (:chat config)) ;;legacy |
66 | | - (:defaultBehavior config)) |
67 | | - config)}} |
68 | | - messenger |
69 | | - db*)))))))] |
70 | | - (swap! db* assoc-in [:config-updated-fns :sync-models] #(sync-models-and-notify! %)) |
71 | | - (sync-models-and-notify! config)) |
| 46 | + (metrics/task |
| 47 | + :eca/initialized |
| 48 | + (let [sync-models-and-notify! |
| 49 | + (fn [config] |
| 50 | + (let [new-providers-hash (hash (:providers config))] |
| 51 | + (when (not= (:providers-config-hash @db*) new-providers-hash) |
| 52 | + (swap! db* assoc :providers-config-hash new-providers-hash) |
| 53 | + (models/sync-models! db* config (fn [models] |
| 54 | + (let [db @db*] |
| 55 | + (config/notify-fields-changed-only! |
| 56 | + {:chat |
| 57 | + {:models (sort (keys models)) |
| 58 | + :behaviors (distinct (keys (:behavior config))) |
| 59 | + :select-model (f.chat/default-model db config) |
| 60 | + :select-behavior (config/validate-behavior-name |
| 61 | + (or (:defaultBehavior (:chat config)) ;;legacy |
| 62 | + (:defaultBehavior config)) |
| 63 | + config) |
| 64 | + :welcome-message (or (:welcomeMessage (:chat config)) ;;legacy |
| 65 | + (:welcomeMessage config)) |
| 66 | + ;; Deprecated, remove after changing emacs, vscode and intellij. |
| 67 | + :default-model (f.chat/default-model db config) |
| 68 | + :default-behavior (config/validate-behavior-name |
| 69 | + (or (:defaultBehavior (:chat config)) ;;legacy |
| 70 | + (:defaultBehavior config)) |
| 71 | + config)}} |
| 72 | + messenger |
| 73 | + db*)))))))] |
| 74 | + (swap! db* assoc-in [:config-updated-fns :sync-models] #(sync-models-and-notify! %)) |
| 75 | + (sync-models-and-notify! config))) |
72 | 76 | (future |
73 | 77 | (Thread/sleep 1000) ;; wait chat window is open in some editors. |
74 | 78 | (when-let [error (config/validation-error)] |
|
83 | 87 | (f.tools/init-servers! db* messenger config))) |
84 | 88 |
|
85 | 89 | (defn shutdown [{:keys [db*]}] |
86 | | - (logger/logging-task |
| 90 | + (metrics/task |
87 | 91 | :eca/shutdown |
88 | 92 | (f.mcp/shutdown! db*) |
89 | 93 | (swap! db* assoc :stopping true) |
90 | 94 | nil)) |
91 | 95 |
|
92 | 96 | (defn chat-prompt [{:keys [messenger db* config]} params] |
93 | | - (logger/logging-task |
| 97 | + (metrics/task |
94 | 98 | :eca/chat-prompt |
95 | 99 | (case (get-in @db* [:chats (:chat-id params) :status]) |
96 | 100 | :login (f.login/handle-step params db* messenger config) |
97 | 101 | (f.chat/prompt params db* messenger config)))) |
98 | 102 |
|
99 | 103 | (defn chat-query-context [{:keys [db* config]} params] |
100 | | - (logger/logging-task |
| 104 | + (metrics/task |
101 | 105 | :eca/chat-query-context |
102 | 106 | (f.chat/query-context params db* config))) |
103 | 107 |
|
104 | 108 | (defn chat-query-commands [{:keys [db* config]} params] |
105 | | - (logger/logging-task |
| 109 | + (metrics/task |
106 | 110 | :eca/chat-query-commands |
107 | 111 | (f.chat/query-commands params db* config))) |
108 | 112 |
|
109 | 113 | (defn chat-tool-call-approve [{:keys [messenger db*]} params] |
110 | | - (logger/logging-task |
| 114 | + (metrics/task |
111 | 115 | :eca/chat-tool-call-approve |
112 | 116 | (f.chat/tool-call-approve params db* messenger))) |
113 | 117 |
|
114 | 118 | (defn chat-tool-call-reject [{:keys [messenger db*]} params] |
115 | | - (logger/logging-task |
| 119 | + (metrics/task |
116 | 120 | :eca/chat-tool-call-reject |
117 | 121 | (f.chat/tool-call-reject params db* messenger))) |
118 | 122 |
|
119 | 123 | (defn chat-prompt-stop [{:keys [db* messenger]} params] |
120 | | - (logger/logging-task |
| 124 | + (metrics/task |
121 | 125 | :eca/chat-prompt-stop |
122 | 126 | (f.chat/prompt-stop params db* messenger))) |
123 | 127 |
|
124 | 128 | (defn chat-delete [{:keys [db*]} params] |
125 | | - (logger/logging-task |
| 129 | + (metrics/task |
126 | 130 | :eca/chat-delete |
127 | 131 | (f.chat/delete-chat params db*) |
128 | 132 | {})) |
129 | 133 |
|
130 | 134 | (defn mcp-stop-server [{:keys [db* messenger config]} params] |
131 | | - (logger/logging-task |
| 135 | + (metrics/task |
132 | 136 | :eca/mcp-stop-server |
133 | 137 | (f.tools/stop-server! (:name params) db* messenger config))) |
134 | 138 |
|
135 | 139 | (defn mcp-start-server [{:keys [db* messenger config]} params] |
136 | | - (logger/logging-task |
| 140 | + (metrics/task |
137 | 141 | :eca/mcp-start-server |
138 | 142 | (f.tools/start-server! (:name params) db* messenger config))) |
139 | 143 |
|
|
151 | 155 | "Switches model to the one defined in custom-behavior or to the default-one |
152 | 156 | and updates tool status for the new behavior" |
153 | 157 | [{:keys [db* messenger config]} {:keys [behavior]}] |
154 | | - (let [validated-behavior (config/validate-behavior-name behavior config) |
155 | | - behavior-config (get-in config [:behavior validated-behavior]) |
156 | | - tool-status-fn (f.tools/make-tool-status-fn config validated-behavior)] |
157 | | - (update-behavior-model! behavior-config config messenger db*) |
158 | | - (f.tools/refresh-tool-servers! tool-status-fn db* messenger config))) |
| 158 | + (metrics/task |
| 159 | + :eca/chat-selected-behavior-changed |
| 160 | + (let [validated-behavior (config/validate-behavior-name behavior config) |
| 161 | + behavior-config (get-in config [:behavior validated-behavior]) |
| 162 | + tool-status-fn (f.tools/make-tool-status-fn config validated-behavior)] |
| 163 | + (update-behavior-model! behavior-config config messenger db*) |
| 164 | + (f.tools/refresh-tool-servers! tool-status-fn db* messenger config)))) |
0 commit comments