feat: Support for Chat Flow & Agent Support for binding a single chat flow (#765)

Co-authored-by: Yu Yang <72337138+tomasyu985@users.noreply.github.com>
Co-authored-by: zengxiaohui <csu.zengxiaohui@gmail.com>
Co-authored-by: lijunwen.gigoo <lijunwen.gigoo@bytedance.com>
Co-authored-by: lvxinyu.1117 <lvxinyu.1117@bytedance.com>
Co-authored-by: liuyunchao.0510 <liuyunchao.0510@bytedance.com>
Co-authored-by: haozhenfei <37089575+haozhenfei@users.noreply.github.com>
Co-authored-by: July <jiangxujin@bytedance.com>
Co-authored-by: tecvan-fe <fanwenjie.fe@bytedance.com>
This commit is contained in:
Zhj
2025-08-28 21:53:32 +08:00
committed by GitHub
parent bbc615a18e
commit d70101c979
503 changed files with 48036 additions and 3427 deletions

View File

@@ -21,17 +21,31 @@ import (
"github.com/cloudwego/eino/schema"
"github.com/coze-dev/coze-studio/backend/api/model/crossdomain/message"
"github.com/coze-dev/coze-studio/backend/api/model/crossdomain/agentrun"
"github.com/coze-dev/coze-studio/backend/api/model/crossdomain/singleagent"
)
// Requests and responses must not reference domain entities and can only use models under api/model/crossdomain.
type SingleAgent interface {
StreamExecute(ctx context.Context, historyMsg []*message.Message, query *message.Message,
agentRuntime *singleagent.AgentRuntime) (*schema.StreamReader[*singleagent.AgentEvent], error)
StreamExecute(ctx context.Context,
agentRuntime *AgentRuntime) (*schema.StreamReader[*singleagent.AgentEvent], error)
ObtainAgentByIdentity(ctx context.Context, identity *singleagent.AgentIdentity) (*singleagent.SingleAgent, error)
}
type AgentRuntime struct {
AgentVersion string
UserID string
AgentID int64
IsDraft bool
SpaceID int64
ConnectorID int64
PreRetrieveTools []*agentrun.Tool
HistoryMsg []*schema.Message
Input *schema.Message
ResumeInfo *ResumeInfo
}
type ResumeInfo = singleagent.InterruptInfo
type AgentEvent = singleagent.AgentEvent

View File

@@ -18,10 +18,14 @@ package crossagentrun
import (
"context"
"github.com/coze-dev/coze-studio/backend/domain/conversation/agentrun/entity"
)
type AgentRun interface {
Delete(ctx context.Context, runID []int64) error
List(ctx context.Context, ListMeta *entity.ListRunRecordMeta) ([]*entity.RunRecordMeta, error)
Create(ctx context.Context, runRecord *entity.AgentRunMeta) (*entity.RunRecordMeta, error)
}
var defaultSVC AgentRun

View File

@@ -20,10 +20,15 @@ import (
"context"
"github.com/coze-dev/coze-studio/backend/api/model/crossdomain/conversation"
"github.com/coze-dev/coze-studio/backend/domain/conversation/conversation/entity"
)
//go:generate mockgen -destination conversationmock/conversation_mock.go --package conversationmock -source conversation.go
type Conversation interface {
GetCurrentConversation(ctx context.Context, req *conversation.GetCurrent) (*conversation.Conversation, error)
CreateConversation(ctx context.Context, req *entity.CreateMeta) (*entity.Conversation, error)
ClearConversationHistory(ctx context.Context, req *ClearConversationHistoryReq) (*entity.NewConversationCtxResponse, error)
GetByID(ctx context.Context, id int64) (*entity.Conversation, error)
}
var defaultSVC Conversation
@@ -35,3 +40,7 @@ func DefaultSVC() Conversation {
func SetDefaultSVC(c Conversation) {
defaultSVC = c
}
type ClearConversationHistoryReq struct {
ConversationID int64
}

View File

@@ -0,0 +1,120 @@
/*
* 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.
*/
// Code generated by MockGen. DO NOT EDIT.
// Source: conversation.go
//
// Generated by this command:
//
// mockgen -destination conversationmock/conversation_mock.go --package conversationmock -source conversation.go
//
// Package conversationmock is a generated GoMock package.
package conversationmock
import (
context "context"
reflect "reflect"
conversation "github.com/coze-dev/coze-studio/backend/api/model/crossdomain/conversation"
conversation0 "github.com/coze-dev/coze-studio/backend/crossdomain/contract/conversation"
entity "github.com/coze-dev/coze-studio/backend/domain/conversation/conversation/entity"
gomock "go.uber.org/mock/gomock"
)
// MockConversation is a mock of Conversation interface.
type MockConversation struct {
ctrl *gomock.Controller
recorder *MockConversationMockRecorder
isgomock struct{}
}
// MockConversationMockRecorder is the mock recorder for MockConversation.
type MockConversationMockRecorder struct {
mock *MockConversation
}
// NewMockConversation creates a new mock instance.
func NewMockConversation(ctrl *gomock.Controller) *MockConversation {
mock := &MockConversation{ctrl: ctrl}
mock.recorder = &MockConversationMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockConversation) EXPECT() *MockConversationMockRecorder {
return m.recorder
}
// ClearConversationHistory mocks base method.
func (m *MockConversation) ClearConversationHistory(ctx context.Context, req *conversation0.ClearConversationHistoryReq) (*entity.NewConversationCtxResponse, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "ClearConversationHistory", ctx, req)
ret0, _ := ret[0].(*entity.NewConversationCtxResponse)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// ClearConversationHistory indicates an expected call of ClearConversationHistory.
func (mr *MockConversationMockRecorder) ClearConversationHistory(ctx, req any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ClearConversationHistory", reflect.TypeOf((*MockConversation)(nil).ClearConversationHistory), ctx, req)
}
// CreateConversation mocks base method.
func (m *MockConversation) CreateConversation(ctx context.Context, req *entity.CreateMeta) (*entity.Conversation, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "CreateConversation", ctx, req)
ret0, _ := ret[0].(*entity.Conversation)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// CreateConversation indicates an expected call of CreateConversation.
func (mr *MockConversationMockRecorder) CreateConversation(ctx, req any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateConversation", reflect.TypeOf((*MockConversation)(nil).CreateConversation), ctx, req)
}
// GetByID mocks base method.
func (m *MockConversation) GetByID(ctx context.Context, id int64) (*entity.Conversation, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetByID", ctx, id)
ret0, _ := ret[0].(*entity.Conversation)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetByID indicates an expected call of GetByID.
func (mr *MockConversationMockRecorder) GetByID(ctx, id any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByID", reflect.TypeOf((*MockConversation)(nil).GetByID), ctx, id)
}
// GetCurrentConversation mocks base method.
func (m *MockConversation) GetCurrentConversation(ctx context.Context, req *conversation.GetCurrent) (*conversation.Conversation, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetCurrentConversation", ctx, req)
ret0, _ := ret[0].(*conversation.Conversation)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetCurrentConversation indicates an expected call of GetCurrentConversation.
func (mr *MockConversationMockRecorder) GetCurrentConversation(ctx, req any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentConversation", reflect.TypeOf((*MockConversation)(nil).GetCurrentConversation), ctx, req)
}

View File

@@ -19,14 +19,24 @@ package message
import (
"context"
"github.com/cloudwego/eino/schema"
"github.com/coze-dev/coze-studio/backend/api/model/crossdomain/message"
"github.com/coze-dev/coze-studio/backend/domain/conversation/message/entity"
)
//go:generate mockgen -destination messagemock/message_mock.go --package messagemock -source message.go
type Message interface {
GetByRunIDs(ctx context.Context, conversationID int64, runIDs []int64) ([]*message.Message, error)
PreCreate(ctx context.Context, msg *message.Message) (*message.Message, error)
Create(ctx context.Context, msg *message.Message) (*message.Message, error)
List(ctx context.Context, meta *entity.ListMeta) (*entity.ListResult, error)
ListWithoutPair(ctx context.Context, req *entity.ListMeta) (*entity.ListResult, error)
Edit(ctx context.Context, msg *message.Message) (*message.Message, error)
Delete(ctx context.Context, req *entity.DeleteMeta) error
GetMessageByID(ctx context.Context, id int64) (*entity.Message, error)
MessageList(ctx context.Context, req *MessageListRequest) (*MessageListResponse, error)
GetLatestRunIDs(ctx context.Context, req *GetLatestRunIDsRequest) ([]int64, error)
GetMessagesByRunIDs(ctx context.Context, req *GetMessagesByRunIDsRequest) (*GetMessagesByRunIDsResponse, error)
}
var defaultSVC Message
@@ -40,3 +50,55 @@ func DefaultSVC() Message {
func SetDefaultSVC(c Message) {
defaultSVC = c
}
type MessageListRequest struct {
ConversationID int64
Limit int64
BeforeID *string
AfterID *string
UserID int64
AppID int64
OrderBy *string
}
type MessageListResponse struct {
Messages []*WfMessage
FirstID string
LastID string
HasMore bool
}
type Content struct {
Type message.InputType `json:"type"`
Text *string `json:"text,omitempty"`
Uri *string `json:"uri,omitempty"`
Url *string `json:"url,omitempty"`
}
type WfMessage struct {
ID int64
Role schema.RoleType `json:"role"` // user or assistant
MultiContent []*Content `json:"multi_content"`
Text *string `json:"text,omitempty"`
ContentType string `json:"content_type"`
SectionID int64 `json:"section_id"`
}
type GetLatestRunIDsRequest struct {
ConversationID int64
UserID int64
AppID int64
Rounds int64
SectionID int64
InitRunID *int64
}
type GetMessagesByRunIDsRequest struct {
ConversationID int64
RunIDs []int64
}
type GetMessagesByRunIDsResponse struct {
Messages []*WfMessage
SchemaMessages []*schema.Message
}

View File

@@ -0,0 +1,224 @@
/*
* 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.
*/
// Code generated by MockGen. DO NOT EDIT.
// Source: message.go
//
// Generated by this command:
//
// mockgen -destination messagemock/message_mock.go --package messagemock -source message.go
//
// Package messagemock is a generated GoMock package.
package messagemock
import (
context "context"
reflect "reflect"
message "github.com/coze-dev/coze-studio/backend/api/model/crossdomain/message"
message0 "github.com/coze-dev/coze-studio/backend/crossdomain/contract/message"
entity "github.com/coze-dev/coze-studio/backend/domain/conversation/message/entity"
gomock "go.uber.org/mock/gomock"
)
// MockMessage is a mock of Message interface.
type MockMessage struct {
ctrl *gomock.Controller
recorder *MockMessageMockRecorder
isgomock struct{}
}
// MockMessageMockRecorder is the mock recorder for MockMessage.
type MockMessageMockRecorder struct {
mock *MockMessage
}
// NewMockMessage creates a new mock instance.
func NewMockMessage(ctrl *gomock.Controller) *MockMessage {
mock := &MockMessage{ctrl: ctrl}
mock.recorder = &MockMessageMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockMessage) EXPECT() *MockMessageMockRecorder {
return m.recorder
}
// Create mocks base method.
func (m *MockMessage) Create(ctx context.Context, msg *message.Message) (*message.Message, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Create", ctx, msg)
ret0, _ := ret[0].(*message.Message)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Create indicates an expected call of Create.
func (mr *MockMessageMockRecorder) Create(ctx, msg any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockMessage)(nil).Create), ctx, msg)
}
// Delete mocks base method.
func (m *MockMessage) Delete(ctx context.Context, req *entity.DeleteMeta) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Delete", ctx, req)
ret0, _ := ret[0].(error)
return ret0
}
// Delete indicates an expected call of Delete.
func (mr *MockMessageMockRecorder) Delete(ctx, req any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockMessage)(nil).Delete), ctx, req)
}
// Edit mocks base method.
func (m *MockMessage) Edit(ctx context.Context, msg *message.Message) (*message.Message, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Edit", ctx, msg)
ret0, _ := ret[0].(*message.Message)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Edit indicates an expected call of Edit.
func (mr *MockMessageMockRecorder) Edit(ctx, msg any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Edit", reflect.TypeOf((*MockMessage)(nil).Edit), ctx, msg)
}
// GetByRunIDs mocks base method.
func (m *MockMessage) GetByRunIDs(ctx context.Context, conversationID int64, runIDs []int64) ([]*message.Message, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetByRunIDs", ctx, conversationID, runIDs)
ret0, _ := ret[0].([]*message.Message)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetByRunIDs indicates an expected call of GetByRunIDs.
func (mr *MockMessageMockRecorder) GetByRunIDs(ctx, conversationID, runIDs any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByRunIDs", reflect.TypeOf((*MockMessage)(nil).GetByRunIDs), ctx, conversationID, runIDs)
}
// GetLatestRunIDs mocks base method.
func (m *MockMessage) GetLatestRunIDs(ctx context.Context, req *message0.GetLatestRunIDsRequest) ([]int64, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetLatestRunIDs", ctx, req)
ret0, _ := ret[0].([]int64)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetLatestRunIDs indicates an expected call of GetLatestRunIDs.
func (mr *MockMessageMockRecorder) GetLatestRunIDs(ctx, req any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetLatestRunIDs", reflect.TypeOf((*MockMessage)(nil).GetLatestRunIDs), ctx, req)
}
// GetMessageByID mocks base method.
func (m *MockMessage) GetMessageByID(ctx context.Context, id int64) (*entity.Message, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetMessageByID", ctx, id)
ret0, _ := ret[0].(*entity.Message)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetMessageByID indicates an expected call of GetMessageByID.
func (mr *MockMessageMockRecorder) GetMessageByID(ctx, id any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMessageByID", reflect.TypeOf((*MockMessage)(nil).GetMessageByID), ctx, id)
}
// GetMessagesByRunIDs mocks base method.
func (m *MockMessage) GetMessagesByRunIDs(ctx context.Context, req *message0.GetMessagesByRunIDsRequest) (*message0.GetMessagesByRunIDsResponse, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetMessagesByRunIDs", ctx, req)
ret0, _ := ret[0].(*message0.GetMessagesByRunIDsResponse)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetMessagesByRunIDs indicates an expected call of GetMessagesByRunIDs.
func (mr *MockMessageMockRecorder) GetMessagesByRunIDs(ctx, req any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMessagesByRunIDs", reflect.TypeOf((*MockMessage)(nil).GetMessagesByRunIDs), ctx, req)
}
// List mocks base method.
func (m *MockMessage) List(ctx context.Context, meta *entity.ListMeta) (*entity.ListResult, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "List", ctx, meta)
ret0, _ := ret[0].(*entity.ListResult)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// List indicates an expected call of List.
func (mr *MockMessageMockRecorder) List(ctx, meta any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "List", reflect.TypeOf((*MockMessage)(nil).List), ctx, meta)
}
// ListWithoutPair mocks base method.
func (m *MockMessage) ListWithoutPair(ctx context.Context, req *entity.ListMeta) (*entity.ListResult, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "ListWithoutPair", ctx, req)
ret0, _ := ret[0].(*entity.ListResult)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// ListWithoutPair indicates an expected call of ListWithoutPair.
func (mr *MockMessageMockRecorder) ListWithoutPair(ctx, req any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListWithoutPair", reflect.TypeOf((*MockMessage)(nil).ListWithoutPair), ctx, req)
}
// MessageList mocks base method.
func (m *MockMessage) MessageList(ctx context.Context, req *message0.MessageListRequest) (*message0.MessageListResponse, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "MessageList", ctx, req)
ret0, _ := ret[0].(*message0.MessageListResponse)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// MessageList indicates an expected call of MessageList.
func (mr *MockMessageMockRecorder) MessageList(ctx, req any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MessageList", reflect.TypeOf((*MockMessage)(nil).MessageList), ctx, req)
}
// PreCreate mocks base method.
func (m *MockMessage) PreCreate(ctx context.Context, msg *message.Message) (*message.Message, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "PreCreate", ctx, msg)
ret0, _ := ret[0].(*message.Message)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// PreCreate indicates an expected call of PreCreate.
func (mr *MockMessageMockRecorder) PreCreate(ctx, msg any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PreCreate", reflect.TypeOf((*MockMessage)(nil).PreCreate), ctx, msg)
}

View File

@@ -0,0 +1,37 @@
/*
* 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 crossupload
import (
"context"
"github.com/coze-dev/coze-studio/backend/domain/upload/service"
)
var defaultSVC Uploader
type Uploader interface {
GetFile(ctx context.Context, req *service.GetFileRequest) (resp *service.GetFileResponse, err error)
}
func SetDefaultSVC(s Uploader) {
defaultSVC = s
}
func DefaultSVC() Uploader {
return defaultSVC
}

View File

@@ -38,19 +38,47 @@ type Workflow interface {
allInterruptEvents map[string]*workflowEntity.ToolInterruptEvent) einoCompose.Option
ReleaseApplicationWorkflows(ctx context.Context, appID int64, config *ReleaseWorkflowConfig) ([]*vo.ValidateIssue, error)
GetWorkflowIDsByAppID(ctx context.Context, appID int64) ([]int64, error)
SyncExecuteWorkflow(ctx context.Context, config workflowModel.ExecuteConfig, input map[string]any) (*workflowEntity.WorkflowExecution, vo.TerminatePlan, error)
StreamExecute(ctx context.Context, config workflowModel.ExecuteConfig, input map[string]any) (*schema.StreamReader[*workflowEntity.Message], error)
WithExecuteConfig(cfg workflowModel.ExecuteConfig) einoCompose.Option
WithMessagePipe() (compose.Option, *schema.StreamReader[*entity.Message], func())
StreamResume(ctx context.Context, req *entity.ResumeRequest, config workflowModel.ExecuteConfig) (*schema.StreamReader[*entity.Message], error)
InitApplicationDefaultConversationTemplate(ctx context.Context, spaceID int64, appID int64, userID int64) error
}
type ExecuteConfig = workflowModel.ExecuteConfig
type ExecuteMode = workflowModel.ExecuteMode
type NodeType = entity.NodeType
type WorkflowMessage = entity.Message
type WorkflowMessage = workflowEntity.Message
type StateMessage = workflowEntity.StateMessage
type NodeType = entity.NodeType
type MessageType = entity.MessageType
type InterruptEvent = workflowEntity.InterruptEvent
type EventType = workflowEntity.InterruptEventType
type ResumeRequest = entity.ResumeRequest
type WorkflowExecuteStatus = entity.WorkflowExecuteStatus
const (
WorkflowRunning = WorkflowExecuteStatus(entity.WorkflowRunning)
WorkflowSuccess = WorkflowExecuteStatus(entity.WorkflowSuccess)
WorkflowFailed = WorkflowExecuteStatus(entity.WorkflowFailed)
WorkflowCancel = WorkflowExecuteStatus(entity.WorkflowCancel)
WorkflowInterrupted = WorkflowExecuteStatus(entity.WorkflowInterrupted)
)
const (
Answer MessageType = "answer"
FunctionCall MessageType = "function_call"
ToolResponse MessageType = "tool_response"
)
const (
NodeTypeOutputEmitter NodeType = "OutputEmitter"
NodeTypeInputReceiver NodeType = "InputReceiver"
NodeTypeQuestion NodeType = "QuestionAnswer"
)
const (
@@ -61,6 +89,14 @@ const (
type TaskType = workflowModel.TaskType
type SyncPattern = workflowModel.SyncPattern
const (
SyncPatternSync SyncPattern = "sync"
SyncPatternAsync SyncPattern = "async"
SyncPatternStream SyncPattern = "stream"
)
const (
TaskTypeForeground TaskType = "foreground"
TaskTypeBackground TaskType = "background"
@@ -73,6 +109,14 @@ const (
BizTypeWorkflow BizType = "workflow"
)
type Locator = workflowModel.Locator
const (
FromDraft Locator = iota
FromSpecificVersion
FromLatestVersion
)
type ReleaseWorkflowConfig = vo.ReleaseWorkflowConfig
type ToolInterruptEvent = workflowEntity.ToolInterruptEvent