From 6a726c61793af4102704cd4c31327aac2c49e1d8 Mon Sep 17 00:00:00 2001 From: Christian Beeznest Date: Fri, 16 Jan 2026 01:22:10 -0500 Subject: [PATCH] Glossary: Add AI glossary term generator - refs #7309 --- assets/vue/router/glossary.js | 9 +- assets/vue/services/glossaryService.js | 60 +- .../views/glossary/GlossaryGenerateTerms.vue | 526 ++++++++++++++++++ assets/vue/views/glossary/GlossaryList.vue | 77 ++- src/CoreBundle/Controller/AiController.php | 357 ++++++++---- .../PlatformConfigurationController.php | 1 + .../Repository/CGlossaryRepository.php | 53 ++ 7 files changed, 938 insertions(+), 145 deletions(-) create mode 100644 assets/vue/views/glossary/GlossaryGenerateTerms.vue diff --git a/assets/vue/router/glossary.js b/assets/vue/router/glossary.js index 1093470a9d6..7b16a6cacc1 100644 --- a/assets/vue/router/glossary.js +++ b/assets/vue/router/glossary.js @@ -23,13 +23,18 @@ export default { }, { name: "ImportGlossary", - path: "", + path: "import", component: () => import("../views/glossary/GlossaryImport.vue"), }, { name: "ExportGlossary", - path: "", + path: "export", component: () => import("../views/glossary/GlossaryExport.vue"), }, + { + name: "GenerateGlossaryTerms", + path: "generate", + component: () => import("../views/glossary/GlossaryGenerateTerms.vue"), + }, ], } diff --git a/assets/vue/services/glossaryService.js b/assets/vue/services/glossaryService.js index cdec7dca1c0..7a3e0790133 100644 --- a/assets/vue/services/glossaryService.js +++ b/assets/vue/services/glossaryService.js @@ -2,84 +2,70 @@ import { ENTRYPOINT } from "../config/entrypoint" import axios from "axios" export default { - /** - * @param {Object} params - */ + // --------------------------- + // Glossary CRUD (API entrypoint) + // --------------------------- getGlossaryTerms: async (params) => { const response = await axios.get(ENTRYPOINT + "glossaries", { params }) - return response.data }, - /** - * @param {String|Number} termId - */ getGlossaryTerm: async (termId) => { const response = await axios.get(ENTRYPOINT + `glossaries/${termId}`) - return response.data }, - /** - * @param {Object} data - */ createGlossaryTerm: async (data) => { - const response = await axios.post(ENTRYPOINT + `glossaries`, data) - + const response = await axios.post(ENTRYPOINT + "glossaries", data) return response.data }, - /** - * @param {String|Number} termId - * @param {Object} data - */ updateGlossaryTerm: async (termId, data) => { const response = await axios.put(ENTRYPOINT + `glossaries/${termId}`, data) - return response.data }, - /** - * @param {FormData} formData - */ export: async (formData) => { const endpoint = `${ENTRYPOINT}glossaries/export` - const response = await axios.post(endpoint, formData, { responsetype: "blob" }) - + const response = await axios.post(endpoint, formData, { responseType: "blob" }) return response.data }, - /** - * @param {FormData} formData - */ import: async (formData) => { const endpoint = `${ENTRYPOINT}glossaries/import` const response = await axios.post(endpoint, formData, { - headers: { - "Content-Type": "multipart/form-data", - }, + headers: { "Content-Type": "multipart/form-data" }, }) - return response.data }, - /** - * @param {Object} data - */ exportToDocuments: async (data) => { const endpoint = `${ENTRYPOINT}glossaries/export_to_documents` const response = await axios.post(endpoint, data) - return response.data }, - /** - * @param {String|Number} termId - */ deleteTerm: async (termId) => { const endpoint = `${ENTRYPOINT}glossaries/${termId}` const response = await axios.delete(endpoint) + return response.data + }, + + // --------------------------- + // AI helpers (non-API entrypoint) + // --------------------------- + getTextProviders: async () => { + const response = await axios.get("/ai/text_providers") + return response.data + }, + + getDefaultPrompt: async (params) => { + const response = await axios.get("/ai/glossary_default_prompt", { params }) + return response.data + }, + generateGlossaryTerms: async (data) => { + const response = await axios.post("/ai/generate_glossary_terms", data) return response.data }, } diff --git a/assets/vue/views/glossary/GlossaryGenerateTerms.vue b/assets/vue/views/glossary/GlossaryGenerateTerms.vue new file mode 100644 index 00000000000..e47f0d0f661 --- /dev/null +++ b/assets/vue/views/glossary/GlossaryGenerateTerms.vue @@ -0,0 +1,526 @@ +