Skip to content

Commit 8fa323e

Browse files
committed
JBAI-13783. Extract a general interface for AIAgent
1 parent 139dcd9 commit 8fa323e

File tree

31 files changed

+66
-43
lines changed

31 files changed

+66
-43
lines changed

agents/agents-core/src/commonMain/kotlin/ai/grazie/code/agents/core/AIAgent.kt renamed to agents/agents-core/src/commonMain/kotlin/ai/grazie/code/agents/core/agent/AIAgentBase.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
@file:OptIn(InternalAgentToolsApi::class)
22

3-
package ai.grazie.code.agents.core
3+
package ai.grazie.code.agents.core.agent
44

5+
import ai.grazie.code.agents.core.api.AIAgent
56
import ai.grazie.code.agents.core.event.AgentHandlerContext
67
import ai.grazie.code.agents.core.event.EventHandler
78
import ai.grazie.code.agents.core.exception.AIAgentEngineException
@@ -39,15 +40,15 @@ private suspend inline fun <T> allowToolCalls(block: suspend AllowDirectToolCall
3940
* @param toolRegistry A registry managing tools and their associated stages available to the agent.
4041
* @param eventHandler An event handler that listens for and processes various agent-related events.
4142
*/
42-
abstract class AIAgent<TStrategy : AIAgentStrategy<TConfig>, TConfig : AIAgentConfig>(
43+
abstract class AIAgentBase<TStrategy : AIAgentStrategy<TConfig>, TConfig : AIAgentConfig>(
4344
protected val strategy: TStrategy,
4445
val toolRegistry: ToolRegistry,
4546
private val eventHandler: EventHandler,
4647
val agentConfig: TConfig,
47-
) {
48+
) : AIAgent {
4849

4950
private companion object {
50-
private val logger = LoggerFactory.create("ai.grazie.code.agents.core.${AIAgent::class.simpleName!!}")
51+
private val logger = LoggerFactory.create("ai.grazie.code.agents.core.${AIAgentBase::class.simpleName!!}")
5152

5253
private const val INVALID_TOOL = "Can not call tools beside \"${TerminationTool.NAME}\"!"
5354

@@ -81,7 +82,7 @@ abstract class AIAgent<TStrategy : AIAgentStrategy<TConfig>, TConfig : AIAgentCo
8182
*
8283
* @param prompt The initial input string to start the agent execution process.
8384
*/
84-
suspend fun run(prompt: String) {
85+
override suspend fun run(prompt: String) {
8586
runningMutex.withLock {
8687
if (isRunning) throw IllegalStateException("Agent is already running!")
8788
isRunning = true
@@ -129,7 +130,7 @@ abstract class AIAgent<TStrategy : AIAgentStrategy<TConfig>, TConfig : AIAgentCo
129130
* @param userPrompt The input string used to initialize and run the agent.
130131
* @return A string containing the result of the agent's execution, or null if the result could not be retrieved.
131132
*/
132-
suspend fun runAndGetResult(userPrompt: String): String? {
133+
override suspend fun runAndGetResult(userPrompt: String): String? {
133134
run(userPrompt)
134135
return agentResultDeferred.await()
135136
}
@@ -176,7 +177,7 @@ abstract class AIAgent<TStrategy : AIAgentStrategy<TConfig>, TConfig : AIAgentCo
176177
message = "Tool \"${content.toolName}\" not found!",
177178
toolCallId = content.toolCallId,
178179
toolName = content.toolName,
179-
agentId = this@AIAgent.strategy.name,
180+
agentId = this@AIAgentBase.strategy.name,
180181
)
181182
}
182183

agents/agents-core/src/commonMain/kotlin/ai/grazie/code/agents/core/AIAgentTool.kt renamed to agents/agents-core/src/commonMain/kotlin/ai/grazie/code/agents/core/agent/AIAgentTool.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
1-
package ai.grazie.code.agents.core
1+
package ai.grazie.code.agents.core.agent
22

3-
import ai.grazie.code.agents.core.AIAgentTool.AgentToolArgs
4-
import ai.grazie.code.agents.core.AIAgentTool.AgentToolResult
3+
import ai.grazie.code.agents.core.agent.AIAgentTool.AgentToolArgs
4+
import ai.grazie.code.agents.core.agent.AIAgentTool.AgentToolResult
55
import ai.grazie.code.agents.core.model.agent.AIAgentConfig
66
import ai.grazie.code.agents.core.model.agent.AIAgentStrategy
77
import ai.grazie.code.agents.core.tools.*
88
import kotlinx.serialization.KSerializer
99
import kotlinx.serialization.Serializable
1010
import kotlinx.serialization.json.Json
1111

12-
fun <TStrategy : AIAgentStrategy<TConfig>, TConfig : AIAgentConfig> AIAgent<TStrategy, TConfig>.asTool(
12+
fun <TStrategy : AIAgentStrategy<TConfig>, TConfig : AIAgentConfig> AIAgentBase<TStrategy, TConfig>.asTool(
1313
agentDescription: String,
1414
requestDescription: String = "Input for the task"
1515
) = AIAgentTool<TStrategy, TConfig>(this, requestDescription, agentDescription)
1616

1717

1818
class AIAgentTool<TStrategy : AIAgentStrategy<TConfig>, TConfig : AIAgentConfig>(
19-
val agent: AIAgent<TStrategy, TConfig>,
19+
val agent: AIAgentBase<TStrategy, TConfig>,
2020
agentName: String,
2121
agentDescription: String,
2222
requestDescription: String = "Input for the task"
2323
) : Tool<AgentToolArgs, AgentToolResult>() {
2424
@Serializable
25-
data class AgentToolArgs(val request: String) : Tool.Args
25+
data class AgentToolArgs(val request: String) : Args
2626

2727
@Serializable
2828
data class AgentToolResult(

agents/agents-core/src/commonMain/kotlin/ai/grazie/code/agents/core/KotlinAIAgent.kt renamed to agents/agents-core/src/commonMain/kotlin/ai/grazie/code/agents/core/agent/KotlinAIAgent.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package ai.grazie.code.agents.core
1+
package ai.grazie.code.agents.core.agent
22

33
import ai.grazie.code.agents.core.agent.entity.LocalAgentStrategy
44
import ai.grazie.code.agents.core.agent.config.LocalAgentConfig
@@ -29,7 +29,7 @@ class KotlinAIAgent(
2929
val promptExecutor: PromptExecutor,
3030
private val cs: CoroutineScope,
3131
installFeatures: suspend FeatureContext.() -> Unit = {}
32-
) : AIAgent<LocalAgentStrategy, LocalAgentConfig>(
32+
) : AIAgentBase<LocalAgentStrategy, LocalAgentConfig>(
3333
strategy = strategy,
3434
toolRegistry = toolRegistry,
3535
agentConfig = agentConfig,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package ai.grazie.code.agents.core.api
2+
3+
/**
4+
* Represents a basic interface for AI agent.
5+
*/
6+
interface AIAgent {
7+
8+
/**
9+
* Initiates the execution of the AI agent based on the provided input prompt.
10+
*
11+
* @param prompt the input text that guides the agent's behavior or response generation
12+
*/
13+
suspend fun run(prompt: String)
14+
15+
/**
16+
* Executes the AI agent with the given prompt and retrieves the resulting output.
17+
*
18+
* @param userPrompt the input text used to guide the behavior or response of the AI agent
19+
* @return the response generated by the AI agent, or null if no result is available
20+
*/
21+
suspend fun runAndGetResult(userPrompt: String): String?
22+
}

agents/agents-core/src/commonMain/kotlin/ai/grazie/code/agents/core/api/LocalAIAgentExt.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package ai.grazie.code.agents.core.api
22

3-
import ai.grazie.code.agents.core.KotlinAIAgent
3+
import ai.grazie.code.agents.core.agent.KotlinAIAgent
44
import ai.grazie.code.agents.core.agent.config.LocalAgentConfig
55
import ai.grazie.code.agents.core.event.EventHandler
66
import ai.grazie.code.agents.core.tools.ToolRegistry

agents/agents-core/src/commonMain/kotlin/ai/grazie/code/agents/core/engine/LocalAgentSession.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package ai.grazie.code.agents.core.engine
33
import ai.grazie.code.agents.core.model.message.AgentToEnvironmentMessage
44
import ai.grazie.code.agents.core.model.message.EnvironmentToAgentMessage
55
import ai.grazie.code.agents.core.tools.ToolRegistry
6-
import ai.grazie.code.agents.core.KotlinAIAgent
6+
import ai.grazie.code.agents.core.agent.KotlinAIAgent
77
import ai.grazie.code.agents.core.agent.config.LocalAgentConfig
88
import ai.grazie.code.agents.core.agent.entity.LocalAgentStrategy
99
import ai.grazie.code.agents.core.environment.LocalAgentEnvironmentProxy

agents/agents-core/src/commonMain/kotlin/ai/grazie/code/agents/core/event/EventHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import ai.grazie.code.agents.core.tools.ToolStage
77
/**
88
* Handles various events and delegates actions based on internal handlers.
99
* Handler methods are called on the same context as the calling agent,
10-
* see [ai.grazie.code.agents.core.AIAgent] **run** method.
10+
* see [ai.grazie.code.agents.core.agent.AIAgentBase] **run** method.
1111
*
1212
* @property resultHandler Handler for processing successful results.
1313
* @property toolCallListener Listener to notify the tool invocation.

agents/agents-core/src/commonMain/kotlin/ai/grazie/code/agents/core/feature/AIAgentPipeline.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package ai.grazie.code.agents.core.feature
22

3-
import ai.grazie.code.agents.core.KotlinAIAgent
3+
import ai.grazie.code.agents.core.agent.KotlinAIAgent
44
import ai.grazie.code.agents.core.agent.entity.LocalAgentStorageKey
55
import ai.grazie.code.agents.core.agent.entity.LocalAgentStrategy
66
import ai.grazie.code.agents.core.agent.entity.LocalAgentNode

agents/agents-core/src/commonMain/kotlin/ai/grazie/code/agents/core/feature/handler/AgentHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package ai.grazie.code.agents.core.feature.handler
22

33
import ai.grazie.code.agents.core.annotation.InternalAgentsApi
4-
import ai.grazie.code.agents.core.KotlinAIAgent
4+
import ai.grazie.code.agents.core.agent.KotlinAIAgent
55
import ai.grazie.code.agents.core.agent.entity.LocalAgentStrategy
66
import ai.grazie.code.agents.core.agent.entity.stage.LocalAgentStage
77
import ai.grazie.code.agents.core.environment.AgentEnvironment

agents/agents-core/src/jvmTest/kotlin/ai/grazie/code/agents/core/calculator/CalculatorTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package ai.grazie.code.agents.core.calculator
22

33
import ai.grazie.code.agents.core.event.EventHandler
44
import ai.grazie.code.agents.core.tools.ToolRegistry
5-
import ai.grazie.code.agents.core.KotlinAIAgent
5+
import ai.grazie.code.agents.core.agent.KotlinAIAgent
66
import ai.grazie.code.agents.core.agent.config.LocalAgentConfig
77
import ai.grazie.code.agents.core.agent.entity.LocalAgentStrategy
88
import ai.grazie.code.agents.core.dsl.builder.forwardTo

0 commit comments

Comments
 (0)