mirror of https://github.com/harness/drone.git
78 lines
2.3 KiB
Go
78 lines
2.3 KiB
Go
// Copyright 2023 Harness, Inc.
|
|
//
|
|
// 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 capabilities
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/harness/gitness/types/capabilities"
|
|
)
|
|
|
|
type ContextID string
|
|
|
|
type RunCapabilitiesRequest struct {
|
|
ConversationRaw string `json:"conversation_raw"`
|
|
ConversationID ContextID `json:"conversation_id"`
|
|
CapabilitiesToRun []CapabilityRunRequest `json:"capabilities_to_run"`
|
|
}
|
|
|
|
type CapabilityRunRequest struct {
|
|
CallID string `json:"call_id"`
|
|
Type capabilities.Type `json:"type"`
|
|
Input capabilities.Input `json:"input"`
|
|
}
|
|
|
|
type CapabilityExecution struct {
|
|
Type capabilities.Type `json:"capability_id"`
|
|
Result capabilities.Output `json:"result"`
|
|
ReturnToUser bool `json:"return_to_user"`
|
|
}
|
|
|
|
func (c CapabilityExecution) GetType() capabilities.AIContextPayloadType {
|
|
return "other"
|
|
}
|
|
|
|
type CapabilityRunResponse struct {
|
|
CapabilitiesRan []CapabilityExecution `json:"capabilities_ran"`
|
|
}
|
|
|
|
func (c *Controller) RunCapabilities(ctx context.Context, req *RunCapabilitiesRequest) (*CapabilityRunResponse, error) {
|
|
capOut := new(CapabilityRunResponse)
|
|
capOut.CapabilitiesRan = []CapabilityExecution{}
|
|
|
|
for _, value := range req.CapabilitiesToRun {
|
|
if !c.Capabilities.Exists(value.Type) {
|
|
return nil, fmt.Errorf("capability %s does not exist", value.Type)
|
|
}
|
|
|
|
resp, err := c.Capabilities.Execute(ctx, value.Type, value.Input)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
returnToUser, err := c.Capabilities.ReturnToUser(value.Type)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
capOut.CapabilitiesRan = append(capOut.CapabilitiesRan, CapabilityExecution{
|
|
Type: value.Type,
|
|
Result: resp,
|
|
ReturnToUser: returnToUser,
|
|
})
|
|
}
|
|
return capOut, nil
|
|
}
|