diff --git a/web/classic/src/App.jsx b/web/classic/src/App.jsx index a5d1ebc0..0dccb505 100644 --- a/web/classic/src/App.jsx +++ b/web/classic/src/App.jsx @@ -38,7 +38,7 @@ import TopUp from './pages/TopUp'; import Log from './pages/Log'; import Chat from './pages/Chat'; import Chat2Link from './pages/Chat2Link'; -import Midjourney from './pages/Midjourney'; +import MjProxy from './pages/Midjourney'; import Pricing from './pages/Pricing'; import Task from './pages/Task'; import ModelPage from './pages/Model'; @@ -300,7 +300,7 @@ function App() { element={ } key={location.pathname}> - + } diff --git a/web/classic/src/components/layout/Footer.jsx b/web/classic/src/components/layout/Footer.jsx index f7442e20..759e45ab 100644 --- a/web/classic/src/components/layout/Footer.jsx +++ b/web/classic/src/components/layout/Footer.jsx @@ -140,7 +140,7 @@ const FooterBar = () => { rel='noopener noreferrer' className='!text-semi-color-text-1' > - Midjourney-Proxy + MjProxy {isAdminUser && showBanner ? t( - '当前未开启Midjourney回调,部分项目可能无法获得绘图结果,可在运营设置中开启。', + '当前未开启 MjProxy 回调,部分项目可能无法获得绘图结果,可在运营设置中开启。', ) - : t('Midjourney 任务记录')} + : t('MjProxy 任务记录')} diff --git a/web/classic/src/constants/channel.constants.js b/web/classic/src/constants/channel.constants.js index 78cf2db8..278e7563 100644 --- a/web/classic/src/constants/channel.constants.js +++ b/web/classic/src/constants/channel.constants.js @@ -22,12 +22,12 @@ export const CHANNEL_OPTIONS = [ { value: 2, color: 'light-blue', - label: 'Midjourney Proxy', + label: 'MjProxy', }, { value: 5, color: 'blue', - label: 'Midjourney Proxy Plus', + label: 'MjProxyPlus', }, { value: 36, diff --git a/web/classic/src/helpers/render.jsx b/web/classic/src/helpers/render.jsx index ae79fa46..4e64bbeb 100644 --- a/web/classic/src/helpers/render.jsx +++ b/web/classic/src/helpers/render.jsx @@ -39,7 +39,7 @@ import { Minimax, Wenxin, Spark, - Midjourney, + Midjourney as MjProxyIcon, Hunyuan, Cohere, Cloudflare, @@ -254,8 +254,8 @@ export const getModelCategories = (() => { filter: (model) => model.model_name.toLowerCase().includes('spark'), }, midjourney: { - label: 'Midjourney', - icon: , + label: 'MjProxy', + icon: , filter: (model) => model.model_name.toLowerCase().includes('mj_'), }, tencent: { @@ -336,9 +336,9 @@ export function getChannelIcon(channelType) { case 3: // Azure OpenAI case 57: // Codex return ; - case 2: // Midjourney Proxy - case 5: // Midjourney Proxy Plus - return ; + case 2: // MjProxy + case 5: // MjProxyPlus + return ; case 36: // Suno API return ; case 4: // Ollama diff --git a/web/classic/src/i18n/locales/en.json b/web/classic/src/i18n/locales/en.json index b9ecfa96..6beb1917 100644 --- a/web/classic/src/i18n/locales/en.json +++ b/web/classic/src/i18n/locales/en.json @@ -192,7 +192,7 @@ "LinuxDO": "LinuxDO", "LinuxDO ID": "LinuxDO ID", "Logo 图片地址": "Logo image address", - "Midjourney 任务记录": "Midjourney Task Records", + "MjProxy 任务记录": "MjProxy Task Records", "MIT许可证": "MIT License", "New API项目仓库地址:": "New API project repository address: ", "NewAPI 默认不会将入口请求的 User-Agent 透传到上游渠道;该条件仅用于识别访问本站点的客户端。": "NewAPI does not pass the incoming request's User-Agent to upstream channels by default; this condition is only used to identify clients accessing this site.", @@ -1508,7 +1508,7 @@ "当前旧格式不是 JSON 对象,无法追加模板": "Current legacy format is not a JSON object, cannot append template", "当前时间": "Current time", "当前未启用,需要时再打开即可。": "This field is currently disabled. Enable it when needed.", - "当前未开启Midjourney回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "Current Midjourney callback is not enabled, some projects may not be able to obtain drawing results, which can be enabled in the operation settings.", + "当前未开启 MjProxy 回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "Current MjProxy callback is not enabled, some projects may not be able to obtain drawing results, which can be enabled in the operation settings.", "当前查看的分组为:{{group}},倍率为:{{ratio}}": "Current group: {{group}}, ratio: {{ratio}}", "当前模型列表为该标签下所有渠道模型列表最长的一个,并非所有渠道的并集,请注意可能导致某些渠道模型丢失。": "The current model list is the longest one among all channel model lists under this tag, not the union of all channels. Please note that this may cause some channel models to be lost.", "当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "This model currently has both per-request pricing and ratio-based pricing. Saving will overwrite them according to the current billing mode.", diff --git a/web/classic/src/i18n/locales/fr.json b/web/classic/src/i18n/locales/fr.json index e41f94ef..e6396bda 100644 --- a/web/classic/src/i18n/locales/fr.json +++ b/web/classic/src/i18n/locales/fr.json @@ -193,7 +193,7 @@ "LinuxDO": "LinuxDO", "LinuxDO ID": "ID LinuxDO", "Logo 图片地址": "Adresse de l'image du logo", - "Midjourney 任务记录": "Tâches Midjourney", + "MjProxy 任务记录": "Tâches MjProxy", "MIT许可证": "Licence MIT", "New API项目仓库地址:": "Adresse du référentiel du projet New API : ", "NewAPI 默认不会将入口请求的 User-Agent 透传到上游渠道;该条件仅用于识别访问本站点的客户端。": "NewAPI ne transmet pas le User-Agent de la requête entrante aux canaux en amont par défaut ; cette condition sert uniquement à identifier les clients accédant à ce site.", @@ -1514,7 +1514,7 @@ "当前旧格式不是 JSON 对象,无法追加模板": "L'ancien format actuel n'est pas un objet JSON, impossible d'ajouter le modèle", "当前时间": "Heure actuelle", "当前未启用,需要时再打开即可。": "Ce champ est actuellement désactivé. Activez-le si nécessaire.", - "当前未开启Midjourney回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "Le rappel Midjourney actuel n'est pas activé, certains projets peuvent ne pas être en mesure d'obtenir des résultats de dessin, qui peuvent être activés dans les paramètres de fonctionnement.", + "当前未开启 MjProxy 回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "Le rappel MjProxy actuel n'est pas activé, certains projets peuvent ne pas être en mesure d'obtenir des résultats de dessin, qui peuvent être activés dans les paramètres de fonctionnement.", "当前查看的分组为:{{group}},倍率为:{{ratio}}": "Groupe actuel : {{group}}, ratio : {{ratio}}", "当前模型列表为该标签下所有渠道模型列表最长的一个,并非所有渠道的并集,请注意可能导致某些渠道模型丢失。": "La liste de modèles actuelle est la plus longue liste de modèles de canal sous cette étiquette, pas l'union de tous les canaux. Veuillez noter que cela peut entraîner la perte de certains modèles de canal.", "当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "Ce modèle possède actuellement à la fois une tarification par requête et une configuration par ratio. L'enregistrement écrasera selon le mode de facturation actuel.", diff --git a/web/classic/src/i18n/locales/ja.json b/web/classic/src/i18n/locales/ja.json index 7afe51df..951ed9e4 100644 --- a/web/classic/src/i18n/locales/ja.json +++ b/web/classic/src/i18n/locales/ja.json @@ -187,7 +187,7 @@ "LinuxDO": "LinuxDO", "LinuxDO ID": "LinuxDO ID", "Logo 图片地址": "ロゴ画像URL", - "Midjourney 任务记录": "Midjourneyタスク履歴", + "MjProxy 任务记录": "MjProxyタスク履歴", "MIT许可证": "MITライセンス", "New API项目仓库地址:": "New APIプロジェクトリポジトリ:", "NewAPI 默认不会将入口请求的 User-Agent 透传到上游渠道;该条件仅用于识别访问本站点的客户端。": "NewAPIはデフォルトでは入力リクエストのUser-Agentを上流チャネルにパススルーしません。この条件はこのサイトにアクセスするクライアントの識別にのみ使用されます。", @@ -1485,7 +1485,7 @@ "当前旧格式不是 JSON 对象,无法追加模板": "現在のレガシー形式はJSONオブジェクトではないため、テンプレートを追加できません", "当前时间": "現在時刻", "当前未启用,需要时再打开即可。": "この項目は現在無効です。必要なときに有効にしてください。", - "当前未开启Midjourney回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "現在、Midjourneyコールバックが有効になっていないため、一部のプロジェクトで画像生成結果を取得できない場合があります。この機能は運用設定で有効にできます", + "当前未开启 MjProxy 回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "現在、MjProxyコールバックが有効になっていないため、一部のプロジェクトで画像生成結果を取得できない場合があります。この機能は運用設定で有効にできます", "当前查看的分组为:{{group}},倍率为:{{ratio}}": "現在表示中のグループ:{{group}}、倍率:{{ratio}}", "当前模型列表为该标签下所有渠道模型列表最长的一个,并非所有渠道的并集,请注意可能导致某些渠道模型丢失。": "現在のモデルリストは、このタグに属するチャネルの中で最も長いモデルリストを採用しており、すべてのチャネルのモデルの和集合ではありません。これにより一部のチャネルのモデルがリストに含まれない可能性があるため、ご注意ください。", "当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "このモデルには従量価格と倍率設定が同時に存在しています。保存すると現在の課金方式に従って上書きされます。", diff --git a/web/classic/src/i18n/locales/ru.json b/web/classic/src/i18n/locales/ru.json index 579710ce..b9515b2e 100644 --- a/web/classic/src/i18n/locales/ru.json +++ b/web/classic/src/i18n/locales/ru.json @@ -197,7 +197,7 @@ "LinuxDO": "LinuxDO", "LinuxDO ID": "ID LinuxDO", "Logo 图片地址": "Адрес изображения логотипа", - "Midjourney 任务记录": "Записи задач Midjourney", + "MjProxy 任务记录": "Записи задач MjProxy", "MIT许可证": "Лицензия MIT", "New API项目仓库地址:": "Адрес репозитория проекта New API:", "NewAPI 默认不会将入口请求的 User-Agent 透传到上游渠道;该条件仅用于识别访问本站点的客户端。": "NewAPI по умолчанию не передаёт User-Agent входящего запроса в вышестоящие каналы; это условие используется только для идентификации клиентов, обращающихся к данному сайту.", @@ -1532,7 +1532,7 @@ "当前旧格式不是 JSON 对象,无法追加模板": "Текущий устаревший формат не является JSON-объектом, невозможно добавить шаблон", "当前时间": "Текущее время", "当前未启用,需要时再打开即可。": "Это поле сейчас отключено. Включите его при необходимости.", - "当前未开启Midjourney回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "В настоящее время обратный вызов Midjourney отключен, некоторые проекты могут не получить результаты рисования, можно включить в настройках эксплуатации.", + "当前未开启 MjProxy 回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "В настоящее время обратный вызов MjProxy отключен, некоторые проекты могут не получить результаты рисования, можно включить в настройках эксплуатации.", "当前查看的分组为:{{group}},倍率为:{{ratio}}": "Текущая просматриваемая группа: {{group}}, коэффициент: {{ratio}}", "当前模型列表为该标签下所有渠道模型列表最长的一个,并非所有渠道的并集,请注意可能导致某些渠道模型丢失。": "Текущий список моделей является самым длинным списком моделей всех каналов под этой меткой, а не объединением всех каналов, обратите внимание, что это может привести к потере моделей некоторых каналов.", "当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "У этой модели одновременно задана цена за запрос и конфигурация коэффициентов. При сохранении данные будут перезаписаны согласно текущему режиму тарификации.", diff --git a/web/classic/src/i18n/locales/vi.json b/web/classic/src/i18n/locales/vi.json index 10d7a701..2b2e966d 100644 --- a/web/classic/src/i18n/locales/vi.json +++ b/web/classic/src/i18n/locales/vi.json @@ -187,7 +187,7 @@ "LinuxDO": "LinuxDO", "LinuxDO ID": "LinuxDO ID", "Logo 图片地址": "Địa chỉ hình ảnh Logo", - "Midjourney 任务记录": "Hồ sơ tác vụ Midjourney", + "MjProxy 任务记录": "Hồ sơ tác vụ MjProxy", "MIT许可证": "Giấy phép MIT", "New API项目仓库地址:": "Địa chỉ kho dự án New API: ", "NewAPI 默认不会将入口请求的 User-Agent 透传到上游渠道;该条件仅用于识别访问本站点的客户端。": "NewAPI mặc định không truyền User-Agent của yêu cầu đến kênh upstream; điều kiện này chỉ dùng để nhận diện client truy cập trang web này.", @@ -1486,7 +1486,7 @@ "当前旧格式不是 JSON 对象,无法追加模板": "Định dạng cũ hiện tại không phải đối tượng JSON, không thể thêm mẫu", "当前时间": "Thời gian hiện tại", "当前未启用,需要时再打开即可。": "Trường này hiện đang tắt. Hãy bật khi cần.", - "当前未开启Midjourney回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "Gọi lại Midjourney hiện tại chưa được bật, một số dự án có thể không nhận được kết quả vẽ, có thể bật trong cài đặt vận hành.", + "当前未开启 MjProxy 回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "Gọi lại MjProxy hiện tại chưa được bật, một số dự án có thể không nhận được kết quả vẽ, có thể bật trong cài đặt vận hành.", "当前查看的分组为:{{group}},倍率为:{{ratio}}": "Nhóm hiện tại: {{group}}, tỷ lệ: {{ratio}}", "当前模型列表为该标签下所有渠道模型列表最长的一个,并非所有渠道的并集,请注意可能导致某些渠道模型丢失。": "Danh sách mô hình hiện tại là danh sách dài nhất trong số tất cả các danh sách mô hình kênh dưới thẻ này, không phải là hợp nhất của tất cả các kênh. Xin lưu ý rằng điều này có thể khiến một số mô hình kênh bị mất.", "当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "Mô hình này hiện đồng thời có giá theo lượt gọi và cấu hình tỷ lệ. Khi lưu, dữ liệu sẽ bị ghi đè theo chế độ tính phí hiện tại.", diff --git a/web/classic/src/i18n/locales/zh-CN.json b/web/classic/src/i18n/locales/zh-CN.json index 45ad0f3f..aa484c52 100644 --- a/web/classic/src/i18n/locales/zh-CN.json +++ b/web/classic/src/i18n/locales/zh-CN.json @@ -179,7 +179,7 @@ "LinuxDO": "LinuxDO", "LinuxDO ID": "LinuxDO ID", "Logo 图片地址": "Logo 图片地址", - "Midjourney 任务记录": "Midjourney 任务记录", + "MjProxy 任务记录": "MjProxy 任务记录", "MIT许可证": "MIT许可证", "New API项目仓库地址:": "New API项目仓库地址:", "NewAPI 默认不会将入口请求的 User-Agent 透传到上游渠道;该条件仅用于识别访问本站点的客户端。": "NewAPI 默认不会将入口请求的 User-Agent 透传到上游渠道;该条件仅用于识别访问本站点的客户端。", @@ -1470,7 +1470,7 @@ "当前旧格式不是 JSON 对象,无法追加模板": "当前旧格式不是 JSON 对象,无法追加模板", "当前时间": "当前时间", "当前未启用,需要时再打开即可。": "当前未启用,需要时再打开即可。", - "当前未开启Midjourney回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "当前未开启Midjourney回调,部分项目可能无法获得绘图结果,可在运营设置中开启。", + "当前未开启 MjProxy 回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "当前未开启 MjProxy 回调,部分项目可能无法获得绘图结果,可在运营设置中开启。", "当前查看的分组为:{{group}},倍率为:{{ratio}}": "当前查看的分组为:{{group}},倍率为:{{ratio}}", "当前模型列表为该标签下所有渠道模型列表最长的一个,并非所有渠道的并集,请注意可能导致某些渠道模型丢失。": "当前模型列表为该标签下所有渠道模型列表最长的一个,并非所有渠道的并集,请注意可能导致某些渠道模型丢失。", "当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。", diff --git a/web/classic/src/i18n/locales/zh-TW.json b/web/classic/src/i18n/locales/zh-TW.json index d423fcba..490a4af5 100644 --- a/web/classic/src/i18n/locales/zh-TW.json +++ b/web/classic/src/i18n/locales/zh-TW.json @@ -185,7 +185,7 @@ "LinuxDO": "LinuxDO", "LinuxDO ID": "LinuxDO ID", "Logo 图片地址": "Logo 圖片位址", - "Midjourney 任务记录": "Midjourney 任務記錄", + "MjProxy 任务记录": "MjProxy 任務記錄", "MIT许可证": "MIT許可證", "New API项目仓库地址:": "New API項目倉庫位址:", "NewAPI 默认不会将入口请求的 User-Agent 透传到上游渠道;该条件仅用于识别访问本站点的客户端。": "", @@ -1480,7 +1480,7 @@ "当前旧格式不是 JSON 对象,无法追加模板": "", "当前时间": "當前時間", "当前未启用,需要时再打开即可。": "目前未啟用,需要時再開啟即可。", - "当前未开启Midjourney回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "當前未開啟Midjourney回調,部分項目可能無法獲得繪圖結果,可在運營設定中開啟。", + "当前未开启 MjProxy 回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "當前未開啟MjProxy回調,部分項目可能無法獲得繪圖結果,可在運營設定中開啟。", "当前查看的分组为:{{group}},倍率为:{{ratio}}": "當前查看的分組為:{{group}},倍率為:{{ratio}}", "当前模型列表为该标签下所有渠道模型列表最长的一个,并非所有渠道的并集,请注意可能导致某些渠道模型丢失。": "當前模型列表為該標籤下所有管道模型列表最長的一個,並非所有管道的並集,請注意可能導致某些管道模型丟失。", "当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "目前模型同時存在按次價格與倍率配置,儲存時會依目前計費方式覆蓋。", diff --git a/web/classic/src/i18n/locales/zh.json b/web/classic/src/i18n/locales/zh.json index b70e8ffb..8f2e6aeb 100644 --- a/web/classic/src/i18n/locales/zh.json +++ b/web/classic/src/i18n/locales/zh.json @@ -119,7 +119,7 @@ "LinuxDO": "LinuxDO", "LinuxDO ID": "LinuxDO ID", "Logo 图片地址": "Logo 图片地址", - "Midjourney 任务记录": "Midjourney 任务记录", + "MjProxy 任务记录": "MjProxy 任务记录", "MIT许可证": "MIT许可证", "New API项目仓库地址:": "New API项目仓库地址:", "OIDC": "OIDC", @@ -1006,7 +1006,7 @@ "当前分组为 auto,会自动选择最优分组,当一个组不可用时自动降级到下一个组(熔断机制)": "当前分组为 auto,会自动选择最优分组,当一个组不可用时自动降级到下一个组(熔断机制)", "当前剩余": "当前剩余", "当前时间": "当前时间", - "当前未开启Midjourney回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "当前未开启Midjourney回调,部分项目可能无法获得绘图结果,可在运营设置中开启。", + "当前未开启 MjProxy 回调,部分项目可能无法获得绘图结果,可在运营设置中开启。": "当前未开启 MjProxy 回调,部分项目可能无法获得绘图结果,可在运营设置中开启。", "当前查看的分组为:{{group}},倍率为:{{ratio}}": "当前查看的分组为:{{group}},倍率为:{{ratio}}", "当前模型列表为该标签下所有渠道模型列表最长的一个,并非所有渠道的并集,请注意可能导致某些渠道模型丢失。": "当前模型列表为该标签下所有渠道模型列表最长的一个,并非所有渠道的并集,请注意可能导致某些渠道模型丢失。", "当前版本": "当前版本", diff --git a/web/classic/src/pages/Home/index.jsx b/web/classic/src/pages/Home/index.jsx index 30261a95..bb2dd0d2 100644 --- a/web/classic/src/pages/Home/index.jsx +++ b/web/classic/src/pages/Home/index.jsx @@ -56,7 +56,7 @@ import { Qingyan, DeepSeek, Qwen, - Midjourney, + Midjourney as MjProxyIcon, Grok, AzureAI, Hunyuan, @@ -309,7 +309,7 @@ const Home = () => {
- +
diff --git a/web/classic/src/pages/Midjourney/index.jsx b/web/classic/src/pages/Midjourney/index.jsx index 7585e21a..6a14f4fa 100644 --- a/web/classic/src/pages/Midjourney/index.jsx +++ b/web/classic/src/pages/Midjourney/index.jsx @@ -20,10 +20,10 @@ For commercial licensing, please contact support@quantumnous.com import React from 'react'; import MjLogsTable from '../../components/table/mj-logs'; -const Midjourney = () => ( +const MjProxy = () => (
); -export default Midjourney; +export default MjProxy; diff --git a/web/default/scripts/sync-i18n.mjs b/web/default/scripts/sync-i18n.mjs index ff5d463a..3235a9ec 100644 --- a/web/default/scripts/sync-i18n.mjs +++ b/web/default/scripts/sync-i18n.mjs @@ -58,9 +58,8 @@ const BRAND_AND_LITERAL_KEYS = new Set([ 'JustSong', 'LingYiWanWu', 'LinuxDO', - 'Midjourney', - 'MidjourneyPlus', - 'Midjourney-Proxy', + 'MjProxy', + 'MjProxyPlus', 'MiniMax', 'Mistral', 'MokaAI', diff --git a/web/default/src/features/channels/constants.ts b/web/default/src/features/channels/constants.ts index 32a5c90b..19607a4f 100644 --- a/web/default/src/features/channels/constants.ts +++ b/web/default/src/features/channels/constants.ts @@ -24,10 +24,10 @@ For commercial licensing, please contact support@quantumnous.com export const CHANNEL_TYPES = { 0: 'Unknown', 1: 'OpenAI', - 2: 'Midjourney', + 2: 'MjProxy', 3: 'Azure', 4: 'Ollama', - 5: 'MidjourneyPlus', + 5: 'MjProxyPlus', // 6: 'OpenAIMax', 7: 'OhMyGPT', 8: 'Custom', diff --git a/web/default/src/features/channels/lib/channel-utils.ts b/web/default/src/features/channels/lib/channel-utils.ts index d3cad658..55f2c375 100644 --- a/web/default/src/features/channels/lib/channel-utils.ts +++ b/web/default/src/features/channels/lib/channel-utils.ts @@ -92,8 +92,8 @@ export function getChannelTypeIcon(type: number): string { 20: 'OpenRouter', // OpenRouter // Image/Video generation - 2: 'Midjourney', // Midjourney - 5: 'Midjourney', // MidjourneyPlus + 2: 'Midjourney', // MjProxy + 5: 'Midjourney', // MjProxyPlus 50: 'Kling', // Kling 51: 'Jimeng', // Jimeng 52: 'Vidu', // Vidu diff --git a/web/default/src/features/system-settings/content/drawing-settings-section.tsx b/web/default/src/features/system-settings/content/drawing-settings-section.tsx index eedf4138..672afde6 100644 --- a/web/default/src/features/system-settings/content/drawing-settings-section.tsx +++ b/web/default/src/features/system-settings/content/drawing-settings-section.tsx @@ -87,14 +87,14 @@ export function DrawingSettingsSection({ name: 'DrawingEnabled', label: t('Enable drawing features'), description: t( - 'Required to expose Midjourney-style image generation to end users.' + 'Required to expose MjProxy-style image generation to end users.' ), }, { name: 'MjNotifyEnabled', label: t('Allow upstream callbacks'), description: t( - 'When enabled, Midjourney callbacks are accepted (reveals server IP).' + 'When enabled, MjProxy callbacks are accepted (reveals server IP).' ), }, { @@ -115,7 +115,7 @@ export function DrawingSettingsSection({ name: 'MjModeClearEnabled', label: t('Clear mode flags in prompts'), description: t( - 'Removes Midjourney flags such as --fast, --relax, and --turbo from user prompts.' + 'Removes MjProxy flags such as --fast, --relax, and --turbo from user prompts.' ), }, { diff --git a/web/default/src/features/system-settings/maintenance/sidebar-modules-section.tsx b/web/default/src/features/system-settings/maintenance/sidebar-modules-section.tsx index 782fbd4d..98b8829b 100644 --- a/web/default/src/features/system-settings/maintenance/sidebar-modules-section.tsx +++ b/web/default/src/features/system-settings/maintenance/sidebar-modules-section.tsx @@ -108,7 +108,7 @@ export function SidebarModulesSection({ }, midjourney: { title: t('Drawing logs'), - description: t('History of Midjourney-style image tasks.'), + description: t('History of MjProxy-style image tasks.'), }, task: { title: t('Task logs'), diff --git a/web/default/src/features/usage-logs/api.ts b/web/default/src/features/usage-logs/api.ts index 15209a6d..720c5813 100644 --- a/web/default/src/features/usage-logs/api.ts +++ b/web/default/src/features/usage-logs/api.ts @@ -91,7 +91,7 @@ export async function getUserInfo( } // ============================================================================ -// Midjourney (Drawing) Logs API +// MjProxy (Drawing) Logs API // ============================================================================ export const getAllMidjourneyLogs = (params: GetMidjourneyLogsParams) => diff --git a/web/default/src/features/usage-logs/components/columns/common-logs-columns.tsx b/web/default/src/features/usage-logs/components/columns/common-logs-columns.tsx index 7ca4f114..7ef4e1c7 100644 --- a/web/default/src/features/usage-logs/components/columns/common-logs-columns.tsx +++ b/web/default/src/features/usage-logs/components/columns/common-logs-columns.tsx @@ -18,7 +18,7 @@ For commercial licensing, please contact support@quantumnous.com */ import { useState } from 'react' import { type ColumnDef } from '@tanstack/react-table' -import { CircleAlert, Sparkles, KeyRound } from 'lucide-react' +import { CircleAlert, GitBranch, Sparkles, KeyRound } from 'lucide-react' import { useTranslation } from 'react-i18next' import { getUserAvatarFallback, getUserAvatarStyle } from '@/lib/avatar' import { formatBillingCurrencyFromUSD } from '@/lib/currency' @@ -29,6 +29,11 @@ import { } from '@/lib/format' import { cn } from '@/lib/utils' import { Avatar, AvatarFallback } from '@/components/ui/avatar' +import { + Popover, + PopoverContent, + PopoverTrigger, +} from '@/components/ui/popover' import { Tooltip, TooltipContent, @@ -318,16 +323,23 @@ export function useCommonLogsColumns(isAdmin: boolean): ColumnDef[] { const other = parseLogOther(log.other) const affinity = other?.admin_info?.channel_affinity - const useChannel = other?.admin_info?.use_channel + const rawUseChannel = other?.admin_info?.use_channel ?? [] + const useChannel = Array.isArray(rawUseChannel) + ? rawUseChannel.map(String).filter(Boolean) + : [] + const hasRetryChain = useChannel.length > 1 const channelChain = - useChannel && useChannel.length > 0 - ? useChannel.join(' → ') - : undefined + hasRetryChain ? useChannel.join(' → ') : undefined const channelDisplay = log.channel_name ? `${log.channel_name} #${log.channel}` : `#${log.channel}` const channelIdDisplay = `#${log.channel}` const channelName = sensitiveVisible ? log.channel_name : '••••' + const multiKeyIndex = other?.admin_info?.multi_key_index + const showMultiKeyIndex = + other?.admin_info?.is_multi_key === true && + typeof multiKeyIndex === 'number' && + Number.isFinite(multiKeyIndex) return ( @@ -337,7 +349,7 @@ export function useCommonLogsColumns(isAdmin: boolean): ColumnDef[] {
} > -
+
[] { showDot={false} className='font-mono' /> + {showMultiKeyIndex && ( + + )} + {hasRetryChain && ( + + e.stopPropagation()} + /> + } + > + + +
+

{t('Retry Chain')}

+

+ {channelChain} +

+
+
+
+ )} {affinity && (