mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-06-29 15:31:05 +08:00
90 lines
3.2 KiB
Go
90 lines
3.2 KiB
Go
|
|
//
|
||
|
|
// Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
|
||
|
|
//
|
||
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
|
// you may not use this file except in compliance with the License.
|
||
|
|
// You may obtain a copy of the License at
|
||
|
|
//
|
||
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
//
|
||
|
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
|
// See the License for the specific language governing permissions and
|
||
|
|
// limitations under the License.
|
||
|
|
//
|
||
|
|
|
||
|
|
package service
|
||
|
|
|
||
|
|
// PluginService exposes metadata for embedded LLM tool plugins.
|
||
|
|
//
|
||
|
|
// The Python service discovers plugins dynamically from
|
||
|
|
// agent/plugin/embedded_plugins/llm_tools via pluginlib. The Go server has no
|
||
|
|
// runtime Python loader, so the embedded set is mirrored as a static table.
|
||
|
|
// To add a plugin here, append to embeddedLLMTools below.
|
||
|
|
type PluginService struct{}
|
||
|
|
|
||
|
|
// NewPluginService creates a new plugin service.
|
||
|
|
func NewPluginService() *PluginService {
|
||
|
|
return &PluginService{}
|
||
|
|
}
|
||
|
|
|
||
|
|
// LLMToolParameter mirrors agent.plugin.llm_tool_plugin.LLMToolParameter.
|
||
|
|
type LLMToolParameter struct {
|
||
|
|
Type string `json:"type"`
|
||
|
|
Description string `json:"description"`
|
||
|
|
DisplayDescription string `json:"displayDescription"`
|
||
|
|
Required bool `json:"required"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// LLMToolMetadata mirrors agent.plugin.llm_tool_plugin.LLMToolMetadata.
|
||
|
|
type LLMToolMetadata struct {
|
||
|
|
Name string `json:"name"`
|
||
|
|
DisplayName string `json:"displayName"`
|
||
|
|
Description string `json:"description"`
|
||
|
|
DisplayDescription string `json:"displayDescription"`
|
||
|
|
Parameters map[string]LLMToolParameter `json:"parameters"`
|
||
|
|
}
|
||
|
|
|
||
|
|
var embeddedLLMTools = []LLMToolMetadata{
|
||
|
|
{
|
||
|
|
Name: "bad_calculator",
|
||
|
|
DisplayName: "$t:bad_calculator.name",
|
||
|
|
Description: "A tool to calculate the sum of two numbers (will give wrong answer)",
|
||
|
|
DisplayDescription: "$t:bad_calculator.description",
|
||
|
|
Parameters: map[string]LLMToolParameter{
|
||
|
|
"a": {
|
||
|
|
Type: "number",
|
||
|
|
Description: "The first number",
|
||
|
|
DisplayDescription: "$t:bad_calculator.params.a",
|
||
|
|
Required: true,
|
||
|
|
},
|
||
|
|
"b": {
|
||
|
|
Type: "number",
|
||
|
|
Description: "The second number",
|
||
|
|
DisplayDescription: "$t:bad_calculator.params.b",
|
||
|
|
Required: true,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
// ListLLMTools returns the metadata of every embedded LLM tool plugin in the
|
||
|
|
// same order, shape and field names as the Python /plugin/tools endpoint.
|
||
|
|
//
|
||
|
|
// The returned slice and its nested Parameters maps are fresh copies — callers
|
||
|
|
// may mutate the result without affecting other requests or the package-level
|
||
|
|
// embeddedLLMTools table.
|
||
|
|
func (s *PluginService) ListLLMTools() []LLMToolMetadata {
|
||
|
|
out := make([]LLMToolMetadata, len(embeddedLLMTools))
|
||
|
|
copy(out, embeddedLLMTools)
|
||
|
|
for i := range out {
|
||
|
|
params := make(map[string]LLMToolParameter, len(out[i].Parameters))
|
||
|
|
for k, v := range out[i].Parameters {
|
||
|
|
params[k] = v
|
||
|
|
}
|
||
|
|
out[i].Parameters = params
|
||
|
|
}
|
||
|
|
return out
|
||
|
|
}
|