123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- package init
- import (
- _ "embed"
- "fmt"
- "os"
- "path/filepath"
- "strings"
- "github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
- )
- //go:embed templates/python/main.py
- var PYTHON_ENTRYPOINT_TEMPLATE []byte
- //go:embed templates/python/requirements.txt
- var PYTHON_REQUIREMENTS_TEMPLATE []byte
- //go:embed templates/python/tool_provider.yaml
- var PYTHON_TOOL_PROVIDER_TEMPLATE []byte
- //go:embed templates/python/tool.yaml
- var PYTHON_TOOL_TEMPLATE []byte
- //go:embed templates/python/tool.py
- var PYTHON_TOOL_PY_TEMPLATE []byte
- //go:embed templates/python/tool_provider.py
- var PYTHON_TOOL_PROVIDER_PY_TEMPLATE []byte
- func createPythonEnvironment(
- root string, entrypoint string, manifest *plugin_entities.PluginDeclaration, category string,
- ) error {
- // TODO: enhance to use template renderer
- // create the python environment
- entrypoint_file_path := filepath.Join(root, fmt.Sprintf("%s.py", entrypoint))
- if err := os.WriteFile(entrypoint_file_path, PYTHON_ENTRYPOINT_TEMPLATE, 0o644); err != nil {
- return err
- }
- requirements_file_path := filepath.Join(root, "requirements.txt")
- if err := os.WriteFile(requirements_file_path, PYTHON_REQUIREMENTS_TEMPLATE, 0o644); err != nil {
- return err
- }
- if category == "tool" {
- if err := createPythonTool(root, manifest); err != nil {
- return err
- }
- if err := createPythonToolProvider(root, manifest); err != nil {
- return err
- }
- }
- return nil
- }
- func createPythonTool(root string, manifest *plugin_entities.PluginDeclaration) error {
- // create the tool
- tool_dir := filepath.Join(root, "tools")
- if err := os.MkdirAll(tool_dir, 0o755); err != nil {
- return err
- }
- // replace the plugin name/author/description in the template
- tool_file_content := strings.ReplaceAll(
- string(PYTHON_TOOL_PY_TEMPLATE), "{{plugin_name}}", manifest.Name,
- )
- tool_file_content = strings.ReplaceAll(
- tool_file_content, "{{author}}", manifest.Author,
- )
- tool_file_content = strings.ReplaceAll(
- tool_file_content, "{{plugin_description}}", manifest.Description.EnUS,
- )
- tool_file_path := filepath.Join(tool_dir, fmt.Sprintf("%s.py", manifest.Name))
- if err := os.WriteFile(tool_file_path, []byte(tool_file_content), 0o644); err != nil {
- return err
- }
- // create the tool manifest
- tool_manifest_file_path := filepath.Join(tool_dir, fmt.Sprintf("%s.yaml", manifest.Name))
- if err := os.WriteFile(tool_manifest_file_path, PYTHON_TOOL_TEMPLATE, 0o644); err != nil {
- return err
- }
- tool_manifest_file_content := strings.ReplaceAll(
- string(PYTHON_TOOL_TEMPLATE), "{{plugin_name}}", manifest.Name,
- )
- tool_manifest_file_content = strings.ReplaceAll(
- tool_manifest_file_content, "{{author}}", manifest.Author,
- )
- tool_manifest_file_content = strings.ReplaceAll(
- tool_manifest_file_content, "{{plugin_description}}", manifest.Description.EnUS,
- )
- if err := os.WriteFile(tool_manifest_file_path, []byte(tool_manifest_file_content), 0o644); err != nil {
- return err
- }
- return nil
- }
- func createPythonToolProvider(root string, manifest *plugin_entities.PluginDeclaration) error {
- // create the tool provider
- tool_provider_dir := filepath.Join(root, "provider")
- if err := os.MkdirAll(tool_provider_dir, 0o755); err != nil {
- return err
- }
- // replace the plugin name/author/description in the template
- tool_provider_file_content := strings.ReplaceAll(
- string(PYTHON_TOOL_PROVIDER_PY_TEMPLATE), "{{plugin_name}}", manifest.Name,
- )
- tool_provider_file_content = strings.ReplaceAll(
- tool_provider_file_content, "{{author}}", manifest.Author,
- )
- tool_provider_file_content = strings.ReplaceAll(
- tool_provider_file_content, "{{plugin_description}}", manifest.Description.EnUS,
- )
- tool_provider_file_path := filepath.Join(tool_provider_dir, fmt.Sprintf("%s.py", manifest.Name))
- if err := os.WriteFile(tool_provider_file_path, []byte(tool_provider_file_content), 0o644); err != nil {
- return err
- }
- // create the tool provider manifest
- tool_provider_manifest_file_path := filepath.Join(tool_provider_dir, fmt.Sprintf("%s.yaml", manifest.Name))
- if err := os.WriteFile(tool_provider_manifest_file_path, PYTHON_TOOL_PROVIDER_TEMPLATE, 0o644); err != nil {
- return err
- }
- tool_provider_manifest_file_content := strings.ReplaceAll(
- string(PYTHON_TOOL_PROVIDER_TEMPLATE), "{{plugin_name}}", manifest.Name,
- )
- tool_provider_manifest_file_content = strings.ReplaceAll(
- tool_provider_manifest_file_content, "{{author}}", manifest.Author,
- )
- tool_provider_manifest_file_content = strings.ReplaceAll(
- tool_provider_manifest_file_content, "{{plugin_description}}", manifest.Description.EnUS,
- )
- if err := os.WriteFile(tool_provider_manifest_file_path, []byte(tool_provider_manifest_file_content), 0o644); err != nil {
- return err
- }
- return nil
- }
|