我试图使用复制人工智能模型即兴发挥,使音频。我正在尝试使用sdxl来制作图像。但在这两个问题上,
Object { stack: "AxiosError@webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js:24:19\nsettle@webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/settle.js:24:12\nonloadend@webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/adapters/xhr.js:126:66\n", message: "Request failed with status code 500", name: "AxiosError", code: "ERR_BAD_RESPONSE", config: {…}, request: XMLHttpRequest, response: {…} }
code: "ERR_BAD_RESPONSE"
config: Object { timeout: 0, xsrfCookieName: "XSRF-TOKEN", xsrfHeaderName: "X-XSRF-TOKEN", … }
message: "Request failed with status code 500"
name: "AxiosError"
request: XMLHttpRequest { readyState: 4, timeout: 0, withCredentials: false, … }
response: Object { data: "Internal error", status: 500, statusText: "Internal Server Error", … }
stack: "AxiosError@webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js:24:19\nsettle@webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/settle.js:24:12\nonloadend@webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/adapters/xhr.js:126:66\n"
<prototype>: Object { constructor: AxiosError(message, code, config, request, response), toJSON: toJSON(), stack: "", … }
只有当我遇到这个错误时,
[MUSIC ERROR] SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at parseJSONFromBytes (node:internal/deps/undici/undici:6662:19)
at successSteps (node:internal/deps/undici/undici:6636:27)
at node:internal/deps/undici/undici:1236:60
at node:internal/process/task_queues:140:7
at AsyncResource.runInAsyncScope (node:async_hooks:206:9)
at AsyncResource.runMicrotask (node:internal/process/task_queues:137:8)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
下面是我的图像代码,我用dalle做了,但我仍然想知道如何用sdxl做我的前端页面:
"use client";
import * as z from "zod";
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { Download, Image } from "lucide-react";
import Heading from "@/components/heading";
import { amountOptions, formSchema, resolutionOptions } from "./constants";
import { Form, FormControl, FormField, FormItem } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { useRouter } from "next/navigation";
import axios from "axios";
import { useState } from "react";
import OpenAI from "openai";
import { Empty } from "@/components/empty";
import { Loader } from "@/components/loader";
import { cn } from "@/lib/utils";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { Card, CardFooter } from "@/components/ui/card";
const ImagePage = () => {
const router = useRouter();
const [images, setImages] = useState<string[]>([]);
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema),
defaultValues: {
prompt: "",
amount: "1",
resolution: "512x512",
},
});
const isLoading = form.formState.isSubmitting;
const onSubmit = async (values: z.infer<typeof formSchema>) => {
try {
setImages([]);
const response = await axios.post("/api/image", values);
const urls = response.data.map((image: { url: string }) => image.url);
setImages(urls);
form.reset();
} catch (error: any) {
console.log(error);
} finally {
router.refresh();
}
};
return (
<div>
<Heading
title="Image"
description="Generate Images with AI"
icon={Image}
iconColor="text-pink-700"
/>
<div className="px-4 lg:px-8">
<div>
<Form {...form}>
<form
onSubmit={form.handleSubmit(onSubmit)}
className="rouned-lg border w-full p-4 px-3 md:px-6 focus-within:shadow-sm grid grid-cols-12 gap-2"
>
<FormField
name="prompt"
render={({ field }) => (
<FormItem className="col-span-12 lg:col-span-6">
<FormControl className="m-0 p-0">
<Input
className="border-0 outline-none focus-visible:ring-0 focus-visible:ring-transparent"
disabled={isLoading}
placeholder="Samurai riding a horse in the forest."
{...field}
/>
</FormControl>
</FormItem>
)}
/>
<FormField
control={form.control}
name="amount"
render={({ field }) => (
<FormItem className="col-span-12 lg:col-span-2">
<Select
disabled={isLoading}
onValueChange={field.onChange}
value={field.value}
defaultValue={field.value}
>
<FormControl>
<SelectTrigger>
<SelectValue defaultValue={field.value} />
</SelectTrigger>
</FormControl>
<SelectContent>
{amountOptions.map((amount) => (
<SelectItem key={amount.value} value={amount.value}>
{amount.label}
</SelectItem>
))}
</SelectContent>
</Select>
</FormItem>
)}
/>
<FormField
control={form.control}
name="resolution"
render={({ field }) => (
<FormItem className="col-span-12 lg:col-span-2">
<Select
disabled={isLoading}
onValueChange={field.onChange}
value={field.value}
defaultValue={field.value}
>
<FormControl>
<SelectTrigger>
<SelectValue defaultValue={field.value} />
</SelectTrigger>
</FormControl>
<SelectContent>
{resolutionOptions.map((resolution) => (
<SelectItem
key={resolution.value}
value={resolution.value}
>
{resolution.label}
</SelectItem>
))}
</SelectContent>
</Select>
</FormItem>
)}
/>
<Button
className="col-span-12 lg:col-span-2 w-full"
disabled={isLoading}
>
Generate
</Button>
</form>
</Form>
</div>
<div className="space-y-4 mt-4">
{isLoading && (
<div className="p-20">
<Loader />
</div>
)}
{images.length === 0 && !isLoading && (
<Empty label="No images generated" />
)}
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 mt-8">
{images.map((src) => (
<Card key={src} className="rounded-lg overflow-hidden">
<div className="relative aspect-square">
<img alt="image" width={200} height={200} src={src} />
</div>
<CardFooter className="p-2">
<Button
onClick={() => window.open(src)}
variant="secondary"
className="w-full"
>
<Download className="h-4 w-4 mr-4" />
</Button>
</CardFooter>
</Card>
))}
</div>
</div>
</div>
</div>
);
};
export default ImagePage;
我的后端:
import { NextResponse } from 'next/server';
import { auth } from '@clerk/nextjs';
import OpenAI from "openai"
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
export async function POST(req: Request) {
try {
const { userId } = auth();
const body = await req.json();
const { prompt } = body;
const { amount=1 } = body;
const { resolution="512x512" } = body;
if (!userId) {
return new NextResponse('Unauthorized', { status: 401 });
}
if (!openai.apiKey) {
return new NextResponse('Replicate API Key not configured', { status: 500 });
}
if (!prompt) {
return new NextResponse('Prompt is required required', { status: 400 });
}
if (!amount) {
return new NextResponse('Amount is required required', { status: 400 });
}
if (!resolution) {
return new NextResponse('Resolution is required required', { status: 400 });
}
const response = await openai.images.generate({
prompt,
n: parseInt(amount, 10),
size: resolution
})
return new NextResponse(JSON.stringify(response.data))
;
} catch (error) {
console.error('[IMAGE ERROR]', error);
return new NextResponse('Internal error', { status: 500 });
}
}
我的音乐前端:
"use client";
import * as z from "zod";
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { Music } from "lucide-react";
import Heading from "@/components/heading";
import { formSchema } from "./constants";
import { Form, FormControl, FormField, FormItem } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { useRouter } from "next/navigation";
import axios from "axios";
import { useState } from "react";
import OpenAI from "openai";
import { Empty } from "@/components/empty";
import { Loader } from "@/components/loader";
const MusicPage = () => {
const router = useRouter();
const [music, setMusic] = useState<string>();
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema),
defaultValues: {
prompt: "",
},
});
const isLoading = form.formState.isSubmitting;
const onSubmit = async (values: z.infer<typeof formSchema>) => {
try {
setMusic(undefined);
const response = await axios.post("/api/music");
setMusic(response.data.audio);
form.reset();
} catch (error: any) {
console.log(error);
} finally {
router.refresh();
}
};
return (
<div>
<Heading
title="Music"
description="AI Music Generator"
icon={Music}
iconColor="text-emerald-500"
/>
<div className="px-4 lg:px-8">
<div>
<Form {...form}>
<form
onSubmit={form.handleSubmit(onSubmit)}
className="rouned-lg border w-full p-4 px-3 md:px-6 focus-within:shadow-sm grid grid-cols-12 gap-2"
>
<FormField
name="prompt"
render={({ field }) => (
<FormItem className="col-span-12 lg:col-span-10">
<FormControl className="m-0 p-0">
<Input
className="border-0 outline-none focus-visible:ring-0 focus-visible:ring-transparent"
disabled={isLoading}
placeholder="piano solo"
{...field}
/>
</FormControl>
</FormItem>
)}
/>
<Button
className="col-span-12 lg:col-span-2 w-full"
disabled={isLoading}
>
Generate
</Button>
</form>
</Form>
</div>
<div className="space-y-4 mt-4">
{isLoading && (
<div className="p-8 rounded-lg w-full flex items-center justify-center bg-muted">
<Loader />
</div>
)}
{!music && !isLoading && <Empty label="No music yet" />}
{music && (
<audio controls className="w-full mt-8">
<source src={music} />
</audio>
)}
</div>
</div>
</div>
);
};
export default MusicPage;
后端:
import { NextResponse } from 'next/server';
import { auth } from '@clerk/nextjs';
import Replicate from "replicate"
const replicate = new Replicate({
auth: process.env.REPLICATE_API_TOKEN!,
})
export async function POST(req: Request) {
try {
const { userId } = auth();
const body = await req.json();
const { prompt } = body;
if (!userId) {
return new NextResponse('Unauthorized', { status: 401 });
}
if (!prompt) {
return new NextResponse('Prompt is required', { status: 400 });
}
const response = await replicate.run(
"riffusion/riffusion:8cf61ea6c56afd61d8f5b9ffd14d7c216c0a93844ce2d82ac1c9ecc9c7f24e05",
{
input: {
prompt_a: prompt
}
}
);
return NextResponse.json(response);
} catch (error) {
console.error('[MUSIC ERROR]', error);
return new NextResponse('Internal error', { status: 500 });
}
}
我试着改变很多东西,我试着改变我写作的方式,但逻辑是一样的。
1条答案
按热度按时间a9wyjsp71#
嘿伙计我和你有同样的问题。我改变了它,它开始工作。
在这一变化之后,它开始发挥作用。希望对你有帮助!