92 lines
2.8 KiB
Dart
92 lines
2.8 KiB
Dart
import 'dart:io';
|
|
import 'dart:typed_data';
|
|
import 'package:auto_gpt_flutter_client/models/step_request_body.dart';
|
|
import 'package:auto_gpt_flutter_client/utils/rest_api_utility.dart';
|
|
import 'dart:html' as html;
|
|
|
|
/// Service class for performing chat-related operations.
|
|
class ChatService {
|
|
final RestApiUtility api;
|
|
|
|
ChatService(this.api);
|
|
|
|
/// Executes a step in a specific task.
|
|
///
|
|
/// [taskId] is the ID of the task.
|
|
/// [stepRequestBody] is a Map representing the request body for executing a step.
|
|
Future<Map<String, dynamic>> executeStep(
|
|
String taskId, StepRequestBody stepRequestBody) async {
|
|
try {
|
|
return await api.post(
|
|
'agent/tasks/$taskId/steps', stepRequestBody.toJson());
|
|
} catch (e) {
|
|
// TODO: We are bubbling up the full response. Revisit this.
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
/// Gets details about a specific task step.
|
|
///
|
|
/// [taskId] is the ID of the task.
|
|
/// [stepId] is the ID of the step.
|
|
Future<Map<String, dynamic>> getStepDetails(
|
|
String taskId, String stepId) async {
|
|
try {
|
|
return await api.get('agent/tasks/$taskId/steps/$stepId');
|
|
} catch (e) {
|
|
throw Exception('Failed to get step details: $e');
|
|
}
|
|
}
|
|
|
|
/// Lists all steps for a specific task.
|
|
///
|
|
/// [taskId] is the ID of the task.
|
|
/// [currentPage] and [pageSize] are optional pagination parameters.
|
|
Future<Map<String, dynamic>> listTaskSteps(String taskId,
|
|
{int currentPage = 1, int pageSize = 10}) async {
|
|
try {
|
|
return await api.get(
|
|
'agent/tasks/$taskId/steps?current_page=$currentPage&page_size=$pageSize');
|
|
} catch (e) {
|
|
throw Exception('Failed to list task steps: $e');
|
|
}
|
|
}
|
|
|
|
/// Uploads an artifact for a specific task.
|
|
///
|
|
/// [taskId] is the ID of the task.
|
|
/// [artifactFile] is the File to be uploaded.
|
|
/// [uri] is the URI of the artifact.
|
|
Future<Map<String, dynamic>> uploadArtifact(
|
|
String taskId, File artifactFile, String uri) async {
|
|
return Future.value({'status': 'Not implemented yet'});
|
|
}
|
|
|
|
/// Downloads a specific artifact.
|
|
///
|
|
/// [taskId] is the ID of the task.
|
|
/// [artifactId] is the ID of the artifact.
|
|
Future<void> downloadArtifact(String taskId, String artifactId) async {
|
|
try {
|
|
final Uint8List bytes =
|
|
await api.getBinary('agent/tasks/$taskId/artifacts/$artifactId');
|
|
|
|
// Create a blob from the Uint8List
|
|
final blob = html.Blob([bytes]);
|
|
|
|
// Generate a URL from the Blob
|
|
final url = html.Url.createObjectUrlFromBlob(blob);
|
|
|
|
// Create an anchor HTML element
|
|
final anchor = html.AnchorElement(href: url)
|
|
..setAttribute("download", "artifact_$artifactId")
|
|
..click();
|
|
|
|
// Cleanup: Revoke the object URL
|
|
html.Url.revokeObjectUrl(url);
|
|
} catch (e) {
|
|
throw Exception('An error occurred while downloading the artifact: $e');
|
|
}
|
|
}
|
|
}
|