diff --git a/components/i/Create.vue b/components/i/Create.vue
index 5f770e40345af7eca2e379a5b1c84a85e833bce7..2449fb5ac8458b300c25bdc48dfd18206ac92f8b 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 b0be35b1455520e867409aeb5af9d1fa851bead4..9835abb04285e56618ae46dc4fb2c864e3421a22 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 0000000000000000000000000000000000000000..777bdbf0d3fccde0b926bacf7a78acd7ec84e15e
--- /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