Webscout

Latest version: v2026.6.14

Safety actively analyzes 945810 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 7

2026.06.12

✨ Added
- **New Providers**:
- `ArtingAI` — port of arting.ai's public chat (`/api/aigc/comprehensive/chat/create-task`). No auth required; any UUID bearer is accepted. Supports `gpt-5`, `gpt-5.1`, `gpt-5.2`, `gpt-4o-mini`, `o4-mini`, `gemini-2.5-pro`.
- `AskaiFree` — port of askai.free's chat (`/api/chat/stream`). No auth; per-IP free credits. Schema uses the `modelName` field with display names (`"ChatGPT 4o"`, `"Claude Sonnet 4"`, etc.).
- `FreeAI` — port of free.ai's public OpenAI-compatible chat (`api.free.ai/v1/chat/`). No auth (any bearer accepted). Model `qwen7b`.
- `OllamaSwarm` — port of gpt4free's OllamaSwarm: 200+ public Ollama instances, parallel probe, per-day disk cache, TTFT-failover. Both normal and OpenAI-compatible variants.
- `OperaAria` — port of gpt4free's Opera Aria: anonymous 3-step OAuth, v1 (`aria-legacy`) and v2 (`aria`) endpoints, SSE streaming. Both normal and OpenAI-compatible variants.
- **Test Runner**: `tests/test_all_providers.py` — live provider test with `--only`, `--timeout`, `--prompt`, `--out`, `--include-auth` flags. No mocks; uses real HTTP against real endpoints.

🐛 Fixed
- **ExaAI** — dropped `decode_unicode=True` from `iter_lines()` to fix streaming parser.
- **HeckAI** — added `network`, `url`, `files` fields; dropped deprecated `imgUrls`/`superSmartMode`.
- **LLMChat** — moved endpoint to `https://coderelisher.com/ai/fetch?model=...`.
- **Apriel** — rewrote for Gradio 5 SSE v3 protocol.
- **CohereCommand** — rewrote for HuggingChat chat-ui v0.9.4.

🚚 Moved to UNFINISHED/
- Ayle, Elmo, Sonus, LLMChatCo, Meta — both normal and OpenAI-comp variants; their upstream endpoints are dead. Source preserved for future revival. Added `UNFINISHED/README.md` documenting why.

2026.04.07

🔧 Changed
- **Typing Improvements**: Comprehensive type annotation fixes across the codebase:
- Added `Dict[str, Any]` type annotations to payload dictionaries in OpenAI-compatible providers (TwoAI, Cerebras, DeepInfra, Groq, HuggingFace, NVIDIA, TogetherAI, SambaNova, Upstage)
- Fixed yield type annotations in `webscout/Provider/Auth/Upstage.py` for streaming responses
- Added proper type casts for proxy updates in `webscout/Extra/proxy_manager.py`
- Fixed type narrowing for dict responses in `webscout/Provider/Auth/Deepinfra.py`

🐛 Fixed
- **Test Conversions**: Converted mocked tests to real API tests:
- `tests/providers/test_openai.py` - Real OpenAI API tests
- `tests/providers/test_groq.py` - Real Groq API tests
- `tests/providers/test_huggingface.py` - Real HuggingFace API tests
- `tests/providers/test_gemini.py` - Real Gemini API tests
- Deleted `tests/providers/test_all_mocked.py` - No longer needed
- All real API tests use `pytest.mark.skipif` for environment variable checks
- **Type Checker**: Fixed `uvx ty check` errors:
- Fixed unused ` type: ignore` comments in `webscout/Bard.py`, `webscout/Provider/Auth/cerebras.py`, `webscout/Provider/Auth/Deepinfra.py`
- Changed ` type: ignore` to ` ty:ignore` for proper ty syntax
- Fixed payload type annotations to allow float values for `temperature` and `top_p` parameters
- **Provider Fixes**:
- Fixed trio import comments to use ` ty:ignore[unresolved-import]` syntax
- Fixed proxy type annotation issues with proper `cast()` usage
- **Test Infrastructure**: Fixed `tests/live_test.py` pytest collection error:
- Renamed test functions to `run_*` to avoid pytest collecting them as tests
- The file is a CLI tool, not a pytest test suite

🗑️ Removed
- **AvaSupernova Provider**: Removed non-functional provider (API returns 400 errors, service unavailable)
- Deleted `webscout/Provider/AvaSupernova.py`
- Deleted `webscout/Provider/Openai_comp/avasupernova.py`
- Deleted `tests/providers/test_avasupernova.py`
- Removed from `webscout/Provider/__init__.py` exports
- Removed from `webscout/Provider/Openai_comp/__init__.py` exports

📦 Dependencies
- **pyproject.toml**: Added missing dependencies:
- `typing_extensions>=4.0.0`
- `httpx`
- `tqdm`
- `packaging`
- `pytest-cov` (dev dependency with coverage configuration)

2026.04.03

🔧 Changed
- **Release Workflow**: Updated `publish-to-pypi.yml` for daily stable releases:
- Changed from beta (daily) + stable (Monday) to **daily stable releases**
- Schedule now runs every day at 00:00 UTC instead of just Mondays for stable
- Default release type changed from "beta" to "stable"
- Version format is now date-based (YYYY.MM.DD) without beta suffix
- Manual workflow dispatch now defaults to "stable" release type

🐛 Fixed
- **API Server**: Fixed provider initialization error in `webscout/server/providers.py`:
- Resolved `KeyError: 'webscout.Provider.Openai_comp'` on server startup
- Fixed module import order to ensure proper registration in `sys.modules`
- Applied same fix to TTI and TTS provider maps
- **Provider discovery flow**: removed implicit server provider fallbacks
- removed ChatGPT provider fallback from `initialize_provider_map()`
- removed PollinationsAI fallback from `initialize_tti_provider_map()`
- no fallback for missing TTS providers
- added strict `required_auth=False` filter for TTI and TTS providers
- **API Server**: Added missing TTS model/provider GET routes in `webscout/server/routes.py`:
- Added `GET /v1/TTS/models` to list available TTS models
- Added `GET /v1/TTS/providers` to list available TTS providers
- Now mirrors TTI route pattern for consistency

2026.04.01

✨ Added
- **OpenResearcher Provider**: Added new OpenResearcher provider for AI-powered research search:
- `webscout/Provider/AISEARCH/openresearcher.py` - AISearch-compatible interface for OpenResearcher
- Multi-round iterative research (search → open page → find → answer)
- Real-time streaming via Server-Sent Events
- Configurable max research rounds (default: 50)
- Built-in Serper API key (or custom key support)
- HTML-formatted results with citations and thought process
- Gradio API two-step flow (POST for event_id → GET SSE stream for result)
- No authentication required (public Hugging Face Space)
- Updated `webscout/Provider/AISEARCH/__init__.py` to export OpenResearcher
- Updated Provider.md documentation
- Full test coverage in `tests/providers/test_openresearcher.py`

- **XLNK TTS Provider**: Added new XLNK TTS provider for text-to-speech synthesis:
- `webscout/Provider/TTS/xlnk.py` - OpenAI TTS API-compatible interface for XLNK TTS
- 8 Kyutai voice presets: alba, marius, javert, jean, fantine, cosette, eponine, azelma
- Voice cloning support via uploaded audio
- Adjustable generation parameters: temperature, LSD decode steps, noise clamp, EOS threshold
- Gradio API two-step flow (POST for event_id → GET SSE stream for result)
- No authentication required (public Hugging Face Space)
- Updated `webscout/Provider/TTS/__init__.py` to export XLNKTTS
- Updated Provider.md documentation
- Full test coverage in `tests/providers/test_xlnk.py`

- **KittenTTS Provider**: Added new KittenTTS provider for text-to-speech synthesis:
- `webscout/Provider/TTS/kittentts.py` - OpenAI TTS API-compatible interface for KittenTTS
- 3 model sizes: Nano (15M), Micro (40M), Mini (80M)
- 8 voice presets: Bella, Jasper, Luna, Bruno, Rosie, Hugo, Kiki, Leo
- Adjustable speech speed (0.5x to 2.0x)
- Gradio API two-step flow (POST for event_id → GET SSE stream for result)
- No authentication required (public Hugging Face Space)
- Updated `webscout/Provider/TTS/__init__.py` to export KittenTTS
- Updated Provider.md documentation
- Full test coverage in `tests/providers/test_kittentts.py`

- **LuxTTS Provider**: Added new LuxTTS voice cloning provider for text-to-speech synthesis:
- `webscout/Provider/TTS/luxtts.py` - OpenAI TTS API-compatible interface for LuxTTS voice cloning
- Voice cloning from reference audio (preset voices or custom URLs)
- Adjustable speech parameters: speed, loudness (RMS), reference duration, T-shift, steps
- Gradio API two-step flow (POST for event_id → GET SSE stream for result)
- No authentication required (public Hugging Face Space)
- Updated `webscout/Provider/TTS/__init__.py` to export LuxTTS
- Updated Provider.md documentation
- Full test coverage in `tests/providers/test_luxtts.py`

2026.03.31

✨ Added
- **Server TTS endpoint**: Added OpenAI-compatible `/v1/audio/speech` endpoint to the FastAPI server:
- `webscout/server/request_models.py` - Added `SpeechGenerationRequest` model with OpenAI-compatible fields
- `webscout/server/providers.py` - Added TTS provider discovery, caching, and resolution functions
- `webscout/server/routes.py` - Added `_register_tts_routes()` with POST `/v1/audio/speech` endpoint
- `webscout/server/server.py` - Added TTS provider initialization on server startup
- `webscout/server/config.py` - Added `tts_provider_map` and `default_tts_provider` configuration
- Supports multiple audio formats: mp3, opus, aac, flac, wav, pcm
- Supports both file download and streaming responses
- Automatic TTS provider discovery and model resolution
- **Client audio speech interface**: Added `client.audio.speech.create(...)` in `webscout/client.py` for TTS-backed speech generation with provider discovery, caching, failover, and `last_provider` tracking.
- **Client docs refresh**: Rewrote `docs/client.md` into a shorter guide that still covers chat, image, and audio usage plus the updated helper methods.
- **Cohere STT Provider**: Added new Cohere Multilingual ASR provider for speech-to-text transcription:
- `webscout/Provider/STT/cohere.py` - OpenAI Whisper API-compatible interface for Cohere's multilingual ASR
- Supports 14 languages: English, French, German, Spanish, Portuguese, Italian, Dutch, Polish, Greek, Arabic, Japanese, Korean, Chinese, Vietnamese
- Implements Gradio API two-step flow (POST for event_id → GET SSE stream for result)
- Supports both streaming and non-streaming transcription modes
- Handles audio file uploads via multipart/form-data
- No authentication required (public Hugging Face Space)
- Updated `webscout/Provider/STT/__init__.py` to export CohereSTT
- Updated Provider.md documentation

- **Faster Qwen3-TTS Provider**: Added new Faster Qwen3-TTS provider for text-to-speech synthesis:
- `webscout/Provider/TTS/faster_qwen3.py` - OpenAI TTS API-compatible interface for Faster Qwen3-TTS
- Supports 5 model variants: Base (0.6B, 1.7B), CustomVoice (0.6B, 1.7B), VoiceDesign (1.7B)
- Three generation modes: voice cloning, custom voice, voice design
- Streaming (SSE) and non-streaming generation modes
- Preset reference voices and custom reference audio upload
- Audio transcription support via nano-parakeet
- 6 languages: English, Chinese, French, German, Spanish, Auto
- No authentication required (public Hugging Face Space)
- Updated `webscout/Provider/TTS/__init__.py` to export FasterQwen3TTS
- Updated Provider.md documentation

🔧 Fixed
- **Client type checking**: Fixed `Attribute content may be missing` type errors in `webscout/client.py`:
- Added `TypeGuard` import and updated `_is_valid_chat_completion` to use proper type narrowing
- Fixed `ChatCompletionChunk` cast issues for streaming responses
- All type checks now pass with `uvx ty check`
- **ParlerTTS, QwenTTS, SherpaTTS**: Fixed `startswith` bytes vs string bug in SSE stream parsing:
- Added `isinstance(line, bytes)` check before calling `startswith()`
- Properly decode bytes to UTF-8 string before string operations
- Fixed `FailedToGenerateResponseError: startswith first arg must be bytes or a tuple of bytes, not str`
- All three providers now successfully generate audio files
- **FreeTTS**: Fixed audio download to follow HTTP redirects:
- Added `allow_redirects=True` to the audio download request
- The FreeTTS API returns redirect URLs for audio files that were not being followed
- Provider now successfully downloads and saves audio files
- **PocketTTS**: Fixed test configuration to use valid voice name (`alba` instead of invalid voice)
- **FasterQwen3TTS**: Fixed model loading to handle `already_loaded` status from API
- **TTS Provider Tests**: Added comprehensive test suite for all TTS providers:
- `tests/providers/test_all_tts_providers.py` - Instantiation and attribute tests
- `tests/providers/test_tts_audio_generation.py` - Actual audio generation tests
- Results improved from 4/12 to 8/12 working providers (67%)

🗑️ Removed
- **SpeechMaTTS**: Removed non-functional provider (HTTP 403 errors, service no longer accessible)
- Deleted `webscout/Provider/TTS/speechma.py`
- Removed from `webscout/Provider/TTS/__init__.py` exports
- Updated Provider.md documentation

2026.02.23

✨ Added
- **Blackbox Provider**: Added new Blackbox AI provider in both standard and OpenAI-compatible formats:
- `webscout/Provider/blackbox.py` - Standard provider implementation with conversation support, streaming/non-streaming responses, and LitAgent fingerprinting
- `webscout/Provider/Openai_comp/blackbox.py` - OpenAI-compatible provider following the same pattern as Groq, Cerebras, and other OpenAI-compatible providers
- Supports models: `moonshotai/kimi-k2.5`, `custom/blackbox-base-2`, `minimax-m2`
- Uses Blackbox VSCode extension API endpoint with required headers (customerId, userId, version)
- Both providers support streaming responses with proper SSE parsing

🔧 Improved
- **lmarena.py (UNFINISHED)**: Fixed all ruff linting errors and improved type safety:
- Fixed 317+ ruff linting issues automatically (trailing whitespace, blank lines, f-string prefixes, etc.)
- Fixed duplicate dictionary keys in `_ARENA_HOST_TO_ORIGIN`
- Fixed bare `except` clause to `except Exception`
- Added pyright type suppression comments for external library type stub issues
- Added UNFINISHED directory to ty check exclusions in pyproject.toml
- All ruff checks now pass successfully

Page 1 of 7

© 2026 Safety CLI Cybersecurity Inc. All Rights Reserved.