Add nano pro (#286)

This commit is contained in:
Germey
2025-11-23 03:26:01 +08:00
committed by GitHub
parent e1d4d4522d
commit 11dbe26ae0
24 changed files with 430 additions and 47 deletions
@@ -0,0 +1,7 @@
{
"type": "minor",
"comment": "add nano pro",
"packageName": "@acedatacloud/nexior",
"email": "cqc@cuiqingcai.com",
"dependentChangeType": "patch"
}
+4 -1
View File
@@ -1,6 +1,7 @@
<template>
<div class="flex flex-col h-full">
<div class="flex-1 overflow-y-auto p-[15px]">
<model-selector class="mb-4" />
<action-selector class="mb-4" />
<prompt-input class="mb-4" />
<aspect-ratio-selector v-if="config?.action === 'generate'" class="mb-4" />
@@ -26,6 +27,7 @@ import ImageUrlsInput from './config/ImageUrlsInput.vue';
import AspectRatioSelector from './config/AspectRatioSelector.vue';
import Consumption from '../common/Consumption.vue';
import { getConsumption } from '@/utils';
import ModelSelector from './config/ModelSelector.vue';
export default defineComponent({
name: 'ConfigPanel',
@@ -36,7 +38,8 @@ export default defineComponent({
Consumption,
ActionSelector,
ImageUrlsInput,
AspectRatioSelector
AspectRatioSelector,
ModelSelector
},
emits: ['generate'],
computed: {
@@ -0,0 +1,73 @@
<template>
<div class="field">
<h2 class="title font-bold">{{ $t('nanobanana.name.model') }}</h2>
<el-select v-model="value" class="value" :placeholder="$t('nanobanana.placeholder.select')">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { ElSelect, ElOption } from 'element-plus';
import { NANOBANANA_DEFAULT_MODEL, NANOBANANA_MODEL_NANO_BANANA, NANOBANANA_MODEL_NANO_BANANA_PRO } from '@/constants';
export default defineComponent({
name: 'NanobananaModelSelector',
components: {
ElSelect,
ElOption
},
data() {
return {
options: [
{
value: NANOBANANA_MODEL_NANO_BANANA,
label: this.$t('nanobanana.model.nanoBanana')
},
{
value: NANOBANANA_MODEL_NANO_BANANA_PRO,
label: this.$t('nanobanana.model.nanoBananaPro')
}
]
};
},
computed: {
value: {
get() {
return this.$store.state.nanobanana?.config?.model;
},
set(val: string) {
this.$store.commit('nanobanana/setConfig', {
...this.$store.state.nanobanana?.config,
model: val
});
}
}
},
mounted() {
if (!this.value) {
this.value = NANOBANANA_DEFAULT_MODEL;
}
}
});
</script>
<style lang="scss" scoped>
.field {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
.title {
font-size: 14px;
margin: 0;
width: 30%;
}
.value {
width: 160px;
}
}
</style>
+5
View File
@@ -3,3 +3,8 @@ export const NANOBANANA_SERVICE_ID = '';
export const NANOBANANA_DEFAULT_ACTION: 'generate' | 'edit' = 'generate';
export const NANOBANANA_DEFAULT_ASPECT_RATIO = '1:1';
export const NANOBANANA_MODEL_NANO_BANANA = 'nano-banana';
export const NANOBANANA_MODEL_NANO_BANANA_PRO = 'nano-banana-pro';
export const NANOBANANA_DEFAULT_MODEL = NANOBANANA_MODEL_NANO_BANANA;
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "فشل تحميل الصورة، يرجى المحاولة مرة أخرى لاحقًا",
"description": "فشل التحميل"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Hochladen des Bildes fehlgeschlagen, bitte versuchen Sie es später erneut",
"description": "Hochladen fehlgeschlagen"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Αποτυχία ανάρτησης εικόνας, παρακαλώ δοκιμάστε ξανά αργότερα",
"description": "Αποτυχία ανάρτησης"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Failed to upload image, please try again later",
"description": "Message indicating upload failure"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Fallo al subir la imagen, por favor intente de nuevo más tarde",
"description": "Fallo en la subida"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Kuvan lataaminen epäonnistui, yritä myöhemmin uudelleen",
"description": "Lataus epäonnistui"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Échec du téléchargement de l'image, veuillez réessayer plus tard",
"description": "Échec du téléchargement"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Caricamento dell'immagine fallito, riprova più tardi",
"description": "Caricamento fallito"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "画像のアップロードに失敗しました。後で再試行してください",
"description": "アップロードに失敗しました"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "이미지 업로드 실패, 나중에 다시 시도하세요.",
"description": "업로드 실패"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Nie udało się przesłać obrazu, spróbuj ponownie później",
"description": "Błąd przesyłania"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Falha ao enviar a imagem, por favor, tente novamente mais tarde",
"description": "Falha no envio"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Не удалось загрузить изображение, пожалуйста, попробуйте позже",
"description": "Ошибка загрузки"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Otpremanje slike nije uspelo, molimo pokušajte ponovo kasnije",
"description": "Neuspeh pri otpremanju"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Misslyckades med att ladda upp bilden, vänligen försök igen senare",
"description": "Misslyckande vid uppladdning"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "Не вдалося завантажити зображення, будь ласка, спробуйте ще раз пізніше",
"description": "Помилка завантаження"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+112 -28
View File
@@ -1,34 +1,118 @@
{
"name.taskId": { "message": "任务 ID", "description": "任务的 ID" },
"name.task": { "message": "任务类型", "description": "Nano Banana 图片操作类型" },
"name.generate": { "message": "创建图片", "description": "操作类型:创建图片" },
"name.edits": { "message": "编辑图片", "description": "操作类型:编辑图片" },
"name.imageUrls": { "message": "参考图片", "description": "用于编辑的参考图片" },
"name.failure": { "message": "失败", "description": "任务失败" },
"name.failureReason": { "message": "失败原因", "description": "任务失败原因" },
"name.status": { "message": "状态", "description": "任务状态" },
"name.traceId": { "message": "追踪 ID", "description": "追踪 ID" },
"name.prompt": { "message": "图像提示", "description": "生成/编辑的提示词" },
"name.nanobananaBot": { "message": "Nano Banana Bot", "description": "Nano Banana 图片生成器名称" },
"name.aspectRatio": { "message": "宽高比", "description": "生成图像的宽高比" },
"description.prompt": { "message": "生成或编辑图像的提示词", "description": "提示词描述" },
"description.imageUrls": { "message": "编辑图片任务中必须上传 1-5 张图片。", "description": "image_urls 参数说明" },
"name.taskId": {
"message": "任务 ID",
"description": "任务的 ID"
},
"name.task": {
"message": "任务类型",
"description": "Nano Banana 图片操作类型"
},
"name.generate": {
"message": "创建图片",
"description": "操作类型:创建图片"
},
"name.edits": {
"message": "编辑图片",
"description": "操作类型:编辑图片"
},
"name.imageUrls": {
"message": "参考图片",
"description": "用于编辑的参考图片"
},
"name.failure": {
"message": "失败",
"description": "任务失败"
},
"name.failureReason": {
"message": "失败原因",
"description": "任务失败原因"
},
"name.status": {
"message": "状态",
"description": "任务状态"
},
"name.traceId": {
"message": "追踪 ID",
"description": "追踪 ID"
},
"name.prompt": {
"message": "图像提示",
"description": "生成/编辑的提示词"
},
"name.nanobananaBot": {
"message": "Nano Banana Bot",
"description": "Nano Banana 图片生成器名称"
},
"name.aspectRatio": {
"message": "宽高比",
"description": "生成图像的宽高比"
},
"description.prompt": {
"message": "生成或编辑图像的提示词",
"description": "提示词描述"
},
"description.imageUrls": {
"message": "在编辑图片任务中必须上传 1-5 张图片。",
"description": "image_urls 参数说明"
},
"description.aspectRatio": {
"message": "生成图像的宽高比。支持的取值有 `1:1`、`3:2`、`2:3`、`16:9`、`9:16`、`4:3`、`3:4`。默认值为 `1:1`。仅当 `action` 为 `generate` 时生效;若 `action` 为 `edit`,则以 `image_urls` 中第一张图片的比例为准。",
"description": "aspect_ratio 参数说明"
},
"status.pending": { "message": "等待中", "description": "任务等待状态" },
"placeholder.select": { "message": "选择", "description": "选择占位" },
"placeholder.prompt": { "message": "输入提示词,例如:a white siamese cat", "description": "提示占位" },
"button.generate": { "message": "生成", "description": "生成按钮" },
"button.uploadImageUrls": { "message": "上传图片", "description": "上传参考图片按钮" },
"message.startingTask": { "message": "正在启动任务...", "description": "开始任务消息" },
"message.startTaskSuccess": { "message": "成功发起生成任务", "description": "任务成功创建" },
"message.startTaskFailed": { "message": "发起任务失败,请联系管理员:", "description": "任务创建失败" },
"message.usedUp": { "message": "您的积分已用完,请购买更多积分后继续使用", "description": "已用完提示" },
"message.uploadImageExceed": { "message": "最多可上传 5 张图片", "description": "图片数量超过限制" },
"message.uploadImageError": { "message": "上传图片失败,请稍后重试", "description": "上传失败" }
"status.pending": {
"message": "等待中",
"description": "任务等待状态"
},
"placeholder.select": {
"message": "选择",
"description": "选择占位"
},
"placeholder.prompt": {
"message": "输入提示词,例如:a white siamese cat",
"description": "提示占位"
},
"button.generate": {
"message": "生成",
"description": "生成按钮"
},
"button.uploadImageUrls": {
"message": "上传图片",
"description": "上传参考图片按钮"
},
"message.startingTask": {
"message": "正在启动任务...",
"description": "开始任务消息"
},
"message.startTaskSuccess": {
"message": "成功发起生成任务",
"description": "任务成功创建"
},
"message.startTaskFailed": {
"message": "发起任务失败,请联系管理员:",
"description": "任务创建失败"
},
"message.usedUp": {
"message": "您的积分已用完,请购买更多积分后继续使用",
"description": "已用完提示"
},
"message.uploadImageExceed": {
"message": "最多可上传 5 张图片",
"description": "图片数量超过限制"
},
"message.uploadImageError": {
"message": "上传图片失败,请稍后重试",
"description": "上传失败"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
+13 -1
View File
@@ -102,5 +102,17 @@
"message.uploadImageError": {
"message": "上傳圖片失敗,請稍後重試",
"description": "上傳失敗"
},
"name.model": {
"message": "Model",
"description": "Nano Banana model selector label"
},
"model.nanoBanana": {
"message": "nano-banana",
"description": "Nano Banana base model option"
},
"model.nanoBananaPro": {
"message": "nano-banana-pro",
"description": "Nano Banana pro model option"
}
}
}
+2
View File
@@ -1,5 +1,6 @@
export interface INanobananaConfig {
action?: 'generate' | 'edit';
model?: string;
prompt?: string;
image_urls?: string[];
aspect_ratio?: string;
@@ -8,6 +9,7 @@ export interface INanobananaConfig {
export interface INanobananaGenerateRequest {
action?: 'generate' | 'edit';
model?: string;
prompt?: string;
image_urls?: string[];
aspect_ratio?: string;
+6 -1
View File
@@ -1,5 +1,6 @@
import { INanobananaState } from './models';
import { Status } from '@/models';
import { NANOBANANA_DEFAULT_ACTION, NANOBANANA_DEFAULT_ASPECT_RATIO, NANOBANANA_DEFAULT_MODEL } from '@/constants';
export default (): INanobananaState => {
return {
@@ -8,7 +9,11 @@ export default (): INanobananaState => {
applications: undefined,
tasks: undefined,
credential: undefined,
config: undefined,
config: {
action: NANOBANANA_DEFAULT_ACTION,
aspect_ratio: NANOBANANA_DEFAULT_ASPECT_RATIO,
model: NANOBANANA_DEFAULT_MODEL
},
status: {
getService: Status.None,
getApplications: Status.None,