Sergi Aguilar
10/03/2025, 7:57 AMAndrey Bragin
10/04/2025, 11:55 AMSergi Aguilar
10/05/2025, 7:40 PMsuspend fun main() {
// Memory configuration
val localMemory = LocalFileMemoryProvider(
config = LocalMemoryConfig("user-traits-memory"),
storage = SimpleStorage(JVMFileSystemProvider.ReadWrite),
fs = JVMFileSystemProvider.ReadWrite,
root = Path("examples/kotlin/facts-store-kotlin/memory")
).also {
runBlocking {
it.save(
fact = SingleFact(
concept = Concept(
"personality-trait",
"A personality trait of every user",
factType = FactType.SINGLE
),
value = "Has no sense of humour, if they ask for a joke they expect an interesting fact instead",
timestamp = DefaultTimeProvider.getCurrentTimestamp()
),
subject = MemorySubject.Everything,
scope = MemoryScope.Agent("fact-agent"),
)
}
}
val strategy = strategy("fact-agent", toolSelectionStrategy = ToolSelectionStrategy.NONE) {
val loadAll by nodeLoadAllFactsFromMemory<String>(
name = "loadMemoryNode",
subjects = listOf(MemorySubject.Everything)
)
val messageNode by node<String, String>("messageNode") {
llm.writeSession {
updatePrompt {
user(it)
}
requestLLMWithoutTools().content
}
}
edge(nodeStart forwardTo loadAll)
edge(loadAll forwardTo messageNode)
edge(messageNode forwardTo nodeFinish)
}
// populate the openAI API key here.
val agent = AIAgent(
promptExecutor = simpleOpenAIExecutor(API_KEY),
strategy = strategy,
agentConfig = AIAgentConfig(
prompt = prompt("fact-agent") {},
model = OpenAIModels.Chat.GPT5Nano,
maxAgentIterations = 10
),
toolRegistry = ToolRegistry.EMPTY
) {
install(AgentMemory) {
memoryProvider = localMemory
}
install(OpenTelemetry) {
addLangfuseExporter(
langfuseUrl = "<http://localhost:33333>",
langfusePublicKey = PUBLIC_KEY,
langfuseSecretKey = PRIVATE_KEY,
)
setVerbose(true)
}
}
agent.run("Tell me an interesting joke")
}Andrey Bragin
10/05/2025, 10:44 PMSergi Aguilar
10/06/2025, 6:13 AM