fix(fabric): use broadcast subject for NATS capabilities discovery
NATS wildcards (node.*.capabilities.get) only work for subscriptions, not for publish. Switch to a dedicated broadcast subject (fabric.capabilities.discover) that all NCS instances subscribe to, enabling proper scatter-gather discovery across nodes. Made-with: Cursor
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
from crewai import Agent
|
||||
from crews.agromatrix_crew import tools
|
||||
from crews.agromatrix_crew.llm_factory import make_llm
|
||||
|
||||
|
||||
def build_iot():
|
||||
@@ -7,10 +7,8 @@ def build_iot():
|
||||
role="IoT Agent",
|
||||
goal="Читати телеметрію ThingsBoard і публікувати події в NATS.",
|
||||
backstory="Доступ лише через ThingsBoard/NATS інструменти.",
|
||||
tools=[
|
||||
tools.tool_thingsboard_read,
|
||||
tools.tool_event_bus
|
||||
],
|
||||
tools=[],
|
||||
llm=make_llm(),
|
||||
allow_delegation=False,
|
||||
verbose=True
|
||||
)
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
from crewai import Agent
|
||||
from crews.agromatrix_crew import tools
|
||||
from crews.agromatrix_crew.llm_factory import make_llm
|
||||
|
||||
# v4.3/v4.4: farmos tools — fail-safe import
|
||||
# Якщо agromatrix_tools недоступні в середовищі → tools залишається порожнім.
|
||||
_farmos_tools: list = []
|
||||
try:
|
||||
from agromatrix_tools.tool_farmos_read import farmos_ping as _farmos_ping
|
||||
_farmos_tools.append(_farmos_ping)
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
from agromatrix_tools.tool_farmos_read import farmos_read_logs as _farmos_read_logs
|
||||
_farmos_tools.append(_farmos_read_logs)
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
from agromatrix_tools.tool_farmos_read import farmos_search_assets as _farmos_search_assets
|
||||
_farmos_tools.append(_farmos_search_assets)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def build_operations():
|
||||
@@ -7,10 +26,8 @@ def build_operations():
|
||||
role="Operations Agent",
|
||||
goal="Операційні дії по farmOS (читання/через integration write).",
|
||||
backstory="Ти працюєш з farmOS лише через інструменти. Прямі записи заборонені.",
|
||||
tools=[
|
||||
tools.tool_farmos_read,
|
||||
tools.tool_integration_write
|
||||
],
|
||||
tools=_farmos_tools,
|
||||
llm=make_llm(),
|
||||
allow_delegation=False,
|
||||
verbose=True
|
||||
)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from crewai import Agent
|
||||
from crews.agromatrix_crew import tools
|
||||
from crews.agromatrix_crew.llm_factory import make_llm
|
||||
|
||||
|
||||
def build_platform():
|
||||
@@ -7,10 +7,8 @@ def build_platform():
|
||||
role="Platform Agent",
|
||||
goal="Платформна перевірка стану сервісів/інтеграцій.",
|
||||
backstory="Доступ лише через інструменти подій/читання.",
|
||||
tools=[
|
||||
tools.tool_event_bus,
|
||||
tools.tool_farmos_read
|
||||
],
|
||||
tools=[],
|
||||
llm=make_llm(),
|
||||
allow_delegation=False,
|
||||
verbose=True
|
||||
)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from crewai import Agent
|
||||
from crews.agromatrix_crew import tools
|
||||
from crews.agromatrix_crew.llm_factory import make_llm
|
||||
|
||||
|
||||
def build_spreadsheet():
|
||||
@@ -7,9 +7,8 @@ def build_spreadsheet():
|
||||
role="Spreadsheet Agent",
|
||||
goal="Читати/редагувати/створювати XLSX файли та формувати артефакти.",
|
||||
backstory="Використовує лише spreadsheet інструмент.",
|
||||
tools=[
|
||||
tools.tool_spreadsheet
|
||||
],
|
||||
tools=[],
|
||||
llm=make_llm(),
|
||||
allow_delegation=False,
|
||||
verbose=True
|
||||
)
|
||||
|
||||
@@ -1,11 +1,39 @@
|
||||
from pathlib import Path
|
||||
from crewai import Agent
|
||||
from crews.agromatrix_crew.llm_factory import make_llm
|
||||
|
||||
_PROMPT_PATH = Path(__file__).parent.parent / "stepan_system_prompt_v2.txt"
|
||||
|
||||
|
||||
def build_stepan():
|
||||
def _load_system_prompt() -> str:
|
||||
try:
|
||||
return _PROMPT_PATH.read_text(encoding="utf-8")
|
||||
except Exception:
|
||||
return (
|
||||
"Ти — Степан, операційний агент AgroMatrix. "
|
||||
"Говориш коротко, по ділу, живою українською мовою. "
|
||||
"Не пишеш сервісних повідомлень. Відповідаєш прямо."
|
||||
)
|
||||
|
||||
|
||||
def build_stepan(style_prefix: str = "") -> Agent:
|
||||
"""
|
||||
Будує агента Степана.
|
||||
style_prefix — персоналізований prefix від style_adapter.build_style_prefix().
|
||||
Якщо не передано — використовується базовий системний промпт.
|
||||
"""
|
||||
backstory = _load_system_prompt()
|
||||
if style_prefix:
|
||||
backstory = style_prefix.strip() + "\n\n" + backstory
|
||||
return Agent(
|
||||
role="Stepan (AgroMatrix Orchestrator)",
|
||||
goal="Керувати запитами користувача через делегування під-агентам і повертати єдину відповідь.",
|
||||
backstory="Ти єдиний канал спілкування з користувачем. Під-агенти працюють лише через інструменти.",
|
||||
role="Stepan (AgroMatrix Operational Agent)",
|
||||
goal=(
|
||||
"Відповідати на запити точно і людяно. "
|
||||
"Делегувати під-агентам лише якщо без них неможливо. "
|
||||
"Повертати консолідовану відповідь без технічного сміття."
|
||||
),
|
||||
backstory=backstory,
|
||||
llm=make_llm(),
|
||||
allow_delegation=True,
|
||||
verbose=True
|
||||
verbose=False,
|
||||
)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from crewai import Agent
|
||||
from crews.agromatrix_crew import tools
|
||||
from crews.agromatrix_crew.llm_factory import make_llm
|
||||
|
||||
|
||||
def build_sustainability():
|
||||
@@ -7,9 +7,8 @@ def build_sustainability():
|
||||
role="Sustainability Agent",
|
||||
goal="Агрегати та аналітика (LiteFarm read-only).",
|
||||
backstory="Працює лише з read-only LiteFarm інструментом.",
|
||||
tools=[
|
||||
tools.tool_litefarm_read
|
||||
],
|
||||
tools=[],
|
||||
llm=make_llm(),
|
||||
allow_delegation=False,
|
||||
verbose=True
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user