default model

This commit is contained in:
2026-02-22 16:49:30 +00:00
parent 285852f04d
commit e35b7340f3
10 changed files with 3404 additions and 10 deletions
+44 -4
View File
@@ -4,9 +4,26 @@ import type { ClientMessage, ServerMessage, Message, PiEvent } from './types';
import { sessionManager } from './session-manager';
import * as storage from './storage';
import * as piBridge from './pi-bridge';
import { getHomeDir } from '../../../servers/data-path';
import { getHomeDir, getUserSettingsFile } from '../../../servers/data-path';
import { logger } from './logger';
// Default model when no user preference is set
const DEFAULT_MODEL = 'opencode/big-pickle';
async function getUserDefaultModel(email: string): Promise<string | null> {
try {
const settingsPath = getUserSettingsFile(email);
const file = Bun.file(settingsPath);
if (await file.exists()) {
const settings = await file.json();
return settings?.chat?.defaultModel || null;
}
} catch (err) {
logger.error('Failed to read user settings for default model', { email, error: String(err) });
}
return null;
}
type WSData = {
userId: number;
email: string;
@@ -25,7 +42,7 @@ function sendToClient(ws: ServerWebSocket<WSData> | null, msg: ServerMessage): v
}
export async function open(ws: ServerWebSocket<WSData>): Promise<void> {
logger.info('WebSocket connection opened', { email: ws.data.email });
// logger.info('WebSocket connection opened', { email: ws.data.email });
}
export function message(ws: ServerWebSocket<WSData>, raw: string | Buffer): void {
@@ -50,7 +67,7 @@ export function message(ws: ServerWebSocket<WSData>, raw: string | Buffer): void
}
export function close(ws: ServerWebSocket<WSData>): void {
logger.info('WebSocket connection closed', { email: ws.data.email });
// logger.info('WebSocket connection closed', { email: ws.data.email });
const sessionId = wsToSessionMap.get(ws);
if (sessionId) {
@@ -207,7 +224,30 @@ async function handleChat(
): Promise<void> {
const { email } = ws.data;
const sessionId = msg.sessionId || randomUUID();
const model = msg.model || 'opencode/big-pickle';
// Use provided model, or fall back to user default, or use system default
let model = msg.model;
let modelSource = 'client-provided';
let userDefault = null;
if (!model) {
userDefault = await getUserDefaultModel(email);
if (userDefault) {
model = userDefault;
modelSource = 'user-settings';
} else {
model = DEFAULT_MODEL;
modelSource = 'system-default';
}
}
logger.info('Model selected for chat', {
sessionId,
model,
modelSource,
clientModel: msg.model || null,
userDefault,
});
const cwd = msg.cwd || getHomeDir(email);
const groupSlug = msg.groupSlug || null;