Week #3 #
Implemented MVP Features #
Back End #
For now, our back end provides these features:
- REST & gRPC APIs powered by Axum and Tonic, fully documented with Swagger and Protobuf doc-comments (PR).
- Data storage in the PostgreSQL DBMS using Diesel as the driver (code).
- An extension for clients (front ends) to locally run functions that don’t require state ( repository):
- Basic operations – Create, find, and list entries. (issue).
- Still missing: authentication, image storage, update/delete operations, and ML features.
Android #
- Core screens implementing existing CRUD back end operations:
- Event List screen ( commit 1, commit 2): here users can scroll the feed to explore events.
- Event Details screen ( commit 1, commit 2): here users can see all the information related to the event, which is not fully presented on the Event List screen (e.g. scroll all the event images (if there is more than one), read full description, see all the tags associated with an event…).
- Create Event screen ( commit): here user fills the form to create an event and submit it (for now the form is simple: it contains only fields for title and description, and switch to manage the need of attendance; there is also no validation for now).
- Navigation setup ( commit 1, commit 2).
- Kotlin, Gradle, Jetpack Compose, Retrofit, Dagger Hilt.
- Still missing: styles, local caching, image posting.
Demonstration of the Working MVP #
- Back end: http://31.59.170.53:8080 (both REST and gRPC).
- Website: http://31.59.170.53:3000.
- ML server: http://31.59.170.53:50051 (should not display anything (gRPC without reflection)).
The Android app can be downloaded from here: https://github.com/evops-sum25/evops/releases.
Screenshots:
- https://drive.google.com/file/d/18AWcQbfZHCqu0Q35_FBVIY3Y-d_zP9WG/view
- https://drive.google.com/file/d/1ZKKAVcJOimGXX1GKDohP9tSdHr0klJ4d/view
- https://drive.google.com/file/d/1cODQdz2NQEBy68vigHTTucgbQSuzpIpe/view
ML #
Pre-trained models are used without additional training:
- sentence-transformers/paraphrase-multilingual-mpnet-base-v2 for text vector representations (recommendation system).
- sileod/deberta-v3-base-tasksource-nli for zero-shot classification (auto-tagging).
The dump of the “ Opportunities For You” telegram channel was used for auto-tagging testing and for building artificial profiles for the recommendation system.
The auto-tagging system does not require any parameters as a zero-shot classifier. The recommendation system has the following parameters:
The preliminary set of users’ interaction weights has the following form:
"commented": 1.3
."upvoted": {True: 2, False: -0.5, None: 1}
, where True means that the user upvoted a post, False means that the user downvoted, and None means that the user does not mark it."attended": 2.0
.- Initially, users can post reactions on posts. We have divided them into 3
groups as follows:
"reactions": {ReactionType.GOOD: 1.2, ReactionType.NEUTRAL: 1, ReactionType.BAD: -0.8}
.
According to these weights, the “good_profile” and “bad_profile” are constructed. “good_profile” is an average vector of embeddings of events that were evaluated positively, and “bad_profile” is an average vector of embeddings of events that were evaluated negatively.
To compute the users’ profiles, the following formula is applied:
profile = good_profile - \lambda * bad_profile. \lamda = 1
.
All the values were chosen empirically. Further, they will be tuned.
Artifacts:
Internal demo #
Notes from internal demo
Weekly Commitments #
Individual Contribution of Each Participant #
Aleksandr Isupov #
- Created the logic of the Event Details screen ( commit).
- Completely implemented the Create Event screen with all the possible postable fields for now ( commit).
- Researched how to work with type-safe navigation in Jetpack Compose ( article, video).
- Configured type-safe navigation ( commit 1, commit 2).
- Resolved an issue with images not loading ( commit).
Arsen Galiev #
- Created mobile layout for event list page ( commit).
- Connected the website with the back end via gRPC ( commit).
- Added a pseudo sign up option ( commit).
- Created the desktop layout ( commit).
- Created the create-event page ( commit).
Asqar Arslanov #
- Researched data storage solutions, learned how to work with MinIO.
- Documented back-end APIs ( commit 1, commit 2).
- Removed profile pictures from schemas ( issue).
- Unified error handling on the back end ( commit).
- Modularized the client extension code ( commit).
- Exposed data validation functions from the client extension
(
commit).
- Clients (front ends) can use these functions via WASM/FFI to locally validate data (e.g. usernames, tag names).
- Implemented the event page on the website ( file).
- Implemented the sign-up form on the website ( file).
- Wrote a script to populate the DB with fake data ( repository).
- Fixed the problem of the website not building.
Egor Pustovoytenko #
- Implemented pagination on the back end ( commit).
- Researched ways of interacting with ML (Python gRPC and Python Postgres, Rust wrapper, Rust ML 💀).
Ilya-Linh Nguen #
- Made some fixes and changes on Dockerfiles for better development ( commit 1, commit 2, commit 3).
- Create two android release ( release1, release2)
- Made the deployment of our project to the server (singe server variant).
Maksim Ilin #
- Migrated and documented the auto-tagging system in a python script ( commit).
- A template has been created for the migrated service class of the recommendation system ( commit).
- Found a suitable dataset with users’ interactions for fine-tuning the recommendation system ( dataset).
- Reviewed an article about metrics for the recommendation system ( article).
Ramil Shakirzyanov #
- Tested whether the rec-sys concept works on the artificial user profiles ( commit).
- Made an approximate evaluation of the model performance via dynamically generated relevance simulation ( notebook).
Plan for Next Week #
DevOps #
- Connect the script that populate the DB with the project to ease front-end development.
- Write CI/CD for every submodule.
- Think about the case with multiple servers, if Kuberentes is “must have” or it could be replaced with a more elegant and optimized solution.
Machine Learning #
- Discuss the data retrieval from the database with the backend team.
- Transfer the recommendation system model to production.
- Fine-tune hyperparameters for the recommendation system using the Yambda dataset, relying on metrics.
Back End #
- Add pagination ( issue).
- Integrate MinIO ( issue).
- Make input validation more robust ( issue).
- Generate slugs for events ( issue).
- Implement backend-ml and ml-database connection ( issue, issue)
- Follow our front ends’ orders. 🫡
Android #
- Add styles ( issue).
- Implement image posting if the back end will implement image storage ( issue).
- Add fields validation on the Create Event screen ( issue).
- Fix a bug with icon selection in the navigation bar ( issue).
Website #
- Communicate with the back end with Connect-Query ( issue).
- Add internationalization ( issue).
- Design & Create new pages.
Confirmation of the Code’s Operability #
We confirm that the code in the main
branch:
- Is in working condition.
- Runs via Docker Compose.