default model
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user