chore: release v0.0.5

This commit is contained in:
HouYunFei
2026-05-20 16:24:40 +08:00
parent 7a27684e3c
commit 8fd4262bb6
7 changed files with 32 additions and 5 deletions
+3
View File
@@ -227,6 +227,9 @@ export function AppTopNav({ activeToolSlug, config, onConfigChange, hideHeader =
<Form.Item label="默认文本模型" className="mb-0">
<ModelPicker config={config} value={config.textModel} onChange={(model) => onConfigChange("textModel", model)} fullWidth />
</Form.Item>
<Form.Item label="系统提示词" className="mb-0">
<Input.TextArea rows={4} value={config.systemPrompt} placeholder="例如:你是一位擅长电影感写实摄影的视觉导演。" onChange={(event) => onConfigChange("systemPrompt", event.target.value)} />
</Form.Item>
</Form>
</div>
</Modal>
+2
View File
@@ -4,6 +4,7 @@ export type AiConfig = {
model: string;
imageModel: string;
textModel: string;
systemPrompt: string;
models: string[];
quality: string;
size: string;
@@ -18,6 +19,7 @@ export const defaultConfig: AiConfig = {
model: "gpt-image-2",
imageModel: "gpt-image-2",
textModel: "gpt-5.5",
systemPrompt: "",
models: [],
quality: "auto",
size: "1:1",
+14 -4
View File
@@ -7,7 +7,7 @@ import { imageToDataUrl } from "@/services/image-storage";
import type { ReferenceImage } from "@/types/image";
export type ChatCompletionMessage = {
role: "user" | "assistant";
role: "system" | "user" | "assistant";
content: string | Array<{ type: "text"; text: string } | { type: "image_url"; image_url: { url: string } }>;
};
@@ -58,6 +58,16 @@ function parseStreamChunk(chunk: string, onDelta: (value: string) => void) {
if (deltaText) onDelta(deltaText);
}
function withSystemPrompt(config: AiConfig, prompt: string) {
const systemPrompt = config.systemPrompt.trim();
return systemPrompt ? `${systemPrompt}\n\n${prompt}` : prompt;
}
function withSystemMessage(config: AiConfig, messages: ChatCompletionMessage[]) {
const systemPrompt = config.systemPrompt.trim();
return systemPrompt ? [{ role: "system" as const, content: systemPrompt }, ...messages] : messages;
}
export async function requestGeneration(config: AiConfig, prompt: string) {
const n = Math.max(1, Math.min(15, Math.floor(Math.abs(Number(config.count)) || 1)));
try {
@@ -65,7 +75,7 @@ export async function requestGeneration(config: AiConfig, prompt: string) {
buildApiUrl(config.baseUrl, "/images/generations"),
{
model: config.model,
prompt,
prompt: withSystemPrompt(config, prompt),
n,
quality: config.quality || undefined,
size: config.size || undefined,
@@ -88,7 +98,7 @@ export async function requestEdit(config: AiConfig, prompt: string, references:
const n = Math.max(1, Math.min(15, Math.floor(Math.abs(Number(config.count)) || 1)));
const formData = new FormData();
formData.set("model", config.model);
formData.set("prompt", prompt);
formData.set("prompt", withSystemPrompt(config, prompt));
formData.set("n", String(n));
formData.set("response_format", "b64_json");
if (config.quality) {
@@ -122,7 +132,7 @@ export async function requestImageQuestion(config: AiConfig, messages: ChatCompl
buildApiUrl(config.baseUrl, "/chat/completions"),
{
model: config.model,
messages,
messages: withSystemMessage(config, messages),
stream: true,
},
{