Teknisk arkitektur
Ordvis är en Android-app byggd med modern arkitektur och följande komponenter:
- Kotlin och Jetpack Compose: Appen är skriven i Kotlin och använder Jetpack Compose för gränssnittet.
- Lagerbaserad design: Koden är strukturerad i
ui,domain,data.firebase,data.model,llmochdiför tydlig separation av ansvar. - Hilt: För dependency injection och hantering av grafstrukturer.
- Firebase Realtime Database: För realtidssynkronisering av matchdata mellan spelare.
- Lokal språkmodell: En Qwen-modell körs på enheten via LiteRT för att bedöma meningarna. Modellen laddas ned och valideras vid första starten, vilket kräver cirka 1,6 GB diskutrymme.
Funktioner
- Tvåspelarläge: Spelare skapar meningar utifrån 199 givna ord, och en lokal språkmodell (kallad Enlil i gränssnittet) dömer meningarna till poäng och korta omdömen.
- Realtidssynkronisering: Matchen synkas via Firebase Realtime Database, vilket möjliggör att spelare kan gå med via en länk eller matchkod.
- Anonym inloggning: Spelare loggar in anonymt, och spelledaren skapar matchen medan den andra spelaren ansluter via en djuplänk (
https://ordvis-6a954.web.app/joinellerordvis://join). - Demo-AI: Om den lokala språkmodellen inte startar, aktiveras en demo-AI för att säkerställa att appen förblir funktionell.
- Spelregler som tillstånd: Appen hanterar faser, timer, vakthundar, lås av inlämning och poäng per spelare. Ord återanvänds inte inom samma match.
Felsäkerhet och användarupplevelse
- Reservlösningar: Om Qwen-modellen inte startar, aktiveras en demo-AI för att säkerställa att appen förblir funktionell.
- Felmeddelanden på svenska: Tydliga felmeddelanden visas för användaren vid problem, t.ex. saknad match, nätverksfel eller om modellen inte startar.
- Offline-stöd: Firebase Realtime Database hanterar offline-läge och synkroniserar data automatiskt när anslutningen återupprättas.
Tekniska detaljer
- Modelldistribution: Modellen laddas ned och valideras vid första starten, vilket kräver cirka 1,6 GB diskutrymme.
- Mutex och synkronisering: Säker hantering av samtidiga anrop till språkmodellen för att undvika konflikter.
- Strukturerad dom: Språkmodellens utdata omvandlas till användarvänliga format, t.ex. poäng och omdömen.
