fun addAiDescription()

in app/src/main/kotlin/io/klibs/app/indexing/ProjectIndexingService.kt [37:65]


    fun addAiDescription() {
        var selectedProjectId: Int? = null
        try {
            val project = projectRepository.findWithoutDescription() ?: return
            if (descriptionBackoffProvider.isBackedOff(project.idNotNull)) {
                logger.debug("Selected projectId=${project.id} is in backoff; skipping this run")
                return
            }
            selectedProjectId = project.idNotNull

            val repo = scmRepositoryRepository.findById(project.scmRepoId) ?: error("Unable to find the repo: $project")
            logger.trace("Generating an AI description for projectId=${project.id}")

            val readmeMd = readmeService.readReadmeMd(project.scmRepoId)
                ?: error("Unable to generate the description due to missing or empty README.md for $project")

            // there can be some very long readmes... see https://github.com/robstoll/atrium
            val shortenedReadme = if (readmeMd.length >= 25_000) readmeMd.take(25_000) else readmeMd

            val description = projectDescriptionGenerator.generateProjectDescription(repo.name, shortenedReadme)
            projectRepository.updateDescription(project.idNotNull, description)
            logger.debug("Updated AI description for projectId=${project.id}")

            descriptionBackoffProvider.onSuccess(project.idNotNull)
        } catch (e: Exception) {
            logger.error("Exception while updating AI description", e)
            selectedProjectId?.let { descriptionBackoffProvider.onFailure(it) }
        }
    }