Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 52 additions & 15 deletions apps/AppWithWearable/Tasks.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,57 @@
### Tasks

- [ ] It shouldn't require to reconnect every time that you open the app, it should load `ConnectDeviceWidget` and in there listen/reconnect to the device.
- [ ] Device disconnected, display dialog to user asking to reconnect, or take the user back to `find_devices` page.
- [ ] Settings bottom sheet, improve way of handling `***` blurring of api keys, as if you save it while is blurred with *, it sets the key to that value, and you have to set them again
- [ ] [iOS] memories and chat page on the bottom do not have the blurred colors pattern, but plain primary color
- [ ] Improve structured memory results performance by sending n previous memories as part of the structuring but as context, not as part of the structure, so that if there's some reference to a person, and then you use a pronoun, the LLM understands what you are referring to.
- [ ] It shouldn't require to reconnect every time that you open the app, it should
load `ConnectDeviceWidget` and in there listen/reconnect to the device.
- [ ] Device disconnected, display dialog to user asking to reconnect, or take the user back
to `find_devices` page.
- [ ] Settings bottom sheet, improve way of handling `***` blurring of api keys, as if you save it
while is blurred with *, it sets the key to that value, and you have to set them again
- [ ] [iOS] memories and chat page on the bottom do not have the blurred colors pattern, but plain
primary color
- [ ] Improve structured memory results performance by sending n previous memories as part of the
structuring but as context, not as part of the structure, so that if there's some reference to a
person, and then you use a pronoun, the LLM understands what you are referring to.
- [ ] Migrate MemoryRecord from SharedPreferences to sqlite
- [ ] Implement [similarity search](https://www.pinecone.io/learn/vector-similarity/) locally
- [ ] Use from the AppStandalone `_ragContext` function as a baseline for creating the query embedding.
- [ ] When a memory is created, compute the vector embedding and store it locally.
- [ ] When the user sends a question in the chat, extract from the AppStandalone the `function_calling` that determines if the message requires context, if that's the case, retrieve the top 10 most similar vectors ~~ For an initial version we can read all memories from sqlite or SharedPreferences, and compute the formula between the query and each vector.
- [ ] Use that as context, and ask to the LLM. Retrieve the prompt from the AppStandalone.
- [ ] Use from the AppStandalone `_ragContext` function as a baseline for creating the query
embedding.
- [ ] When a memory is created, compute the vector embedding and store it locally.
- [ ] When the user sends a question in the chat, extract from the AppStandalone
the `function_calling` that determines if the message requires context, if that's the case,
retrieve the top 10 most similar vectors ~~ For an initial version we can read all memories
from sqlite or SharedPreferences, and compute the formula between the query and each vector.
- [ ] Use that as context, and ask to the LLM. Retrieve the prompt from the AppStandalone.
- [X] -----
- [ ] Another option is to use one of the vector db libraries available for
dart https://github.com/FastCodeAI/DVDB or https://pub.dev/packages/chromadb
- [ ] Settings Deepgram + openAI key are forced to be set
- [ ] In case an API key fails, either Deepgram WebSocket connection fails, or GPT requests, let the user know the error message, either has no more credits, api key is invalid, etc.
- [ ] Improve connected device page UI, including transcription text, and when memory creates after 30 seconds, let the user know
- [ ] Structure the memory asking JSON output `{"title", "summary"}`, in that way we can have better parsed data.
- [ ] Test/Implement [speaker diarization](https://developers.deepgram.com/docs/diarization) to recognize multiple speakers in transcription, use that for better context when creating the structured memory.
- [ ] Better `AppWithWerable` folders structure.
- [ ] Define flutter code style rules.
- [ ] In case an API key fails, either Deepgram WebSocket connection fails, or GPT requests, let the
user know the error message, either has no more credits, api key is invalid, etc.
- [ ] Improve connected device page UI, including transcription text, and when memory creates after
30 seconds, let the user know
- [ ] Structure the memory asking JSON output `{"title", "summary"}`, in that way we can have better
parsed data.
- [ ] Test/Implement [speaker diarization](https://developers.deepgram.com/docs/diarization) to
recognize multiple speakers in transcription, use that for better context when creating the
structured memory.
- [x] Better `AppWithWerable` folders structure.
- [ ] Define flutter code style rules.
- [ ] Include documentation on how to run `AppWithWearable`.

---

- [ ] Multilanguage option, implement settings selector, and use that for the deepgram websocket
creation
- [ ] Option for storing your transcripts somewhere in the cloud, user inputs their own GCP storage
bucket + auth key, and the files are uploaded there + a reference is stored in the MemoryRecord
object.

- [ ] ~~ (Idea) Detect a keyword or special order e.g. "Hey Friend" (but not so generic) and
triggers a prompt execution + response. This would require a few hardware updates (could also be a
button on the device), and it's way bigger than it seems.
- [ ] ~~ (Idea) Store the location at which the memory was created, and have saved places, like "at
Home you were chatting about x and y"
- [ ] ~~ (Idea) Speaker detection, use something like the python
library [librosa](https://github.com/librosa/librosa), so that friend recognizes when is you the
one speaking and creates memories better considering that. Maybe even later learns to recognize
other people.
75 changes: 0 additions & 75 deletions apps/AppWithWearable/integration_test/test.dart

This file was deleted.

1 change: 1 addition & 0 deletions apps/AppWithWearable/lib/actions/actions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ Future<void> memoryCreationBlock(String rawMemory) async {
debugPrint('Structured Memory: $structuredMemory');
if (structuredMemory.contains("N/A")) {
await saveFailureMemory(rawMemory, structuredMemory);
changeAppStateMemoryCreating();
} else {
await finalizeMemoryRecord(rawMemory, structuredMemory);
}
Expand Down
8 changes: 0 additions & 8 deletions apps/AppWithWearable/lib/app_constants.dart

This file was deleted.

77 changes: 0 additions & 77 deletions apps/AppWithWearable/lib/app_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -367,83 +367,6 @@ class FFAppState extends ChangeNotifier {
set memoryCreationProcessing(bool _value) {
_memoryCreationProcessing = _value;
}

List<String> _testlist = [];

List<String> get testlist => _testlist;

set testlist(List<String> _value) {
_testlist = _value;
}

void addToTestlist(String _value) {
_testlist.add(_value);
}

void removeFromTestlist(String _value) {
_testlist.remove(_value);
}

void removeAtIndexFromTestlist(int _index) {
_testlist.removeAt(_index);
}

void updateTestlistAtIndex(
int _index,
String Function(String) updateFn,
) {
_testlist[_index] = updateFn(_testlist[_index]);
}

void insertAtIndexInTestlist(int _index, String _value) {
_testlist.insert(_index, _value);
}

String _wav = '';

String get wav => _wav;

set wav(String _value) {
_wav = _value;
}

List<String> _whispers = [];

List<String> get whispers => _whispers;

set whispers(List<String> _value) {
_whispers = _value;
}

void addToWhispers(String _value) {
_whispers.add(_value);
}

void removeFromWhispers(String _value) {
_whispers.remove(_value);
}

void removeAtIndexFromWhispers(int _index) {
_whispers.removeAt(_index);
}

void updateWhispersAtIndexWithFunction(
int _index,
String Function(String) updateFn,
) {
_whispers[_index] = updateFn(_whispers[_index]);
}

void updateWhispersAtIndex(
int _index,
String _value,
) {
_whispers[_index] = _value;
}

void insertAtIndexInWhispers(int _index, String _value) {
_whispers.insert(_index, _value);
}
}

void _safeInit(Function() initializeField) {
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Loading