Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 23 additions & 8 deletions veadk/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ class Agent(LlmAgent):
skills (list[str]): List of skills that equip the agent with specific capabilities.
example_store (Optional[BaseExampleProvider]): Example store for providing example Q/A.
enable_shadowchar (bool): Whether to enable shadow character for the agent.
enable_dynamic_load_skills (bool): Whether to enable dynamic loading of skills.
"""

model_config = ConfigDict(arbitrary_types_allowed=True, extra="allow")
Expand Down Expand Up @@ -156,6 +157,7 @@ class Agent(LlmAgent):

enable_dataset_gen: bool = False

enable_dynamic_load_skills: bool = False
_skills_with_checklist: Dict[str, Any] = {}

def model_post_init(self, __context: Any) -> None:
Expand Down Expand Up @@ -364,13 +366,14 @@ def load_skills(self):
from pathlib import Path

from veadk.skills.skill import Skill
from veadk.skills.check_skills_callback import check_skills
from veadk.skills.utils import (
load_skills_from_cloud,
load_skills_from_directory,
)
from veadk.tools.skills_tools.skills_toolset import SkillsToolset

skills: Dict[str, Skill] = {}
self.skills_dict: Dict[str, Skill] = {}

# Determine skills_mode if not set
if not self.skills_mode:
Expand Down Expand Up @@ -445,17 +448,17 @@ def load_skills(self):
path = Path(item)
if path.exists() and path.is_dir():
for skill in load_skills_from_directory(path):
skills[skill.name] = skill
self.skills_dict[skill.name] = skill
else:
for skill in load_skills_from_cloud(item):
skills[skill.name] = skill
if skills:
self._skills_with_checklist = skills

self.skills_dict[skill.name] = skill
if self.skills_dict:
self.instruction += "\nYou have the following skills:\n"

self._skills_with_checklist = self.skills_dict

has_checklist = False
for skill in skills.values():
for skill in self.skills_dict.values():
self.instruction += (
f"- name: {skill.name}\n- description: {skill.description}\n\n"
)
Expand Down Expand Up @@ -487,10 +490,22 @@ def load_skills(self):
"You can use the skills by calling the `skills_tool` tool.\n\n"
)

self.tools.append(SkillsToolset(skills, self.skills_mode))
self.tools.append(SkillsToolset(self.skills_dict, self.skills_mode))
else:
logger.warning("No skills loaded.")

if self.enable_dynamic_load_skills and self.skills_dict:
if self.before_agent_callback:
if isinstance(self.before_agent_callback, list):
self.before_agent_callback.append(check_skills)
else:
self.before_agent_callback = [
self.before_agent_callback,
check_skills,
]
else:
self.before_agent_callback = check_skills

def _prepare_tracers(self):
enable_apmplus_tracer = os.getenv("ENABLE_APMPLUS", "false").lower() == "true"
enable_cozeloop_tracer = os.getenv("ENABLE_COZELOOP", "false").lower() == "true"
Expand Down
Loading