Add AI API request, AI API response and AI message model
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
import 'ai_message.dart';
|
||||||
|
|
||||||
|
class AIAPIRequest {
|
||||||
|
final List<AIMessage> messages;
|
||||||
|
|
||||||
|
const AIAPIRequest({
|
||||||
|
required this.messages,
|
||||||
|
});
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
return {
|
||||||
|
'model': 'gpt-oss-120b',
|
||||||
|
'messages': messages.map((m) => m.toJson()).toList(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
class AIApiResponse {
|
||||||
|
final String content;
|
||||||
|
|
||||||
|
const AIApiResponse({
|
||||||
|
required this.content
|
||||||
|
});
|
||||||
|
|
||||||
|
static AIApiResponse? parse(Map<String, dynamic> json) {
|
||||||
|
final choices = json['choices'] as List<dynamic>?;
|
||||||
|
if (choices == null || choices.isEmpty) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final firstChoice = choices[0] as Map<String, dynamic>?;
|
||||||
|
if (firstChoice == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final message = firstChoice['message'] as Map<String, dynamic>?;
|
||||||
|
if (message == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final content = message['content'] as String?;
|
||||||
|
if (content == null || content.isEmpty) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return AIApiResponse(content: content);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
class AIMessage {
|
||||||
|
final String role;
|
||||||
|
final String content;
|
||||||
|
|
||||||
|
const AIMessage({
|
||||||
|
required this.role,
|
||||||
|
required this.content,
|
||||||
|
});
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
return {
|
||||||
|
'role': role,
|
||||||
|
'content': content,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
class AIResponse {
|
||||||
|
final String result;
|
||||||
|
|
||||||
|
const AIResponse({required this.result});
|
||||||
|
|
||||||
|
factory AIResponse.fromJson(Map<String, dynamic> json) {
|
||||||
|
return AIResponse(
|
||||||
|
result: json['result'] as String? ?? json['text'] as String? ?? '',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
return {
|
||||||
|
'result': result,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user