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) }
}
}