Skip to content

Commit fc26c87

Browse files
authored
fix: prevent interruptions during skill loading & new version (#530)
1 parent a02aaca commit fc26c87

4 files changed

Lines changed: 35 additions & 28 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "veadk-python"
3-
version = "0.5.23"
3+
version = "0.5.24"
44
description = "Volcengine agent development kit, integrations with Volcengine cloud services."
55
readme = "README.md"
66
requires-python = ">=3.10"

veadk/skills/check_skills_callback.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,11 @@ def reload_skills_from_config(skills_config: List[str]) -> Dict[str, Skill]:
166166
for skill_dir in path.iterdir():
167167
if skill_dir.is_dir():
168168
skill = load_skill_from_directory(skill_dir)
169-
all_skills[skill.name] = skill
169+
# Only add skill if it loaded successfully
170+
if skill is not None:
171+
all_skills[skill.name] = skill
172+
else:
173+
logger.warning(f"Skipped failed skill from {skill_dir}")
170174
except Exception as e:
171175
logger.error(
172176
f"Failed to reload skills from local directory {path}: {e}"

veadk/skills/utils.py

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -85,39 +85,41 @@ def init_skill_check_list(
8585
return init_skill_check_list
8686

8787

88-
def load_skill_from_directory(skill_directory: Path) -> Skill:
88+
def load_skill_from_directory(skill_directory: Path) -> Optional[Skill]:
8989
logger.info(f"Load skill from {skill_directory}")
9090
skill_readme = skill_directory / "SKILL.md"
9191
if not skill_readme.exists():
9292
logger.error(f"Skill '{skill_directory}' has no SKILL.md file.")
93-
raise ValueError(f"Skill '{skill_directory}' has no SKILL.md file")
93+
return None
94+
95+
try:
96+
skill = frontmatter.load(str(skill_readme))
9497

95-
skill = frontmatter.load(str(skill_readme))
98+
skill_name = skill.get("name", "")
99+
skill_description = skill.get("description", "")
100+
checklist = skill.get("checklist", [])
96101

97-
skill_name = skill.get("name", "")
98-
skill_description = skill.get("description", "")
99-
checklist = skill.get("checklist", [])
102+
if not skill_name or not skill_description:
103+
logger.error(
104+
f"Skill {skill_readme} is missing name or description. Please check the SKILL.md file."
105+
)
106+
return None
100107

101-
if not skill_name or not skill_description:
102-
logger.error(
103-
f"Skill {skill_readme} is missing name or description. Please check the SKILL.md file."
108+
logger.info(
109+
f"Successfully loaded skill {skill_name} locally from {skill_readme}, name={skill_name}, description={skill_description}"
104110
)
105-
raise ValueError(
106-
f"Skill {skill_readme} is missing name or description. Please check the SKILL.md file."
111+
if checklist:
112+
logger.info(f"Skill {skill_name} checklist: {checklist}")
113+
114+
return Skill(
115+
name=skill_name, # type: ignore
116+
description=skill_description, # type: ignore
117+
path=str(skill_directory),
118+
checklist=checklist,
107119
)
108-
109-
logger.info(
110-
f"Successfully loaded skill {skill_name} locally from {skill_readme}, name={skill_name}, description={skill_description}"
111-
)
112-
if checklist:
113-
logger.info(f"Skill {skill_name} checklist: {checklist}")
114-
115-
return Skill(
116-
name=skill_name, # type: ignore
117-
description=skill_description, # type: ignore
118-
path=str(skill_directory),
119-
checklist=checklist,
120-
)
120+
except Exception as e:
121+
logger.error(f"Failed to load skill from {skill_directory}: {e}")
122+
return None
121123

122124

123125
def load_skills_from_directory(skills_directory: Path) -> list[Skill]:
@@ -126,7 +128,8 @@ def load_skills_from_directory(skills_directory: Path) -> list[Skill]:
126128
for skill_directory in skills_directory.iterdir():
127129
if skill_directory.is_dir():
128130
skill = load_skill_from_directory(skill_directory)
129-
skills.append(skill)
131+
if skill is not None:
132+
skills.append(skill)
130133
return skills
131134

132135

veadk/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
VERSION = "0.5.23"
15+
VERSION = "0.5.24"

0 commit comments

Comments
 (0)