mirror of
https://github.com/foss42/apidash.git
synced 2025-12-05 04:18:56 +08:00
AIRequestModel & AIResponseModel Created
This commit is contained in:
62
packages/genai/lib/models/ai_response_model.dart
Normal file
62
packages/genai/lib/models/ai_response_model.dart
Normal file
@@ -0,0 +1,62 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'dart:typed_data';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:collection/collection.dart' show mergeMaps;
|
||||
import '../providers/providers.dart';
|
||||
part 'ai_response_model.freezed.dart';
|
||||
part 'ai_response_model.g.dart';
|
||||
|
||||
@freezed
|
||||
class AIResponseModel with _$AIResponseModel {
|
||||
const AIResponseModel._();
|
||||
|
||||
@JsonSerializable(explicitToJson: true, anyMap: true, createToJson: true)
|
||||
const factory AIResponseModel({
|
||||
int? statusCode,
|
||||
Map<String, String>? headers,
|
||||
Map<String, String>? requestHeaders,
|
||||
String? body,
|
||||
String? formattedBody,
|
||||
@JsonKey(
|
||||
fromJson: LLMProvider.fromJSONNullable,
|
||||
toJson: LLMProvider.toJSONNullable,
|
||||
)
|
||||
LLMProvider? llmProvider,
|
||||
@Uint8ListConverter() Uint8List? bodyBytes,
|
||||
@DurationConverter() Duration? time,
|
||||
}) = _AIResponseModel;
|
||||
|
||||
factory AIResponseModel.fromJson(Map<String, Object?> json) =>
|
||||
_$AIResponseModelFromJson(json);
|
||||
|
||||
AIResponseModel fromResponse({
|
||||
required Response response,
|
||||
required LLMProvider provider,
|
||||
Duration? time,
|
||||
}) {
|
||||
final responseHeaders = mergeMaps({
|
||||
HttpHeaders.contentLengthHeader: response.contentLength.toString(),
|
||||
}, response.headers);
|
||||
MediaType? mediaType = getMediaTypeFromHeaders(responseHeaders);
|
||||
final body = (mediaType?.subtype == kSubTypeJson)
|
||||
? utf8.decode(response.bodyBytes)
|
||||
: response.body;
|
||||
return AIResponseModel(
|
||||
statusCode: response.statusCode,
|
||||
headers: responseHeaders,
|
||||
requestHeaders: response.request?.headers,
|
||||
body: body,
|
||||
formattedBody: response.statusCode == 200
|
||||
? provider.modelController.outputFormatter(jsonDecode(body))
|
||||
: formatBody(body, mediaType),
|
||||
bodyBytes: response.bodyBytes,
|
||||
time: time,
|
||||
llmProvider: provider,
|
||||
);
|
||||
}
|
||||
|
||||
String? get contentType => headers?.getValueContentType();
|
||||
MediaType? get mediaType => getMediaTypeFromHeaders(headers);
|
||||
}
|
||||
Reference in New Issue
Block a user