• @iopq
    link
    6218 days ago

    I have some suggestions: let’s not make people translate to English unless they are learning English. I don’t want to be thinking about whether “I’m coming Friday” is correct grammar in English. I want to be thinking about my target language!

    • Cr4yfishOP
      link
      33
      edit-2
      18 days ago

      Thanks for the suggestion, I’ll definitely try to make the app as language inclusive as possible!

      Also, sorry if I might’ve been too vague with the post title. The app is just similar to Duolingo in terms of structure and the idea, however it’s not specific to language learning but supposed to cater to any subject, really.

      For example, I personally use it to study for my university subjects.

    • @[email protected]
      link
      fedilink
      1118 days ago

      This app seems to be about any generic courses, not just language learning. So someone can make a language course in the way you’ve described

    • 𝒎𝒂𝒏𝒊𝒆𝒍
      link
      fedilink
      10
      edit-2
      18 days ago

      Yeah, it’s my minor pet peeve with Duolingo, like source language and my language doesn’t have/need suffixes like “the” or “a” so I often forget about it, it’s soo annoying to fail because of such minor thing, especially when their suggested English often looks terrible

      • @[email protected]
        link
        fedilink
        English
        1
        edit-2
        18 days ago

        In some languages that’s not a minor thing because of the gender. I mean that’s a problem of the language which should improve but for now you have to use the gender for good communication

        • @iopq
          link
          10
          edit-2
          18 days ago

          We’re talking about, say, learning Spanish and Duolingo be like “now translate this very long and overly specific sentence to English”

          Then you end up trying to construct the English sentence even though you’re learning Spanish

          Here’s an example where I think my sentence is perfectly fine, but it just expected a different word order. It expected me to put If at the beginning, but I didn’t notice it was capitalized.

          Korean doesn’t even have capital letters, why is it doing some gotcha about English capitalization when I already know English?

          • Cr4yfishOP
            link
            217 days ago

            Hi, you created the Korean course right? Thanks for contributing!

            If you have any feature requests or suggestions please put them here: Feature Requests

            There’s also a collection specific for question types: Question Types Collection

            • @iopq
              link
              216 days ago

              Yeah, I’m just testing it out. For a true Duolingo experience it would need fill in the blank and audio

              • Cr4yfishOP
                link
                216 days ago

                “Fill in the blank” is now available, just got done coding it.

                If you want to try it out, I created a new course “Testing out new question types”.

              • Cr4yfishOP
                link
                1
                edit-2
                16 days ago

                Yeah agree, I’ll definitely implement that one.

                Right now I’m working on “match the cards”.

                Edit: For audio I’m not so sure on how I would do it. I don’t think most people would record it themselves when creating a course so I would need to generate it. Then you’d have the issue about correct pronunciation…

      • Cr4yfishOP
        link
        4518 days ago

        it’s implied it’s licensed under “all rights reserved”, so not open source!

        Oh, I actually did not know that. I’ll try to remember adding a License right from the get-go from now on, thanks :)

    • Cr4yfishOP
      link
      1718 days ago

      It’s GPLv3 now.

    • Cr4yfishOP
      link
      518 days ago

      oh, right. Forget that every time. I’ll add one.

  • 𝕸𝖔𝖘𝖘
    link
    fedilink
    English
    16
    edit-2
    18 days ago

    This is a really great use of LLM! Seriously great job! Once it’s fully self-hostable (including the LLM model), I will absolutely find it space on the home server. Maybe using Rupeshs fastdcpu as the model and generation backend could work. I don’t remember what his license is, though.

    Edit: added link.

    • Cr4yfishOP
      link
      918 days ago

      Thanks! I’m already eyeing ollama for this.

  • @AliasAKA
    link
    English
    1418 days ago

    Is there any interest in getting local models to run using this? I’d rather not use Gemini, and then all the data can reside locally (and not require a login).

    I’d be happy to work on this, though I’m a python developer not a typescript one.

    • Cr4yfishOP
      link
      618 days ago

      Yeah, good idea. It’s possible to do that with WebLLM & Langchain. Once Langchain is integrated, it’s kinda similar to the Python Version so should be do-able I think.

      • @AliasAKA
        link
        English
        218 days ago

        Ah interesting — again happy to help out if there’s anything I can contribute to. I can make a feature request on github if there’s interest.

        • Cr4yfishOP
          link
          218 days ago

          Please do :). I take any help I can get.

  • @[email protected]
    link
    fedilink
    English
    12
    edit-2
    18 days ago

    That sounds cool! Is there already a release? If not, don’t rush it :)

    Edit: never mind. I just saw the website 😅

    • Cr4yfishOP
      link
      1018 days ago

      Thanks :). Yeah, it’s publicly accessible: nouv.app/. I use it daily already but it still has tons of bugs.

      • youmaynotknow
        link
        fedilink
        218 days ago

        Unless I remove the “Always use secure connections” it breaks on the cert.

        • Cr4yfishOP
          link
          518 days ago

          Hm that’s very weird. I can’t replicate it and I used some random SSL checker website and it checks out as well.

          Really not sure why that’s happening.

          • @[email protected]
            link
            fedilink
            English
            418 days ago

            WFM. Looks like you’re using Let’s Encrypt, which is fine, and everything seems to be consistent. I think you’re good.

          • youmaynotknow
            link
            fedilink
            318 days ago

            It’s a great looking site at first glance (haven’t signed up yet). I just sandboxed a browser and let it run without forcing HTTPS. Funny thing is that it does show it as being https when disabling https enforcement.

            I’ll take it for a spin this afternoon when I get back home (or in my phone when I get bores at the recital my wife is forcing me to go to 🤣🤣🤣).

  • Silmathoron ⁂
    link
    fedilink
    10
    edit-2
    18 days ago

    @Cr4yfish nice project 🙂
    I’m a bit worried about the AI part, though, as you’d want an app whose main purpose is “learning” to guarantee, if not the reliability of the material (since anyone can contribute), at least the reliability of the course generation process that it proposes.
    As far as I know, this is not possible with current generative AI tools, so what’s your plan to make sure hallucinations do not creep in?

    • Cr4yfishOP
      link
      518 days ago

      Thanks. My general strategy regarding GenAI and reducing the amount of hallucinations is by not giving it the task to make stuff up, but to just work on existing text - that’s why I’m not allowing users to create content without source material.

      However, LLMs will be LLMs and I’ve been testing it out a lot and found already multiple hallucinations. I built in a reporting system, although only reporting stuff works right now, not viewing reported questions.

      That’s my short term plan to get a good content quality, at least. I also want to move away from Vercel AI & Gemini to a Langchain Agent system or Graph maybe, which will increase the output Quality.

      Maybe in some parallel Universe this really takes off and many people work on high quality Courses together…

  • @[email protected]
    link
    fedilink
    English
    918 days ago

    Cool project! Is there any plans on releasing a mobile app in the future? I’m allergic to PWAs.

    • Cr4yfishOP
      link
      1218 days ago

      Thanks, haha. I’d love develop a Native App for it too but this is a zero-budget Project (aside from the Domain). PlayStore has a one-time fee so that’s 25€ for Android + 8€/Month for the IOS AppStore just to have the App on there.

      In theory, I could just have a downloadable .apk for Android to circumvent the fee but most people don’t want to install a random .apk from the internet. And I’m not developing a Native App for like 3 people excluding myself (I’m an iPhone user).

      Soo, yeah that’ll probably not happen :(.

      • @[email protected]
        link
        fedilink
        1618 days ago

        This post gathered a bit of traction. So hopefully more people help out. F droid is a better marketplace for oss compared to playstore because people downloading from playstore act entitles a little, especially towards oss software.

        • Cr4yfishOP
          link
          318 days ago

          Would be nice for sure… 0 forks yet… but I’m hopeful :D

      • @[email protected]
        link
        fedilink
        English
        1218 days ago

        In theory, I could just have a downloadable .apk for Android to circumvent the fee but most people don’t want to install a random .apk from the internet.

        You could’ve considered F-Droid.

        Soo, yeah that’ll probably not happen :(.

        It’s sad. Anyway, good luck with future development!

        • Cr4yfishOP
          link
          118 days ago

          That’s weird. Did a quick google and it does seem to be 25 USD. Last time I made one it were 25 for sure as well - but that one got banned due to inactivity D:

    • @AliasAKA
      link
      English
      818 days ago

      I personally love PWAs — why the hate for them? Personally I think more apps should be PWAs instead.

      • @[email protected]
        link
        fedilink
        English
        118 days ago

        Native apps will always be better, imo. I think less apps should use PWAs. No offense to those who use them, though. It’s just my personal preference.

        • Cr4yfishOP
          link
          218 days ago

          Fair opinion. Native Apps do have some huge advantages, but also some disadvantages.

          I’ve coded both before (although way more PWAs) and with Native you also run into Platform issues as long as you don’t ship exclusively for one Platform.

          PWAs have a huge advantage here since they run the same everywhere as long as the Platform has a browser which is not safari.

    • Cr4yfishOP
      link
      618 days ago

      The UI mostly works offline once loaded in due to aggressive caching. Downloading Course Content was on the initial Roadmap but I removed it since I wasn’t sure if anyone would like the feature.

      Syncing stuff is a real pain in the ass but I’ll implement it if at least a couple people want it.

        • Cr4yfishOP
          link
          818 days ago

          I added it back to the roadmap :).

      • Auster
        link
        fedilink
        418 days ago

        I don’t know how much of a subset I am, but I still use dictionary softwares from Windows 95~2000 era and Android softwares on a completely offline and vanilla VM, partly due to internet randomly going bad, and partly because I am neurotic about digital contents vanishing once support ends.

        • Cr4yfishOP
          link
          318 days ago

          Understandable. I added a proper offline mode back to the Roadmap on github.

    • Cr4yfishOP
      link
      818 days ago

      I use Gemini, which supports PDF File uploads, combined with structured outputs to generate Course Sections, Levels & Question JSON.

      When you upload a PDF, it first gets uploaded to a S3 Database directly from the Browser, which then sends the Filename and other data to the Server. The Server then downloads that Document from the S3 and sends it to Gemini, which then streams JSON back to the Browser. After that, the PDF is permanently deleted from the S3.

      Data Privacy wise, I wouldn’t upload anything sensitive since idk what Google does with PDFs uploaded to Gemini.

      The Prompts are in English, so the output language is English as well. However, I actually only tested it with German Lecture PDFs myself.

      So, yes, it probably works with any language that Gemini supports.

      Here is the Source Code for the core function for this feature:

      export async function createLevelFromDocument(
          { docName, apiKey, numLevels, courseSectionTitle, courseSectionDescription }: 
          { docName: string, apiKey: string, numLevels: number, courseSectionTitle: string, courseSectionDescription: string }) 
          {
          
          const hasCourseSection = courseSectionTitle.length > 0 && courseSectionDescription.length > 0;
      
          // Step 1: Download the PDF and get a buffer from it
          const blob = await downloadObject({ filename: docName, path: "/", bucketName: "documents" });
          const arrayBuffer = await blob.arrayBuffer();
          
          // Step 2: call the model and pass the PDF
          //const openai = createOpenAI({ apiKey: apiKey });
          const gooogle = createGoogleGenerativeAI({ apiKey: apiKey });
      
          const courseSectionsPrompt = createLevelPrompt({ hasCourseSection, title: courseSectionTitle, description: courseSectionDescription });
          
          const isPDF = docName.endsWith(".pdf");
      
          const content: UserContent = [];
      
          if(isPDF) {
              content.push(pdfUserMessage(numLevels, courseSectionsPrompt) as any);
              content.push(pdfAttatchment(arrayBuffer) as any);
          } else {
              const html = await blob.text();
              content.push(htmlUserMessage(numLevels, courseSectionsPrompt, html) as any);
          }
      
          const result = await streamObject({ 
              model: gooogle("gemini-1.5-flash"),
              schema: multipleLevelSchema,
              messages: [
                  {
                      role: "user",
                      content: content
                  }
              ]
          })
          
      
          return result;
      }
      
    • Cr4yfishOP
      link
      618 days ago

      Haha. Well we can’t all actually be Duolingo and employ people to create the courses :D

      • @trashgirlfriend
        link
        718 days ago

        It’s all just flashcards with extra steps and anki already exists. /shrug

        • Robust Mirror
          link
          fedilink
          317 days ago

          I’ve made custom flashcards for anki to study stuff and I tested this for some similar things and it was a lot faster and easier. Anki feels like it takes forever so the investment to make a custom set is only worth it for things you need to study for a long time.

          If all you want is to generate a bunch of flashcards fast and you have a pdf with the info presented clearly it’s an easy method.

        • Cr4yfishOP
          link
          117 days ago

          Well, yes, in a way at least. I’m not pretending to invent something never done before. Although it already has multiple features that Anki doesn’t have.

  • @[email protected]
    link
    fedilink
    418 days ago

    Is it for self-host ppl too?

    For all projects/apps, I am looking for OIDC, S3 and PgSQL. It’s easier to implement these features earlier and these features will make any projects more popular in the self host community.

    • Cr4yfishOP
      link
      218 days ago

      Is it for self-host ppl too?

      In theory not an issue. I use Supabase, which you can self host as well.

      You can also self host the Mistral Client, but not Gemini. However, I am planning to move away from Gemini towards a more open solution which would also support self hosting, or in-browser AI.

      I am looking for OIDC, S3 and PgSQL

      Since I use Supabase, it runs on PgSQL and Supabase Storage, which is just an Adapter to AWS S3 - or any S3, really. For Auth, I use Supabase Auth which uses OAuth 2.0, that’s the same as OIDC right?

      • @[email protected]
        link
        fedilink
        217 days ago

        Very cool. You can check out ollama for hosting local ai model.

        OIDC is an extension of OAuth2 that focuses on user authentication rather than user authorization. Once OIDC authenticates a user, it uses OAuth2 specifications to perform authorization.

        The easiest way to support oidc is thru using lib from your framework/language. All major language should already have oidc lib. Take a look for authelia which has pretty nice doc. We host lots of app and we don’t want to login hundred times for each apps. It’s nice to login once only and all apps play nice to each other ;)

        • Cr4yfishOP
          link
          1
          edit-2
          17 days ago

          Yeah, I’ll probably go with langchain and some user-options for different LLMs.

          I’ll also look into authelia