161 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
| /*
 | |
|  * Copyright 2025 coze-dev Authors
 | |
|  *
 | |
|  * 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 entity
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 
 | |
| 	"github.com/coze-dev/coze-studio/backend/api/model/ocean/cloud/bot_common"
 | |
| 	"github.com/coze-dev/coze-studio/backend/api/model/project_memory"
 | |
| )
 | |
| 
 | |
| type VariablesMeta struct {
 | |
| 	ID        int64
 | |
| 	CreatorID int64
 | |
| 	BizType   project_memory.VariableConnector
 | |
| 	BizID     string
 | |
| 	CreatedAt int64
 | |
| 	UpdatedAt int64
 | |
| 	Version   string
 | |
| 	Variables []*VariableMeta
 | |
| }
 | |
| 
 | |
| func NewVariablesWithAgentVariables(vars []*bot_common.Variable) *VariablesMeta {
 | |
| 	res := make([]*VariableMeta, 0)
 | |
| 	for _, variable := range vars {
 | |
| 		res = append(res, agentVariableMetaToProjectVariableMeta(variable))
 | |
| 	}
 | |
| 	return &VariablesMeta{
 | |
| 		Variables: res,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func NewVariables(vars []*project_memory.Variable) *VariablesMeta {
 | |
| 	res := make([]*VariableMeta, 0)
 | |
| 	for _, variable := range vars {
 | |
| 		res = append(res, &VariableMeta{
 | |
| 			Keyword:              variable.Keyword,
 | |
| 			DefaultValue:         variable.DefaultValue,
 | |
| 			VariableType:         variable.VariableType,
 | |
| 			Channel:              variable.Channel,
 | |
| 			Description:          variable.Description,
 | |
| 			Enable:               variable.Enable,
 | |
| 			EffectiveChannelList: variable.EffectiveChannelList,
 | |
| 			Schema:               variable.Schema,
 | |
| 			IsReadOnly:           variable.IsReadOnly,
 | |
| 		})
 | |
| 	}
 | |
| 	return &VariablesMeta{
 | |
| 		Variables: res,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (v *VariablesMeta) ToAgentVariables() []*bot_common.Variable {
 | |
| 	res := make([]*bot_common.Variable, 0, len(v.Variables))
 | |
| 	for idx := range v.Variables {
 | |
| 		v := v.Variables[idx]
 | |
| 		isSystem := v.Channel == project_memory.VariableChannel_System
 | |
| 		isDisabled := !v.Enable
 | |
| 		agentVariable := &bot_common.Variable{
 | |
| 			Key:            &v.Keyword,
 | |
| 			DefaultValue:   &v.DefaultValue,
 | |
| 			Description:    &v.Description,
 | |
| 			IsDisabled:     &isDisabled,
 | |
| 			IsSystem:       &isSystem,
 | |
| 			PromptDisabled: &v.PromptDisabled,
 | |
| 		}
 | |
| 
 | |
| 		res = append(res, agentVariable)
 | |
| 	}
 | |
| 
 | |
| 	return res
 | |
| }
 | |
| 
 | |
| func (v *VariablesMeta) ToProjectVariables() []*project_memory.Variable {
 | |
| 	res := make([]*project_memory.Variable, 0, len(v.Variables))
 | |
| 	for _, v := range v.Variables {
 | |
| 		res = append(res, v.ToProjectVariable())
 | |
| 	}
 | |
| 	return res
 | |
| }
 | |
| 
 | |
| func (v *VariablesMeta) SetupIsReadOnly() {
 | |
| 	for _, variable := range v.Variables {
 | |
| 		variable.SetupIsReadOnly()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (v *VariablesMeta) SetupSchema() {
 | |
| 	for _, variable := range v.Variables {
 | |
| 		variable.SetupSchema()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func agentVariableMetaToProjectVariableMeta(variable *bot_common.Variable) *VariableMeta {
 | |
| 	temp := &VariableMeta{
 | |
| 		Keyword:        variable.GetKey(),
 | |
| 		DefaultValue:   variable.GetDefaultValue(),
 | |
| 		VariableType:   project_memory.VariableType_KVVariable,
 | |
| 		Description:    variable.GetDescription(),
 | |
| 		Enable:         !variable.GetIsDisabled(),
 | |
| 		Schema:         fmt.Sprintf(stringSchema, variable.GetKey()),
 | |
| 		PromptDisabled: variable.GetPromptDisabled(),
 | |
| 	}
 | |
| 	if variable.GetIsSystem() {
 | |
| 		temp.IsReadOnly = true
 | |
| 		temp.Channel = project_memory.VariableChannel_System
 | |
| 	} else {
 | |
| 		temp.Channel = project_memory.VariableChannel_Custom
 | |
| 	}
 | |
| 
 | |
| 	return temp
 | |
| }
 | |
| 
 | |
| func (v *VariablesMeta) GroupByChannel() map[project_memory.VariableChannel][]*project_memory.Variable {
 | |
| 	res := make(map[project_memory.VariableChannel][]*project_memory.Variable)
 | |
| 	for _, variable := range v.Variables {
 | |
| 		ch := variable.Channel
 | |
| 		res[ch] = append(res[ch], variable.ToProjectVariable())
 | |
| 	}
 | |
| 
 | |
| 	return res
 | |
| }
 | |
| 
 | |
| func (v *VariablesMeta) RemoveDisableVariable() {
 | |
| 	var res []*VariableMeta
 | |
| 	for _, vv := range v.Variables {
 | |
| 		if vv.Enable {
 | |
| 			res = append(res, vv)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	v.Variables = res
 | |
| }
 | |
| 
 | |
| func (v *VariablesMeta) FilterChannelVariable(ch project_memory.VariableChannel) {
 | |
| 	var res []*VariableMeta
 | |
| 	for _, vv := range v.Variables {
 | |
| 		if vv.Channel != ch {
 | |
| 			continue
 | |
| 		}
 | |
| 
 | |
| 		res = append(res, vv)
 | |
| 	}
 | |
| 
 | |
| 	v.Variables = res
 | |
| }
 |