From d0e4299cd2d5bb5d00baec10158361a0f6f149b1 Mon Sep 17 00:00:00 2001 From: DebugIsFalse <511418503@qq.com> Date: Thu, 16 May 2024 19:27:49 +0800 Subject: [PATCH] feature: add source --- components/i/Create.vue | 12 +++++++++--- pages/search/[id].vue | 29 ++++++++++++++++++++++------- utils/getMockRepo.js | 7 +++++++ 3 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 utils/getMockRepo.js diff --git a/components/i/Create.vue b/components/i/Create.vue index 5f770e4..2449fb5 100644 --- a/components/i/Create.vue +++ b/components/i/Create.vue @@ -14,9 +14,11 @@ v-model="selectedRepo" :options="repos" placeholder="选择 GitHub 项目" + value-attribute="label" + option-attribute="label" searchable > - + { if (loading.value) return; @@ -44,6 +49,7 @@ const handleSearch = async () => { } }); if (result && result.data) { + const currentRepo = repos.value.find(item => item.label === selectedRepo.value); navigateTo(`/search/${result.data.c_id}?query=${query.value}&repo=${selectedRepo.value}`); nextTick(() => { loading.value = false; diff --git a/pages/search/[id].vue b/pages/search/[id].vue index b0be35b..9835abb 100644 --- a/pages/search/[id].vue +++ b/pages/search/[id].vue @@ -140,10 +140,15 @@ const toast = useToast() const route = useRoute() const { fetchRequest } = useFetchRequest() +const repos = getMockRepo(); +// todo mock +const repoItem = repos.find(item => route.query.repo === item.label); const state = reactive({ query: route.query.query || '', repo: route.query.repo || '', - id: route.params.id + id: route.params.id, + branch: repoItem.branch, + gitPath: repoItem.url }) const isEditTitle = ref(false) const titleRef = ref(null) @@ -206,7 +211,6 @@ const handleFormFetchData = (fetchData) => { const index = data.value.length === 0 ? 0 : data.value.length - 1; data.value[index] = data.value[index] || {}; const { meta, choices } = message; - console.log(`meta:`, meta, choices) if (meta.type === 'answer') { Object.assign(data.value[index], { question: state.query, @@ -229,12 +233,23 @@ const handleFormFetchData = (fetchData) => { } } } +const handleUpdateSource = () => { + const index = data.value.length === 0 ? 0 : data.value.length - 1; + data.value[index] = data.value[index] || {}; + // https://github.com/allwefantasy/byzer-llm/blob/master/tests/functions_suite.py + const endWidthGit = state.gitPath.endsWith('.git'); + const baseUrl = endWidthGit ? state.gitPath.slice(0, state.gitPath.length - 4) : state.gitPath; + storeSource = storeSource.map((item) => { + item.repo = state.repo; + item.link = `${baseUrl}/blob/${state.branch}/${item.label}` + return item; + }) + Object.assign(data.value[index], { source: storeSource }); +} const handleMessage = (event) => { if (event.data === markedEnd) { asking.value = false; - const index = data.value.length === 0 ? 0 : data.value.length - 1; - data.value[index] = data.value[index] || {}; - Object.assign(data.value[index], { source: storeSource }); + handleUpdateSource(); return; } handleFormFetchData(event.data) @@ -248,14 +263,14 @@ const handleError = (event) => { handleStopGenerate(); } const generateFetchData = (query) => { - const { repo, id } = state; + const { gitPath, id } = state; const messages = []; messages.push({ role: 'user', content: query }); aiChatController = new AbortController(); asking.value = true; fetchEventSource('/v1/chat/completions', { params: { - repo_path: repo, + repo_path: gitPath, c_id: id, stream: true, messages, diff --git a/utils/getMockRepo.js b/utils/getMockRepo.js new file mode 100644 index 0000000..777bdbf --- /dev/null +++ b/utils/getMockRepo.js @@ -0,0 +1,7 @@ + +export default () => { + return [ + { url: 'https://github.com/allwefantasy/byzer-llm.git', label: 'byzer-llm', branch: 'master' }, + { url: 'https://github.com/keycloak/keycloak.git', label: 'keycloak', branch: 'master' } + ] +} \ No newline at end of file -- GitLab