Skip to content

Commit 5dbe687

Browse files
authored
fix: Fix Canvas Console Warning and AI Node Model Selection Component Usage (#6759)
1 parent 333c0ac commit 5dbe687

12 files changed

Lines changed: 135 additions & 70 deletions

File tree

‎ui/src/api/admin/workspace/model/model.ts‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ const putPauseModelDownload = (modelId: string) => {
4242
return put<undefined, boolean>(`${getPrefix()}/${modelId}/pause_download`)
4343
}
4444

45-
46-
4745
export default {
4846
deleteModel,
4947
getModelDetail,

‎ui/src/components/business/model-select/index.vue‎

Lines changed: 11 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
<script setup lang="ts">
2-
import { computed, onMounted, ref } from 'vue'
2+
import { computed, ref } from 'vue'
33
import { Check } from '@element-plus/icons-vue'
4-
import ProviderApi from '@/api/admin/workspace/model/provider'
54
import { MODEL_STATUS } from '@/api/enums'
65
import type { ModelProviderItem, ModelItem } from '@/api/types'
7-
6+
import { groupBy } from 'lodash'
87
defineOptions({
98
name: 'ModelSelect',
109
inheritAttrs: false,
1110
})
1211
13-
type ModelOptions = Record<string, ModelItem[]>
14-
1512
interface ModelOptionGroup {
1613
icon: string
1714
models: ModelItem[]
@@ -21,23 +18,24 @@ interface ModelOptionGroup {
2118
2219
const props = withDefaults(
2320
defineProps<{
24-
modelType?: string
2521
modelValue: string
26-
options: ModelOptions | null
22+
options: ModelItem[]
23+
providerOptions: ModelProviderItem[]
2724
}>(),
2825
{
29-
modelType: '',
3026
modelValue: '',
31-
options: null,
27+
options: () => [],
28+
providerOptions: () => [],
3229
},
3330
)
34-
31+
const _options = computed(() => {
32+
return groupBy(props.options, 'provider')
33+
})
3534
const emit = defineEmits<{
3635
change: [modelId: string]
3736
'update:modelValue': [modelId: string]
3837
}>()
3938
40-
const providerOptions = ref<ModelProviderItem[]>([])
4139
const loading = ref(false)
4240
4341
const selectedModelId = computed({
@@ -50,10 +48,10 @@ const selectedModelId = computed({
5048
5149
const modelOptionGroups = computed<ModelOptionGroup[]>(() => {
5250
const providerMap = new Map(
53-
providerOptions.value.map((provider) => [provider.provider, provider]),
51+
props.providerOptions.map((provider) => [provider.provider, provider]),
5452
)
5553
56-
return Object.entries(props.options ?? {}).map(([provider, models]) => {
54+
return Object.entries(_options.value ?? {}).map(([provider, models]) => {
5755
const providerOption = providerMap.get(provider)
5856
return {
5957
icon: providerOption?.icon ?? '',
@@ -74,25 +72,6 @@ const selectedProviderIcon = computed(
7472
models.some(({ id }) => id === selectedModelId.value),
7573
)?.icon ?? '',
7674
)
77-
78-
function loadProviderOptions() {
79-
loading.value = true
80-
81-
return ProviderApi.getProviderList()
82-
.then((providers) => {
83-
providerOptions.value = providers
84-
})
85-
.catch(() => {
86-
providerOptions.value = []
87-
})
88-
.finally(() => {
89-
loading.value = false
90-
})
91-
}
92-
93-
onMounted(() => {
94-
loadProviderOptions()
95-
})
9675
</script>
9776

9877
<template>

‎ui/src/views/workflow/ApplicationWorkflowView.vue‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ function handleSave() {
4646
loading.value = false
4747
})
4848
}
49+
const defaultWorkflow = {
50+
nodes: [],
51+
deges: [],
52+
}
4953
5054
function loadApplicationDetail() {
5155
loading.value = true

‎ui/src/workflow-canvas/core/CustomLine.vue‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
<script setup lang="ts">
22
import type { BaseEdgeModel } from '@logicflow/core'
3-
4-
const props = defineProps<{ model: BaseEdgeModel }>()
3+
import { inject } from 'vue'
4+
const getModel = inject('getModel') as () => BaseEdgeModel
5+
const model = getModel()
56
const deleteEdge = () => {
6-
props.model.graphModel.deleteEdgeById(props.model.id)
7+
model.graphModel.deleteEdgeById(model.id)
78
}
89
</script>
910
<template>
10-
<div class="custom-edge cursor" @mouseup.stop @click.stop v-show="props.model.isHovered">
11+
<div class="custom-edge cursor" @mouseup.stop @click.stop v-show="model.isHovered">
1112
<svg
1213
@click="deleteEdge"
1314
width="22"

‎ui/src/workflow-canvas/core/edge.ts‎

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ import {
66
type GraphModel,
77
} from '@logicflow/core'
88
import type { App } from 'vue'
9-
import { createApp, h as vh } from 'vue'
10-
import { isActive, connect, disconnect } from './teleport'
9+
import { connect, disconnect } from './teleport'
1110
import CustomLine from './CustomLine.vue'
1211

1312
function isMouseInElement(element: Element, event: PointerEvent) {
@@ -47,25 +46,12 @@ class CustomEdge2 extends BezierEdge {
4746
protected renderVueComponent(root: HTMLDivElement) {
4847
this.unmountVueComponent()
4948
this.root = root
50-
const { graphModel } = this.props
5149
if (root) {
52-
if (isActive()) {
53-
connect(
54-
this.targetId(),
55-
CustomLine,
56-
root,
57-
this.props.model,
58-
graphModel,
59-
(node: BaseEdgeModel, graph: GraphModel) => {
60-
return { model: node, graph }
61-
},
62-
)
63-
} else {
64-
this.customLineApp = createApp({
65-
render: () => vh(CustomLine, { model: this.props.model }),
66-
})
67-
this.customLineApp?.mount(root)
68-
}
50+
connect(this.targetId(), CustomLine, root, () => {
51+
return {
52+
getModel: () => this.props.model,
53+
}
54+
})
6955
}
7056
}
7157
protected targetId() {
@@ -78,9 +64,7 @@ class CustomEdge2 extends BezierEdge {
7864
if (super.componentWillUnmount) {
7965
super.componentWillUnmount()
8066
}
81-
if (isActive()) {
82-
disconnect(this.targetId())
83-
}
67+
disconnect(this.targetId())
8468
this.unmountVueComponent()
8569
}
8670
/**

‎ui/src/workflow-canvas/index.vue‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ const props = withDefaults(
2828
const nodeModules = import.meta.glob<{ default: LogicFlow.RegisterConfig }>('./nodes/**/index.ts', {
2929
eager: true,
3030
})
31-
const workflow_mode = inject('workflowMode') || WorkflowMode.Application
32-
const loop_workflow_mode = inject('loopWorkflowMode') || WorkflowMode.ApplicationLoop
31+
const workflow_mode = inject('workflowMode', WorkflowMode.Application)
32+
const loop_workflow_mode = inject('loopWorkflowMode', WorkflowMode.ApplicationLoop)
3333
3434
const TeleportContainer = getTeleport()
3535
const lf = shallowRef<LogicFlow>()
@@ -69,7 +69,6 @@ function renderGraphData(data: LogicFlow.GraphConfigData = props.data ?? {}) {
6969
})
7070
7171
initDefaultShortcut(lf.value, lf.value.graphModel)
72-
console.log(Object.values(nodeModules).map(({ default: node }) => node))
7372
lf.value.batchRegister([...Object.values(nodeModules).map(({ default: node }) => node), AppEdge])
7473
lf.value.setDefaultEdgeType('app-edge')
7574
lf.value.render(data ? data : {})
@@ -82,6 +81,7 @@ function renderGraphData(data: LogicFlow.GraphConfigData = props.data ?? {}) {
8281
getGraph: () => graph,
8382
workflowMode: workflow_mode,
8483
loopWorkflowMode: loop_workflow_mode,
84+
apiType: 'workspace',
8585
})
8686
lf.value.graphModel.eventCenter.on('delete_edge', (edgeIds: string[]) => {
8787
edgeIds.forEach((edgeId) => lf.value?.deleteEdge(edgeId))

‎ui/src/workflow-canvas/nodes/ai-chat-node/index.vue‎

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
<script setup lang="ts">
2-
import { computed, inject, onMounted, useTemplateRef } from 'vue'
3-
4-
import { set } from 'lodash'
2+
import { computed, inject, onMounted, ref, useTemplateRef } from 'vue'
3+
import ModelSelect from '@/components/business/model-select/index.vue'
4+
import { groupBy, set } from 'lodash'
55
import type { FormInstance } from 'element-plus'
66
import NodeCascader from '@/workflow-canvas/core/NodeCascader.vue'
77
import NodeContainer from '@/workflow-canvas/core/NodeContainer.vue'
88
import type { BaseNodeModel } from '@logicflow/core'
9+
import { useWorkflowStore } from '@/workflow-canvas/store'
10+
import type { ModelItem } from '@/api/types'
911
1012
defineOptions({ name: 'WorkflowAiChatNode' })
1113
const getModel = inject('getModel') as () => BaseNodeModel
14+
const apiType = (inject('apiType') as string) || 'workspace'
1215
const model = getModel()
1316
interface AiChatNodeForm {
1417
model_id: string
@@ -47,8 +50,22 @@ function validate() {
4750
formRef.value?.validate(),
4851
]).catch((error) => Promise.reject({ node: model, errMessage: error }))
4952
}
50-
51-
onMounted(() => set(model, 'validate', validate))
53+
const store = useWorkflowStore(apiType)
54+
const modelList = ref<Array<ModelItem>>([])
55+
const providerOptions = ref<Array<any>>([])
56+
onMounted(() => {
57+
set(model, 'validate', validate)
58+
store
59+
.getModelList({
60+
model_type: 'LLM',
61+
})
62+
.then((data) => {
63+
modelList.value = data
64+
})
65+
store.getProviderList().then((data) => {
66+
providerOptions.value = data
67+
})
68+
})
5269
</script>
5370

5471
<template>
@@ -88,7 +105,13 @@ onMounted(() => set(model, 'validate', validate))
88105
class="w-full"
89106
placeholder="请选择变量"
90107
/>
91-
<el-input v-else v-model="formData.model_id" placeholder="请输入 AI 模型 ID" />
108+
<ModelSelect
109+
v-else
110+
placeholder="请输入 AI 模型 ID"
111+
:options="modelList"
112+
:provider-options="providerOptions"
113+
v-model="formData.model_id"
114+
></ModelSelect>
92115
</el-form-item>
93116

94117
<el-form-item label="系统提示词">
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default {}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import modelAPI from '@/api/admin/workspace/model/model'
2+
export default {
3+
getModelList: modelAPI.getModelList,
4+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default {}

0 commit comments

Comments
 (0)