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