mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-31 02:03:35 -04:00 
			
		
		
		
	
		
			
	
	
		
			128 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
		
		
			
		
	
	
			128 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
|  | <template> | ||
|  |   <v-container class="pa-0"> | ||
|  |     <v-container> | ||
|  |       <BaseCardSectionTitle :title="$tc('admin.debug-openai-services')"> | ||
|  |         {{ $t('admin.debug-openai-services-description') }} | ||
|  |         <br /> | ||
|  |         <DocLink class="mt-2" link="/documentation/getting-started/installation/open-ai" /> | ||
|  |       </BaseCardSectionTitle> | ||
|  |     </v-container> | ||
|  |     <v-form ref="uploadForm" @submit.prevent="testOpenAI"> | ||
|  |       <div> | ||
|  |         <v-card-text> | ||
|  |           <v-container class="pa-0"> | ||
|  |             <v-row> | ||
|  |               <v-col cols="auto" align-self="center"> | ||
|  |                 <AppButtonUpload | ||
|  |                   v-if="!uploadedImage" | ||
|  |                   class="ml-auto" | ||
|  |                   url="none" | ||
|  |                   file-name="image" | ||
|  |                   accept="image/*" | ||
|  |                   :text="$i18n.tc('recipe.upload-image')" | ||
|  |                   :text-btn="false" | ||
|  |                   :post="false" | ||
|  |                   @uploaded="uploadImage" | ||
|  |                 /> | ||
|  |                 <v-btn | ||
|  |                   v-if="!!uploadedImage" | ||
|  |                   color="error" | ||
|  |                   @click="clearImage" | ||
|  |                 > | ||
|  |                   <v-icon left>{{ $globals.icons.close }}</v-icon> | ||
|  |                   {{ $i18n.tc("recipe.remove-image") }} | ||
|  |                 </v-btn> | ||
|  |               </v-col> | ||
|  |               <v-spacer /> | ||
|  |             </v-row> | ||
|  |             <v-row v-if="uploadedImage && uploadedImagePreviewUrl" style="max-width: 25%;"> | ||
|  |               <v-spacer /> | ||
|  |               <v-col cols="12"> | ||
|  |                 <v-img :src="uploadedImagePreviewUrl" /> | ||
|  |               </v-col> | ||
|  |               <v-spacer /> | ||
|  |             </v-row> | ||
|  |           </v-container> | ||
|  |         </v-card-text> | ||
|  |         <v-card-actions> | ||
|  |           <BaseButton | ||
|  |             type="submit" | ||
|  |             :text="$i18n.tc('admin.run-test')" | ||
|  |             :icon="$globals.icons.check" | ||
|  |             :loading="loading" | ||
|  |             class="ml-auto" | ||
|  |           /> | ||
|  |         </v-card-actions> | ||
|  |       </div> | ||
|  |     </v-form> | ||
|  |     <v-divider v-if="response" class="mt-4" /> | ||
|  |     <v-container v-if="response" class="ma-0 pa-0"> | ||
|  |       <v-card-title> {{ $t('admin.test-results') }} </v-card-title> | ||
|  |       <v-card-text> {{ response }} </v-card-text> | ||
|  |     </v-container> | ||
|  |   </v-container> | ||
|  | </template> | ||
|  | 
 | ||
|  | <script lang="ts"> | ||
|  | import { defineComponent, ref } from "@nuxtjs/composition-api"; | ||
|  | import { useAdminApi } from "~/composables/api"; | ||
|  | import { alert } from "~/composables/use-toast"; | ||
|  | import { VForm } from "~/types/vuetify"; | ||
|  | 
 | ||
|  | export default defineComponent({ | ||
|  |   layout: "admin", | ||
|  |   setup() { | ||
|  |     const api = useAdminApi(); | ||
|  |     const loading = ref(false); | ||
|  |     const response = ref(""); | ||
|  | 
 | ||
|  |     const uploadForm = ref<VForm | null>(null); | ||
|  |     const uploadedImage = ref<Blob | File>(); | ||
|  |     const uploadedImageName = ref<string>(""); | ||
|  |     const uploadedImagePreviewUrl = ref<string>(); | ||
|  | 
 | ||
|  |     function uploadImage(fileObject: File) { | ||
|  |       uploadedImage.value = fileObject; | ||
|  |       uploadedImageName.value = fileObject.name; | ||
|  |       uploadedImagePreviewUrl.value = URL.createObjectURL(fileObject); | ||
|  |     } | ||
|  | 
 | ||
|  |     function clearImage() { | ||
|  |       uploadedImage.value = undefined; | ||
|  |       uploadedImageName.value = ""; | ||
|  |       uploadedImagePreviewUrl.value = undefined; | ||
|  |     } | ||
|  | 
 | ||
|  |     async function testOpenAI() { | ||
|  |       response.value = ""; | ||
|  | 
 | ||
|  |       loading.value = true; | ||
|  |       const { data } = await api.debug.debugOpenAI(uploadedImage.value); | ||
|  |       loading.value = false; | ||
|  | 
 | ||
|  |       if (!data) { | ||
|  |         alert.error("Unable to test OpenAI services"); | ||
|  |       } else { | ||
|  |         response.value = data.response || (data.success ? "Test Successful" : "Test Failed"); | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     return { | ||
|  |       loading, | ||
|  |       response, | ||
|  |       uploadForm, | ||
|  |       uploadedImage, | ||
|  |       uploadedImagePreviewUrl, | ||
|  |       uploadImage, | ||
|  |       clearImage, | ||
|  |       testOpenAI, | ||
|  |     }; | ||
|  |   }, | ||
|  |   head() { | ||
|  |     return { | ||
|  |       title: this.$t("admin.debug-openai-services"), | ||
|  |     }; | ||
|  |   }, | ||
|  | }); | ||
|  | </script> |