Skip to content

v0.4.3 — Gemini adapter fix, GitHub templates, docs guardrails

Choose a tag to compare

@rosspeili rosspeili released this 10 Jul 07:25
· 117 commits to main since this release

Added

  • Framework — _sanitize_gemini_tool_name() for explicit Gemini/OpenAI/DeepSeek tool-name mapping (#229).
  • Tests — Gemini sanitization coverage and catalog doc anti-pattern guard (test_skill_docs_gemini_anti_patterns) to prevent manual types.Tool wrapping regressions (#230).
  • Documentation — Canonical Gemini dispatch in gemini.md and skill_usage_template.md; contributor category selection guidance in CONTRIBUTING.md (#204, #205).

Changed

  • Framework — SkillLoader.to_gemini_tool() now returns google.genai.types.Tool instead of a raw dict. Breaking for code that indexed the old dict return value; pass the object directly to GenerateContentConfig(tools=...) (#223, #229).
  • GitHub — Issue templates (CLI, Skill Upgrade, Examples, Packaging), issue chooser, PR template, and pastel label taxonomy with CI sync from .github/labels.json (#227).
  • Documentation — Gemini snippets across skill catalog pages, introduction.md, agent_loops.md, and cli.md aligned with sanitized tool-name dispatch (#229, #245).
  • Examples — All Gemini scripts use to_gemini_tool() directly and _sanitize_gemini_tool_name() for dispatch (#229).

Fixed

  • Framework — to_gemini_tool() returned a plain dictionary, causing ValidationError when passed to google-genai GenerateContentConfig(tools=...) (#223).

Upgrade

pip install -U skillware

For Gemini integrations:

pip install -U "skillware[gemini]"

After upgrade, pass the adapter output directly — no manual types.Tool(...) wrap:

from skillware.core.loader import SkillLoader
import google.genai as genai
from google.genai import types

bundle = SkillLoader.load_skill("finance/wallet_screening")
tool = SkillLoader.to_gemini_tool(bundle)  # types.Tool

client = genai.Client()
client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Screen wallet 0xd8dA...",
    config=types.GenerateContentConfig(tools=[tool]),
)

Match function_call.name to the sanitized name in multi-tool loops:

SkillLoader._sanitize_gemini_tool_name(bundle["manifest"]["name"])

See gemini.md and CHANGELOG.md.

Contributors

  • @Areen-09 — Gemini to_gemini_tool() fix, sanitized tool names, examples, tests, and catalog doc updates (#223, #229, #230)
  • @syed7-crypto — Contributor category selection guidance in CONTRIBUTING.md and cross-links (#204, #205)
  • @rosspeili — GitHub issue/PR templates and label taxonomy with CI sync (#227); label palette hotfixes; agent_loops.md / cli.md Gemini dispatch follow-up (#245); release cut

Full changelog

  • #229 — to_gemini_tool() returns types.Tool with sanitized names (#223)
  • #245 — Gemini dispatch alignment in agent_loops.md and cli.md (#230 follow-up)
  • #227 — GitHub issue/PR templates and label taxonomy
  • #205 — Contributor category selection guidance (#204)

Compare: v0.4.2...v0.4.3