webscout 8.3.6__py3-none-any.whl → 2025.10.11__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of webscout might be problematic. Click here for more details.
- webscout/AIauto.py +250 -250
- webscout/AIbase.py +379 -379
- webscout/AIutel.py +60 -58
- webscout/Bard.py +1012 -1012
- webscout/Bing_search.py +417 -417
- webscout/DWEBS.py +529 -529
- webscout/Extra/Act.md +309 -309
- webscout/Extra/GitToolkit/__init__.py +10 -10
- webscout/Extra/GitToolkit/gitapi/README.md +110 -110
- webscout/Extra/GitToolkit/gitapi/__init__.py +11 -11
- webscout/Extra/GitToolkit/gitapi/repository.py +195 -195
- webscout/Extra/GitToolkit/gitapi/user.py +96 -96
- webscout/Extra/GitToolkit/gitapi/utils.py +61 -61
- webscout/Extra/YTToolkit/README.md +375 -375
- webscout/Extra/YTToolkit/YTdownloader.py +956 -956
- webscout/Extra/YTToolkit/__init__.py +2 -2
- webscout/Extra/YTToolkit/transcriber.py +475 -475
- webscout/Extra/YTToolkit/ytapi/README.md +44 -44
- webscout/Extra/YTToolkit/ytapi/__init__.py +6 -6
- webscout/Extra/YTToolkit/ytapi/channel.py +307 -307
- webscout/Extra/YTToolkit/ytapi/errors.py +13 -13
- webscout/Extra/YTToolkit/ytapi/extras.py +118 -118
- webscout/Extra/YTToolkit/ytapi/https.py +88 -88
- webscout/Extra/YTToolkit/ytapi/patterns.py +61 -61
- webscout/Extra/YTToolkit/ytapi/playlist.py +58 -58
- webscout/Extra/YTToolkit/ytapi/pool.py +7 -7
- webscout/Extra/YTToolkit/ytapi/query.py +39 -39
- webscout/Extra/YTToolkit/ytapi/stream.py +62 -62
- webscout/Extra/YTToolkit/ytapi/utils.py +62 -62
- webscout/Extra/YTToolkit/ytapi/video.py +232 -232
- webscout/Extra/autocoder/__init__.py +9 -9
- webscout/Extra/autocoder/autocoder.py +1105 -1105
- webscout/Extra/autocoder/autocoder_utiles.py +332 -332
- webscout/Extra/gguf.md +429 -429
- webscout/Extra/gguf.py +1213 -1213
- webscout/Extra/tempmail/README.md +487 -487
- webscout/Extra/tempmail/__init__.py +27 -27
- webscout/Extra/tempmail/async_utils.py +140 -140
- webscout/Extra/tempmail/base.py +160 -160
- webscout/Extra/tempmail/cli.py +186 -186
- webscout/Extra/tempmail/emailnator.py +84 -84
- webscout/Extra/tempmail/mail_tm.py +360 -360
- webscout/Extra/tempmail/temp_mail_io.py +291 -291
- webscout/Extra/weather.md +281 -281
- webscout/Extra/weather.py +193 -193
- webscout/Litlogger/README.md +10 -10
- webscout/Litlogger/__init__.py +15 -15
- webscout/Litlogger/formats.py +13 -13
- webscout/Litlogger/handlers.py +121 -121
- webscout/Litlogger/levels.py +13 -13
- webscout/Litlogger/logger.py +134 -134
- webscout/Provider/AISEARCH/Perplexity.py +332 -332
- webscout/Provider/AISEARCH/README.md +279 -279
- webscout/Provider/AISEARCH/__init__.py +33 -11
- webscout/Provider/AISEARCH/felo_search.py +206 -206
- webscout/Provider/AISEARCH/genspark_search.py +323 -323
- webscout/Provider/AISEARCH/hika_search.py +185 -185
- webscout/Provider/AISEARCH/iask_search.py +410 -410
- webscout/Provider/AISEARCH/monica_search.py +219 -219
- webscout/Provider/AISEARCH/scira_search.py +316 -314
- webscout/Provider/AISEARCH/stellar_search.py +177 -177
- webscout/Provider/AISEARCH/webpilotai_search.py +255 -255
- webscout/Provider/Aitopia.py +314 -315
- webscout/Provider/Andi.py +3 -3
- webscout/Provider/Apriel.py +306 -0
- webscout/Provider/ChatGPTClone.py +236 -236
- webscout/Provider/ChatSandbox.py +343 -342
- webscout/Provider/Cloudflare.py +324 -324
- webscout/Provider/Cohere.py +208 -207
- webscout/Provider/Deepinfra.py +370 -369
- webscout/Provider/ExaAI.py +260 -260
- webscout/Provider/ExaChat.py +308 -387
- webscout/Provider/Flowith.py +221 -221
- webscout/Provider/GMI.py +293 -0
- webscout/Provider/Gemini.py +164 -162
- webscout/Provider/GeminiProxy.py +167 -166
- webscout/Provider/GithubChat.py +371 -370
- webscout/Provider/Groq.py +800 -800
- webscout/Provider/HeckAI.py +383 -379
- webscout/Provider/Jadve.py +282 -297
- webscout/Provider/K2Think.py +308 -0
- webscout/Provider/Koboldai.py +206 -384
- webscout/Provider/LambdaChat.py +423 -425
- webscout/Provider/Nemotron.py +244 -245
- webscout/Provider/Netwrck.py +248 -247
- webscout/Provider/OLLAMA.py +395 -394
- webscout/Provider/OPENAI/Cloudflare.py +394 -395
- webscout/Provider/OPENAI/FalconH1.py +452 -457
- webscout/Provider/OPENAI/FreeGemini.py +297 -299
- webscout/Provider/OPENAI/{monochat.py → K2Think.py} +432 -329
- webscout/Provider/OPENAI/NEMOTRON.py +241 -244
- webscout/Provider/OPENAI/PI.py +428 -427
- webscout/Provider/OPENAI/README.md +959 -959
- webscout/Provider/OPENAI/TogetherAI.py +345 -345
- webscout/Provider/OPENAI/TwoAI.py +466 -467
- webscout/Provider/OPENAI/__init__.py +33 -59
- webscout/Provider/OPENAI/ai4chat.py +313 -303
- webscout/Provider/OPENAI/base.py +249 -269
- webscout/Provider/OPENAI/chatglm.py +528 -0
- webscout/Provider/OPENAI/chatgpt.py +593 -588
- webscout/Provider/OPENAI/chatgptclone.py +521 -524
- webscout/Provider/OPENAI/chatsandbox.py +202 -177
- webscout/Provider/OPENAI/deepinfra.py +319 -315
- webscout/Provider/OPENAI/e2b.py +1665 -1665
- webscout/Provider/OPENAI/exaai.py +420 -420
- webscout/Provider/OPENAI/exachat.py +452 -452
- webscout/Provider/OPENAI/friendli.py +232 -232
- webscout/Provider/OPENAI/{refact.py → gmi.py} +324 -274
- webscout/Provider/OPENAI/groq.py +364 -364
- webscout/Provider/OPENAI/heckai.py +314 -311
- webscout/Provider/OPENAI/llmchatco.py +337 -337
- webscout/Provider/OPENAI/netwrck.py +355 -354
- webscout/Provider/OPENAI/oivscode.py +290 -290
- webscout/Provider/OPENAI/opkfc.py +518 -518
- webscout/Provider/OPENAI/pydantic_imports.py +1 -1
- webscout/Provider/OPENAI/scirachat.py +535 -529
- webscout/Provider/OPENAI/sonus.py +308 -308
- webscout/Provider/OPENAI/standardinput.py +442 -442
- webscout/Provider/OPENAI/textpollinations.py +340 -348
- webscout/Provider/OPENAI/toolbaz.py +419 -413
- webscout/Provider/OPENAI/typefully.py +362 -362
- webscout/Provider/OPENAI/utils.py +295 -295
- webscout/Provider/OPENAI/venice.py +436 -436
- webscout/Provider/OPENAI/wisecat.py +387 -387
- webscout/Provider/OPENAI/writecream.py +166 -166
- webscout/Provider/OPENAI/x0gpt.py +378 -378
- webscout/Provider/OPENAI/yep.py +389 -389
- webscout/Provider/OpenGPT.py +230 -230
- webscout/Provider/Openai.py +244 -496
- webscout/Provider/PI.py +405 -404
- webscout/Provider/Perplexitylabs.py +430 -431
- webscout/Provider/QwenLM.py +272 -254
- webscout/Provider/STT/__init__.py +32 -2
- webscout/Provider/{Llama3.py → Sambanova.py} +257 -258
- webscout/Provider/StandardInput.py +309 -309
- webscout/Provider/TTI/README.md +82 -82
- webscout/Provider/TTI/__init__.py +33 -12
- webscout/Provider/TTI/aiarta.py +413 -413
- webscout/Provider/TTI/base.py +136 -136
- webscout/Provider/TTI/bing.py +243 -243
- webscout/Provider/TTI/gpt1image.py +149 -149
- webscout/Provider/TTI/imagen.py +196 -196
- webscout/Provider/TTI/infip.py +211 -211
- webscout/Provider/TTI/magicstudio.py +232 -232
- webscout/Provider/TTI/monochat.py +219 -219
- webscout/Provider/TTI/piclumen.py +214 -214
- webscout/Provider/TTI/pixelmuse.py +232 -232
- webscout/Provider/TTI/pollinations.py +232 -232
- webscout/Provider/TTI/together.py +288 -288
- webscout/Provider/TTI/utils.py +12 -12
- webscout/Provider/TTI/venice.py +367 -367
- webscout/Provider/TTS/README.md +192 -192
- webscout/Provider/TTS/__init__.py +33 -10
- webscout/Provider/TTS/parler.py +110 -110
- webscout/Provider/TTS/streamElements.py +333 -333
- webscout/Provider/TTS/utils.py +280 -280
- webscout/Provider/TeachAnything.py +237 -236
- webscout/Provider/TextPollinationsAI.py +311 -318
- webscout/Provider/TogetherAI.py +356 -357
- webscout/Provider/TwoAI.py +313 -569
- webscout/Provider/TypliAI.py +312 -311
- webscout/Provider/UNFINISHED/ChatHub.py +208 -208
- webscout/Provider/UNFINISHED/ChutesAI.py +313 -313
- webscout/Provider/{GizAI.py → UNFINISHED/GizAI.py} +294 -294
- webscout/Provider/{Marcus.py → UNFINISHED/Marcus.py} +198 -198
- webscout/Provider/{Qodo.py → UNFINISHED/Qodo.py} +477 -477
- webscout/Provider/UNFINISHED/VercelAIGateway.py +338 -338
- webscout/Provider/{XenAI.py → UNFINISHED/XenAI.py} +324 -324
- webscout/Provider/UNFINISHED/Youchat.py +330 -330
- webscout/Provider/UNFINISHED/liner.py +334 -0
- webscout/Provider/UNFINISHED/liner_api_request.py +262 -262
- webscout/Provider/UNFINISHED/puterjs.py +634 -634
- webscout/Provider/UNFINISHED/samurai.py +223 -223
- webscout/Provider/UNFINISHED/test_lmarena.py +119 -119
- webscout/Provider/Venice.py +251 -250
- webscout/Provider/VercelAI.py +256 -255
- webscout/Provider/WiseCat.py +232 -231
- webscout/Provider/WrDoChat.py +367 -366
- webscout/Provider/__init__.py +33 -86
- webscout/Provider/ai4chat.py +174 -174
- webscout/Provider/akashgpt.py +331 -334
- webscout/Provider/cerebras.py +446 -340
- webscout/Provider/chatglm.py +394 -214
- webscout/Provider/cleeai.py +211 -212
- webscout/Provider/deepseek_assistant.py +1 -1
- webscout/Provider/elmo.py +282 -282
- webscout/Provider/geminiapi.py +208 -208
- webscout/Provider/granite.py +261 -261
- webscout/Provider/hermes.py +263 -265
- webscout/Provider/julius.py +223 -222
- webscout/Provider/learnfastai.py +309 -309
- webscout/Provider/llama3mitril.py +214 -214
- webscout/Provider/llmchat.py +243 -243
- webscout/Provider/llmchatco.py +290 -290
- webscout/Provider/meta.py +801 -801
- webscout/Provider/oivscode.py +309 -309
- webscout/Provider/scira_chat.py +384 -457
- webscout/Provider/searchchat.py +292 -291
- webscout/Provider/sonus.py +258 -258
- webscout/Provider/toolbaz.py +370 -364
- webscout/Provider/turboseek.py +274 -265
- webscout/Provider/typefully.py +208 -207
- webscout/Provider/x0gpt.py +1 -0
- webscout/Provider/yep.py +372 -371
- webscout/__init__.py +30 -31
- webscout/__main__.py +5 -5
- webscout/auth/api_key_manager.py +189 -189
- webscout/auth/config.py +175 -175
- webscout/auth/models.py +185 -185
- webscout/auth/routes.py +664 -664
- webscout/auth/simple_logger.py +236 -236
- webscout/cli.py +523 -523
- webscout/conversation.py +438 -438
- webscout/exceptions.py +361 -361
- webscout/litagent/Readme.md +298 -298
- webscout/litagent/__init__.py +28 -28
- webscout/litagent/agent.py +581 -581
- webscout/litagent/constants.py +59 -59
- webscout/litprinter/__init__.py +58 -58
- webscout/models.py +181 -181
- webscout/optimizers.py +419 -419
- webscout/prompt_manager.py +288 -288
- webscout/sanitize.py +1078 -1078
- webscout/scout/README.md +401 -401
- webscout/scout/__init__.py +8 -8
- webscout/scout/core/__init__.py +6 -6
- webscout/scout/core/crawler.py +297 -297
- webscout/scout/core/scout.py +706 -706
- webscout/scout/core/search_result.py +95 -95
- webscout/scout/core/text_analyzer.py +62 -62
- webscout/scout/core/text_utils.py +277 -277
- webscout/scout/core/web_analyzer.py +51 -51
- webscout/scout/element.py +599 -599
- webscout/scout/parsers/__init__.py +69 -69
- webscout/scout/parsers/html5lib_parser.py +172 -172
- webscout/scout/parsers/html_parser.py +236 -236
- webscout/scout/parsers/lxml_parser.py +178 -178
- webscout/scout/utils.py +37 -37
- webscout/swiftcli/Readme.md +323 -323
- webscout/swiftcli/__init__.py +95 -95
- webscout/swiftcli/core/__init__.py +7 -7
- webscout/swiftcli/core/cli.py +308 -308
- webscout/swiftcli/core/context.py +104 -104
- webscout/swiftcli/core/group.py +241 -241
- webscout/swiftcli/decorators/__init__.py +28 -28
- webscout/swiftcli/decorators/command.py +221 -221
- webscout/swiftcli/decorators/options.py +220 -220
- webscout/swiftcli/decorators/output.py +302 -302
- webscout/swiftcli/exceptions.py +21 -21
- webscout/swiftcli/plugins/__init__.py +9 -9
- webscout/swiftcli/plugins/base.py +135 -135
- webscout/swiftcli/plugins/manager.py +269 -269
- webscout/swiftcli/utils/__init__.py +59 -59
- webscout/swiftcli/utils/formatting.py +252 -252
- webscout/swiftcli/utils/parsing.py +267 -267
- webscout/update_checker.py +117 -117
- webscout/version.py +1 -1
- webscout/webscout_search.py +1183 -1183
- webscout/webscout_search_async.py +649 -649
- webscout/yep_search.py +346 -346
- webscout/zeroart/README.md +89 -89
- webscout/zeroart/__init__.py +134 -134
- webscout/zeroart/base.py +66 -66
- webscout/zeroart/effects.py +100 -100
- webscout/zeroart/fonts.py +1238 -1238
- {webscout-8.3.6.dist-info → webscout-2025.10.11.dist-info}/METADATA +937 -936
- webscout-2025.10.11.dist-info/RECORD +300 -0
- webscout/Provider/AISEARCH/DeepFind.py +0 -254
- webscout/Provider/AllenAI.py +0 -440
- webscout/Provider/Blackboxai.py +0 -793
- webscout/Provider/FreeGemini.py +0 -250
- webscout/Provider/GptOss.py +0 -207
- webscout/Provider/Hunyuan.py +0 -283
- webscout/Provider/Kimi.py +0 -445
- webscout/Provider/MCPCore.py +0 -322
- webscout/Provider/MiniMax.py +0 -207
- webscout/Provider/OPENAI/BLACKBOXAI.py +0 -1045
- webscout/Provider/OPENAI/MiniMax.py +0 -298
- webscout/Provider/OPENAI/Qwen3.py +0 -304
- webscout/Provider/OPENAI/autoproxy.py +0 -1067
- webscout/Provider/OPENAI/copilot.py +0 -321
- webscout/Provider/OPENAI/gptoss.py +0 -288
- webscout/Provider/OPENAI/kimi.py +0 -469
- webscout/Provider/OPENAI/mcpcore.py +0 -431
- webscout/Provider/OPENAI/multichat.py +0 -378
- webscout/Provider/OPENAI/qodo.py +0 -630
- webscout/Provider/OPENAI/xenai.py +0 -514
- webscout/Provider/Reka.py +0 -214
- webscout/Provider/UNFINISHED/fetch_together_models.py +0 -90
- webscout/Provider/asksteve.py +0 -220
- webscout/Provider/copilot.py +0 -441
- webscout/Provider/freeaichat.py +0 -294
- webscout/Provider/koala.py +0 -182
- webscout/Provider/lmarena.py +0 -198
- webscout/Provider/monochat.py +0 -275
- webscout/Provider/multichat.py +0 -375
- webscout/Provider/scnet.py +0 -244
- webscout/Provider/talkai.py +0 -194
- webscout/tempid.py +0 -128
- webscout-8.3.6.dist-info/RECORD +0 -327
- {webscout-8.3.6.dist-info → webscout-2025.10.11.dist-info}/WHEEL +0 -0
- {webscout-8.3.6.dist-info → webscout-2025.10.11.dist-info}/entry_points.txt +0 -0
- {webscout-8.3.6.dist-info → webscout-2025.10.11.dist-info}/licenses/LICENSE.md +0 -0
- {webscout-8.3.6.dist-info → webscout-2025.10.11.dist-info}/top_level.txt +0 -0
webscout/Provider/TTI/infip.py
CHANGED
|
@@ -1,212 +1,212 @@
|
|
|
1
|
-
"""InfipAI TTI-Compatible Provider - Generate images with Infip AI! 🎨
|
|
2
|
-
|
|
3
|
-
This module provides access to Infip's image generation API through a unified interface.
|
|
4
|
-
Supports img3, img4, and uncen models with various aspect ratios and customization options.
|
|
5
|
-
|
|
6
|
-
Example Usage:
|
|
7
|
-
from webscout.Provider.TTI.infip import InfipAI
|
|
8
|
-
|
|
9
|
-
# Initialize the provider
|
|
10
|
-
client = InfipAI()
|
|
11
|
-
|
|
12
|
-
# Generate an image
|
|
13
|
-
response = client.images.create(
|
|
14
|
-
model="img3",
|
|
15
|
-
prompt="A beautiful sunset over mountains",
|
|
16
|
-
n=1,
|
|
17
|
-
aspect_ratio="IMAGE_ASPECT_RATIO_LANDSCAPE",
|
|
18
|
-
seed=42
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
# Get the image URL
|
|
22
|
-
image_url = response.data[0].url
|
|
23
|
-
print(f"Generated image: {image_url}")
|
|
24
|
-
|
|
25
|
-
Available Models:
|
|
26
|
-
- img3: High-quality image generation
|
|
27
|
-
- img4: Enhanced image generation model
|
|
28
|
-
- uncen: Uncensored image generation model
|
|
29
|
-
|
|
30
|
-
Supported Aspect Ratios:
|
|
31
|
-
- IMAGE_ASPECT_RATIO_LANDSCAPE: 16:9 landscape
|
|
32
|
-
- IMAGE_ASPECT_RATIO_PORTRAIT: 9:16 portrait
|
|
33
|
-
- IMAGE_ASPECT_RATIO_SQUARE: 1:1 square
|
|
34
|
-
"""
|
|
35
|
-
|
|
36
|
-
import requests
|
|
37
|
-
from typing import Optional
|
|
38
|
-
from webscout.Provider.TTI.utils import (
|
|
39
|
-
ImageData,
|
|
40
|
-
ImageResponse
|
|
41
|
-
)
|
|
42
|
-
from webscout.Provider.TTI.base import TTICompatibleProvider, BaseImages
|
|
43
|
-
from webscout.litagent import LitAgent
|
|
44
|
-
import time
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
class Images(BaseImages):
|
|
48
|
-
def __init__(self, client):
|
|
49
|
-
self._client = client
|
|
50
|
-
|
|
51
|
-
def create(
|
|
52
|
-
self,
|
|
53
|
-
*,
|
|
54
|
-
model: str,
|
|
55
|
-
prompt: str,
|
|
56
|
-
n: int = 1,
|
|
57
|
-
size: str = "1024x1024",
|
|
58
|
-
response_format: str = "url",
|
|
59
|
-
user: Optional[str] = None,
|
|
60
|
-
style: str = "none",
|
|
61
|
-
aspect_ratio: str = "IMAGE_ASPECT_RATIO_LANDSCAPE",
|
|
62
|
-
timeout: int = 60,
|
|
63
|
-
image_format: str = "png",
|
|
64
|
-
seed: Optional[int] = None,
|
|
65
|
-
**kwargs,
|
|
66
|
-
) -> ImageResponse:
|
|
67
|
-
"""
|
|
68
|
-
Create images using Infip AI API.
|
|
69
|
-
|
|
70
|
-
Args:
|
|
71
|
-
model: The model to use ("img3", "img4", or "uncen")
|
|
72
|
-
prompt: Text description of the image to generate
|
|
73
|
-
n: Number of images to generate (default: 1)
|
|
74
|
-
size: Image size (ignored, aspect_ratio is used instead)
|
|
75
|
-
response_format: "url" or "b64_json" (default: "url")
|
|
76
|
-
user: Optional user identifier (ignored)
|
|
77
|
-
style: Optional style (ignored)
|
|
78
|
-
aspect_ratio: Image aspect ratio ("IMAGE_ASPECT_RATIO_LANDSCAPE",
|
|
79
|
-
"IMAGE_ASPECT_RATIO_PORTRAIT", "IMAGE_ASPECT_RATIO_SQUARE")
|
|
80
|
-
timeout: Request timeout in seconds (default: 60)
|
|
81
|
-
image_format: Image format "png" or "jpeg" (ignored by API)
|
|
82
|
-
seed: Random seed for reproducibility (default: 0 for random)
|
|
83
|
-
**kwargs: Additional parameters
|
|
84
|
-
|
|
85
|
-
Returns:
|
|
86
|
-
ImageResponse: The generated images
|
|
87
|
-
|
|
88
|
-
Raises:
|
|
89
|
-
ValueError: If model is not supported
|
|
90
|
-
RuntimeError: If image generation fails
|
|
91
|
-
"""
|
|
92
|
-
if model not in self._client.AVAILABLE_MODELS:
|
|
93
|
-
raise ValueError(f"Model '{model}' not supported. Available models: {self._client.AVAILABLE_MODELS}")
|
|
94
|
-
|
|
95
|
-
# Validate aspect ratio
|
|
96
|
-
valid_ratios = [
|
|
97
|
-
"IMAGE_ASPECT_RATIO_LANDSCAPE",
|
|
98
|
-
"IMAGE_ASPECT_RATIO_PORTRAIT",
|
|
99
|
-
"IMAGE_ASPECT_RATIO_SQUARE"
|
|
100
|
-
]
|
|
101
|
-
if aspect_ratio not in valid_ratios:
|
|
102
|
-
aspect_ratio = "IMAGE_ASPECT_RATIO_LANDSCAPE"
|
|
103
|
-
|
|
104
|
-
# Prepare request payload
|
|
105
|
-
payload = {
|
|
106
|
-
"prompt": prompt,
|
|
107
|
-
"num_images": n,
|
|
108
|
-
"seed": seed if seed is not None else 0,
|
|
109
|
-
"aspect_ratio": aspect_ratio,
|
|
110
|
-
"models": model
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
try:
|
|
114
|
-
# Make API request
|
|
115
|
-
response = self._client.session.post(
|
|
116
|
-
self._client.api_endpoint,
|
|
117
|
-
json=payload,
|
|
118
|
-
timeout=timeout
|
|
119
|
-
)
|
|
120
|
-
response.raise_for_status()
|
|
121
|
-
|
|
122
|
-
# Parse response
|
|
123
|
-
result = response.json()
|
|
124
|
-
|
|
125
|
-
if "images" not in result or not result["images"]:
|
|
126
|
-
raise RuntimeError("No images returned from Infip API")
|
|
127
|
-
|
|
128
|
-
# Process response based on format
|
|
129
|
-
result_data = []
|
|
130
|
-
|
|
131
|
-
if response_format == "url":
|
|
132
|
-
for image_url in result["images"]:
|
|
133
|
-
result_data.append(ImageData(url=image_url))
|
|
134
|
-
elif response_format == "b64_json":
|
|
135
|
-
# For b64_json format, we need to download and encode the images
|
|
136
|
-
import base64
|
|
137
|
-
for image_url in result["images"]:
|
|
138
|
-
try:
|
|
139
|
-
img_response = self._client.session.get(image_url, timeout=timeout)
|
|
140
|
-
img_response.raise_for_status()
|
|
141
|
-
b64_data = base64.b64encode(img_response.content).decode('utf-8')
|
|
142
|
-
result_data.append(ImageData(b64_json=b64_data))
|
|
143
|
-
except Exception as e:
|
|
144
|
-
raise RuntimeError(f"Failed to download image for base64 encoding: {e}")
|
|
145
|
-
else:
|
|
146
|
-
raise ValueError("response_format must be 'url' or 'b64_json'")
|
|
147
|
-
|
|
148
|
-
return ImageResponse(created=int(time.time()), data=result_data)
|
|
149
|
-
|
|
150
|
-
except requests.RequestException as e:
|
|
151
|
-
raise RuntimeError(f"Failed to generate image with Infip API: {e}")
|
|
152
|
-
except Exception as e:
|
|
153
|
-
raise RuntimeError(f"Unexpected error during image generation: {e}")
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
class InfipAI(TTICompatibleProvider):
|
|
157
|
-
"""
|
|
158
|
-
Infip AI provider for text-to-image generation.
|
|
159
|
-
|
|
160
|
-
This provider interfaces with the Infip API to generate images from text prompts.
|
|
161
|
-
It supports multiple models and aspect ratios for flexible image creation.
|
|
162
|
-
"""
|
|
163
|
-
|
|
164
|
-
AVAILABLE_MODELS = ["img3", "img4", "uncen"]
|
|
165
|
-
|
|
166
|
-
def __init__(self, **kwargs):
|
|
167
|
-
"""
|
|
168
|
-
Initialize the Infip AI provider.
|
|
169
|
-
|
|
170
|
-
Args:
|
|
171
|
-
**kwargs: Additional configuration options
|
|
172
|
-
"""
|
|
173
|
-
self.api_endpoint = "https://api.infip.pro/generate"
|
|
174
|
-
self.session = requests.Session()
|
|
175
|
-
|
|
176
|
-
# Set up headers with user agent
|
|
177
|
-
agent = LitAgent()
|
|
178
|
-
self.headers = {
|
|
179
|
-
"accept": "application/json",
|
|
180
|
-
"Content-Type": "application/json",
|
|
181
|
-
"User-Agent": agent.random()
|
|
182
|
-
}
|
|
183
|
-
self.session.headers.update(self.headers)
|
|
184
|
-
|
|
185
|
-
# Initialize the images interface
|
|
186
|
-
self.images = Images(self)
|
|
187
|
-
|
|
188
|
-
@property
|
|
189
|
-
def models(self):
|
|
190
|
-
"""
|
|
191
|
-
Get available models for the provider.
|
|
192
|
-
|
|
193
|
-
Returns:
|
|
194
|
-
Object with list() method that returns available model names
|
|
195
|
-
"""
|
|
196
|
-
class ModelList:
|
|
197
|
-
def list(self):
|
|
198
|
-
return InfipAI.AVAILABLE_MODELS
|
|
199
|
-
|
|
200
|
-
return ModelList()
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
if __name__ == "__main__":
|
|
204
|
-
client = InfipAI()
|
|
205
|
-
response = client.images.create(
|
|
206
|
-
model="img3",
|
|
207
|
-
prompt="A beautiful sunset over mountains",
|
|
208
|
-
n=1,
|
|
209
|
-
aspect_ratio="IMAGE_ASPECT_RATIO_LANDSCAPE",
|
|
210
|
-
seed=42
|
|
211
|
-
)
|
|
1
|
+
"""InfipAI TTI-Compatible Provider - Generate images with Infip AI! 🎨
|
|
2
|
+
|
|
3
|
+
This module provides access to Infip's image generation API through a unified interface.
|
|
4
|
+
Supports img3, img4, and uncen models with various aspect ratios and customization options.
|
|
5
|
+
|
|
6
|
+
Example Usage:
|
|
7
|
+
from webscout.Provider.TTI.infip import InfipAI
|
|
8
|
+
|
|
9
|
+
# Initialize the provider
|
|
10
|
+
client = InfipAI()
|
|
11
|
+
|
|
12
|
+
# Generate an image
|
|
13
|
+
response = client.images.create(
|
|
14
|
+
model="img3",
|
|
15
|
+
prompt="A beautiful sunset over mountains",
|
|
16
|
+
n=1,
|
|
17
|
+
aspect_ratio="IMAGE_ASPECT_RATIO_LANDSCAPE",
|
|
18
|
+
seed=42
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
# Get the image URL
|
|
22
|
+
image_url = response.data[0].url
|
|
23
|
+
print(f"Generated image: {image_url}")
|
|
24
|
+
|
|
25
|
+
Available Models:
|
|
26
|
+
- img3: High-quality image generation
|
|
27
|
+
- img4: Enhanced image generation model
|
|
28
|
+
- uncen: Uncensored image generation model
|
|
29
|
+
|
|
30
|
+
Supported Aspect Ratios:
|
|
31
|
+
- IMAGE_ASPECT_RATIO_LANDSCAPE: 16:9 landscape
|
|
32
|
+
- IMAGE_ASPECT_RATIO_PORTRAIT: 9:16 portrait
|
|
33
|
+
- IMAGE_ASPECT_RATIO_SQUARE: 1:1 square
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
import requests
|
|
37
|
+
from typing import Optional
|
|
38
|
+
from webscout.Provider.TTI.utils import (
|
|
39
|
+
ImageData,
|
|
40
|
+
ImageResponse
|
|
41
|
+
)
|
|
42
|
+
from webscout.Provider.TTI.base import TTICompatibleProvider, BaseImages
|
|
43
|
+
from webscout.litagent import LitAgent
|
|
44
|
+
import time
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class Images(BaseImages):
|
|
48
|
+
def __init__(self, client):
|
|
49
|
+
self._client = client
|
|
50
|
+
|
|
51
|
+
def create(
|
|
52
|
+
self,
|
|
53
|
+
*,
|
|
54
|
+
model: str,
|
|
55
|
+
prompt: str,
|
|
56
|
+
n: int = 1,
|
|
57
|
+
size: str = "1024x1024",
|
|
58
|
+
response_format: str = "url",
|
|
59
|
+
user: Optional[str] = None,
|
|
60
|
+
style: str = "none",
|
|
61
|
+
aspect_ratio: str = "IMAGE_ASPECT_RATIO_LANDSCAPE",
|
|
62
|
+
timeout: int = 60,
|
|
63
|
+
image_format: str = "png",
|
|
64
|
+
seed: Optional[int] = None,
|
|
65
|
+
**kwargs,
|
|
66
|
+
) -> ImageResponse:
|
|
67
|
+
"""
|
|
68
|
+
Create images using Infip AI API.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
model: The model to use ("img3", "img4", or "uncen")
|
|
72
|
+
prompt: Text description of the image to generate
|
|
73
|
+
n: Number of images to generate (default: 1)
|
|
74
|
+
size: Image size (ignored, aspect_ratio is used instead)
|
|
75
|
+
response_format: "url" or "b64_json" (default: "url")
|
|
76
|
+
user: Optional user identifier (ignored)
|
|
77
|
+
style: Optional style (ignored)
|
|
78
|
+
aspect_ratio: Image aspect ratio ("IMAGE_ASPECT_RATIO_LANDSCAPE",
|
|
79
|
+
"IMAGE_ASPECT_RATIO_PORTRAIT", "IMAGE_ASPECT_RATIO_SQUARE")
|
|
80
|
+
timeout: Request timeout in seconds (default: 60)
|
|
81
|
+
image_format: Image format "png" or "jpeg" (ignored by API)
|
|
82
|
+
seed: Random seed for reproducibility (default: 0 for random)
|
|
83
|
+
**kwargs: Additional parameters
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
ImageResponse: The generated images
|
|
87
|
+
|
|
88
|
+
Raises:
|
|
89
|
+
ValueError: If model is not supported
|
|
90
|
+
RuntimeError: If image generation fails
|
|
91
|
+
"""
|
|
92
|
+
if model not in self._client.AVAILABLE_MODELS:
|
|
93
|
+
raise ValueError(f"Model '{model}' not supported. Available models: {self._client.AVAILABLE_MODELS}")
|
|
94
|
+
|
|
95
|
+
# Validate aspect ratio
|
|
96
|
+
valid_ratios = [
|
|
97
|
+
"IMAGE_ASPECT_RATIO_LANDSCAPE",
|
|
98
|
+
"IMAGE_ASPECT_RATIO_PORTRAIT",
|
|
99
|
+
"IMAGE_ASPECT_RATIO_SQUARE"
|
|
100
|
+
]
|
|
101
|
+
if aspect_ratio not in valid_ratios:
|
|
102
|
+
aspect_ratio = "IMAGE_ASPECT_RATIO_LANDSCAPE"
|
|
103
|
+
|
|
104
|
+
# Prepare request payload
|
|
105
|
+
payload = {
|
|
106
|
+
"prompt": prompt,
|
|
107
|
+
"num_images": n,
|
|
108
|
+
"seed": seed if seed is not None else 0,
|
|
109
|
+
"aspect_ratio": aspect_ratio,
|
|
110
|
+
"models": model
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
try:
|
|
114
|
+
# Make API request
|
|
115
|
+
response = self._client.session.post(
|
|
116
|
+
self._client.api_endpoint,
|
|
117
|
+
json=payload,
|
|
118
|
+
timeout=timeout
|
|
119
|
+
)
|
|
120
|
+
response.raise_for_status()
|
|
121
|
+
|
|
122
|
+
# Parse response
|
|
123
|
+
result = response.json()
|
|
124
|
+
|
|
125
|
+
if "images" not in result or not result["images"]:
|
|
126
|
+
raise RuntimeError("No images returned from Infip API")
|
|
127
|
+
|
|
128
|
+
# Process response based on format
|
|
129
|
+
result_data = []
|
|
130
|
+
|
|
131
|
+
if response_format == "url":
|
|
132
|
+
for image_url in result["images"]:
|
|
133
|
+
result_data.append(ImageData(url=image_url))
|
|
134
|
+
elif response_format == "b64_json":
|
|
135
|
+
# For b64_json format, we need to download and encode the images
|
|
136
|
+
import base64
|
|
137
|
+
for image_url in result["images"]:
|
|
138
|
+
try:
|
|
139
|
+
img_response = self._client.session.get(image_url, timeout=timeout)
|
|
140
|
+
img_response.raise_for_status()
|
|
141
|
+
b64_data = base64.b64encode(img_response.content).decode('utf-8')
|
|
142
|
+
result_data.append(ImageData(b64_json=b64_data))
|
|
143
|
+
except Exception as e:
|
|
144
|
+
raise RuntimeError(f"Failed to download image for base64 encoding: {e}")
|
|
145
|
+
else:
|
|
146
|
+
raise ValueError("response_format must be 'url' or 'b64_json'")
|
|
147
|
+
|
|
148
|
+
return ImageResponse(created=int(time.time()), data=result_data)
|
|
149
|
+
|
|
150
|
+
except requests.RequestException as e:
|
|
151
|
+
raise RuntimeError(f"Failed to generate image with Infip API: {e}")
|
|
152
|
+
except Exception as e:
|
|
153
|
+
raise RuntimeError(f"Unexpected error during image generation: {e}")
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class InfipAI(TTICompatibleProvider):
|
|
157
|
+
"""
|
|
158
|
+
Infip AI provider for text-to-image generation.
|
|
159
|
+
|
|
160
|
+
This provider interfaces with the Infip API to generate images from text prompts.
|
|
161
|
+
It supports multiple models and aspect ratios for flexible image creation.
|
|
162
|
+
"""
|
|
163
|
+
|
|
164
|
+
AVAILABLE_MODELS = ["img3", "img4", "uncen"]
|
|
165
|
+
|
|
166
|
+
def __init__(self, **kwargs):
|
|
167
|
+
"""
|
|
168
|
+
Initialize the Infip AI provider.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
**kwargs: Additional configuration options
|
|
172
|
+
"""
|
|
173
|
+
self.api_endpoint = "https://api.infip.pro/generate"
|
|
174
|
+
self.session = requests.Session()
|
|
175
|
+
|
|
176
|
+
# Set up headers with user agent
|
|
177
|
+
agent = LitAgent()
|
|
178
|
+
self.headers = {
|
|
179
|
+
"accept": "application/json",
|
|
180
|
+
"Content-Type": "application/json",
|
|
181
|
+
"User-Agent": agent.random()
|
|
182
|
+
}
|
|
183
|
+
self.session.headers.update(self.headers)
|
|
184
|
+
|
|
185
|
+
# Initialize the images interface
|
|
186
|
+
self.images = Images(self)
|
|
187
|
+
|
|
188
|
+
@property
|
|
189
|
+
def models(self):
|
|
190
|
+
"""
|
|
191
|
+
Get available models for the provider.
|
|
192
|
+
|
|
193
|
+
Returns:
|
|
194
|
+
Object with list() method that returns available model names
|
|
195
|
+
"""
|
|
196
|
+
class ModelList:
|
|
197
|
+
def list(self):
|
|
198
|
+
return InfipAI.AVAILABLE_MODELS
|
|
199
|
+
|
|
200
|
+
return ModelList()
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
if __name__ == "__main__":
|
|
204
|
+
client = InfipAI()
|
|
205
|
+
response = client.images.create(
|
|
206
|
+
model="img3",
|
|
207
|
+
prompt="A beautiful sunset over mountains",
|
|
208
|
+
n=1,
|
|
209
|
+
aspect_ratio="IMAGE_ASPECT_RATIO_LANDSCAPE",
|
|
210
|
+
seed=42
|
|
211
|
+
)
|
|
212
212
|
print(response.data[0].url)
|