| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | 
							- from typing import Any, TypedDict
 - import pluginlib
 - 
 - from .common import PLUGIN_TYPE_LLM_TOOLS
 - 
 - 
 - class LLMToolParameter(TypedDict):
 -     type: str
 -     description: str
 -     displayDescription: str
 -     required: bool
 - 
 - 
 - class LLMToolMetadata(TypedDict):
 -     name: str
 -     displayName: str
 -     description: str
 -     displayDescription: str
 -     parameters: dict[str, LLMToolParameter]
 - 
 - 
 - @pluginlib.Parent(PLUGIN_TYPE_LLM_TOOLS)
 - class LLMToolPlugin:
 -     @classmethod
 -     @pluginlib.abstractmethod
 -     def get_metadata(cls) -> LLMToolMetadata:
 -         pass
 - 
 -     def invoke(self, **kwargs) -> str:
 -         raise NotImplementedError
 - 
 - 
 - def llm_tool_metadata_to_openai_tool(llm_tool_metadata: LLMToolMetadata) -> dict[str, Any]:
 -     return {
 -         "type": "function",
 -         "function": {
 -             "name": llm_tool_metadata["name"],
 -             "description": llm_tool_metadata["description"],
 -             "parameters": {
 -                 "type": "object",
 -                 "properties": {
 -                     k: {
 -                         "type": p["type"],
 -                         "description": p["description"]
 -                     }
 -                     for k, p in llm_tool_metadata["parameters"].items()
 -                 },
 -                 "required": [k for k, p in llm_tool_metadata["parameters"].items() if p["required"]]
 -             }
 -         }
 -     }
 
 
  |