Merge pull request #2975 from akvadrako/together-ai-new-image-api Support the non-deprecated Together.ai Create Image API

44e73fbf2781bc388151fb4943d8ab83c40e295b

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
2 files changed, +10 -11Ignore whitespace
public/scripts/extensions/stable-diffusion/index.js+1 -2
@@ -2674,8 +2674,7 @@ async function generateTogetherAIImage(prompt, negativePrompt, signal) {
2674 });2674 });
26752675
2676 if (result.ok) {2676 if (result.ok) {
2677 const data = await result.json();2677 return await result.json();
2678 return { format: 'jpg', data: data?.output?.choices?.[0]?.image_base64 };
2679 } else {2678 } else {
2680 const text = await result.text();2679 const text = await result.text();
2681 throw new Error(text);2680 throw new Error(text);
src/endpoints/stable-diffusion.js+9 -9
@@ -607,10 +607,9 @@ together.post('/generate', jsonParser, async (request, response) => {
607607
608 console.log('TogetherAI request:', request.body);608 console.log('TogetherAI request:', request.body);
609609
610 const result = await fetch('https://api.together.xyz/api/inference', {610 const result = await fetch('https://api.together.xyz/v1/images/generations', {
611 method: 'POST',611 method: 'POST',
612 body: JSON.stringify({612 body: JSON.stringify({
613 request_type: 'image-model-inference',
614 prompt: request.body.prompt,613 prompt: request.body.prompt,
615 negative_prompt: request.body.negative_prompt,614 negative_prompt: request.body.negative_prompt,
616 height: request.body.height,615 height: request.body.height,
@@ -620,8 +619,6 @@ together.post('/generate', jsonParser, async (request, response) => {
620 n: 1,619 n: 1,
621 // Limited to 10000 on playground, works fine with more.620 // Limited to 10000 on playground, works fine with more.
622 seed: request.body.seed >= 0 ? request.body.seed : Math.floor(Math.random() * 10_000_000),621 seed: request.body.seed >= 0 ? request.body.seed : Math.floor(Math.random() * 10_000_000),
623 // Don't know if that's supposed to be random or not. It works either way.
624 sessionKey: getHexString(40),
625 }),622 }),
626 headers: {623 headers: {
627 'Content-Type': 'application/json',624 'Content-Type': 'application/json',
@@ -630,19 +627,22 @@ together.post('/generate', jsonParser, async (request, response) => {
630 });627 });
631628
632 if (!result.ok) {629 if (!result.ok) {
633 console.log('TogetherAI returned an error.');630 console.log('TogetherAI returned an error.', { body: await result.text() });
634 return response.sendStatus(500);631 return response.sendStatus(500);
635 }632 }
636633
637 const data = await result.json();634 const data = await result.json();
638 console.log('TogetherAI response:', data);635 console.log('TogetherAI response:', data);
639636
640 if (data.status !== 'finished') {637 const choice = data?.data?.[0];
641 console.log('TogetherAI job failed.');638 let b64_json = choice.b64_json;
642 return response.sendStatus(500);639
640 if (!b64_json) {
641 const buffer = await (await fetch(choice.url)).buffer();
642 b64_json = buffer.toString('base64');
643 }643 }
644644
645 return response.send(data);645 return response.send({ format: 'jpg', data: b64_json });
646 } catch (error) {646 } catch (error) {
647 console.log(error);647 console.log(error);
648 return response.sendStatus(500);648 return response.sendStatus(500);