123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package service
- import (
- "time"
- "github.com/langgenius/dify-sandbox/internal/core/runner/python"
- runner_types "github.com/langgenius/dify-sandbox/internal/core/runner/types"
- "github.com/langgenius/dify-sandbox/internal/static"
- "github.com/langgenius/dify-sandbox/internal/types"
- )
- type RunCodeResponse struct {
- Stderr string `json:"error"`
- Stdout string `json:"stdout"`
- }
- func RunPython3Code(code string, preload string, options *runner_types.RunnerOptions) *types.DifySandboxResponse {
- if err := checkOptions(options); err != nil {
- return types.ErrorResponse(-400, err.Error())
- }
- if !static.GetDifySandboxGlobalConfigurations().EnablePreload {
- preload = ""
- }
-
- timeout := time.Duration(
- static.GetDifySandboxGlobalConfigurations().WorkerTimeout * int(time.Second),
- )
- runner := python.PythonRunner{}
- stdout, stderr, done, err := runner.Run(
- code, timeout, nil, preload, options,
- )
- if err != nil {
- return types.ErrorResponse(-500, err.Error())
- }
- stdout_str := ""
- stderr_str := ""
- defer close(done)
- defer close(stdout)
- defer close(stderr)
- for {
- select {
- case <-done:
- return types.SuccessResponse(&RunCodeResponse{
- Stdout: stdout_str,
- Stderr: stderr_str,
- })
- case out := <-stdout:
- stdout_str += string(out)
- case err := <-stderr:
- stderr_str += string(err)
- }
- }
- }
- type ListDependenciesResponse struct {
- Dependencies []runner_types.Dependency `json:"dependencies"`
- }
- func ListPython3Dependencies() *types.DifySandboxResponse {
- return types.SuccessResponse(&ListDependenciesResponse{
- Dependencies: python.ListDependencies(),
- })
- }
- type RefreshDependenciesResponse struct {
- Dependencies []runner_types.Dependency `json:"dependencies"`
- }
- func RefreshPython3Dependencies() *types.DifySandboxResponse {
- return types.SuccessResponse(&RefreshDependenciesResponse{
- Dependencies: python.RefreshDependencies(),
- })
- }
- type UpdateDependenciesResponse struct{}
- func UpdateDependencies() *types.DifySandboxResponse {
- err := python.PreparePythonDependenciesEnv()
- if err != nil {
- return types.ErrorResponse(-500, err.Error())
- }
- return types.SuccessResponse(&UpdateDependenciesResponse{})
- }
|