summaryrefslogtreecommitdiffhomepage
path: root/packages/session-orchestrator/src/queue.test.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-24 04:26:40 +0900
committerAdam Malczewski <[email protected]>2026-06-24 04:26:40 +0900
commitf2e452bbebc7d99d1ae9ba74b32334b85af7902d (patch)
treecc5052d574c05123ce930a09379a7d0a24d9a660 /packages/session-orchestrator/src/queue.test.ts
parent13eb34133d8fe64f9c73f8d394e0af790b54c6e5 (diff)
downloaddispatch-f2e452bbebc7d99d1ae9ba74b32334b85af7902d.tar.gz
dispatch-f2e452bbebc7d99d1ae9ba74b32334b85af7902d.zip
feat: persistent per-conversation model selection
A chat's selected provider + model is now persisted per conversation (like cwd and reasoningEffort). Opening a conversation in a new browser recalls the originally selected model instead of defaulting. - transport-contract 0.19.0→0.20.0: ModelResponse + SetModelRequest types for GET/PUT /conversations/:id/model. - conversation-store: getModel/setModel (model:<id> key, mirrors getReasoningEffort/setReasoningEffort); forkHistory copies model; empty string clears. - session-orchestrator: resolve model from persisted store when no per-turn override; persist the resolved model so it sticks; warm path parity. - transport-http: GET/PUT /conversations/:id/model endpoints with validation. 1433 vitest pass; tsc + biome clean.
Diffstat (limited to 'packages/session-orchestrator/src/queue.test.ts')
-rw-r--r--packages/session-orchestrator/src/queue.test.ts13
1 files changed, 13 insertions, 0 deletions
diff --git a/packages/session-orchestrator/src/queue.test.ts b/packages/session-orchestrator/src/queue.test.ts
index 71b1fb4..225d1af 100644
--- a/packages/session-orchestrator/src/queue.test.ts
+++ b/packages/session-orchestrator/src/queue.test.ts
@@ -25,16 +25,19 @@ function createInMemoryStore(): ConversationStore & {
readonly metricsData: Map<string, TurnMetrics[]>;
readonly cwdData: Map<string, string>;
readonly effortData: Map<string, ReasoningEffort>;
+ readonly modelData: Map<string, string>;
} {
const data = new Map<string, ChatMessage[]>();
const metricsData = new Map<string, TurnMetrics[]>();
const cwdData = new Map<string, string>();
const effortData = new Map<string, ReasoningEffort>();
+ const modelData = new Map<string, string>();
return {
data,
metricsData,
cwdData,
effortData,
+ modelData,
async append(conversationId, messages) {
const existing = data.get(conversationId) ?? [];
data.set(conversationId, [...existing, ...messages]);
@@ -75,6 +78,16 @@ function createInMemoryStore(): ConversationStore & {
async setReasoningEffort(conversationId, effort) {
effortData.set(conversationId, effort);
},
+ async getModel(conversationId) {
+ return modelData.get(conversationId) ?? null;
+ },
+ async setModel(conversationId, model) {
+ if (model === "") {
+ modelData.delete(conversationId);
+ } else {
+ modelData.set(conversationId, model);
+ }
+ },
async listConversations() {
return [];
},