|
25 | 25 | [eca.logger :as logger] |
26 | 26 | [eca.messenger :as messenger] |
27 | 27 | [eca.metrics :as metrics] |
| 28 | + [eca.models :as models] |
28 | 29 | [eca.shared :as shared :refer [assoc-some future*]])) |
29 | 30 |
|
30 | 31 | (set! *warn-on-reflection* true) |
|
297 | 298 | (defn default-model [db config] |
298 | 299 | (llm-api/default-model db config)) |
299 | 300 |
|
| 301 | +(defn ^:private selected-provider |
| 302 | + "Provider currently selected for `chat-id`, derived from the chat's own model |
| 303 | + or, for subagents, its parent chat's model." |
| 304 | + [db chat-id] |
| 305 | + (let [model (or (get-in db [:chats chat-id :model]) |
| 306 | + (when-let [parent-id (db/parent-chat-id db chat-id)] |
| 307 | + (get-in db [:chats parent-id :model])))] |
| 308 | + (some-> model shared/full-model->provider+model first))) |
| 309 | + |
300 | 310 | (defn ^:private resolve-full-model |
301 | | - "Resolve the full model id for a prompt response and LLM request." |
| 311 | + "Resolve the full model id for a prompt response and LLM request. |
| 312 | + Model ids are resolved alias-first: a bare id is matched against the currently |
| 313 | + selected provider's models before being treated as a literal full model id." |
302 | 314 | [requested-model db chat-id agent-config config] |
303 | | - (or requested-model |
304 | | - (let [stored-model (get-in db [:chats chat-id :model]) |
305 | | - agent-default-model (:defaultModel agent-config)] |
306 | | - (cond |
307 | | - (and stored-model |
308 | | - (contains? (:models db) stored-model)) |
309 | | - stored-model |
310 | | - |
311 | | - (and agent-default-model |
312 | | - (contains? (:models db) agent-default-model)) |
313 | | - agent-default-model |
314 | | - |
315 | | - :else |
316 | | - (default-model db config))))) |
| 315 | + (let [provider (selected-provider db chat-id)] |
| 316 | + (or (when requested-model |
| 317 | + (or (models/full-model-for db provider requested-model) |
| 318 | + requested-model)) |
| 319 | + (let [stored-model (get-in db [:chats chat-id :model]) |
| 320 | + agent-default-model (:defaultModel agent-config)] |
| 321 | + (cond |
| 322 | + (and stored-model |
| 323 | + (contains? (:models db) stored-model)) |
| 324 | + stored-model |
| 325 | + |
| 326 | + agent-default-model |
| 327 | + (or (models/full-model-for db provider agent-default-model) |
| 328 | + (default-model db config)) |
| 329 | + |
| 330 | + :else |
| 331 | + (default-model db config)))))) |
317 | 332 |
|
318 | 333 | (defn ^:private update-pre-request-state |
319 | 334 | "Pure function to compute new state from hook result." |
|
0 commit comments