refactor: pre seed responses

This commit is contained in:
cogwheel0
2025-09-05 11:15:39 +05:30
parent 6af18c97b2
commit 58d5cf076b
7 changed files with 149 additions and 118 deletions

View File

@@ -74,17 +74,6 @@ abstract class OutboundTask with _$OutboundTask {
String? error,
}) = GenerateImageTask;
const factory OutboundTask.saveConversation({
required String id,
String? conversationId,
@Default(TaskStatus.queued) TaskStatus status,
@Default(0) int attempt,
String? idempotencyKey,
DateTime? enqueuedAt,
DateTime? startedAt,
DateTime? completedAt,
String? error,
}) = SaveConversationTask;
const factory OutboundTask.generateTitle({
required String id,
@@ -121,7 +110,6 @@ abstract class OutboundTask with _$OutboundTask {
uploadMedia: (t) => t.conversationId,
executeToolCall: (t) => t.conversationId,
generateImage: (t) => t.conversationId,
saveConversation: (t) => t.conversationId,
generateTitle: (t) => t.conversationId,
imageToDataUrl: (t) => t.conversationId,
);

View File

@@ -273,22 +273,7 @@ class TaskQueueNotifier extends StateNotifier<List<OutboundTask>> {
return id;
}
Future<String> enqueueSaveConversation({
required String? conversationId,
String? idempotencyKey,
}) async {
final id = _uuid.v4();
final task = OutboundTask.saveConversation(
id: id,
conversationId: conversationId,
idempotencyKey: idempotencyKey,
enqueuedAt: DateTime.now(),
);
state = [...state, task];
await _save();
_process();
return id;
}
// Removed: enqueueSaveConversation — mobile app no longer persists chats to server.
Future<String> enqueueGenerateTitle({
required String conversationId,

View File

@@ -22,7 +22,7 @@ class TaskWorker {
executeToolCall: _performExecuteToolCall,
generateImage: _performGenerateImage,
imageToDataUrl: _performImageToDataUrl,
saveConversation: _performSaveConversation,
// saveConversation removed — we no longer push chat state to server
generateTitle: _performGenerateTitle,
);
}
@@ -328,36 +328,7 @@ class TaskWorker {
}
}
Future<void> _performSaveConversation(SaveConversationTask task) async {
final api = _ref.read(apiServiceProvider);
final messages = _ref.read(chat.chatMessagesProvider);
final activeConv = _ref.read(activeConversationProvider);
final selectedModel = _ref.read(selectedModelProvider);
if (api == null || messages.isEmpty || activeConv == null) return;
// Skip if last assistant is empty placeholder
final last = messages.last;
if (last.role == 'assistant' &&
last.content.trim().isEmpty &&
(last.files?.isEmpty ?? true) &&
(last.attachmentIds?.isEmpty ?? true)) {
return;
}
try {
await api.updateConversationWithMessages(
activeConv.id,
messages,
model: selectedModel?.id,
);
final updated = activeConv.copyWith(
messages: messages,
updatedAt: DateTime.now(),
);
_ref.read(activeConversationProvider.notifier).state = updated;
_ref.invalidate(conversationsProvider);
} catch (_) {}
}
// _performSaveConversation removed
Future<void> _performGenerateTitle(GenerateTitleTask task) async {
final api = _ref.read(apiServiceProvider);
@@ -387,15 +358,8 @@ class TaskWorker {
updatedAt: DateTime.now(),
);
_ref.read(activeConversationProvider.notifier).state = updated;
try {
final cur = _ref.read(chat.chatMessagesProvider);
await api.updateConversationWithMessages(
updated.id,
cur,
title: updated.title,
model: selectedModel.id,
);
} catch (_) {}
// Do not push full messages to server; skip remote update.
// Optionally refresh list to reflect server-side title when its generated there.
_ref.invalidate(conversationsProvider);
}
}