fun addAiTags()

in app/src/main/kotlin/io/klibs/app/indexing/ProjectIndexingService.kt [67:98]


    fun addAiTags() {
        var selectedProjectId: Int? = null
        try {
            val project = projectRepository.findWithoutTags() ?: return
            if (tagsBackoffProvider.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.debug("Generating AI tags for projectId=${project.id}: ${repo.name}")

            val tags = projectTagsGenerator.generateTagsForProject(
                repo.name,
                project.description ?: "",
                repo.description ?: "",
                repo.minimizedReadme ?: ""
            ).map {
                TagEntity(
                    projectId = project.idNotNull,
                    value = it,
                    origin = TagOrigin.AI
                )
            }
            projectTagRepository.saveAll(tags)
            logger.debug("Updated AI tags for projectId=${project.id} ${repo.name}: ${tags.joinToString(",") { it.value }})")
            tagsBackoffProvider.onSuccess(project.idNotNull)
        } catch (e: Exception) {
            logger.error("Exception while updating AI tags", e)
            selectedProjectId?.let { tagsBackoffProvider.onFailure(it) }
        }
    }