From f04f2fc1703275958a87f823581968fb34653759 Mon Sep 17 00:00:00 2001 From: AntonButov <58133570+AntonButov@users.noreply.github.com> Date: Sat, 1 Mar 2025 21:59:47 +0300 Subject: [PATCH] update openai --- code-factory-processor/build.gradle.kts | 3 +- .../com/code/factory/bridge/OpenAiService.kt | 629 +----------------- gradle/libs.versions.toml | 6 +- .../kotlin/CompilationForAssertationTest.kt | 19 +- 4 files changed, 32 insertions(+), 625 deletions(-) diff --git a/code-factory-processor/build.gradle.kts b/code-factory-processor/build.gradle.kts index 2e59826..4bf79a0 100644 --- a/code-factory-processor/build.gradle.kts +++ b/code-factory-processor/build.gradle.kts @@ -26,10 +26,11 @@ dependencies { implementation(libs.kotlinx.coroutines.core) implementation(libs.tschuchortdev.testing.ksp) + implementation(libs.mockk) + testImplementation(kotlin("test")) testImplementation(libs.kotlinx.coroutines.test) testImplementation(libs.kotest.assertions) - testImplementation(libs.mockk) testImplementation(libs.kotest.runner.junit5.jvm) } diff --git a/code-factory-processor/src/main/kotlin/com/code/factory/bridge/OpenAiService.kt b/code-factory-processor/src/main/kotlin/com/code/factory/bridge/OpenAiService.kt index cde33fc..0d0762a 100644 --- a/code-factory-processor/src/main/kotlin/com/code/factory/bridge/OpenAiService.kt +++ b/code-factory-processor/src/main/kotlin/com/code/factory/bridge/OpenAiService.kt @@ -1,76 +1,17 @@ package com.code.factory.bridge -import com.aallam.openai.api.BetaOpenAI -import com.aallam.openai.api.assistant.Assistant -import com.aallam.openai.api.assistant.AssistantId -import com.aallam.openai.api.assistant.AssistantRequest -import com.aallam.openai.api.audio.SpeechRequest -import com.aallam.openai.api.audio.Transcription -import com.aallam.openai.api.audio.TranscriptionRequest -import com.aallam.openai.api.audio.Translation -import com.aallam.openai.api.audio.TranslationRequest -import com.aallam.openai.api.batch.BatchId import com.aallam.openai.api.chat.ChatChoice import com.aallam.openai.api.chat.ChatCompletion -import com.aallam.openai.api.chat.ChatCompletionChunk import com.aallam.openai.api.chat.ChatCompletionRequest import com.aallam.openai.api.chat.ChatMessage import com.aallam.openai.api.chat.ChatRole -import com.aallam.openai.api.completion.CompletionRequest -import com.aallam.openai.api.completion.TextCompletion -import com.aallam.openai.api.core.PaginatedList -import com.aallam.openai.api.core.RequestOptions import com.aallam.openai.api.core.Role -import com.aallam.openai.api.core.SortOrder -import com.aallam.openai.api.core.Status -import com.aallam.openai.api.edits.Edit -import com.aallam.openai.api.edits.EditsRequest -import com.aallam.openai.api.embedding.EmbeddingRequest -import com.aallam.openai.api.embedding.EmbeddingResponse -import com.aallam.openai.api.file.File -import com.aallam.openai.api.file.FileId -import com.aallam.openai.api.file.FileUpload -import com.aallam.openai.api.finetune.FineTune -import com.aallam.openai.api.finetune.FineTuneEvent -import com.aallam.openai.api.finetune.FineTuneId -import com.aallam.openai.api.finetune.FineTuneRequest -import com.aallam.openai.api.finetuning.FineTuningId -import com.aallam.openai.api.finetuning.FineTuningJob -import com.aallam.openai.api.finetuning.FineTuningJobEvent -import com.aallam.openai.api.finetuning.FineTuningRequest -import com.aallam.openai.api.image.ImageCreation -import com.aallam.openai.api.image.ImageEdit -import com.aallam.openai.api.image.ImageJSON -import com.aallam.openai.api.image.ImageURL -import com.aallam.openai.api.image.ImageVariation -import com.aallam.openai.api.message.Message -import com.aallam.openai.api.message.MessageId -import com.aallam.openai.api.message.MessageRequest import com.aallam.openai.api.message.TextContent -import com.aallam.openai.api.model.Model import com.aallam.openai.api.model.ModelId -import com.aallam.openai.api.moderation.ModerationRequest -import com.aallam.openai.api.moderation.TextModeration -import com.aallam.openai.api.run.Run -import com.aallam.openai.api.run.RunId -import com.aallam.openai.api.run.RunRequest -import com.aallam.openai.api.run.RunStep -import com.aallam.openai.api.run.RunStepId -import com.aallam.openai.api.run.ThreadRunRequest -import com.aallam.openai.api.run.ToolOutput -import com.aallam.openai.api.thread.Thread -import com.aallam.openai.api.thread.ThreadId -import com.aallam.openai.api.thread.ThreadRequest -import com.aallam.openai.api.vectorstore.FileBatchRequest -import com.aallam.openai.api.vectorstore.FilesBatch -import com.aallam.openai.api.vectorstore.VectorStore -import com.aallam.openai.api.vectorstore.VectorStoreFile -import com.aallam.openai.api.vectorstore.VectorStoreFileRequest -import com.aallam.openai.api.vectorstore.VectorStoreId -import com.aallam.openai.api.vectorstore.VectorStoreRequest import com.aallam.openai.client.OpenAI import com.google.devtools.ksp.processing.KSPLogger -import kotlinx.coroutines.flow.Flow +import io.mockk.coEvery +import io.mockk.mockk private const val SYSTEM = "You are Kotlin developer." private const val USER_ASK_FIRST = "You had to implement interface:" @@ -140,479 +81,12 @@ fun openAiService( logger = logger, ) -fun openAiServiceMock(logger: KSPLogger): OpenAiService = - OpenAiServiceImpl( - openAi = OpenAiMock(), - logger = logger, - ) - -class OpenAiMock : OpenAI { // #83 - override suspend fun completion(request: CompletionRequest): TextCompletion { - TODO("Not yet implemented") - } - - override fun completions(request: CompletionRequest): Flow { - TODO("Not yet implemented") - } - - override suspend fun delete( - fileId: FileId, - requestOptions: RequestOptions?, - ): Boolean { - TODO("Not yet implemented") - } - - override suspend fun download( - fileId: FileId, - requestOptions: RequestOptions?, - ): ByteArray { - TODO("Not yet implemented") - } - - override suspend fun file( - fileId: FileId, - requestOptions: RequestOptions?, - ): File? { - TODO("Not yet implemented") - } - - override suspend fun file( - request: FileUpload, - requestOptions: RequestOptions?, - ): File { - TODO("Not yet implemented") - } - - override suspend fun files(requestOptions: RequestOptions?): List { - TODO("Not yet implemented") - } - - override suspend fun cancel(fineTuneId: FineTuneId): FineTune? { - TODO("Not yet implemented") - } - - override suspend fun delete(fineTuneModel: ModelId): Boolean { - TODO("Not yet implemented") - } - - override suspend fun fineTune(fineTuneId: FineTuneId): FineTune? { - TODO("Not yet implemented") - } - - override suspend fun fineTune(request: FineTuneRequest): FineTune { - TODO("Not yet implemented") - } - - override suspend fun fineTuneEvents(fineTuneId: FineTuneId): List { - TODO("Not yet implemented") - } - - override fun fineTuneEventsFlow(fineTuneId: FineTuneId): Flow { - TODO("Not yet implemented") - } - - override suspend fun fineTunes(): List { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun assistant( - id: AssistantId, - request: AssistantRequest, - requestOptions: RequestOptions?, - ): Assistant { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun assistant( - id: AssistantId, - requestOptions: RequestOptions?, - ): Assistant? { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun assistant( - request: AssistantRequest, - requestOptions: RequestOptions?, - ): Assistant { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun assistants( - limit: Int?, - order: SortOrder?, - after: AssistantId?, - before: AssistantId?, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun delete( - id: AssistantId, - requestOptions: RequestOptions?, - ): Boolean { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun delete( - id: ThreadId, - requestOptions: RequestOptions?, - ): Boolean { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun thread( - id: ThreadId, - requestOptions: RequestOptions?, - ): Thread? { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun thread( - id: ThreadId, - metadata: Map, - requestOptions: RequestOptions?, - ): Thread { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun thread( - request: ThreadRequest?, - requestOptions: RequestOptions?, - ): Thread { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun cancel( - vectorStoreId: VectorStoreId, - batchId: BatchId, - requestOptions: RequestOptions?, - ): FilesBatch? { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun createVectorStore( - request: VectorStoreRequest?, - requestOptions: RequestOptions?, - ): VectorStore { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun createVectorStoreFile( - id: VectorStoreId, - request: VectorStoreFileRequest, - requestOptions: RequestOptions?, - ): VectorStoreFile { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun createVectorStoreFilesBatch( - id: VectorStoreId, - request: FileBatchRequest, - requestOptions: RequestOptions?, - ): FilesBatch { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun delete( - id: VectorStoreId, - requestOptions: RequestOptions?, - ): Boolean { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun delete( - id: VectorStoreId, - fileId: FileId, - requestOptions: RequestOptions?, - ): Boolean { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun updateVectorStore( - id: VectorStoreId, - request: VectorStoreRequest, - requestOptions: RequestOptions?, - ): VectorStore { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun vectorStore( - id: VectorStoreId, - requestOptions: RequestOptions?, - ): VectorStore? { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun vectorStoreFileBatch( - vectorStoreId: VectorStoreId, - batchId: BatchId, - requestOptions: RequestOptions?, - ): FilesBatch? { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun vectorStoreFiles( - id: VectorStoreId, - limit: Int?, - order: SortOrder?, - after: VectorStoreId?, - before: VectorStoreId?, - filter: Status?, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun vectorStoreFilesBatches( - vectorStoreId: VectorStoreId, - batchId: BatchId, - limit: Int?, - order: SortOrder?, - after: VectorStoreId?, - before: VectorStoreId?, - filter: Status?, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun vectorStores( - limit: Int?, - order: SortOrder?, - after: VectorStoreId?, - before: VectorStoreId?, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - override suspend fun edit(request: EditsRequest): Edit { - TODO("Not yet implemented") - } - - override suspend fun embeddings( - request: EmbeddingRequest, - requestOptions: RequestOptions?, - ): EmbeddingResponse { - TODO("Not yet implemented") - } - - override suspend fun model( - modelId: ModelId, - requestOptions: RequestOptions?, - ): Model { - TODO("Not yet implemented") - } - - override suspend fun models(requestOptions: RequestOptions?): List { - TODO("Not yet implemented") - } - - override suspend fun moderations( - request: ModerationRequest, - requestOptions: RequestOptions?, - ): TextModeration { - TODO("Not yet implemented") - } - - override suspend fun cancel( - id: FineTuningId, - requestOptions: RequestOptions?, - ): FineTuningJob? { - TODO("Not yet implemented") - } - - override suspend fun fineTuningEvents( - id: FineTuningId, - after: String?, - limit: Int?, - requestOptions: RequestOptions?, - ): PaginatedList { - TODO("Not yet implemented") - } - - override suspend fun fineTuningJob( - id: FineTuningId, - requestOptions: RequestOptions?, - ): FineTuningJob? { - TODO("Not yet implemented") - } - - override suspend fun fineTuningJob( - request: FineTuningRequest, - requestOptions: RequestOptions?, - ): FineTuningJob { - TODO("Not yet implemented") - } - - override suspend fun fineTuningJobs( - after: String?, - limit: Int?, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun cancel( - threadId: ThreadId, - runId: RunId, - requestOptions: RequestOptions?, - ): Run { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun createRun( - threadId: ThreadId, - request: RunRequest, - requestOptions: RequestOptions?, - ): Run { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun createThreadRun( - request: ThreadRunRequest, - requestOptions: RequestOptions?, - ): Run { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun getRun( - threadId: ThreadId, - runId: RunId, - requestOptions: RequestOptions?, - ): Run { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun runStep( - threadId: ThreadId, - runId: RunId, - stepId: RunStepId, - requestOptions: RequestOptions?, - ): RunStep { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun runSteps( - threadId: ThreadId, - runId: RunId, - limit: Int?, - order: SortOrder?, - after: RunStepId?, - before: RunStepId?, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun runs( - threadId: ThreadId, - limit: Int?, - order: SortOrder?, - after: RunId?, - before: RunId?, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun submitToolOutput( - threadId: ThreadId, - runId: RunId, - output: List, - requestOptions: RequestOptions?, - ): Run { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun updateRun( - threadId: ThreadId, - runId: RunId, - metadata: Map?, - requestOptions: RequestOptions?, - ): Run { - TODO("Not yet implemented") - } - - override suspend fun imageJSON( - creation: ImageCreation, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - override suspend fun imageJSON( - edit: ImageEdit, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - override suspend fun imageJSON( - variation: ImageVariation, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - override suspend fun imageURL( - creation: ImageCreation, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - override suspend fun imageURL( - edit: ImageEdit, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - override suspend fun imageURL( - variation: ImageVariation, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - @OptIn(BetaOpenAI::class) - override suspend fun chatCompletion( - request: ChatCompletionRequest, - requestOptions: RequestOptions?, - ): ChatCompletion { - return ChatCompletion( +fun openAiServiceMock(logger: KSPLogger): OpenAiService { + val openAiMock = mockk() + coEvery { + openAiMock.chatCompletion(any()) + } returns + ChatCompletion( id = "id", created = 0, model = ModelId("1"), @@ -627,12 +101,12 @@ class OpenAiMock : OpenAI { // #83 com.aallam.openai.api.chat.TextContent( content = """ - Sure, the implementation of the interface `ForGenerate` can be done as follows: + Sure, the implementation of the interface `ForGenerate` can be done as follows: - ```kotlin - class GeneratedCode(): ForGenerate { - override fun plus(first: Int, second: Int): Int { - return first + second + ```kotlin + class GeneratedCode(): ForGenerate { + override fun plus(first: Int, second: Int): Int { + return first + second } } ``` @@ -642,77 +116,8 @@ class OpenAiMock : OpenAI { // #83 ), ), ) - } - - override fun chatCompletions( - request: ChatCompletionRequest, - requestOptions: RequestOptions?, - ): Flow { - TODO() - } - - override suspend fun speech( - request: SpeechRequest, - requestOptions: RequestOptions?, - ): ByteArray { - TODO("Not yet implemented") - } - - override suspend fun transcription( - request: TranscriptionRequest, - requestOptions: RequestOptions?, - ): Transcription { - TODO("Not yet implemented") - } - - override suspend fun translation( - request: TranslationRequest, - requestOptions: RequestOptions?, - ): Translation { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun message( - threadId: ThreadId, - messageId: MessageId, - requestOptions: RequestOptions?, - ): Message { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun message( - threadId: ThreadId, - messageId: MessageId, - metadata: Map?, - requestOptions: RequestOptions?, - ): Message { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun message( - threadId: ThreadId, - request: MessageRequest, - requestOptions: RequestOptions?, - ): Message { - TODO("Not yet implemented") - } - - @BetaOpenAI - override suspend fun messages( - threadId: ThreadId, - limit: Int?, - order: SortOrder?, - after: MessageId?, - before: MessageId?, - requestOptions: RequestOptions?, - ): List { - TODO("Not yet implemented") - } - - override fun close() { - TODO("Not yet implemented") - } + return OpenAiServiceImpl( + openAi = openAiMock, + logger = logger, + ) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4c1833b..7374e4f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,14 +1,14 @@ [versions] -kotlin = "1.9.25" +kotlin = "1.9.24" kotlinx-coroutines = "1.9.0" -ksp = "1.9.25-1.0.20" +ksp = "1.9.24-1.0.20" autoservice-ksp = "1.2.0" autoservice = "1.1.1" tschuchortdev = "1.6.0" kotest = "5.9.1" mockk = "1.13.17" kotestRunnerJunit5Jvm = "5.9.1" -openaiKotlinBom = "3.8.2" +openaiKotlinBom = "4.0.1" vanniktech="0.30.0" ktlint = "12.2.0" diff --git a/utils/src/test/kotlin/CompilationForAssertationTest.kt b/utils/src/test/kotlin/CompilationForAssertationTest.kt index 5a0f04f..4f9a373 100644 --- a/utils/src/test/kotlin/CompilationForAssertationTest.kt +++ b/utils/src/test/kotlin/CompilationForAssertationTest.kt @@ -4,16 +4,17 @@ import kotlin.test.Test import kotlin.test.assertTrue class CompilationForAssertationTest { + val correctCode = + """ + class Test { + fun test(): String { + return "test" + } + } + """.trimIndent() + @Test fun `correct code should compile`() { - val correctCode = - """ - class Test { - fun test() { - return "test" - } - } - """.trimIndent() compilationForAssertations(correctCode) { assertTrue { true } } @@ -22,7 +23,7 @@ class CompilationForAssertationTest { @Test fun `incorrect code should not compile`() { assertThrows { - compilationForAssertations("") { + compilationForAssertations(correctCode) { error("My error.") } }