Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

llm_tool_plugin.py 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from typing import Any, TypedDict
  2. import pluginlib
  3. from .common import PLUGIN_TYPE_LLM_TOOLS
  4. class LLMToolParameter(TypedDict):
  5. type: str
  6. description: str
  7. displayDescription: str
  8. required: bool
  9. class LLMToolMetadata(TypedDict):
  10. name: str
  11. displayName: str
  12. description: str
  13. displayDescription: str
  14. parameters: dict[str, LLMToolParameter]
  15. @pluginlib.Parent(PLUGIN_TYPE_LLM_TOOLS)
  16. class LLMToolPlugin:
  17. @classmethod
  18. @pluginlib.abstractmethod
  19. def get_metadata(cls) -> LLMToolMetadata:
  20. pass
  21. def invoke(self, **kwargs) -> str:
  22. raise NotImplementedError
  23. def llm_tool_metadata_to_openai_tool(llm_tool_metadata: LLMToolMetadata) -> dict[str, Any]:
  24. return {
  25. "type": "function",
  26. "function": {
  27. "name": llm_tool_metadata["name"],
  28. "description": llm_tool_metadata["description"],
  29. "parameters": {
  30. "type": "object",
  31. "properties": {
  32. k: {
  33. "type": p["type"],
  34. "description": p["description"]
  35. }
  36. for k, p in llm_tool_metadata["parameters"].items()
  37. },
  38. "required": [k for k, p in llm_tool_metadata["parameters"].items() if p["required"]]
  39. }
  40. }
  41. }