feat: LLM agent #12
@@ -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)
|
|
||||||
@@ -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
|
||||||
@@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user