lollms-client 1.3.3__py3-none-any.whl → 1.3.6__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 lollms-client might be problematic. Click here for more details.
- lollms_client/__init__.py +1 -1
- lollms_client/llm_bindings/llamacpp/__init__.py +354 -233
- lollms_client/llm_bindings/lollms/__init__.py +152 -153
- lollms_client/lollms_core.py +163 -75
- lollms_client/lollms_discussion.py +2 -2
- lollms_client/lollms_llm_binding.py +3 -3
- lollms_client/lollms_tts_binding.py +80 -67
- lollms_client/tts_bindings/bark/__init__.py +110 -329
- lollms_client/tts_bindings/bark/server/install_bark.py +64 -0
- lollms_client/tts_bindings/bark/server/main.py +311 -0
- lollms_client/tts_bindings/piper_tts/__init__.py +115 -335
- lollms_client/tts_bindings/piper_tts/server/install_piper.py +92 -0
- lollms_client/tts_bindings/piper_tts/server/main.py +425 -0
- lollms_client/tts_bindings/piper_tts/server/setup_voices.py +67 -0
- lollms_client/tts_bindings/xtts/__init__.py +99 -305
- lollms_client/tts_bindings/xtts/server/main.py +314 -0
- lollms_client/tts_bindings/xtts/server/setup_voices.py +67 -0
- {lollms_client-1.3.3.dist-info → lollms_client-1.3.6.dist-info}/METADATA +1 -1
- {lollms_client-1.3.3.dist-info → lollms_client-1.3.6.dist-info}/RECORD +22 -15
- {lollms_client-1.3.3.dist-info → lollms_client-1.3.6.dist-info}/WHEEL +0 -0
- {lollms_client-1.3.3.dist-info → lollms_client-1.3.6.dist-info}/licenses/LICENSE +0 -0
- {lollms_client-1.3.3.dist-info → lollms_client-1.3.6.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import uvicorn
|
|
2
|
+
from fastapi import FastAPI, APIRouter, HTTPException
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
import argparse
|
|
5
|
+
import sys
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
import asyncio
|
|
8
|
+
import traceback
|
|
9
|
+
import os
|
|
10
|
+
from typing import Optional, List
|
|
11
|
+
import io
|
|
12
|
+
import wave
|
|
13
|
+
import numpy as np
|
|
14
|
+
import tempfile
|
|
15
|
+
|
|
16
|
+
# --- XTTS Implementation ---
|
|
17
|
+
try:
|
|
18
|
+
print("Server: Loading XTTS dependencies...")
|
|
19
|
+
import torch
|
|
20
|
+
import torchaudio
|
|
21
|
+
from TTS.api import TTS
|
|
22
|
+
print("Server: XTTS dependencies loaded successfully")
|
|
23
|
+
|
|
24
|
+
# Check for CUDA availability
|
|
25
|
+
device = "cuda" if torch.cuda.is_available() else "cpu"
|
|
26
|
+
print(f"Server: Using device: {device}")
|
|
27
|
+
|
|
28
|
+
xtts_available = True
|
|
29
|
+
|
|
30
|
+
except Exception as e:
|
|
31
|
+
print(f"Server: Failed to load XTTS dependencies: {e}")
|
|
32
|
+
print(f"Server: Traceback:\n{traceback.format_exc()}")
|
|
33
|
+
xtts_available = False
|
|
34
|
+
|
|
35
|
+
# --- API Models ---
|
|
36
|
+
class GenerationRequest(BaseModel):
|
|
37
|
+
text: str
|
|
38
|
+
voice: Optional[str] = None
|
|
39
|
+
language: Optional[str] = "en"
|
|
40
|
+
speaker_wav: Optional[str] = None
|
|
41
|
+
|
|
42
|
+
class XTTSServer:
|
|
43
|
+
def __init__(self):
|
|
44
|
+
self.model = None
|
|
45
|
+
self.model_loaded = False
|
|
46
|
+
self.model_loading = False # Flag to prevent concurrent loading
|
|
47
|
+
self.available_voices = self._load_available_voices()
|
|
48
|
+
self.available_models = ["xtts_v2"]
|
|
49
|
+
|
|
50
|
+
# Don't initialize model here - do it lazily on first request
|
|
51
|
+
print("Server: XTTS server initialized (model will be loaded on first request)")
|
|
52
|
+
|
|
53
|
+
async def _ensure_model_loaded(self):
|
|
54
|
+
"""Ensure the XTTS model is loaded (lazy loading)"""
|
|
55
|
+
if self.model_loaded:
|
|
56
|
+
return
|
|
57
|
+
|
|
58
|
+
if self.model_loading:
|
|
59
|
+
# Another request is already loading the model, wait for it
|
|
60
|
+
while self.model_loading and not self.model_loaded:
|
|
61
|
+
await asyncio.sleep(0.1)
|
|
62
|
+
return
|
|
63
|
+
|
|
64
|
+
if not xtts_available:
|
|
65
|
+
raise RuntimeError("XTTS library not available")
|
|
66
|
+
|
|
67
|
+
try:
|
|
68
|
+
self.model_loading = True
|
|
69
|
+
print("Server: Loading XTTS model for the first time (this may take a few minutes)...")
|
|
70
|
+
|
|
71
|
+
# Initialize XTTS model
|
|
72
|
+
self.model = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device)
|
|
73
|
+
|
|
74
|
+
self.model_loaded = True
|
|
75
|
+
print("Server: XTTS model loaded successfully")
|
|
76
|
+
|
|
77
|
+
except Exception as e:
|
|
78
|
+
print(f"Server: Error loading XTTS model: {e}")
|
|
79
|
+
print(f"Server: Traceback:\n{traceback.format_exc()}")
|
|
80
|
+
self.model_loaded = False
|
|
81
|
+
raise
|
|
82
|
+
finally:
|
|
83
|
+
self.model_loading = False
|
|
84
|
+
|
|
85
|
+
def _load_available_voices(self) -> List[str]:
|
|
86
|
+
"""Load and return available voices"""
|
|
87
|
+
try:
|
|
88
|
+
# Look for voice files in voices directory
|
|
89
|
+
voices_dir = Path(__file__).parent / "voices"
|
|
90
|
+
voices = []
|
|
91
|
+
|
|
92
|
+
if voices_dir.exists():
|
|
93
|
+
# Look for WAV files in voices directory
|
|
94
|
+
for voice_file in voices_dir.glob("*.wav"):
|
|
95
|
+
voices.append(voice_file.stem)
|
|
96
|
+
|
|
97
|
+
# If no custom voices found, provide some default names
|
|
98
|
+
if not voices:
|
|
99
|
+
voices = ["default", "female", "male"]
|
|
100
|
+
|
|
101
|
+
return voices
|
|
102
|
+
|
|
103
|
+
except Exception as e:
|
|
104
|
+
print(f"Server: Error loading voices: {e}")
|
|
105
|
+
return ["default"]
|
|
106
|
+
|
|
107
|
+
async def generate_audio(self, text: str, voice: Optional[str] = None,
|
|
108
|
+
language: str = "en", speaker_wav: Optional[str] = None) -> bytes:
|
|
109
|
+
"""Generate audio from text using XTTS"""
|
|
110
|
+
# Ensure model is loaded before proceeding
|
|
111
|
+
await self._ensure_model_loaded()
|
|
112
|
+
|
|
113
|
+
if not self.model_loaded or self.model is None:
|
|
114
|
+
raise RuntimeError("XTTS model failed to load")
|
|
115
|
+
|
|
116
|
+
try:
|
|
117
|
+
print(f"Server: Generating audio for: '{text[:50]}{'...' if len(text) > 50 else ''}'")
|
|
118
|
+
print(f"Server: Using voice: {voice}, language: {language}")
|
|
119
|
+
|
|
120
|
+
# Handle voice/speaker selection
|
|
121
|
+
speaker_wav_path = None
|
|
122
|
+
|
|
123
|
+
# First priority: use provided speaker_wav parameter
|
|
124
|
+
if speaker_wav:
|
|
125
|
+
speaker_wav_path = speaker_wav
|
|
126
|
+
print(f"Server: Using provided speaker_wav: {speaker_wav_path}")
|
|
127
|
+
|
|
128
|
+
# Second priority: check if voice parameter is a file path
|
|
129
|
+
elif voice and voice != "default":
|
|
130
|
+
if os.path.exists(voice):
|
|
131
|
+
# Voice parameter is a full file path
|
|
132
|
+
speaker_wav_path = voice
|
|
133
|
+
print(f"Server: Using voice as file path: {speaker_wav_path}")
|
|
134
|
+
else:
|
|
135
|
+
# Look for voice file in voices directory
|
|
136
|
+
voices_dir = Path(__file__).parent / "voices"
|
|
137
|
+
potential_voice_path = voices_dir / f"{voice}.wav"
|
|
138
|
+
if potential_voice_path.exists():
|
|
139
|
+
speaker_wav_path = str(potential_voice_path)
|
|
140
|
+
print(f"Server: Using custom voice file: {speaker_wav_path}")
|
|
141
|
+
else:
|
|
142
|
+
print(f"Server: Voice '{voice}' not found in voices directory")
|
|
143
|
+
|
|
144
|
+
# Create a temporary file for output
|
|
145
|
+
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as temp_file:
|
|
146
|
+
temp_output_path = temp_file.name
|
|
147
|
+
|
|
148
|
+
try:
|
|
149
|
+
# Generate audio using XTTS
|
|
150
|
+
if speaker_wav_path and os.path.exists(speaker_wav_path):
|
|
151
|
+
print(f"Server: Generating with speaker reference: {speaker_wav_path}")
|
|
152
|
+
self.model.tts_to_file(
|
|
153
|
+
text=text,
|
|
154
|
+
speaker_wav=speaker_wav_path,
|
|
155
|
+
language=language,
|
|
156
|
+
file_path=temp_output_path
|
|
157
|
+
)
|
|
158
|
+
else:
|
|
159
|
+
print("Server: No valid speaker reference found, trying default")
|
|
160
|
+
# For XTTS without speaker reference, try to find a default
|
|
161
|
+
default_speaker = self._get_default_speaker_file()
|
|
162
|
+
if default_speaker and os.path.exists(default_speaker):
|
|
163
|
+
print(f"Server: Using default speaker: {default_speaker}")
|
|
164
|
+
self.model.tts_to_file(
|
|
165
|
+
text=text,
|
|
166
|
+
speaker_wav=default_speaker,
|
|
167
|
+
language=language,
|
|
168
|
+
file_path=temp_output_path
|
|
169
|
+
)
|
|
170
|
+
else:
|
|
171
|
+
# Create a more helpful error message
|
|
172
|
+
available_voices = self._get_all_available_voice_files()
|
|
173
|
+
error_msg = f"No speaker reference available. XTTS requires a speaker reference file.\n"
|
|
174
|
+
error_msg += f"Attempted to use: {speaker_wav_path if speaker_wav_path else 'None'}\n"
|
|
175
|
+
error_msg += f"Available voice files: {available_voices}"
|
|
176
|
+
raise RuntimeError(error_msg)
|
|
177
|
+
|
|
178
|
+
# Read the generated audio file
|
|
179
|
+
with open(temp_output_path, 'rb') as f:
|
|
180
|
+
audio_bytes = f.read()
|
|
181
|
+
|
|
182
|
+
print(f"Server: Generated {len(audio_bytes)} bytes of audio")
|
|
183
|
+
return audio_bytes
|
|
184
|
+
|
|
185
|
+
finally:
|
|
186
|
+
# Clean up temporary file
|
|
187
|
+
if os.path.exists(temp_output_path):
|
|
188
|
+
os.unlink(temp_output_path)
|
|
189
|
+
|
|
190
|
+
except Exception as e:
|
|
191
|
+
print(f"Server: Error generating audio: {e}")
|
|
192
|
+
print(f"Server: Traceback:\n{traceback.format_exc()}")
|
|
193
|
+
raise
|
|
194
|
+
|
|
195
|
+
def _get_all_available_voice_files(self) -> List[str]:
|
|
196
|
+
"""Get list of all available voice files for debugging"""
|
|
197
|
+
voices_dir = Path(__file__).parent / "voices"
|
|
198
|
+
voice_files = []
|
|
199
|
+
|
|
200
|
+
if voices_dir.exists():
|
|
201
|
+
voice_files = [str(f) for f in voices_dir.glob("*.wav")]
|
|
202
|
+
|
|
203
|
+
return voice_files
|
|
204
|
+
|
|
205
|
+
def _get_default_speaker_file(self) -> Optional[str]:
|
|
206
|
+
"""Get path to default speaker file"""
|
|
207
|
+
voices_dir = Path(__file__).parent / "voices"
|
|
208
|
+
|
|
209
|
+
# Look for a default speaker file
|
|
210
|
+
for filename in ["default.wav", "speaker.wav", "reference.wav"]:
|
|
211
|
+
potential_path = voices_dir / filename
|
|
212
|
+
if potential_path.exists():
|
|
213
|
+
return str(potential_path)
|
|
214
|
+
|
|
215
|
+
# If no default found, look for any wav file
|
|
216
|
+
wav_files = list(voices_dir.glob("*.wav"))
|
|
217
|
+
if wav_files:
|
|
218
|
+
return str(wav_files[0])
|
|
219
|
+
|
|
220
|
+
return None
|
|
221
|
+
|
|
222
|
+
def list_voices(self) -> List[str]:
|
|
223
|
+
"""Return list of available voices"""
|
|
224
|
+
return self.available_voices
|
|
225
|
+
|
|
226
|
+
def list_models(self) -> List[str]:
|
|
227
|
+
"""Return list of available models"""
|
|
228
|
+
return self.available_models
|
|
229
|
+
|
|
230
|
+
# --- Globals ---
|
|
231
|
+
app = FastAPI(title="XTTS Server")
|
|
232
|
+
router = APIRouter()
|
|
233
|
+
xtts_server = XTTSServer()
|
|
234
|
+
model_lock = asyncio.Lock() # Ensure thread-safe access
|
|
235
|
+
|
|
236
|
+
# --- API Endpoints ---
|
|
237
|
+
@router.post("/generate_audio")
|
|
238
|
+
async def generate_audio(request: GenerationRequest):
|
|
239
|
+
async with model_lock:
|
|
240
|
+
try:
|
|
241
|
+
audio_bytes = await xtts_server.generate_audio(
|
|
242
|
+
text=request.text,
|
|
243
|
+
voice=request.voice,
|
|
244
|
+
language=request.language,
|
|
245
|
+
speaker_wav=request.speaker_wav
|
|
246
|
+
)
|
|
247
|
+
from fastapi.responses import Response
|
|
248
|
+
return Response(content=audio_bytes, media_type="audio/wav")
|
|
249
|
+
except Exception as e:
|
|
250
|
+
print(f"Server: ERROR in generate_audio endpoint: {e}")
|
|
251
|
+
print(f"Server: ERROR traceback:\n{traceback.format_exc()}")
|
|
252
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
253
|
+
|
|
254
|
+
@router.get("/list_voices")
|
|
255
|
+
async def list_voices():
|
|
256
|
+
try:
|
|
257
|
+
voices = xtts_server.list_voices()
|
|
258
|
+
print(f"Server: Returning {len(voices)} voices: {voices}")
|
|
259
|
+
return {"voices": voices}
|
|
260
|
+
except Exception as e:
|
|
261
|
+
print(f"Server: ERROR in list_voices endpoint: {e}")
|
|
262
|
+
print(f"Server: ERROR traceback:\n{traceback.format_exc()}")
|
|
263
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
264
|
+
|
|
265
|
+
@router.get("/list_models")
|
|
266
|
+
async def list_models():
|
|
267
|
+
try:
|
|
268
|
+
models = xtts_server.list_models()
|
|
269
|
+
print(f"Server: Returning {len(models)} models: {models}")
|
|
270
|
+
return {"models": models}
|
|
271
|
+
except Exception as e:
|
|
272
|
+
print(f"Server: ERROR in list_models endpoint: {e}")
|
|
273
|
+
print(f"Server: ERROR traceback:\n{traceback.format_exc()}")
|
|
274
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
275
|
+
|
|
276
|
+
@router.get("/status")
|
|
277
|
+
async def status():
|
|
278
|
+
return {
|
|
279
|
+
"status": "running",
|
|
280
|
+
"xtts_available": xtts_available,
|
|
281
|
+
"model_loaded": xtts_server.model_loaded,
|
|
282
|
+
"model_loading": xtts_server.model_loading,
|
|
283
|
+
"voices_count": len(xtts_server.available_voices),
|
|
284
|
+
"device": torch.cuda.get_device_name(0) if torch.cuda.is_available() else "CPU"
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
# Add a health check endpoint that responds immediately
|
|
288
|
+
@router.get("/health")
|
|
289
|
+
async def health_check():
|
|
290
|
+
return {"status": "healthy", "ready": True}
|
|
291
|
+
|
|
292
|
+
app.include_router(router)
|
|
293
|
+
|
|
294
|
+
# --- Server Startup ---
|
|
295
|
+
if __name__ == '__main__':
|
|
296
|
+
parser = argparse.ArgumentParser(description="XTTS TTS Server")
|
|
297
|
+
parser.add_argument("--host", type=str, default="localhost", help="Host to bind the server to.")
|
|
298
|
+
parser.add_argument("--port", type=int, default="8081", help="Port to bind the server to.")
|
|
299
|
+
|
|
300
|
+
args = parser.parse_args()
|
|
301
|
+
|
|
302
|
+
print(f"Server: Starting XTTS server on {args.host}:{args.port}")
|
|
303
|
+
print(f"Server: XTTS available: {xtts_available}")
|
|
304
|
+
print(f"Server: Model will be loaded on first audio generation request")
|
|
305
|
+
print(f"Server: Available voices: {len(xtts_server.available_voices)}")
|
|
306
|
+
if xtts_available:
|
|
307
|
+
print(f"Server: Device: {torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'CPU'}")
|
|
308
|
+
|
|
309
|
+
# Create voices directory if it doesn't exist
|
|
310
|
+
voices_dir = Path(__file__).parent / "voices"
|
|
311
|
+
voices_dir.mkdir(exist_ok=True)
|
|
312
|
+
print(f"Server: Voices directory: {voices_dir}")
|
|
313
|
+
|
|
314
|
+
uvicorn.run(app, host=args.host, port=args.port)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# File: lollms_client/tts_bindings/xtts/server/setup_voices.py
|
|
2
|
+
#!/usr/bin/env python3
|
|
3
|
+
"""
|
|
4
|
+
Helper script to set up XTTS voices directory with sample speaker files
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
import urllib.request
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
def download_sample_voices():
|
|
12
|
+
"""Download some sample voice files for XTTS"""
|
|
13
|
+
|
|
14
|
+
voices_dir = Path(__file__).parent / "voices"
|
|
15
|
+
voices_dir.mkdir(exist_ok=True)
|
|
16
|
+
|
|
17
|
+
print(f"Setting up voices in: {voices_dir}")
|
|
18
|
+
|
|
19
|
+
# You can add URLs to sample speaker voice files here
|
|
20
|
+
# For now, let's create instructions for users
|
|
21
|
+
|
|
22
|
+
readme_content = """
|
|
23
|
+
# XTTS Voices Directory
|
|
24
|
+
|
|
25
|
+
Place your speaker reference WAV files in this directory.
|
|
26
|
+
|
|
27
|
+
## How to add voices:
|
|
28
|
+
|
|
29
|
+
1. Record or find WAV files of speakers you want to clone (5-30 seconds recommended)
|
|
30
|
+
2. Name them descriptively (e.g., "john.wav", "sarah.wav", "narrator.wav")
|
|
31
|
+
3. Place them in this directory
|
|
32
|
+
4. The voice name will be the filename without extension
|
|
33
|
+
|
|
34
|
+
## Requirements for voice files:
|
|
35
|
+
- WAV format
|
|
36
|
+
- 22050 Hz sample rate (recommended)
|
|
37
|
+
- Mono or stereo
|
|
38
|
+
- Good quality, clear speech
|
|
39
|
+
- 5-30 seconds duration
|
|
40
|
+
- Single speaker
|
|
41
|
+
|
|
42
|
+
## Example usage:
|
|
43
|
+
```python
|
|
44
|
+
# Use a custom voice file named "john.wav"
|
|
45
|
+
audio = tts.generate_audio("Hello world", voice="john")
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Getting sample voices:
|
|
49
|
+
You can:
|
|
50
|
+
1. Record your own voice
|
|
51
|
+
2. Use text-to-speech to create reference voices
|
|
52
|
+
3. Extract audio clips from videos/podcasts (respect copyright)
|
|
53
|
+
4. Use royalty-free voice samples
|
|
54
|
+
|
|
55
|
+
Note: XTTS works by cloning the voice characteristics from the reference file.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
readme_path = voices_dir / "README.md"
|
|
59
|
+
with open(readme_path, 'w') as f:
|
|
60
|
+
f.write(readme_content)
|
|
61
|
+
|
|
62
|
+
print("✓ Created voices directory and README")
|
|
63
|
+
print(f"📁 Add your WAV voice files to: {voices_dir}")
|
|
64
|
+
print("📖 See README.md for detailed instructions")
|
|
65
|
+
|
|
66
|
+
if __name__ == "__main__":
|
|
67
|
+
download_sample_voices()
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
lollms_client/__init__.py,sha256=
|
|
1
|
+
lollms_client/__init__.py,sha256=vs6k1HuwV6GatEagpCq1Ec9lapdK-1-Veoyhgvwwmac,1146
|
|
2
2
|
lollms_client/lollms_agentic.py,sha256=pQiMEuB_XkG29-SW6u4KTaMFPr6eKqacInggcCuCW3k,13914
|
|
3
3
|
lollms_client/lollms_config.py,sha256=goEseDwDxYJf3WkYJ4IrLXwg3Tfw73CXV2Avg45M_hE,21876
|
|
4
|
-
lollms_client/lollms_core.py,sha256=
|
|
5
|
-
lollms_client/lollms_discussion.py,sha256=
|
|
4
|
+
lollms_client/lollms_core.py,sha256=DYK4JLsPRltERfy7Oe10TtaYaR7REBrDSPUHk2xg6ow,180807
|
|
5
|
+
lollms_client/lollms_discussion.py,sha256=87BHKOqCslm8W1CKq_xwnoyvH6K3im5U8WFeiLTWseE,117600
|
|
6
6
|
lollms_client/lollms_js_analyzer.py,sha256=01zUvuO2F_lnUe_0NLxe1MF5aHE1hO8RZi48mNPv-aw,8361
|
|
7
|
-
lollms_client/lollms_llm_binding.py,sha256=
|
|
7
|
+
lollms_client/lollms_llm_binding.py,sha256=Dj1PI2bQBYv_JgPxCIaIC7DMUvWdFJGwXFdsP5hdGBg,25014
|
|
8
8
|
lollms_client/lollms_mcp_binding.py,sha256=psb27A23VFWDfZsR2WUbQXQxiZDW5yfOak6ZtbMfszI,10222
|
|
9
9
|
lollms_client/lollms_mcp_security.py,sha256=FhVTDhSBjksGEZnopVnjFmEF5dv7D8bBTqoaj4BiF0E,3562
|
|
10
10
|
lollms_client/lollms_personality.py,sha256=O-9nqZhazcITOkxjT24ENTxTmIoZLgqIsQ9WtWs0Id0,8719
|
|
@@ -12,7 +12,7 @@ lollms_client/lollms_python_analyzer.py,sha256=7gf1fdYgXCOkPUkBAPNmr6S-66hMH4_Ko
|
|
|
12
12
|
lollms_client/lollms_stt_binding.py,sha256=jAUhLouEhh2hmm1bK76ianfw_6B59EHfY3FmLv6DU-g,5111
|
|
13
13
|
lollms_client/lollms_tti_binding.py,sha256=B38nzBCSPV9jVRZa-x8W7l9nJEW0RyS1MMJoueb8kt0,8519
|
|
14
14
|
lollms_client/lollms_ttm_binding.py,sha256=FjVVSNXOZXK1qvcKEfxdiX6l2b4XdGOSNnZ0utAsbDg,4167
|
|
15
|
-
lollms_client/lollms_tts_binding.py,sha256=
|
|
15
|
+
lollms_client/lollms_tts_binding.py,sha256=4qw94lc9M8lsh2q1u3FF0RuxTY__kukYg266ai3or-Y,5126
|
|
16
16
|
lollms_client/lollms_ttv_binding.py,sha256=KkTaHLBhEEdt4sSVBlbwr5i_g_TlhcrwrT-7DjOsjWQ,4131
|
|
17
17
|
lollms_client/lollms_types.py,sha256=0iSH1QHRRD-ddBqoL9EEKJ8wWCuwDUlN_FrfbCdg7Lw,3522
|
|
18
18
|
lollms_client/lollms_utilities.py,sha256=3DAsII2X9uhRzRL-D0QlALcEdRg82y7OIL4yHVF32gY,19446
|
|
@@ -25,8 +25,8 @@ lollms_client/llm_bindings/grok/__init__.py,sha256=tVIIl2uXpBYD7ia3k8JqYM8uvAVYl
|
|
|
25
25
|
lollms_client/llm_bindings/groq/__init__.py,sha256=EGrMh9vuCoM4pskDw8ydfsAWYgEb423e9HBwqdO2JQc,12120
|
|
26
26
|
lollms_client/llm_bindings/hugging_face_inference_api/__init__.py,sha256=SFcj5XQTDmN9eR4of82IgQa9iRYZaGlF6rMlF5S5wWg,13938
|
|
27
27
|
lollms_client/llm_bindings/litellm/__init__.py,sha256=lRH4VfZMUG5JCCj6a7hk2PTfSyDowAu-ujLOM-XPl-8,12756
|
|
28
|
-
lollms_client/llm_bindings/llamacpp/__init__.py,sha256=
|
|
29
|
-
lollms_client/llm_bindings/lollms/__init__.py,sha256=
|
|
28
|
+
lollms_client/llm_bindings/llamacpp/__init__.py,sha256=llPF85AzYgMp7Cpo_4OvEHKlxIAgI6F95NB3SqskD9E,62480
|
|
29
|
+
lollms_client/llm_bindings/lollms/__init__.py,sha256=XFQKtTJnkW8OwF1IoyzHqAZ8JAJ0PnAUKDdeOLGcbrE,24310
|
|
30
30
|
lollms_client/llm_bindings/lollms_webui/__init__.py,sha256=iuDfhZZoLC-PDEPLHrcjk5-962S5c7OeCI7PMdJxI_A,17753
|
|
31
31
|
lollms_client/llm_bindings/mistral/__init__.py,sha256=cddz9xIj8NRFLKHe2JMxzstpUrNIu5s9juci3mhiHfo,14133
|
|
32
32
|
lollms_client/llm_bindings/ollama/__init__.py,sha256=a6cgzXPuo8ZLhIZHJFy8QF0n5ZTk0X4OC1JSyXG1enk,46013
|
|
@@ -58,14 +58,21 @@ lollms_client/ttm_bindings/audiocraft/__init__.py,sha256=a0k6wTrHth6GaVOiNnVboeF
|
|
|
58
58
|
lollms_client/ttm_bindings/bark/__init__.py,sha256=Pr3ou2a-7hNYDqbkxrAbghZpO5HvGUhz7e-7VGXIHHA,18976
|
|
59
59
|
lollms_client/ttm_bindings/lollms/__init__.py,sha256=DU3WLmJaWNM1NAMtJsnaFo4Y9wlfc675M8aUiaLnojA,3143
|
|
60
60
|
lollms_client/tts_bindings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
|
-
lollms_client/tts_bindings/bark/__init__.py,sha256=
|
|
61
|
+
lollms_client/tts_bindings/bark/__init__.py,sha256=Fqjz5r1aYwggbEfBSHyHB26V8OmbfUlxqH9a9i6HzfQ,4634
|
|
62
|
+
lollms_client/tts_bindings/bark/server/install_bark.py,sha256=y9VhplwOqPwCVx_ex2MzkkBKMaUtzwPiUKg93_1LJzo,2221
|
|
63
|
+
lollms_client/tts_bindings/bark/server/main.py,sha256=jUpjFzbndq4kl8KPykRHG0DdVhUjrAn2GOt6iMt-lIY,12922
|
|
62
64
|
lollms_client/tts_bindings/lollms/__init__.py,sha256=8x2_T9XscvISw2TiaLoFxvrS7TIsVLdqbwSc04cX-wc,7164
|
|
63
|
-
lollms_client/tts_bindings/piper_tts/__init__.py,sha256=
|
|
64
|
-
lollms_client/tts_bindings/
|
|
65
|
+
lollms_client/tts_bindings/piper_tts/__init__.py,sha256=FbMw_m2QOn2ny7r5El_s6jByS1dpiuUp7MADudl4VLQ,4855
|
|
66
|
+
lollms_client/tts_bindings/piper_tts/server/install_piper.py,sha256=g71Ne2T18wAytOPipfQ9DNeTAOD9PrII5qC-vr9DtLA,3256
|
|
67
|
+
lollms_client/tts_bindings/piper_tts/server/main.py,sha256=DMozfSR1aCbrlmOXltRFjtXhYhXajsGcNKQjsWgRwZk,17402
|
|
68
|
+
lollms_client/tts_bindings/piper_tts/server/setup_voices.py,sha256=UdHaPa5aNcw8dR-aRGkZr2OfSFFejH79lXgfwT0P3ss,1964
|
|
69
|
+
lollms_client/tts_bindings/xtts/__init__.py,sha256=i1bU6D7wDnWOSf7TRrw_bqeAF6Y8eFp-JIW8z_lWuQM,4211
|
|
70
|
+
lollms_client/tts_bindings/xtts/server/main.py,sha256=T-Kn5NM-u1FJMygeV8rOoZKlqnYHZM30TsnbyZNDzxo,12794
|
|
71
|
+
lollms_client/tts_bindings/xtts/server/setup_voices.py,sha256=UdHaPa5aNcw8dR-aRGkZr2OfSFFejH79lXgfwT0P3ss,1964
|
|
65
72
|
lollms_client/ttv_bindings/__init__.py,sha256=UZ8o2izQOJLQgtZ1D1cXoNST7rzqW22rL2Vufc7ddRc,3141
|
|
66
73
|
lollms_client/ttv_bindings/lollms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
67
|
-
lollms_client-1.3.
|
|
68
|
-
lollms_client-1.3.
|
|
69
|
-
lollms_client-1.3.
|
|
70
|
-
lollms_client-1.3.
|
|
71
|
-
lollms_client-1.3.
|
|
74
|
+
lollms_client-1.3.6.dist-info/licenses/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
|
|
75
|
+
lollms_client-1.3.6.dist-info/METADATA,sha256=AbV8G0ESFv2ksIY-hNuN7agyaP50R22Xnh1tL_S_wpU,58549
|
|
76
|
+
lollms_client-1.3.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
77
|
+
lollms_client-1.3.6.dist-info/top_level.txt,sha256=Bk_kz-ri6Arwsk7YG-T5VsRorV66uVhcHGvb_g2WqgE,14
|
|
78
|
+
lollms_client-1.3.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|