debug, small fixes
This commit is contained in:
parent
9f75adb929
commit
bc088720ee
@ -1,5 +1,6 @@
|
||||
import 'dart:async';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:gemini_app/config.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
||||
@ -11,14 +12,20 @@ class EegState {
|
||||
required this.mind_wandering,
|
||||
required this.focus,
|
||||
});
|
||||
|
||||
String getJsonString() {
|
||||
return '{"mind_wandering": $mind_wandering, "focus": $focus}';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class EegCubit extends Cubit<EegState> {
|
||||
EegCubit() : super(EegState(mind_wandering: 0.0, focus: 0.0)) {
|
||||
EegCubit() : super(EegState(mind_wandering: 0.9, focus: 0.1)) {
|
||||
// Start the timer when the cubit is created
|
||||
if (isDebug) {
|
||||
startPolling();
|
||||
}
|
||||
}
|
||||
|
||||
Timer? _timer;
|
||||
|
||||
@ -43,6 +50,10 @@ class EegCubit extends Cubit<EegState> {
|
||||
|
||||
|
||||
Future<List<double>> fetchEegData() async {
|
||||
if (isDebug) {
|
||||
return [0.9, 0.1]; // Placeholder ret
|
||||
}
|
||||
|
||||
final url = Uri.parse('http://192.168.83.153:1234');
|
||||
|
||||
try {
|
||||
@ -83,4 +94,13 @@ Future<List<double>> fetchEegData() async {
|
||||
stopPolling();
|
||||
return super.close();
|
||||
}
|
||||
|
||||
void toggleState() {
|
||||
// Toggle the state between mind_wandering and focus
|
||||
if (state.mind_wandering > state.focus) {
|
||||
updateEegData(state.focus, state.mind_wandering);
|
||||
} else {
|
||||
updateEegData(state.mind_wandering, state.focus);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gemini_app/config.dart';
|
||||
import 'package:gemini_app/bloc/eeg_state.dart';
|
||||
import 'package:google_generative_ai/google_generative_ai.dart';
|
||||
|
||||
enum GeminiStatus { initial, loading, success, error }
|
||||
@ -40,7 +42,7 @@ class GeminiState {
|
||||
class GeminiCubit extends Cubit<GeminiState> {
|
||||
GeminiCubit() : super(GeminiState.initialState);
|
||||
|
||||
void sendMessage(String prompt) async {
|
||||
void sendMessage(String prompt, EegState eegState) async {
|
||||
var messagesWithoutPrompt = state.messages;
|
||||
var messagesWithPrompt = state.messages + [
|
||||
Content.text(prompt)
|
||||
@ -59,20 +61,23 @@ void sendMessage(String prompt) async {
|
||||
|
||||
|
||||
const String systemPrmpt = """You are an AI tutor helping students understand topics with help of biometric data. You will be supplied with a json containing data extracted from an EEG device, use that data to modify your approach and help the student learn more effectively.
|
||||
Write the response in two parts:
|
||||
State analysis: <describe what is the state of the student and how to best approach them>
|
||||
Tutor response: <continue with the lesson, respond to answers, etc>""";
|
||||
Use language: POLISH
|
||||
Write the response in markdown and split it into two parts:
|
||||
State analysis: describe what is the state of the student and how to best approach them
|
||||
Tutor response: continue with the lesson, respond to answers, etc""";
|
||||
|
||||
final model = GenerativeModel(
|
||||
model: 'gemini-1.5-pro-latest',
|
||||
apiKey: '',
|
||||
apiKey: geminiApiKey,
|
||||
safetySettings: safetySettings,
|
||||
systemInstruction: Content.system(systemPrmpt)
|
||||
);
|
||||
|
||||
try {
|
||||
final chat = model.startChat(history: messagesWithoutPrompt);
|
||||
final stream = chat.sendMessageStream(Content.text(prompt));
|
||||
final stream = chat.sendMessageStream(
|
||||
Content.text("EEG DATA:\n${eegState.getJsonString()}\nPytanie:\n$prompt")
|
||||
);
|
||||
|
||||
String responseText = '';
|
||||
|
||||
@ -92,4 +97,8 @@ Tutor response: <continue with the lesson, respond to answers, etc>""";
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
void resetConversation() {
|
||||
emit(GeminiState.initialState);
|
||||
}
|
||||
}
|
2
lib/config.dart
Normal file
2
lib/config.dart
Normal file
@ -0,0 +1,2 @@
|
||||
const String geminiApiKey = '';
|
||||
const bool isDebug = true;
|
@ -35,7 +35,6 @@ class GeminiChatState extends State<GeminiChat> {
|
||||
void initState() {
|
||||
super.initState();
|
||||
_startConversation();
|
||||
context.read<EegCubit>().startPolling();
|
||||
}
|
||||
|
||||
@override
|
||||
@ -47,17 +46,26 @@ void dispose() {
|
||||
void _startConversation() async {
|
||||
final String rjp = await rootBundle.loadString('assets/lessons/rjp.md');
|
||||
print(rjp);
|
||||
context.read<GeminiCubit>().sendMessage("Zacznij prowadzić lekcje na podstawie poniszego skryptu:\n" + rjp);
|
||||
context.read<GeminiCubit>().sendMessage("Jesteś nauczycielem/chatbotem prowadzącym zajęcia z jednym uczniem. Uczeń ma możliwość zadawania pytań w trakcie, natomiast jesteś odpowiedzialny za prowadzenie lekcji i przedstawienie tematu. Zacznij prowadzić lekcje dla jednego ucznia na podstawie poniszego skryptu:\n" + rjp, context.read<EegCubit>().state);
|
||||
}
|
||||
|
||||
void _sendMessage() async {
|
||||
context.read<GeminiCubit>().sendMessage(_textController.text);
|
||||
context.read<GeminiCubit>().sendMessage(_textController.text, context.read<EegCubit>().state);
|
||||
_textController.clear();
|
||||
}
|
||||
void _toggleEegState() {
|
||||
context.read<EegCubit>().toggleState();
|
||||
}
|
||||
|
||||
void _resetConversation() {
|
||||
context.read<GeminiCubit>().resetConversation();
|
||||
_startConversation();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
resizeToAvoidBottomInset: true,
|
||||
appBar: AppBar(
|
||||
title: const Text('Gemini Pro Chat'),
|
||||
),
|
||||
@ -103,10 +111,26 @@ void dispose() {
|
||||
),
|
||||
onSubmitted: (_) => _sendMessage(),
|
||||
),
|
||||
ElevatedButton(
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: ElevatedButton(
|
||||
onPressed: _sendMessage,
|
||||
child: const Text('Send'),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
ElevatedButton(
|
||||
onPressed: _resetConversation,
|
||||
child: const Text('Reset'),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
ElevatedButton(
|
||||
onPressed: _toggleEegState,
|
||||
child: const Text('Toggle State'),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
Loading…
Reference in New Issue
Block a user