feat: LLM agent #12

Merged
2584433 merged 13 commits from feat/llm-agent into dev 2025-10-29 12:58:41 +00:00
3 changed files with 37 additions and 32 deletions
Showing only changes of commit f8d08ac7ca - Show all commits

View File

@@ -7,6 +7,7 @@ from spade.template import Template
from spade_bdi.bdi import BDIAgent from spade_bdi.bdi import BDIAgent
from control_backend.agents.bdi.behaviours.belief_setter import BeliefSetter from control_backend.agents.bdi.behaviours.belief_setter import BeliefSetter
from control_backend.agents.bdi.behaviours.recieve_llm_resp_behavoir import ReceiveLLMResponseBehaviour
from control_backend.core.config import settings from control_backend.core.config import settings
@@ -27,7 +28,7 @@ class BDICoreAgent(BDIAgent):
self.logger.info("BDICoreAgent setup started") self.logger.info("BDICoreAgent setup started")
self.add_behaviour(BeliefSetter()) self.add_behaviour(BeliefSetter())
self._add_llm_response_receiver() self.add_behaviour(ReceiveLLMResponseBehaviour())
await self._send_to_llm("Hello we are the Pepper plus team") await self._send_to_llm("Hello we are the Pepper plus team")
# This is the example message currently sent to the llm at the start of the Program # This is the example message currently sent to the llm at the start of the Program
@@ -63,36 +64,9 @@ class BDICoreAgent(BDIAgent):
body= text, body= text,
thread= "llm_request", thread= "llm_request",
) )
msg.set_metadata("performative", "inform")
await self.send(msg) await self.send(msg)
self.agent.logger.debug("Message sent to LLM: %s", text) self.agent.logger.debug("Message sent to LLM: %s", text)
self.add_behaviour(SendBehaviour()) self.add_behaviour(SendBehaviour())
return "LLM message dispatch scheduled" return "LLM message dispatch scheduled"
def _add_llm_response_receiver(self) -> None:
"""
Adds behavior to receive responses from the LLM Agent.
"""
class ReceiveLLMResponseBehaviour(CyclicBehaviour):
async def run(self) -> None:
msg = await self.receive(timeout=2)
if not msg:
return
sender = msg.sender.node
match sender:
case settings.agent_settings.llm_agent_name:
content = msg.body
self.agent.logger.info("Received LLM response: %s", content)
#Here the BDI can pass the message back as a response
case _:
self.logger.debug("Not from the llm, discarding message")
pass
template = Template()
template.thread = "llm_response"
self.add_behaviour(ReceiveLLMResponseBehaviour(), template)

View File

@@ -0,0 +1,29 @@
import asyncio
import json
import logging
from spade.agent import Message
from spade.behaviour import CyclicBehaviour
from spade_bdi.bdi import BDIAgent
from control_backend.core.config import settings
class ReceiveLLMResponseBehaviour(CyclicBehaviour):
"""
Adds behavior to receive responses from the LLM Agent.
"""
logger = logging.getLogger("BDI/LLM Reciever")
async def run(self):
msg = await self.receive(timeout=2)
if not msg:
return
sender = msg.sender.node
match sender:
case settings.agent_settings.llm_agent_name:
content = msg.body
self.logger.info("Received LLM response: %s", content)
#Here the BDI can pass the message back as a response
case _:
self.logger.debug("Not from the llm, discarding message")
pass

View File

@@ -36,9 +36,11 @@ async def lifespan(app: FastAPI):
# Initiate agents # Initiate agents
llm_agent = LLMAgent(settings.agent_settings.test_agent_name + '@' + settings.agent_settings.host, "secret, ask twirre") llm_agent = LLMAgent(settings.agent_settings.llm_agent_name + '@' + settings.agent_settings.host,
"secret, ask twirre")
await llm_agent.start() await llm_agent.start()
bdi_core = BDICoreAgent(settings.agent_settings.bdi_core_agent_name + '@' + settings.agent_settings.host, "secret, ask twirre", "src/control_backend/agents/bdi/rules.asl") bdi_core = BDICoreAgent(settings.agent_settings.bdi_core_agent_name + '@' + settings.agent_settings.host,
"secret, ask twirre", "src/control_backend/agents/bdi/rules.asl")
await bdi_core.start() await bdi_core.start()