|
48 | 48 | :type "function")) |
49 | 49 |
|
50 | 50 | (defn complete! |
51 | | - [{:keys [model model-config context user-prompt config on-first-message-received |
| 51 | + [{:keys [model model-config context user-prompt config on-first-response-received |
52 | 52 | on-message-received on-error on-prepare-tool-call on-tool-called on-reason |
53 | 53 | past-messages tools]}] |
54 | | - (let [first-message-received* (atom false) |
| 54 | + (let [first-response-received* (atom false) |
| 55 | + emit-first-message-fn (fn [& args] |
| 56 | + (when-not @first-response-received* |
| 57 | + (reset! first-response-received* true) |
| 58 | + (apply on-first-response-received args))) |
55 | 59 | on-message-received-wrapper (fn [& args] |
56 | | - (when-not @first-message-received* |
57 | | - (reset! first-message-received* true) |
58 | | - (apply on-first-message-received args)) |
| 60 | + (apply emit-first-message-fn args) |
59 | 61 | (apply on-message-received args)) |
| 62 | + on-prepare-tool-call-wrapper (fn [& args] |
| 63 | + (apply emit-first-message-fn args) |
| 64 | + (apply on-prepare-tool-call args)) |
60 | 65 | on-error-wrapper (fn [{:keys [exception] :as args}] |
61 | 66 | (when-not (:silent? (ex-data exception)) |
62 | 67 | (logger/error args) |
|
78 | 83 | :api-key (openai-api-key config)} |
79 | 84 | {:on-message-received on-message-received-wrapper |
80 | 85 | :on-error on-error-wrapper |
81 | | - :on-prepare-tool-call on-prepare-tool-call |
| 86 | + :on-prepare-tool-call on-prepare-tool-call-wrapper |
82 | 87 | :on-tool-called on-tool-called |
83 | 88 | :on-reason on-reason}) |
84 | 89 |
|
|
95 | 100 | :api-key (anthropic-api-key config)} |
96 | 101 | {:on-message-received on-message-received-wrapper |
97 | 102 | :on-error on-error-wrapper |
98 | | - :on-prepare-tool-call on-prepare-tool-call |
99 | | - :on-tool-called on-tool-called}) |
| 103 | + :on-prepare-tool-call on-prepare-tool-call-wrapper |
| 104 | + :on-tool-called on-tool-called |
| 105 | + :on-reason on-reason}) |
100 | 106 |
|
101 | 107 | (string/starts-with? model config/ollama-model-prefix) |
102 | 108 | (llm-providers.ollama/completion! |
|
109 | 115 | :user-prompt user-prompt} |
110 | 116 | {:on-message-received on-message-received-wrapper |
111 | 117 | :on-error on-error-wrapper |
112 | | - :on-prepare-tool-call on-prepare-tool-call |
113 | | - :on-tool-called on-tool-called}) |
| 118 | + :on-prepare-tool-call on-prepare-tool-call-wrapper |
| 119 | + :on-tool-called on-tool-called |
| 120 | + :on-reason on-reason}) |
114 | 121 |
|
115 | 122 | :else |
116 | 123 | (on-error-wrapper {:msg (str "ECA Unsupported model: " model)})))) |
0 commit comments