XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

Added a new provider for generating images: g4f/Provider/Prodia.py

2aa514bf
kqlio67 <kqlio67@users.noreply.github.com>
提交于

代码差异

2 个文件 +151 -0
Added g4f/Provider/Prodia.py +150 -0
@@ -0,0 +1,150 @@
1 from __future__ import annotations
2
3 from aiohttp import ClientSession
4 import time
5 import asyncio
6
7 from ..typing import AsyncResult, Messages
8 from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
9 from ..image import ImageResponse
10
11 class Prodia(AsyncGeneratorProvider, ProviderModelMixin):
12 url = "https://app.prodia.com"
13 api_endpoint = "https://api.prodia.com/generate"
14 working = True
15
16 default_model = 'absolutereality_v181.safetensors [3d9d4d2b]'
17 models = [
18 '3Guofeng3_v34.safetensors [50f420de]',
19 'absolutereality_V16.safetensors [37db0fc3]',
20 default_model,
21 'amIReal_V41.safetensors [0a8a2e61]',
22 'analog-diffusion-1.0.ckpt [9ca13f02]',
23 'aniverse_v30.safetensors [579e6f85]',
24 'anythingv3_0-pruned.ckpt [2700c435]',
25 'anything-v4.5-pruned.ckpt [65745d25]',
26 'anythingV5_PrtRE.safetensors [893e49b9]',
27 'AOM3A3_orangemixs.safetensors [9600da17]',
28 'AOM3A3_orangemixs.safetensors [9600da17]',
29 'blazing_drive_v10g.safetensors [ca1c1eab]',
30 'breakdomain_I2428.safetensors [43cc7d2f]',
31 'breakdomain_M2150.safetensors [15f7afca]',
32 'cetusMix_Version35.safetensors [de2f2560]',
33 'childrensStories_v13D.safetensors [9dfaabcb]',
34 'childrensStories_v1SemiReal.safetensors [a1c56dbb]',
35 'childrensStories_v1ToonAnime.safetensors [2ec7b88b]',
36 'Counterfeit_v30.safetensors [9e2a8f19]',
37 'cuteyukimixAdorable_midchapter3.safetensors [04bdffe6]',
38 'cyberrealistic_v33.safetensors [82b0d085]',
39 'dalcefo_v4.safetensors [425952fe]',
40 'deliberate_v2.safetensors [10ec4b29]',
41 'deliberate_v3.safetensors [afd9d2d4]',
42 'dreamlike-anime-1.0.safetensors [4520e090]',
43 'dreamlike-diffusion-1.0.safetensors [5c9fd6e0]',
44 'dreamlike-photoreal-2.0.safetensors [fdcf65e7]',
45 'dreamshaper_6BakedVae.safetensors [114c8abb]',
46 'dreamshaper_7.safetensors [5cf5ae06]',
47 'dreamshaper_8.safetensors [9d40847d]',
48 'edgeOfRealism_eorV20.safetensors [3ed5de15]',
49 'EimisAnimeDiffusion_V1.ckpt [4f828a15]',
50 'elldreths-vivid-mix.safetensors [342d9d26]',
51 'epicphotogasm_xPlusPlus.safetensors [1a8f6d35]',
52 'epicrealism_naturalSinRC1VAE.safetensors [90a4c676]',
53 'epicrealism_pureEvolutionV3.safetensors [42c8440c]',
54 'ICantBelieveItsNotPhotography_seco.safetensors [4e7a3dfd]',
55 'indigoFurryMix_v75Hybrid.safetensors [91208cbb]',
56 'juggernaut_aftermath.safetensors [5e20c455]',
57 'lofi_v4.safetensors [ccc204d6]',
58 'lyriel_v16.safetensors [68fceea2]',
59 'majicmixRealistic_v4.safetensors [29d0de58]',
60 'mechamix_v10.safetensors [ee685731]',
61 'meinamix_meinaV9.safetensors [2ec66ab0]',
62 'meinamix_meinaV11.safetensors [b56ce717]',
63 'neverendingDream_v122.safetensors [f964ceeb]',
64 'openjourney_V4.ckpt [ca2f377f]',
65 'pastelMixStylizedAnime_pruned_fp16.safetensors [793a26e8]',
66 'portraitplus_V1.0.safetensors [1400e684]',
67 'protogenx34.safetensors [5896f8d5]',
68 'Realistic_Vision_V1.4-pruned-fp16.safetensors [8d21810b]',
69 'Realistic_Vision_V2.0.safetensors [79587710]',
70 'Realistic_Vision_V4.0.safetensors [29a7afaa]',
71 'Realistic_Vision_V5.0.safetensors [614d1063]',
72 'Realistic_Vision_V5.1.safetensors [a0f13c83]',
73 'redshift_diffusion-V10.safetensors [1400e684]',
74 'revAnimated_v122.safetensors [3f4fefd9]',
75 'rundiffusionFX25D_v10.safetensors [cd12b0ee]',
76 'rundiffusionFX_v10.safetensors [cd4e694d]',
77 'sdv1_4.ckpt [7460a6fa]',
78 'v1-5-pruned-emaonly.safetensors [d7049739]',
79 'v1-5-inpainting.safetensors [21c7ab71]',
80 'shoninsBeautiful_v10.safetensors [25d8c546]',
81 'theallys-mix-ii-churned.safetensors [5d9225a4]',
82 'timeless-1.0.ckpt [7c4971d4]',
83 'toonyou_beta6.safetensors [980f6b15]',
84 ]
85
86 @classmethod
87 def get_model(cls, model: str) -> str:
88 if model in cls.models:
89 return model
90 elif model in cls.model_aliases:
91 return cls.model_aliases[model]
92 else:
93 return cls.default_model
94
95 @classmethod
96 async def create_async_generator(
97 cls,
98 model: str,
99 messages: Messages,
100 proxy: str = None,
101 **kwargs
102 ) -> AsyncResult:
103 model = cls.get_model(model)
104
105 headers = {
106 "accept": "*/*",
107 "accept-language": "en-US,en;q=0.9",
108 "origin": cls.url,
109 "referer": f"{cls.url}/",
110 "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
111 }
112
113 async with ClientSession(headers=headers) as session:
114 prompt = messages[-1]['content'] if messages else ""
115
116 params = {
117 "new": "true",
118 "prompt": prompt,
119 "model": model,
120 "negative_prompt": kwargs.get("negative_prompt", ""),
121 "steps": kwargs.get("steps", 20),
122 "cfg": kwargs.get("cfg", 7),
123 "seed": kwargs.get("seed", int(time.time())),
124 "sampler": kwargs.get("sampler", "DPM++ 2M Karras"),
125 "aspect_ratio": kwargs.get("aspect_ratio", "square")
126 }
127
128 async with session.get(cls.api_endpoint, params=params, proxy=proxy) as response:
129 response.raise_for_status()
130 job_data = await response.json()
131 job_id = job_data["job"]
132
133 image_url = await cls._poll_job(session, job_id, proxy)
134 yield ImageResponse(image_url, alt=prompt)
135
136 @classmethod
137 async def _poll_job(cls, session: ClientSession, job_id: str, proxy: str, max_attempts: int = 30, delay: int = 2) -> str:
138 for _ in range(max_attempts):
139 async with session.get(f"https://api.prodia.com/job/{job_id}", proxy=proxy) as response:
140 response.raise_for_status()
141 job_status = await response.json()
142
143 if job_status["status"] == "succeeded":
144 return f"https://images.prodia.xyz/{job_id}.png"
145 elif job_status["status"] == "failed":
146 raise Exception("Image generation failed")
147
148 await asyncio.sleep(delay)
149
150 raise Exception("Timeout waiting for image generation")
Modified g4f/Provider/__init__.py +1 -0
@@ -50,6 +50,7 @@ from .Ollama import Ollama
50 50 from .PerplexityLabs import PerplexityLabs
51 51 from .Pi import Pi
52 52 from .Pizzagpt import Pizzagpt
53 from .Prodia import Prodia
53 54 from .Reka import Reka
54 55 from .Snova import Snova
55 56 from .Replicate import Replicate