refactor: titles

This commit is contained in:
cogwheel0
2025-09-25 21:15:47 +05:30
parent 0943621731
commit db0261ffed
6 changed files with 55 additions and 264 deletions

View File

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

View File

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

View File

@@ -21,8 +21,6 @@ class TaskWorker {
executeToolCall: _performExecuteToolCall,
generateImage: _performGenerateImage,
imageToDataUrl: _performImageToDataUrl,
// saveConversation removed — we no longer push chat state to server
generateTitle: _performGenerateTitle,
);
}
@@ -338,42 +336,4 @@ class TaskWorker {
},
);
}
// _performSaveConversation removed
Future<void> _performGenerateTitle(GenerateTitleTask task) async {
final api = _ref.read(apiServiceProvider);
final activeConv = _ref.read(activeConversationProvider);
final selectedModel = _ref.read(selectedModelProvider);
if (api == null || selectedModel == null) return;
try {
final messages = _ref.read(chat.chatMessagesProvider);
final formatted = <Map<String, dynamic>>[];
for (final msg in messages) {
formatted.add({
'id': msg.id,
'role': msg.role,
'content': msg.content,
'timestamp': msg.timestamp.millisecondsSinceEpoch ~/ 1000,
});
}
final title = await api.generateTitle(
conversationId: task.conversationId,
messages: formatted,
model: selectedModel.id,
);
if (title != null && title.isNotEmpty && title != 'New Chat') {
if (activeConv != null && activeConv.id == task.conversationId) {
final updated = activeConv.copyWith(
title: title.length > 100 ? '${title.substring(0, 100)}...' : title,
updatedAt: DateTime.now(),
);
_ref.read(activeConversationProvider.notifier).set(updated);
// 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);
}
}
} catch (_) {}
}
}