Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-skills/src/lexigram/ai/skills/module.py: 87%
15 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 07:19 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 07:19 +0800
1"""SkillsModule — convenience façade for integrating the skills subsystem."""
3from __future__ import annotations
5from typing import TYPE_CHECKING, Any
7from lexigram.contracts.ai.skills import SkillExecutorProtocol
8from lexigram.di.module import DynamicModule, Module, module
10if TYPE_CHECKING:
11 from lexigram.ai.skills.config import SkillsConfig
14@module()
15class SkillsModule(Module):
16 """Application-level façade for the skills subsystem.
18 Provides a ``configure`` factory that creates a pre-configured
19 :class:`SkillsProvider` ready for registration with the application
20 container.
22 Usage::
24 from lexigram.ai.skills import SkillsModule
25 from lexigram.ai.skills.config import SkillsConfig
27 @module(
28 imports=[SkillsModule.configure(
29 SkillsConfig(
30 enable_builtin=True,
31 builtin_skills=["current_datetime", "math_calculate"],
32 )
33 )]
34 )
35 class AppModule(Module):
36 pass
37 """
39 @classmethod
40 def configure(
41 cls,
42 config: SkillsConfig | None = None,
43 enable_tool_bridge: bool = False,
44 **kwargs: Any,
45 ) -> DynamicModule:
46 """Create a SkillsModule with explicit configuration.
48 Args:
49 config: :class:`SkillsConfig` or ``None`` to use defaults.
50 enable_tool_bridge: Register the tool-bridge adapter so agent tool
51 registries can invoke skills as first-class tools. Defaults to
52 ``False``.
53 **kwargs: Additional keyword arguments forwarded to
54 :class:`SkillsProvider`.
56 Returns:
57 A :class:`~lexigram.di.module.DynamicModule` descriptor.
58 """
59 from lexigram.ai.skills.di.provider import SkillsProvider
61 return DynamicModule(
62 module=cls,
63 providers=[
64 SkillsProvider(
65 config=config,
66 enable_tool_bridge=enable_tool_bridge,
67 **kwargs,
68 )
69 ],
70 exports=[
71 SkillExecutorProtocol,
72 ],
73 )
75 @classmethod
76 def stub(cls, config: SkillsConfig | None = None) -> DynamicModule:
77 """Create a SkillsModule suitable for unit and integration testing.
79 Uses in-memory or no-op skill implementations with minimal side
80 effects. Built-in skill registration is disabled by default to keep
81 the test container lightweight.
83 Args:
84 config: Optional :class:`SkillsConfig` override. Uses safe test
85 defaults when ``None``.
87 Returns:
88 A :class:`~lexigram.di.module.DynamicModule` descriptor.
89 """
90 from lexigram.ai.skills.di.provider import SkillsProvider
92 return DynamicModule(
93 module=cls,
94 providers=[SkillsProvider(config=config, enable_tool_bridge=False)],
95 exports=[
96 SkillExecutorProtocol,
97 ],
98 )
101__all__ = ["SkillsModule"]