Commit Graph

377 Commits

Author SHA1 Message Date
Yeuoly 97d2322717 enhance(plugin_manager): improve logging for local plugin watcher
- Updated log message to include the maximum concurrency setting when starting to handle new plugins.
- Removed redundant maxConcurrency variable and its associated log statement for clarity.
2025-07-07 18:41:17 +08:00
jim02.he 404869a33b refactor(plugin_manager): refactor plugin startup logic
- Remove the semaphore mechanism and switch to using routine.Submit for concurrency management
2025-07-05 00:30:42 +08:00
jim02.he add2213d7d fix(plugin_manager): optimize comment and error handling
- Updated comments to clarify the concurrent plugin launching configuration.
- Added a nil check for the error channel during plugin startup to improve code robustness.
2025-07-02 12:29:34 +08:00
jim02.he 1fe2e518a8 Merge remote-tracking branch 'origin/main' into plugin_launch_concurent 2025-07-02 08:59:35 +08:00
jim02.he 8825b94c01 feat(plugin_manager): make local plugin launching concurrency configurable 2025-07-02 08:56:39 +08:00
Yeuoly 6d6fb3892e feat: add InvokeLLMWithStructuredOutput functionality (#369)
* feat: add InvokeLLMWithStructuredOutput functionality

- Introduced a new method InvokeLLMWithStructuredOutput to the BackwardsInvocation interface for handling structured output requests.
- Added corresponding request and response types to support structured output.
- Implemented the method in both RealBackwardsInvocation and MockedDifyInvocation for testing purposes.
- Updated permission handling and task execution for the new structured output invocation type.

This enhancement allows for more flexible and detailed responses from the LLM, improving the overall functionality of the invocation system.

* refactor: enhance LLMResultChunkWithStructuredOutput structure

- Updated the LLMResultChunkWithStructuredOutput type to include additional fields: Model, SystemFingerprint, and Delta.
- Added comments to clarify the reasoning behind the structure and the use of type embedding for JSON marshaling.

This change improves the clarity and functionality of the LLMResultChunkWithStructuredOutput type, ensuring proper JSON serialization.

* refactor: streamline LLMResultChunk construction in InvokeLLMWithStructuredOutput

- Simplified the construction of LLMResultChunk and LLMResultChunkWithStructuredOutput by removing unnecessary type embedding.
- Enhanced readability and maintainability of the code while preserving functionality.

This change contributes to cleaner code and improved clarity in the handling of structured output responses.
2025-06-30 12:07:46 +08:00
jim02.he f945225e56 feat(plugin_manager): optimize local plugin startup with concurrent control
- Add semaphore-based concurrency control for plugin launches
- Implement parallel plugin startup using goroutines
- Optimize error handling to prevent goroutine blocking
- Add concurrency metrics logging

Note: handleNewLocalPlugins now accepts config parameter with default concurrency limit
2025-06-30 00:16:51 +08:00
Yeuoly a70d808dd0 feat(dynamic_select): implement dynamic parameter fetching functionality (#358)
* feat(dynamic_select): implement dynamic parameter fetching functionality

- Added FetchDynamicParameterOptions function to handle dynamic parameter selection.
- Introduced new access type and action for dynamic select in access_types.
- Updated HTTP server routes to include the new endpoint for fetching dynamic parameters.
- Created necessary service and controller files for dynamic select operations.

* refactor(access_types): rename dynamic select access type to dynamic parameter

- Updated access type constants to reflect the change from PLUGIN_ACCESS_TYPE_DYNAMIC_SELECT to PLUGIN_ACCESS_TYPE_DYNAMIC_PARAMETER.
- Adjusted related references in the PluginDispatchers and FetchDynamicParameterOptions function to maintain consistency.
2025-06-27 19:24:59 +08:00
kinoooolu f096900e62 fix:response data will be discard if tool/llm response buffer overflow (#362)
Co-authored-by: kino.lu <kino.lu@vipshop.com>
2025-06-26 11:44:41 +08:00
Yeuoly ae2658dd43 refactor(plugin_manager): remove first logging of local plugin launch (#357) 2025-06-24 13:17:19 +08:00
Rhys 3d1e2aba0e fix: skip waiting if error occured (#337)
* fix: skip waiting if error occured

* Update internal/core/plugin_manager/watcher.go

Co-authored-by: Rhys <nghuutho74@gmail.com>

* fix: handle nil error channels in plugin manager

---------

Co-authored-by: Yeuoly <45712896+Yeuoly@users.noreply.github.com>
Co-authored-by: Yeuoly <admin@srmxy.cn>
2025-06-16 19:15:15 +08:00
Nevermore 6cea2d401e refactor(local_runtime): optimize listener lookup in stdioHolder (#345)
Directly fetch and invoke the listener for a given session_id instead of iterating over the entire listener map.

Signed-off-by: guanz42 <guanz42@163.com>
2025-06-16 18:31:46 +08:00
Yeuoly 1e260eedf4 refactor: using length-prefixed chunking for Backwards invocations (#342)
- Adjusted the header byte manipulation in chunking functions to correctly use the first four bytes for data length.
- Modified the HTTP request streaming function to include the length-prefixed option for improved data handling.
2025-06-11 16:01:53 +08:00
Yeuoly 5f8072c982 Chore/unify configurations (#319)
* refactor: update PluginManager to use configuration for various configurations

- Replaced hardcoded values in PluginManager methods with values from the configuration.
- Updated serverless plugin launch timeout and working paths to utilize the new configuration structure.
- Enhanced local plugin runtime initialization to pull settings from the configuration, improving maintainability and flexibility.

* refactor: clean up PluginManager by removing unused fields and updating platform check

- Removed commented-out fields from PluginManager to enhance code clarity.
- Updated platform check to utilize the configuration structure instead of a direct field reference, improving maintainability.
2025-06-04 20:18:13 +08:00
Yeuoly f8914412d9 fix: support serverless plugin management with execution timeout (#318)
- Added `pluginMaxExecutionTimeout` to `PluginManager` for configurable execution limits.
- Updated `ServerlessPluginRuntime` to utilize the new timeout setting in HTTP requests.
- Refactored AWSPluginRuntime references to ServerlessPluginRuntime for consistency across the codebase.
2025-05-30 18:08:24 +08:00
Byron.wang 1c9e28bc75 Feat: Replace the internal/oss module with dify-cloud-kit (#317)
* replace internal oss with dify-cloud-kit

* remove validate

* fix tests

* fix tests
2025-05-30 16:44:59 +08:00
NeatGuyCoding 6b7172d6a6 fix: errChan failed to write response because of panic nil (#296) (#297)
* fix: errChan failed to write response because of panic nil (#296)

* fix: join err and er into a single error using errors.Join, thanks @Yeuoly (#296)

---------

Co-authored-by: NeatGuyCoding <cto@sb>
2025-05-26 11:25:11 +08:00
Yeuoly 3d28e0ceed feat: Add code generation for plugin controllers and services (#301)
* feat: Add code generation for plugin controllers and services

- Introduced a code generation mechanism for plugin controllers and services, allowing for automatic generation based on defined dispatchers.
- Created new files for generated controllers, services, and templates to streamline the plugin invocation process.
- Removed outdated functions related to tool validation and runtime parameters, consolidating functionality into generated files.
- Updated dependencies in go.mod and go.sum to include necessary packages for the new code generation features.

* fix
2025-05-23 14:57:56 +08:00
Zhi 6b112bc8b5 feat(redis): Add support for Redis Sentinel mode (#276)
* feat(redis): Add support for Redis Sentinel mode

Added support for Redis Sentinel mode to the Redis client, enabling automatic discovery and connection to the primary node through Sentinel. Updated relevant configuration files and initialization logic to support Sentinel mode configuration and connection.

* add lost RedisUser.
2025-05-20 14:23:01 +08:00
Yeuoly 31d7c7417e feat[0.1.0]: introduce 'run' command for local plugin execution (#283)
* feat: introduce 'run' command for local plugin execution

- Added a new command `run` to launch plugins locally, allowing communication through stdin/stdout.
- Removed the previous `test` command and its associated functionality to streamline the plugin testing process.

* feat: enhance 'run' command with TCP support

- Introduced a new `RunPluginPayload` structure to encapsulate plugin execution parameters.
- Added TCP communication mode to the `run` command, allowing multiple client connections.
- Updated command flags to configure run mode and logging options.
- Implemented client handling and server creation for both stdin/stdout and TCP modes.

* docs: improve comments in RunPlugin function for clarity

- Enhanced comments to provide clearer explanations of the plugin decoding process and the creation of client streams for both stdin/stdout and TCP modes.
- Updated comments to reflect the functionality and behavior of the plugin execution flow.

* refactor: update command structure and enhance plugin invocation handling

- Changed the command structure to add `runPluginCommand` under `pluginCommand` for better organization.
- Introduced `InvokePluginPayload` type to encapsulate plugin invocation details.
- Enhanced `RunPlugin` function to handle responses and errors more effectively, including logging to stdout.
- Updated client handling to support session management and improved error handling during plugin invocation.
- Renamed TCP server creation function for consistency.

* feat: enhance plugin response handling and logging capabilities

- Added a new flag `--response-format` to specify the output format (text or json) for plugin responses.
- Introduced a `logger` to manage logging output to stdout with timestamps and file information.
- Updated `logResponse` and `systemLog` functions to handle different response formats.
- Enhanced `handleClient` and `RunPlugin` functions to utilize the new response format feature.
- Implemented signal handling to clean up temporary directories on shutdown.

* feat: enhance plugin response structure and logging

- Added `InvokeID` to `InvokePluginPayload` and `GenericResponse` for better tracking of plugin invocations.
- Updated `logResponse` to include `InvokeID` in error responses for improved debugging.
- Enhanced client handling in `handleClient` to log plugin readiness and received requests.
- Refactored client stream creation for better readability and consistency.

* feat: add plugin invoke end response type and logging

- Introduced `GENERIC_RESPONSE_TYPE_PLUGIN_INVOKE_END` to enhance response tracking for plugin invocations.
- Updated `handleClient` to log the end of plugin invocation, improving visibility into the plugin lifecycle.

* chore: remove fullfeature tags
2025-05-16 14:20:29 +08:00
Yeuoly a22b9c17f0 feat: add fake OpenAI server for local runtime benchmarking (#286)
- Introduced a new test file to implement a fake OpenAI server that streams responses for benchmarking purposes.
- Updated the existing benchmark test to utilize the new fake server, enhancing the testing environment for local plugin runtime invocations.
- Refactored the package name in the benchmark test file for clarity and consistency.
2025-05-15 15:42:43 +08:00
Yeuoly d884cab8ae feat: add plugin reinstallation functionality and admin API support (#285)
* feat: add plugin reinstallation functionality and admin API support

- Implemented ReinstallToAWSFromPkg method to allow reinstallation of plugins on AWS Lambda, updating function URL and name.
- Added clearServerlessRuntimeCache method to manage serverless runtime cache.
- Enhanced LaunchPlugin to support an ignoreIdempotent flag for forced reinstallation.
- Introduced admin API endpoints for plugin reinstallation, secured with an API key validation middleware.
- Updated configuration to include AdminApiEnabled and AdminApiKey settings.

* refactor: update plugin reinstallation endpoint and improve unauthorized response

- Changed the plugin reinstallation endpoint from "/plugins/reinstall" to "/plugin/serverless/reinstall" for better clarity.
- Modified the unauthorized response in the AdminAPIKey middleware to return a more descriptive JSON message.
2025-05-15 15:22:25 +08:00
Yeuoly f99e0e8119 feat: add input validation for installed bucket path (#264)
- Implemented validation in NewInstalledBucket to log warnings for non-alphanumeric starting characters and empty paths for installedPath.
- Updated parameter naming for consistency across methods in InstalledBucket, enhancing code clarity.
2025-05-09 12:28:47 +08:00
Yeuoly 7a7e23fcb1 fix: update stdio buffer size configuration in stdioHolder (#273)
- Adjusted the buffer size settings in the stdioHolder to utilize configurable values for stdout buffer size and maximum buffer size, enhancing flexibility in plugin output handling.
2025-05-09 12:28:14 +08:00
Yeuoly 1ebe7fdf65 fix: improve line processing in StdioRequestReader (#260)
* fix: improve line processing in StdioRequestReader

- Replaced synchronous stdin reading with asynchronous data retrieval.
- Enhanced line processing to skip empty lines and handle incomplete data more effectively, improving overall robustness of the request reading mechanism.

* feat: add asynchronous reading to StdioRequestReader

- Implemented the _read_async method to read data from stdin in 64KB chunks, optimizing data retrieval.
- This enhancement improves the efficiency of the request reading process in the StdioRequestReader class.
2025-05-06 15:09:54 +08:00
Good Wood 977665e73b feat: add read & write timeout config (#259)
* feat: add read & write timeout config

* refactor: update Dify invocation configuration to use structured payload

- Changed the Dify invocation daemon to accept a structured payload for initialization, improving clarity and maintainability.
- Updated related configuration variables in the .env.example file to reflect the new naming convention for backwards invocation timeouts.
- Adjusted tests and plugin manager to accommodate the new payload structure.

---------

Co-authored-by: Yeuoly <admin@srmxy.cn>
2025-05-06 13:08:02 +08:00
Yeuoly 61bd7d9c8a feat: add configurable stdio buffer sizes for plugins (#256)
- Introduced new configuration options for plugin stdio buffer sizes in the .env.example file.
- Updated the PluginManager and LocalPluginRuntime to utilize these new buffer size settings.
- Enhanced the stdioHolder to accept buffer size configurations, improving plugin output handling.
- Modified related tests to accommodate the new stdioHolder configuration structure.
2025-04-30 15:28:34 +08:00
Yeuoly d80630acd5 feat: implement OAuth functionality (#245)
* feat: implement OAuth functionality in plugin daemon

- Added OAuth service methods for getting authorization URLs and credentials.
- Updated access types to include OAuth-related actions.
- Created new controller for handling OAuth requests.
- Introduced entities for OAuth results and requests.
- Enhanced plugin entities to support OAuth schema in tool declarations.

* feat: add OAuth endpoints for authorization and credentials retrieval

- Introduced new POST endpoints for obtaining authorization URLs and credentials in the OAuth controller.
- Enhanced the plugin dispatch group to include these new OAuth routes, improving integration with OAuth services.
2025-04-27 13:59:57 +08:00
Taeyoung Park 5d83258371 Add optional Redis username authentication (#218)
* You can include username for Redis Auth

* Redis auth with username - test code update

* fix: tests

---------

Co-authored-by: Yeuoly <admin@srmxy.cn>
2025-04-25 20:42:14 +08:00
Yeuoly 9730b7dc63 tests: enhance integration testing for specific plugins (#242)
* feat: enhance integration testing for specific plugins

- Added integration tests for the official agent, including test data for agent strategy invocation.
- Introduced JSON schema generation and validation utilities to ensure proper request formatting.
- Enhanced mock invocation handling in the plugin manager to support tool parameters.
- Added new test utilities for simulating OpenAI server responses and managing plugin runtime.

* fix: update RunOnce function to return response stream and enhance integration test

- Modified the RunOnce function to return a response stream instead of an error, allowing for better handling of streamed responses.
- Updated the integration test for the official agent to read from the response stream, ensuring proper validation of the agent strategy invocation.
2025-04-24 16:33:50 +08:00
Yeuoly c5cda9cbbf enhance(local runtime): patches prompt messages and replace json loads with pydantic (#222)
- Introduced two new patch files: `0.1.1.llm.py.patch` and `0.1.1.request_reader.py.patch` to enhance the plugin's functionality.
- Updated the `environment_python.go` file to reference the new patches and apply them conditionally based on the plugin SDK version.
- Improved the handling of LLM usage and request reading in the plugin environment.
2025-04-17 16:07:54 +08:00
Yeuoly ecfe13a545 Enhance benchmark test: disable logging for local OpenAI LLM invocation (#220) 2025-04-17 00:11:51 +08:00
Yeuoly 73a4d93a62 benchmark/local-runtime (#219)
* benchmark/local-runtime

* test

* fix

* fix: add uv

* fix: uv path

* fix: get uv

* done
2025-04-17 00:03:28 +08:00
Karl Manong 2d0d8dcdeb fix: remove duplicated code (#214) 2025-04-16 19:41:22 +08:00
Yeuoly 7c0db82d8c feat(invocation): add FetchApp method to backwards invocations (#213)
- Introduced FetchApp method in BackwardsInvocation interface to retrieve application data.
- Implemented FetchAppRequest type for request payload with required AppId field.
- Updated RealBackwardsInvocation to handle FetchApp requests and return application data.
- Added mock implementation for FetchApp in the testing suite.
- Enhanced task handling in plugin daemon to support FetchApp invocation.
2025-04-16 18:13:06 +08:00
Yeuoly 0f38e25177 fix(plugin_manager): skip hidden files in InstalledBucket List method (#210) 2025-04-16 17:15:18 +08:00
Yeuoly 0a74b44f11 refactor(plugin_daemon): simplify InvokeTool function and enhance stream handling (#208)
* refactor(plugin_daemon): simplify InvokeTool function and enhance stream handling

- Removed unnecessary complexity from the InvokeTool function by eliminating the blob handling logic and directly returning the response.
- Updated the stream implementation to support blocking writes, allowing for better management of data flow when the buffer is full.
- Added tests for the new blocking write functionality to ensure reliability and performance under high load conditions.

* fix: buffer size
2025-04-15 19:13:24 +08:00
Yeuoly 3ab625d8d3 fix(persistence): correct path traversal checks in tests and implementation (#205)
* fix(persistence): implement path traversal checks

- Updated test cases to expect no errors for valid paths with double slashes and mixed traversal.
- Enhanced the `checkPathTraversal` method to clean the key using `path.Clean` to prevent path traversal vulnerabilities.
- Removed redundant checks in the `getFilePath`, `Save`, `Load`, and `Delete` methods, simplifying the code while maintaining security.

* refactor(tests): simplify persistence tests using testify assertions

- Replaced manual error handling with testify's assert functions for cleaner test code.
- Improved readability and maintainability of test cases by using assertions for error checks and value comparisons.
- Ensured that all tests continue to validate the expected behavior of the persistence layer.
2025-04-15 14:27:14 +08:00
Yeuoly 970f120ba3 feat(plugin): enhance getPluginSdkVersion to support version ranges and improve error handling (#204)
- Updated the getPluginSdkVersion function to parse version ranges with multiple constraints, returning the highest version found.
- Improved error handling to provide clearer feedback when no valid version is found.
- Added unit tests to validate the new functionality and ensure correctness across various requirement formats.
2025-04-14 21:24:08 +08:00
kurokobo ced2ef3842 feat: support NO_PROXY for initialization process (#199) 2025-04-14 20:03:15 +08:00
Yeuoly bcdd009935 refactor(plugin_manager): replace stdio handling with stdioHolder for improved management and cleanup (#198)
* refactor(plugin_manager): replace stdio handling with stdioHolder for improved management and cleanup

- Introduced stdioHolder to encapsulate stdio operations, enhancing modularity.
- Updated LocalPluginRuntime methods to utilize stdioHolder for event listening and error handling.
- Removed legacy stdio handling functions to streamline the codebase.

* feat(plugin_manager): add tests for stdioHolder functionality and enhance error handling

- Introduced comprehensive unit tests for stdioHolder, covering various scenarios including event listening, error writing, and cleanup.
- Added constants for maximum error message length and heartbeat interval to improve code maintainability.
- Updated stdioHolder methods to utilize these constants for better readability and consistency.
2025-04-11 21:09:49 +08:00
Yeuoly 984456b96e feat(plugin_manager): add serverless connector launch timeout configuration and update related functions (#197) 2025-04-11 17:53:39 +08:00
非法操作 e9cd678fad add exist for self.session.storage (#195) 2025-04-11 17:49:30 +08:00
Yeuoly d74cfea892 enhancement(llm): remove non-required PromptMessages field from LLMResultChunk (#194) 2025-04-11 14:52:11 +08:00
非法操作 25e013618a fix self.session.delete alway success (#12)
* fix self.session.delete alway success

* fix save data always failed

* redis delete response deleted item num

* add deleted num to invocate response
2025-04-11 13:32:52 +08:00
非法操作 618609af3a add uv path config (#187)
* add uv path config

* write uv_path to env during docker build process

* Revert "write uv_path to env during docker build process"

This reverts commit c9501411aa.

* add UVPATH
2025-04-10 15:16:22 +08:00
Yeuoly 7d078082ac fix(plugin_manager): enhance error handling during plugin installation by deleting local plugin on error 2025-04-09 14:22:28 +08:00
Yeuoly 71542d94ab fix( full-duplex lifecycle): avoid infinity setup loop 2025-04-09 13:56:49 +08:00
kurokobo 6f75bcca43 feat: verify plugin with public keys specified in environment variable in addition to official one 2025-04-02 13:48:04 +00:00
Yeuoly b5fefd1a99 Merge pull request #152 from quicksandznzn/add-redis-db-config
optimize: add redis db config
2025-03-30 21:10:27 +09:00