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
 | 
						|
}
 |