llm4free 2026.6.12__tar.gz

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.
Files changed (259) hide show
  1. llm4free-2026.6.12/CHANGELOG.md +1157 -0
  2. llm4free-2026.6.12/LEGAL_NOTICE.md +152 -0
  3. llm4free-2026.6.12/LICENSE +201 -0
  4. llm4free-2026.6.12/LICENSE.md +146 -0
  5. llm4free-2026.6.12/MANIFEST.in +13 -0
  6. llm4free-2026.6.12/PKG-INFO +604 -0
  7. llm4free-2026.6.12/README.md +528 -0
  8. llm4free-2026.6.12/llm4free/AISEARCH/BraveSearch.py +415 -0
  9. llm4free-2026.6.12/llm4free/AISEARCH/Perplexity.py +294 -0
  10. llm4free-2026.6.12/llm4free/AISEARCH/README.md +106 -0
  11. llm4free-2026.6.12/llm4free/AISEARCH/__init__.py +14 -0
  12. llm4free-2026.6.12/llm4free/AISEARCH/iask_search.py +357 -0
  13. llm4free-2026.6.12/llm4free/AISEARCH/monica_search.py +214 -0
  14. llm4free-2026.6.12/llm4free/AISEARCH/webpilotai_search.py +274 -0
  15. llm4free-2026.6.12/llm4free/AIbase.py +627 -0
  16. llm4free-2026.6.12/llm4free/AIutel.py +65 -0
  17. llm4free-2026.6.12/llm4free/Bard.py +1068 -0
  18. llm4free-2026.6.12/llm4free/Extra/GitToolkit/__init__.py +10 -0
  19. llm4free-2026.6.12/llm4free/Extra/GitToolkit/gitapi/__init__.py +20 -0
  20. llm4free-2026.6.12/llm4free/Extra/GitToolkit/gitapi/gist.py +142 -0
  21. llm4free-2026.6.12/llm4free/Extra/GitToolkit/gitapi/organization.py +91 -0
  22. llm4free-2026.6.12/llm4free/Extra/GitToolkit/gitapi/repository.py +308 -0
  23. llm4free-2026.6.12/llm4free/Extra/GitToolkit/gitapi/search.py +162 -0
  24. llm4free-2026.6.12/llm4free/Extra/GitToolkit/gitapi/trending.py +236 -0
  25. llm4free-2026.6.12/llm4free/Extra/GitToolkit/gitapi/user.py +128 -0
  26. llm4free-2026.6.12/llm4free/Extra/GitToolkit/gitapi/utils.py +82 -0
  27. llm4free-2026.6.12/llm4free/Extra/YTToolkit/README.md +443 -0
  28. llm4free-2026.6.12/llm4free/Extra/YTToolkit/YTdownloader.py +953 -0
  29. llm4free-2026.6.12/llm4free/Extra/YTToolkit/__init__.py +3 -0
  30. llm4free-2026.6.12/llm4free/Extra/YTToolkit/transcriber.py +595 -0
  31. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/README.md +230 -0
  32. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/__init__.py +22 -0
  33. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/captions.py +190 -0
  34. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/channel.py +302 -0
  35. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/errors.py +13 -0
  36. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/extras.py +178 -0
  37. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/hashtag.py +120 -0
  38. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/https.py +89 -0
  39. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/patterns.py +61 -0
  40. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/playlist.py +59 -0
  41. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/pool.py +8 -0
  42. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/query.py +143 -0
  43. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/shorts.py +122 -0
  44. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/stream.py +68 -0
  45. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/suggestions.py +97 -0
  46. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/utils.py +66 -0
  47. llm4free-2026.6.12/llm4free/Extra/YTToolkit/ytapi/video.py +403 -0
  48. llm4free-2026.6.12/llm4free/Extra/__init__.py +7 -0
  49. llm4free-2026.6.12/llm4free/Extra/gguf.py +1298 -0
  50. llm4free-2026.6.12/llm4free/Extra/proxy_manager.py +187 -0
  51. llm4free-2026.6.12/llm4free/Extra/tempmail/README.md +488 -0
  52. llm4free-2026.6.12/llm4free/Extra/tempmail/__init__.py +28 -0
  53. llm4free-2026.6.12/llm4free/Extra/tempmail/async_utils.py +143 -0
  54. llm4free-2026.6.12/llm4free/Extra/tempmail/base.py +172 -0
  55. llm4free-2026.6.12/llm4free/Extra/tempmail/cli.py +191 -0
  56. llm4free-2026.6.12/llm4free/Extra/tempmail/emailnator.py +88 -0
  57. llm4free-2026.6.12/llm4free/Extra/tempmail/mail_tm.py +378 -0
  58. llm4free-2026.6.12/llm4free/Extra/tempmail/temp_mail_io.py +304 -0
  59. llm4free-2026.6.12/llm4free/Extra/weather.py +196 -0
  60. llm4free-2026.6.12/llm4free/Extra/weather_ascii.py +78 -0
  61. llm4free-2026.6.12/llm4free/STT/__init__.py +30 -0
  62. llm4free-2026.6.12/llm4free/STT/base.py +303 -0
  63. llm4free-2026.6.12/llm4free/STT/cohere.py +375 -0
  64. llm4free-2026.6.12/llm4free/STT/elevenlabs.py +264 -0
  65. llm4free-2026.6.12/llm4free/TTI/README.md +132 -0
  66. llm4free-2026.6.12/llm4free/TTI/__init__.py +41 -0
  67. llm4free-2026.6.12/llm4free/TTI/base.py +147 -0
  68. llm4free-2026.6.12/llm4free/TTI/bingimage.py +379 -0
  69. llm4free-2026.6.12/llm4free/TTI/image_hosting.py +191 -0
  70. llm4free-2026.6.12/llm4free/TTI/magichour.py +304 -0
  71. llm4free-2026.6.12/llm4free/TTI/magicstudio.py +211 -0
  72. llm4free-2026.6.12/llm4free/TTI/miragic.py +180 -0
  73. llm4free-2026.6.12/llm4free/TTI/pollinations.py +248 -0
  74. llm4free-2026.6.12/llm4free/TTI/together.py +313 -0
  75. llm4free-2026.6.12/llm4free/TTI/utils.py +14 -0
  76. llm4free-2026.6.12/llm4free/TTI/visualgpt.py +319 -0
  77. llm4free-2026.6.12/llm4free/TTS/README.md +183 -0
  78. llm4free-2026.6.12/llm4free/TTS/__init__.py +51 -0
  79. llm4free-2026.6.12/llm4free/TTS/base.py +523 -0
  80. llm4free-2026.6.12/llm4free/TTS/deepgram.py +292 -0
  81. llm4free-2026.6.12/llm4free/TTS/elevenlabs.py +206 -0
  82. llm4free-2026.6.12/llm4free/TTS/faster_qwen3.py +456 -0
  83. llm4free-2026.6.12/llm4free/TTS/kittentts.py +354 -0
  84. llm4free-2026.6.12/llm4free/TTS/luxtts.py +378 -0
  85. llm4free-2026.6.12/llm4free/TTS/murfai.py +290 -0
  86. llm4free-2026.6.12/llm4free/TTS/openai_fm.py +354 -0
  87. llm4free-2026.6.12/llm4free/TTS/parler.py +205 -0
  88. llm4free-2026.6.12/llm4free/TTS/pockettts.py +419 -0
  89. llm4free-2026.6.12/llm4free/TTS/qwen.py +336 -0
  90. llm4free-2026.6.12/llm4free/TTS/sherpa.py +288 -0
  91. llm4free-2026.6.12/llm4free/TTS/streamElements.py +395 -0
  92. llm4free-2026.6.12/llm4free/TTS/ttsai.py +339 -0
  93. llm4free-2026.6.12/llm4free/TTS/utils.py +280 -0
  94. llm4free-2026.6.12/llm4free/TTS/xlnk.py +359 -0
  95. llm4free-2026.6.12/llm4free/__init__.py +31 -0
  96. llm4free-2026.6.12/llm4free/__main__.py +5 -0
  97. llm4free-2026.6.12/llm4free/cli.py +589 -0
  98. llm4free-2026.6.12/llm4free/client.py +1566 -0
  99. llm4free-2026.6.12/llm4free/exceptions.py +383 -0
  100. llm4free-2026.6.12/llm4free/litagent/__init__.py +29 -0
  101. llm4free-2026.6.12/llm4free/litagent/agent.py +492 -0
  102. llm4free-2026.6.12/llm4free/litagent/constants.py +61 -0
  103. llm4free-2026.6.12/llm4free/llm/Auth/DeepAI.py +517 -0
  104. llm4free-2026.6.12/llm4free/llm/Auth/TogetherAI.py +399 -0
  105. llm4free-2026.6.12/llm4free/llm/Auth/TwoAI.py +255 -0
  106. llm4free-2026.6.12/llm4free/llm/Auth/__init__.py +31 -0
  107. llm4free-2026.6.12/llm4free/llm/Auth/cerebras.py +299 -0
  108. llm4free-2026.6.12/llm4free/llm/Auth/deepinfra.py +333 -0
  109. llm4free-2026.6.12/llm4free/llm/Auth/groq.py +380 -0
  110. llm4free-2026.6.12/llm4free/llm/Auth/huggingface.py +320 -0
  111. llm4free-2026.6.12/llm4free/llm/Auth/nvidia.py +317 -0
  112. llm4free-2026.6.12/llm4free/llm/Auth/openrouter.py +327 -0
  113. llm4free-2026.6.12/llm4free/llm/Auth/sambanova.py +394 -0
  114. llm4free-2026.6.12/llm4free/llm/Auth/textpollinations.py +397 -0
  115. llm4free-2026.6.12/llm4free/llm/Auth/upstage.py +467 -0
  116. llm4free-2026.6.12/llm4free/llm/Auth/zenmux.py +380 -0
  117. llm4free-2026.6.12/llm4free/llm/OllamaSwarm.py +669 -0
  118. llm4free-2026.6.12/llm4free/llm/OperaAria.py +639 -0
  119. llm4free-2026.6.12/llm4free/llm/PI.py +463 -0
  120. llm4free-2026.6.12/llm4free/llm/README.md +841 -0
  121. llm4free-2026.6.12/llm4free/llm/__init__.py +145 -0
  122. llm4free-2026.6.12/llm4free/llm/ai4chat.py +736 -0
  123. llm4free-2026.6.12/llm4free/llm/akashgpt.py +431 -0
  124. llm4free-2026.6.12/llm4free/llm/apriel.py +297 -0
  125. llm4free-2026.6.12/llm4free/llm/artingai.py +253 -0
  126. llm4free-2026.6.12/llm4free/llm/base.py +322 -0
  127. llm4free-2026.6.12/llm4free/llm/chatgpt.py +870 -0
  128. llm4free-2026.6.12/llm4free/llm/e2b.py +2367 -0
  129. llm4free-2026.6.12/llm4free/llm/essentialai.py +239 -0
  130. llm4free-2026.6.12/llm4free/llm/exaai.py +456 -0
  131. llm4free-2026.6.12/llm4free/llm/freeai.py +278 -0
  132. llm4free-2026.6.12/llm4free/llm/freeassist.py +378 -0
  133. llm4free-2026.6.12/llm4free/llm/gptfree.py +433 -0
  134. llm4free-2026.6.12/llm4free/llm/heckai.py +289 -0
  135. llm4free-2026.6.12/llm4free/llm/ibm.py +425 -0
  136. llm4free-2026.6.12/llm4free/llm/k2think.py +317 -0
  137. llm4free-2026.6.12/llm4free/llm/llmchat.py +282 -0
  138. llm4free-2026.6.12/llm4free/llm/netwrck.py +397 -0
  139. llm4free-2026.6.12/llm4free/llm/pydantic_imports.py +1 -0
  140. llm4free-2026.6.12/llm4free/llm/toolbaz.py +397 -0
  141. llm4free-2026.6.12/llm4free/llm/turboseek.py +248 -0
  142. llm4free-2026.6.12/llm4free/llm/typliai.py +374 -0
  143. llm4free-2026.6.12/llm4free/llm/utils.py +383 -0
  144. llm4free-2026.6.12/llm4free/llm/wisecat.py +361 -0
  145. llm4free-2026.6.12/llm4free/llm/writecream.py +185 -0
  146. llm4free-2026.6.12/llm4free/model_fetcher.py +299 -0
  147. llm4free-2026.6.12/llm4free/models.py +515 -0
  148. llm4free-2026.6.12/llm4free/prompt_manager.py +364 -0
  149. llm4free-2026.6.12/llm4free/sanitize.py +1514 -0
  150. llm4free-2026.6.12/llm4free/scout/README.md +451 -0
  151. llm4free-2026.6.12/llm4free/scout/__init__.py +8 -0
  152. llm4free-2026.6.12/llm4free/scout/core/__init__.py +7 -0
  153. llm4free-2026.6.12/llm4free/scout/core/crawler.py +346 -0
  154. llm4free-2026.6.12/llm4free/scout/core/scout.py +800 -0
  155. llm4free-2026.6.12/llm4free/scout/core/search_result.py +51 -0
  156. llm4free-2026.6.12/llm4free/scout/core/text_analyzer.py +64 -0
  157. llm4free-2026.6.12/llm4free/scout/core/text_utils.py +412 -0
  158. llm4free-2026.6.12/llm4free/scout/core/web_analyzer.py +54 -0
  159. llm4free-2026.6.12/llm4free/scout/element.py +872 -0
  160. llm4free-2026.6.12/llm4free/scout/parsers/__init__.py +70 -0
  161. llm4free-2026.6.12/llm4free/scout/parsers/html5lib_parser.py +183 -0
  162. llm4free-2026.6.12/llm4free/scout/parsers/html_parser.py +238 -0
  163. llm4free-2026.6.12/llm4free/scout/parsers/lxml_parser.py +203 -0
  164. llm4free-2026.6.12/llm4free/scout/utils.py +38 -0
  165. llm4free-2026.6.12/llm4free/search/__init__.py +49 -0
  166. llm4free-2026.6.12/llm4free/search/base.py +222 -0
  167. llm4free-2026.6.12/llm4free/search/bing_main.py +45 -0
  168. llm4free-2026.6.12/llm4free/search/brave_main.py +92 -0
  169. llm4free-2026.6.12/llm4free/search/duckduckgo_main.py +57 -0
  170. llm4free-2026.6.12/llm4free/search/engines/__init__.py +130 -0
  171. llm4free-2026.6.12/llm4free/search/engines/bing/__init__.py +15 -0
  172. llm4free-2026.6.12/llm4free/search/engines/bing/base.py +35 -0
  173. llm4free-2026.6.12/llm4free/search/engines/bing/images.py +114 -0
  174. llm4free-2026.6.12/llm4free/search/engines/bing/news.py +96 -0
  175. llm4free-2026.6.12/llm4free/search/engines/bing/suggestions.py +36 -0
  176. llm4free-2026.6.12/llm4free/search/engines/bing/text.py +152 -0
  177. llm4free-2026.6.12/llm4free/search/engines/brave/__init__.py +19 -0
  178. llm4free-2026.6.12/llm4free/search/engines/brave/base.py +47 -0
  179. llm4free-2026.6.12/llm4free/search/engines/brave/images.py +213 -0
  180. llm4free-2026.6.12/llm4free/search/engines/brave/news.py +353 -0
  181. llm4free-2026.6.12/llm4free/search/engines/brave/suggestions.py +318 -0
  182. llm4free-2026.6.12/llm4free/search/engines/brave/text.py +189 -0
  183. llm4free-2026.6.12/llm4free/search/engines/brave/videos.py +364 -0
  184. llm4free-2026.6.12/llm4free/search/engines/dogpile.py +159 -0
  185. llm4free-2026.6.12/llm4free/search/engines/duckduckgo/__init__.py +25 -0
  186. llm4free-2026.6.12/llm4free/search/engines/duckduckgo/answers.py +82 -0
  187. llm4free-2026.6.12/llm4free/search/engines/duckduckgo/base.py +184 -0
  188. llm4free-2026.6.12/llm4free/search/engines/duckduckgo/images.py +100 -0
  189. llm4free-2026.6.12/llm4free/search/engines/duckduckgo/maps.py +183 -0
  190. llm4free-2026.6.12/llm4free/search/engines/duckduckgo/news.py +70 -0
  191. llm4free-2026.6.12/llm4free/search/engines/duckduckgo/suggestions.py +22 -0
  192. llm4free-2026.6.12/llm4free/search/engines/duckduckgo/text.py +221 -0
  193. llm4free-2026.6.12/llm4free/search/engines/duckduckgo/translate.py +48 -0
  194. llm4free-2026.6.12/llm4free/search/engines/duckduckgo/videos.py +80 -0
  195. llm4free-2026.6.12/llm4free/search/engines/duckduckgo/weather.py +84 -0
  196. llm4free-2026.6.12/llm4free/search/engines/mojeek.py +61 -0
  197. llm4free-2026.6.12/llm4free/search/engines/wikipedia.py +77 -0
  198. llm4free-2026.6.12/llm4free/search/engines/yahoo/__init__.py +41 -0
  199. llm4free-2026.6.12/llm4free/search/engines/yahoo/answers.py +19 -0
  200. llm4free-2026.6.12/llm4free/search/engines/yahoo/base.py +34 -0
  201. llm4free-2026.6.12/llm4free/search/engines/yahoo/images.py +321 -0
  202. llm4free-2026.6.12/llm4free/search/engines/yahoo/maps.py +19 -0
  203. llm4free-2026.6.12/llm4free/search/engines/yahoo/news.py +257 -0
  204. llm4free-2026.6.12/llm4free/search/engines/yahoo/suggestions.py +140 -0
  205. llm4free-2026.6.12/llm4free/search/engines/yahoo/text.py +273 -0
  206. llm4free-2026.6.12/llm4free/search/engines/yahoo/translate.py +19 -0
  207. llm4free-2026.6.12/llm4free/search/engines/yahoo/videos.py +301 -0
  208. llm4free-2026.6.12/llm4free/search/engines/yahoo/weather.py +214 -0
  209. llm4free-2026.6.12/llm4free/search/engines/yandex.py +67 -0
  210. llm4free-2026.6.12/llm4free/search/engines/yep/__init__.py +13 -0
  211. llm4free-2026.6.12/llm4free/search/engines/yep/base.py +84 -0
  212. llm4free-2026.6.12/llm4free/search/engines/yep/images.py +101 -0
  213. llm4free-2026.6.12/llm4free/search/engines/yep/suggestions.py +71 -0
  214. llm4free-2026.6.12/llm4free/search/engines/yep/text.py +102 -0
  215. llm4free-2026.6.12/llm4free/search/http_client.py +167 -0
  216. llm4free-2026.6.12/llm4free/search/results.py +158 -0
  217. llm4free-2026.6.12/llm4free/search/yahoo_main.py +119 -0
  218. llm4free-2026.6.12/llm4free/search/yep_main.py +55 -0
  219. llm4free-2026.6.12/llm4free/server/__init__.py +48 -0
  220. llm4free-2026.6.12/llm4free/server/config.py +80 -0
  221. llm4free-2026.6.12/llm4free/server/exceptions.py +69 -0
  222. llm4free-2026.6.12/llm4free/server/providers.py +387 -0
  223. llm4free-2026.6.12/llm4free/server/request_models.py +162 -0
  224. llm4free-2026.6.12/llm4free/server/request_processing.py +449 -0
  225. llm4free-2026.6.12/llm4free/server/routes.py +850 -0
  226. llm4free-2026.6.12/llm4free/server/server.py +366 -0
  227. llm4free-2026.6.12/llm4free/server/ui_templates.py +1171 -0
  228. llm4free-2026.6.12/llm4free/swiftcli/__init__.py +79 -0
  229. llm4free-2026.6.12/llm4free/swiftcli/core/__init__.py +7 -0
  230. llm4free-2026.6.12/llm4free/swiftcli/core/cli.py +574 -0
  231. llm4free-2026.6.12/llm4free/swiftcli/core/context.py +98 -0
  232. llm4free-2026.6.12/llm4free/swiftcli/core/group.py +268 -0
  233. llm4free-2026.6.12/llm4free/swiftcli/decorators/__init__.py +28 -0
  234. llm4free-2026.6.12/llm4free/swiftcli/decorators/command.py +243 -0
  235. llm4free-2026.6.12/llm4free/swiftcli/decorators/options.py +247 -0
  236. llm4free-2026.6.12/llm4free/swiftcli/decorators/output.py +392 -0
  237. llm4free-2026.6.12/llm4free/swiftcli/exceptions.py +21 -0
  238. llm4free-2026.6.12/llm4free/swiftcli/plugins/__init__.py +9 -0
  239. llm4free-2026.6.12/llm4free/swiftcli/plugins/base.py +134 -0
  240. llm4free-2026.6.12/llm4free/swiftcli/plugins/manager.py +269 -0
  241. llm4free-2026.6.12/llm4free/swiftcli/utils/__init__.py +58 -0
  242. llm4free-2026.6.12/llm4free/swiftcli/utils/formatting.py +251 -0
  243. llm4free-2026.6.12/llm4free/swiftcli/utils/parsing.py +368 -0
  244. llm4free-2026.6.12/llm4free/update_checker.py +280 -0
  245. llm4free-2026.6.12/llm4free/utils.py +100 -0
  246. llm4free-2026.6.12/llm4free/version.py +3 -0
  247. llm4free-2026.6.12/llm4free/zeroart/__init__.py +218 -0
  248. llm4free-2026.6.12/llm4free/zeroart/base.py +70 -0
  249. llm4free-2026.6.12/llm4free/zeroart/effects.py +155 -0
  250. llm4free-2026.6.12/llm4free/zeroart/fonts.py +1799 -0
  251. llm4free-2026.6.12/llm4free.egg-info/PKG-INFO +604 -0
  252. llm4free-2026.6.12/llm4free.egg-info/SOURCES.txt +500 -0
  253. llm4free-2026.6.12/llm4free.egg-info/dependency_links.txt +1 -0
  254. llm4free-2026.6.12/llm4free.egg-info/entry_points.txt +5 -0
  255. llm4free-2026.6.12/llm4free.egg-info/requires.txt +40 -0
  256. llm4free-2026.6.12/llm4free.egg-info/top_level.txt +1 -0
  257. llm4free-2026.6.12/pyproject.toml +156 -0
  258. llm4free-2026.6.12/setup.cfg +4 -0
  259. llm4free-2026.6.12/tests/test_all_providers.py +459 -0
@@ -0,0 +1,1157 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [2026.06.18] - 2026-06-18
6
+
7
+ ### โœจ Added
8
+ - **ArtingAI** โ€” Added 3 new models discovered by reverse-engineering site JS: `gemini-3-pro-preview`, `deepseek-chat` (DeepSeek R1), `deepseek-reasoner` (DeepSeek V3). All 9 models verified working.
9
+ - **GptFree** โ€” New OpenAI-compatible provider converted from gpt4free (`g4f/Provider/GptFree.py`). Uses Firebase anonymous auth + Cloud Functions streaming endpoint (`gptfree-2.cloudfunctions.net/agent_stream`). Supports message history, multimodal image inputs, and SSE streaming.
10
+ - `docs/Prompts/` โ€” New prompt collection directory.
11
+
12
+ ### ๐Ÿ› Fixed
13
+ - **Apriel** โ€” Rewrote SSE parser for Gradio 5.x SSE v3 differential update protocol. Streaming tokens are now delivered as `["append", [msg_idx, "content"], "text"]` operations; previously only the initial full-message-list format was handled, causing empty responses.
14
+ - **FreeAssist** โ€” Removed `decode_unicode=True` from `curl_cffi` `iter_lines()` (raises `NotImplementedError`); deduplicated streaming logic (`_create_non_stream` now consumes `_create_stream` generator); fixed `proxies` type mismatch with `cast(Any, proxies)`.
15
+ - **LLMChat** โ€” Changed API endpoint from dead `https://coderelisher.com/ai/fetch` to `https://llmchat.in/inference/stream`; added dual response format parsing (OpenAI-compatible delta vs. `{"response":"..."}` for Deepseek R1); forwarded `temperature`/`top_p` to payload.
16
+ - **AI4Chat** โ€” Updated model list from 178 to 277 entries based on `data-name` attributes scraped from `https://www.ai4chat.co/models`. All existing keys preserved, 99 new models appended.
17
+
18
+ ### ๐Ÿ—‘๏ธ Removed
19
+ - **Elmo** โ€” Deleted dead provider (file removed).
20
+ - **Ayle** โ€” Deleted dead provider (file removed).
21
+ - **Jadve** โ€” Deleted dead provider (file removed).
22
+ - **LLMChatCo** โ€” Deleted dead provider (file removed).
23
+ - **Provider.md** โ€” Deleted stale documentation file.
24
+ - **docs/compose/plans/2026-06-18-rename-webscout-to-llm4free.md** โ€” Deleted old plan document.
25
+ - **optimizers.py** โ€” Deleted stale module.
26
+ - **conversation.py** โ€” Deleted stale module.
27
+ - **AIauto.py** โ€” Deleted stale module.
28
+
29
+ ## [2026.06.12] - 2026-06-12
30
+
31
+ ### โœจ Added
32
+ - **New Providers**:
33
+ - `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`.
34
+ - `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.).
35
+ - `FreeAI` โ€” port of free.ai's public OpenAI-compatible chat (`api.free.ai/v1/chat/`). No auth (any bearer accepted). Model `qwen7b`.
36
+ - `OllamaSwarm` โ€” port of gpt4free's OllamaSwarm: 200+ public Ollama instances, parallel probe, per-day disk cache, TTFT-failover. Both normal and OpenAI-compatible variants.
37
+ - `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.
38
+ - **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.
39
+
40
+ ### ๐Ÿ› Fixed
41
+ - **ExaAI** โ€” dropped `decode_unicode=True` from `iter_lines()` to fix streaming parser.
42
+ - **HeckAI** โ€” added `network`, `url`, `files` fields; dropped deprecated `imgUrls`/`superSmartMode`.
43
+ - **LLMChat** โ€” moved endpoint to `https://coderelisher.com/ai/fetch?model=...`.
44
+ - **Apriel** โ€” rewrote for Gradio 5 SSE v3 protocol.
45
+ - **CohereCommand** โ€” rewrote for HuggingChat chat-ui v0.9.4.
46
+
47
+ ### ๐Ÿšš Moved to UNFINISHED/
48
+ - 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.
49
+
50
+ ## [2026.04.07] - 2026-04-07
51
+
52
+ ### ๐Ÿ”ง Changed
53
+ - **Typing Improvements**: Comprehensive type annotation fixes across the codebase:
54
+ - Added `Dict[str, Any]` type annotations to payload dictionaries in OpenAI-compatible providers (TwoAI, Cerebras, DeepInfra, Groq, HuggingFace, NVIDIA, TogetherAI, SambaNova, Upstage)
55
+ - Fixed yield type annotations in `llm4free/Provider/Auth/Upstage.py` for streaming responses
56
+ - Added proper type casts for proxy updates in `llm4free/Extra/proxy_manager.py`
57
+ - Fixed type narrowing for dict responses in `llm4free/Provider/Auth/Deepinfra.py`
58
+
59
+ ### ๐Ÿ› Fixed
60
+ - **Test Conversions**: Converted mocked tests to real API tests:
61
+ - `tests/providers/test_openai.py` - Real OpenAI API tests
62
+ - `tests/providers/test_groq.py` - Real Groq API tests
63
+ - `tests/providers/test_huggingface.py` - Real HuggingFace API tests
64
+ - `tests/providers/test_gemini.py` - Real Gemini API tests
65
+ - Deleted `tests/providers/test_all_mocked.py` - No longer needed
66
+ - All real API tests use `pytest.mark.skipif` for environment variable checks
67
+ - **Type Checker**: Fixed `uvx ty check` errors:
68
+ - Fixed unused `# type: ignore` comments in `llm4free/Bard.py`, `llm4free/Provider/Auth/cerebras.py`, `llm4free/Provider/Auth/Deepinfra.py`
69
+ - Changed `# type: ignore` to `# ty:ignore` for proper ty syntax
70
+ - Fixed payload type annotations to allow float values for `temperature` and `top_p` parameters
71
+ - **Provider Fixes**:
72
+ - Fixed trio import comments to use `# ty:ignore[unresolved-import]` syntax
73
+ - Fixed proxy type annotation issues with proper `cast()` usage
74
+ - **Test Infrastructure**: Fixed `tests/live_test.py` pytest collection error:
75
+ - Renamed test functions to `run_*` to avoid pytest collecting them as tests
76
+ - The file is a CLI tool, not a pytest test suite
77
+
78
+ ### ๐Ÿ—‘๏ธ Removed
79
+ - **AvaSupernova Provider**: Removed non-functional provider (API returns 400 errors, service unavailable)
80
+ - Deleted `llm4free/Provider/AvaSupernova.py`
81
+ - Deleted `llm4free/Provider/Openai_comp/avasupernova.py`
82
+ - Deleted `tests/providers/test_avasupernova.py`
83
+ - Removed from `llm4free/Provider/__init__.py` exports
84
+ - Removed from `llm4free/Provider/Openai_comp/__init__.py` exports
85
+
86
+ ### ๐Ÿ“ฆ Dependencies
87
+ - **pyproject.toml**: Added missing dependencies:
88
+ - `typing_extensions>=4.0.0`
89
+ - `httpx`
90
+ - `tqdm`
91
+ - `packaging`
92
+ - `pytest-cov` (dev dependency with coverage configuration)
93
+
94
+ ## [2026.04.03] - 2026-04-03
95
+
96
+ ### ๐Ÿ”ง Changed
97
+ - **Release Workflow**: Updated `publish-to-pypi.yml` for daily stable releases:
98
+ - Changed from beta (daily) + stable (Monday) to **daily stable releases**
99
+ - Schedule now runs every day at 00:00 UTC instead of just Mondays for stable
100
+ - Default release type changed from "beta" to "stable"
101
+ - Version format is now date-based (YYYY.MM.DD) without beta suffix
102
+ - Manual workflow dispatch now defaults to "stable" release type
103
+
104
+ ### ๐Ÿ› Fixed
105
+ - **API Server**: Fixed provider initialization error in `llm4free/server/providers.py`:
106
+ - Resolved `KeyError: 'llm4free.Provider.Openai_comp'` on server startup
107
+ - Fixed module import order to ensure proper registration in `sys.modules`
108
+ - Applied same fix to TTI and TTS provider maps
109
+ - **Provider discovery flow**: removed implicit server provider fallbacks
110
+ - removed ChatGPT provider fallback from `initialize_provider_map()`
111
+ - removed PollinationsAI fallback from `initialize_tti_provider_map()`
112
+ - no fallback for missing TTS providers
113
+ - added strict `required_auth=False` filter for TTI and TTS providers
114
+ - **API Server**: Added missing TTS model/provider GET routes in `llm4free/server/routes.py`:
115
+ - Added `GET /v1/TTS/models` to list available TTS models
116
+ - Added `GET /v1/TTS/providers` to list available TTS providers
117
+ - Now mirrors TTI route pattern for consistency
118
+
119
+ ## [2026.04.01] - 2026-04-01
120
+
121
+ ### โœจ Added
122
+ - **OpenResearcher Provider**: Added new OpenResearcher provider for AI-powered research search:
123
+ - `llm4free/Provider/AISEARCH/openresearcher.py` - AISearch-compatible interface for OpenResearcher
124
+ - Multi-round iterative research (search โ†’ open page โ†’ find โ†’ answer)
125
+ - Real-time streaming via Server-Sent Events
126
+ - Configurable max research rounds (default: 50)
127
+ - Built-in Serper API key (or custom key support)
128
+ - HTML-formatted results with citations and thought process
129
+ - Gradio API two-step flow (POST for event_id โ†’ GET SSE stream for result)
130
+ - No authentication required (public Hugging Face Space)
131
+ - Updated `llm4free/Provider/AISEARCH/__init__.py` to export OpenResearcher
132
+ - Updated Provider.md documentation
133
+ - Full test coverage in `tests/providers/test_openresearcher.py`
134
+
135
+ - **XLNK TTS Provider**: Added new XLNK TTS provider for text-to-speech synthesis:
136
+ - `llm4free/Provider/TTS/xlnk.py` - OpenAI TTS API-compatible interface for XLNK TTS
137
+ - 8 Kyutai voice presets: alba, marius, javert, jean, fantine, cosette, eponine, azelma
138
+ - Voice cloning support via uploaded audio
139
+ - Adjustable generation parameters: temperature, LSD decode steps, noise clamp, EOS threshold
140
+ - Gradio API two-step flow (POST for event_id โ†’ GET SSE stream for result)
141
+ - No authentication required (public Hugging Face Space)
142
+ - Updated `llm4free/Provider/TTS/__init__.py` to export XLNKTTS
143
+ - Updated Provider.md documentation
144
+ - Full test coverage in `tests/providers/test_xlnk.py`
145
+
146
+ - **KittenTTS Provider**: Added new KittenTTS provider for text-to-speech synthesis:
147
+ - `llm4free/Provider/TTS/kittentts.py` - OpenAI TTS API-compatible interface for KittenTTS
148
+ - 3 model sizes: Nano (15M), Micro (40M), Mini (80M)
149
+ - 8 voice presets: Bella, Jasper, Luna, Bruno, Rosie, Hugo, Kiki, Leo
150
+ - Adjustable speech speed (0.5x to 2.0x)
151
+ - Gradio API two-step flow (POST for event_id โ†’ GET SSE stream for result)
152
+ - No authentication required (public Hugging Face Space)
153
+ - Updated `llm4free/Provider/TTS/__init__.py` to export KittenTTS
154
+ - Updated Provider.md documentation
155
+ - Full test coverage in `tests/providers/test_kittentts.py`
156
+
157
+ - **LuxTTS Provider**: Added new LuxTTS voice cloning provider for text-to-speech synthesis:
158
+ - `llm4free/Provider/TTS/luxtts.py` - OpenAI TTS API-compatible interface for LuxTTS voice cloning
159
+ - Voice cloning from reference audio (preset voices or custom URLs)
160
+ - Adjustable speech parameters: speed, loudness (RMS), reference duration, T-shift, steps
161
+ - Gradio API two-step flow (POST for event_id โ†’ GET SSE stream for result)
162
+ - No authentication required (public Hugging Face Space)
163
+ - Updated `llm4free/Provider/TTS/__init__.py` to export LuxTTS
164
+ - Updated Provider.md documentation
165
+ - Full test coverage in `tests/providers/test_luxtts.py`
166
+
167
+ ## [2026.03.31] - 2026-03-31
168
+
169
+ ### โœจ Added
170
+ - **Server TTS endpoint**: Added OpenAI-compatible `/v1/audio/speech` endpoint to the FastAPI server:
171
+ - `llm4free/server/request_models.py` - Added `SpeechGenerationRequest` model with OpenAI-compatible fields
172
+ - `llm4free/server/providers.py` - Added TTS provider discovery, caching, and resolution functions
173
+ - `llm4free/server/routes.py` - Added `_register_tts_routes()` with POST `/v1/audio/speech` endpoint
174
+ - `llm4free/server/server.py` - Added TTS provider initialization on server startup
175
+ - `llm4free/server/config.py` - Added `tts_provider_map` and `default_tts_provider` configuration
176
+ - Supports multiple audio formats: mp3, opus, aac, flac, wav, pcm
177
+ - Supports both file download and streaming responses
178
+ - Automatic TTS provider discovery and model resolution
179
+ - **Client audio speech interface**: Added `client.audio.speech.create(...)` in `llm4free/client.py` for TTS-backed speech generation with provider discovery, caching, failover, and `last_provider` tracking.
180
+ - **Client docs refresh**: Rewrote `docs/client.md` into a shorter guide that still covers chat, image, and audio usage plus the updated helper methods.
181
+ - **Cohere STT Provider**: Added new Cohere Multilingual ASR provider for speech-to-text transcription:
182
+ - `llm4free/Provider/STT/cohere.py` - OpenAI Whisper API-compatible interface for Cohere's multilingual ASR
183
+ - Supports 14 languages: English, French, German, Spanish, Portuguese, Italian, Dutch, Polish, Greek, Arabic, Japanese, Korean, Chinese, Vietnamese
184
+ - Implements Gradio API two-step flow (POST for event_id โ†’ GET SSE stream for result)
185
+ - Supports both streaming and non-streaming transcription modes
186
+ - Handles audio file uploads via multipart/form-data
187
+ - No authentication required (public Hugging Face Space)
188
+ - Updated `llm4free/Provider/STT/__init__.py` to export CohereSTT
189
+ - Updated Provider.md documentation
190
+
191
+ - **Faster Qwen3-TTS Provider**: Added new Faster Qwen3-TTS provider for text-to-speech synthesis:
192
+ - `llm4free/Provider/TTS/faster_qwen3.py` - OpenAI TTS API-compatible interface for Faster Qwen3-TTS
193
+ - Supports 5 model variants: Base (0.6B, 1.7B), CustomVoice (0.6B, 1.7B), VoiceDesign (1.7B)
194
+ - Three generation modes: voice cloning, custom voice, voice design
195
+ - Streaming (SSE) and non-streaming generation modes
196
+ - Preset reference voices and custom reference audio upload
197
+ - Audio transcription support via nano-parakeet
198
+ - 6 languages: English, Chinese, French, German, Spanish, Auto
199
+ - No authentication required (public Hugging Face Space)
200
+ - Updated `llm4free/Provider/TTS/__init__.py` to export FasterQwen3TTS
201
+ - Updated Provider.md documentation
202
+
203
+ ### ๐Ÿ”ง Fixed
204
+ - **Client type checking**: Fixed `Attribute content may be missing` type errors in `llm4free/client.py`:
205
+ - Added `TypeGuard` import and updated `_is_valid_chat_completion` to use proper type narrowing
206
+ - Fixed `ChatCompletionChunk` cast issues for streaming responses
207
+ - All type checks now pass with `uvx ty check`
208
+ - **ParlerTTS, QwenTTS, SherpaTTS**: Fixed `startswith` bytes vs string bug in SSE stream parsing:
209
+ - Added `isinstance(line, bytes)` check before calling `startswith()`
210
+ - Properly decode bytes to UTF-8 string before string operations
211
+ - Fixed `FailedToGenerateResponseError: startswith first arg must be bytes or a tuple of bytes, not str`
212
+ - All three providers now successfully generate audio files
213
+ - **FreeTTS**: Fixed audio download to follow HTTP redirects:
214
+ - Added `allow_redirects=True` to the audio download request
215
+ - The FreeTTS API returns redirect URLs for audio files that were not being followed
216
+ - Provider now successfully downloads and saves audio files
217
+ - **PocketTTS**: Fixed test configuration to use valid voice name (`alba` instead of invalid voice)
218
+ - **FasterQwen3TTS**: Fixed model loading to handle `already_loaded` status from API
219
+ - **TTS Provider Tests**: Added comprehensive test suite for all TTS providers:
220
+ - `tests/providers/test_all_tts_providers.py` - Instantiation and attribute tests
221
+ - `tests/providers/test_tts_audio_generation.py` - Actual audio generation tests
222
+ - Results improved from 4/12 to 8/12 working providers (67%)
223
+
224
+ ### ๐Ÿ—‘๏ธ Removed
225
+ - **SpeechMaTTS**: Removed non-functional provider (HTTP 403 errors, service no longer accessible)
226
+ - Deleted `llm4free/Provider/TTS/speechma.py`
227
+ - Removed from `llm4free/Provider/TTS/__init__.py` exports
228
+ - Updated Provider.md documentation
229
+
230
+ ## [2026.02.23] - 2026-02-23
231
+
232
+ ### โœจ Added
233
+ - **Blackbox Provider**: Added new Blackbox AI provider in both standard and OpenAI-compatible formats:
234
+ - `llm4free/Provider/blackbox.py` - Standard provider implementation with conversation support, streaming/non-streaming responses, and LitAgent fingerprinting
235
+ - `llm4free/Provider/Openai_comp/blackbox.py` - OpenAI-compatible provider following the same pattern as Groq, Cerebras, and other OpenAI-compatible providers
236
+ - Supports models: `moonshotai/kimi-k2.5`, `custom/blackbox-base-2`, `minimax-m2`
237
+ - Uses Blackbox VSCode extension API endpoint with required headers (customerId, userId, version)
238
+ - Both providers support streaming responses with proper SSE parsing
239
+
240
+ ### ๐Ÿ”ง Improved
241
+ - **lmarena.py (UNFINISHED)**: Fixed all ruff linting errors and improved type safety:
242
+ - Fixed 317+ ruff linting issues automatically (trailing whitespace, blank lines, f-string prefixes, etc.)
243
+ - Fixed duplicate dictionary keys in `_ARENA_HOST_TO_ORIGIN`
244
+ - Fixed bare `except` clause to `except Exception`
245
+ - Added pyright type suppression comments for external library type stub issues
246
+ - Added UNFINISHED directory to ty check exclusions in pyproject.toml
247
+ - All ruff checks now pass successfully
248
+
249
+ ## [2026.02.14] - 2026-02-14
250
+
251
+ ### ๐Ÿ› Fixed
252
+ - **TypliAI Provider**: Fixed 403 errors by implementing CSRF token handling in the TypliAI provider. The provider now initializes the session properly to retrieve and use CSRF tokens, resolving authentication issues that were causing 403 errors.
253
+ - **OpenAI-Compatible TypliAI Provider**: Fixed 403 errors in the OpenAI-compatible TypliAI provider by implementing the same CSRF token handling logic as the main TypliAI provider. This ensures both providers can authenticate successfully and avoid 403 errors when making requests to the TypliAI service.
254
+ - **Toolbaz Provider**: Fixed 400 errors in the Toolbaz provider
255
+ - **Server**: Fixed critical startup failure in `llm4free/server/server.py` when running with default settings (debug=False, workers=1) due to missing `else` clause in `run_api()` function's uvicorn configuration logic. The server now starts correctly in production mode.
256
+
257
+ ### โœจ Added
258
+ - **TypliAI Reasoning Support**: Added support for reasoning models (e.g., `moonshotai/kimi-k2.5`) in both TypliAI providers:
259
+ - Updated to use new `/api/chat2` endpoint
260
+ - Added support for `reasoning-delta` and `text-delta` SSE event types
261
+ - Exposed `reasoning_content` and `reasoning` fields in OpenAI-compatible response
262
+ - Updated headers to match new API requirements (referer changed to `/ai-chat`)
263
+ - **Reasoning Fields in OpenAI Responses**: Added `reasoning_content` and `reasoning` fields to `ChoiceDelta` and `ChatCompletionMessage` classes in `llm4free/Provider/Openai_comp/utils.py` for OpenAI-compatible provider responses
264
+
265
+ ### ๐Ÿ”ง Improved
266
+ - **OpenAI-Compatible TypliAI Provider**: Replaced `sanitize_stream` with manual SSE parsing for better control over streaming responses. Now parses both `reasoning-delta` and `text-delta` events directly without relying on the utility function.
267
+
268
+ ## [2026.02.13] - 2026-02-13
269
+
270
+ ### ๐Ÿ”ง Improved
271
+ - **curl_cffi Migration**: Complete migration from `requests` to `curl_cffi` library across all providers:
272
+ - Updated all Provider files (`llm4free/Provider/`) to use `curl_cffi` for HTTP operations
273
+ - Updated search engine files (`llm4free/search/`) to use curl_cffi
274
+ - Updated core modules (`llm4free/scout/core/`) and Extra modules
275
+ - Replaced `requests.Session()` with `curl_cffi.requests.Session()`
276
+ - Updated exception handling from `requests.exceptions` to `curl_cffi.CurlError`
277
+ - All ruff linting and ty type checks pass after migration
278
+ - curl_cffi provides better browser impersonation, streaming support, and performance
279
+
280
+ ### ๐Ÿ”ง Improved
281
+ - **Falcon provider**: `llm4free/Provider/Falcon.py` - Major refactor to align with QwenLM pattern:
282
+ - Implemented cookie-from-file logic using `cookies_path` and `_load_cookies()`.
283
+ - Updated to use `curl_cffi.Session` with chrome impersonation for better anti-detection.
284
+ - Refactored `ask()` and `chat()` methods for consistent streaming and non-streaming behavior.
285
+ - Added support for dynamic model selection and improved error handling.
286
+ - Verified with `ruff` and `ty` for code quality and type safety.
287
+
288
+ ## [2026.02.10] - 2026-02-10
289
+
290
+ ### โœจ Added
291
+ - **K2Think Provider**: `llm4free/Provider/k2think.py` - New provider for K2 Think AI (https://www.k2think.ai/guest). Features no-auth guest access, streaming/non-streaming support using `sanitize_stream`, conversation history, optimizer support, and OpenAI-compatible API responses. Fully integrated with LLM4Free's provider discovery system.
292
+ - **K2Think OpenAI-Compatible Provider**: `llm4free/Provider/Openai_comp/k2think.py` - OpenAI-compatible implementation of K2Think provider following the same pattern as DeepInfra, Groq, and Sonus providers. Features direct JSON parsing without `sanitize_stream`, proper OpenAI-compatible streaming chunks, and full compatibility with OpenAI API interface.
293
+
294
+ ### ๐Ÿšฎ Removed
295
+ - **X0GPT provider**: Removed the X0GPT provider from the codebase.
296
+
297
+ ### ๐Ÿšฎ Removed
298
+ - **ChatSandbox provider**: Completely removed `llm4free/Provider/ChatSandbox.py` and `llm4free/Provider/Openai_comp/chatsandbox.py`. The provider has been deprecated and removed from the codebase.
299
+
300
+ ## [2026.02.01] - 2026-02-01
301
+
302
+ ### ๐Ÿšฎ Removed
303
+ - **Algion provider**: Completely removed `llm4free/Provider/Algion.py` and `llm4free/Provider/Openai_comp/algion.py`. The provider has been deprecated and removed from the codebase.
304
+
305
+ ## [2026.02.02] - 2026-02-02
306
+
307
+ ### ๐Ÿ”ง Improved
308
+ - **AkashGPT provider**: `llm4free/Provider/Openai_comp/akashgpt.py` & `llm4free\Provider\akashgpt.py`- Refactored to remove all `api_key` logic. The provider no longer requires or uses an API key for any operation. The constructor and all internal logic have been updated to reflect this, making AkashGPT fully no-auth and easier to use out of the box.
309
+
310
+ ### ๐Ÿ”ง Improved
311
+ - **AkashGPT provider**: `llm4free/Provider/Openai_comp/akashgpt.py` & `llm4free\Provider\akashgpt.py`- Refactored to remove all `api_key` logic. The provider no longer requires or uses an API key for any operation. The constructor and all internal logic have been updated to reflect this, making AkashGPT fully no-auth and easier to use out of the box.
312
+ - Cleaned up docstrings and type hints for clarity and consistency.
313
+ - All ruff linting and ty type checks pass after the update.
314
+
315
+ ## [2026.01.31] - 2026-01-31
316
+
317
+ ### ๐Ÿท๏ธ Renamed
318
+ - **OPENAI โ†’ Openai_comp**: Renamed `llm4free/Provider/OPENAI` directory to `llm4free/Provider/Openai_comp` for clarity and naming consistency.
319
+
320
+ ### ๐Ÿšฎ Removed / Moved
321
+ - **BraveAI provider moved**: `llm4free/Provider/AISEARCH/brave_search.py` โ†’ `llm4free/Provider/UNFINISHED/brave_search.py`. The Brave Search AI Chat API currently returns 404 errors; further investigation needed.
322
+ - **BraveAI export removed**: `llm4free/Provider/AISEARCH/__init__.py` - BraveAI removed from active AISEARCH providers.
323
+ - **Legacy wrapper removed**: `lol.py` - Legacy compatibility wrapper removed; canonical implementation is now in `llm4free/Provider/AISEARCH/ayesoul_search.py`.
324
+
325
+ ### โœจ Added
326
+ - **AyeSoul AI Search Provider**: `llm4free/Provider/AISEARCH/ayesoul_search.py` - New provider using AyeSoul's WebSocket endpoint. Supports streaming/non-streaming, image uploads, and LitAgent-based user-agent generation.
327
+ - **OpenAI-compatible Upstage Provider**: `llm4free/Provider/Openai_comp/upstage.py` - New OpenAI-compatible provider for Upstage AI with dynamic model fetching from `https://api.upstage.ai/v1/models` endpoint. Supports streaming and non-streaming modes with LitAgent browser fingerprinting.
328
+ - **Model Fetcher Infrastructure**: `llm4free/model_fetcher.py` - Non-blocking model fetching with caching:
329
+ - Thread-safe `ModelFetcherCache` with file-based cache (`~/.llm4free/model_cache.json`)
330
+ - TTL support (default 24h, configurable via `LLM4FREE_MODEL_CACHE_TTL`)
331
+ - Disable cache with `LLM4FREE_NO_MODEL_CACHE`
332
+ - `BackgroundModelFetcher` for async fetching (daemon threads)
333
+ - Graceful timeout (default 10s) and error fallback
334
+ - Thread-safe via `threading.Lock`
335
+ - **proxy_manager.py**: `llm4free/Extra/proxy_manager.py` - New ProxyManager utility for managing and rotating proxies with auto-fetching from public proxy lists. Supports HTTP/SOCKS proxies, health checks, and integration with LLM4Free providers.
336
+ ### ๐Ÿ”ง Improved
337
+ - **AyeSoul stream handling**: `llm4free/Provider/AISEARCH/ayesoul_search.py` - Prefer `stream` key for response text; robust handling of dict/list payloads; serializes structured content to JSON as needed.
338
+ - **AyeSoul export**: `llm4free/Provider/AISEARCH/__init__.py` - Exported `AyeSoul` for unified import/discovery.
339
+ - **All AI providers**: Optimized model fetching to be non-blocking and parallel:
340
+ - 14 OpenAI-compatible providers now use background model fetching:
341
+ - `llm4free/Provider/Openai_comp/deepinfra.py`
342
+ - `llm4free/Provider/Openai_comp/DeepAI.py`
343
+ - `llm4free/Provider/Openai_comp/groq.py`
344
+ - `llm4free/Provider/Openai_comp/openrouter.py`
345
+ - `llm4free/Provider/Openai_comp/cerebras.py`
346
+ - `llm4free/Provider/Openai_comp/textpollinations.py`
347
+ - `llm4free/Provider/Openai_comp/TogetherAI.py`
348
+ - `llm4free/Provider/Openai_comp/nvidia.py`
349
+ - `llm4free/Provider/Openai_comp/huggingface.py`
350
+ - `llm4free/Provider/Openai_comp/algion.py`
351
+ - `llm4free/Provider/Openai_comp/upstage.py`
352
+ - `llm4free/Provider/Openai_comp/typliai.py`
353
+ - `llm4free/Provider/Openai_comp/easemate.py`
354
+ - `llm4free/Provider/Openai_comp/freeassist.py`
355
+ - 11 Standalone providers updated for direct background fetch:
356
+ - `llm4free/Provider/Deepinfra.py`
357
+ - `llm4free/Provider/HuggingFace.py`
358
+ - `llm4free/Provider/TogetherAI.py`
359
+ - `llm4free/Provider/TextPollinationsAI.py`
360
+ - `llm4free/Provider/Sambanova.py`
361
+ - `llm4free/Provider/OpenRouter.py`
362
+ - `llm4free/Provider/Openai.py`
363
+ - `llm4free/Provider/Nvidia.py`
364
+ - `llm4free/Provider/Groq.py`
365
+ - `llm4free/Provider/geminiapi.py`
366
+ - `llm4free/Provider/cerebras.py`
367
+ - `llm4free/Provider/Algion.py`
368
+ - Added `_start_background_model_fetch()` to OpenAICompatibleProvider base class
369
+ - Providers now initialize instantly with fallback models, fetching fresh models in background
370
+ - Startup performance improved (2-5s faster)
371
+ - Cache persists across restarts
372
+ - All changes backward compatible
373
+
374
+ ### ๐Ÿ”ง Fixed
375
+ - **Type checking compliance**: Fixed 33 type errors across provider implementations to pass strict type checking (`uvx ty check .`):
376
+ - Added proper type guards for `Response` type access in `get_message()` methods across all providers
377
+ - Implemented `cast(Dict[str, Any], response)` pattern after `isinstance(response, dict)` checks to satisfy type checker
378
+ - Fixed dictionary subscript errors in 17 provider files:
379
+ - llm4free/Provider/AISEARCH/ayesoul_search.py
380
+ - llm4free/Provider/Cohere.py, ExaAI.py, Gemini.py, HeckAI.py
381
+ - llm4free/Provider/IBM.py, Netwrck.py, Sambanova.py, TextPollinationsAI.py
382
+ - llm4free/Provider/ai4chat.py, cleeai.py, julius.py, llama3mitril.py, meta.py
383
+ - llm4free/Provider/Openai_comp/ibm.py, llmchat.py
384
+ - Fixed null safety issues in streaming response handling (ibm.py, llmchat.py)
385
+ - All providers now pass both `uvx ty check .` and `uv run ruff check .`
386
+
387
+ ### ๐Ÿšฎ Removed
388
+ - **Deprecated providers**: Removed `oivscode.py` and `K2Think.py` from both `llm4free/Provider/` and `llm4free/Provider/Openai_comp/` to streamline the codebase.
389
+
390
+ ### โœ… Quality & Testing
391
+ - Manual smoke tests on AyeSoul streaming and non-streaming flows
392
+ - Please add unit tests under `tests/providers/` to mock WebSocket responses for CI
393
+ - All ruff linting checks passed on modified files
394
+ - All type checking with `ty` passed
395
+ - Comprehensive test suite in `tests/providers/test_model_fetching.py` (898 lines):
396
+ - Cache behavior (hit/miss/TTL/env var)
397
+ - Background fetch non-blocking
398
+ - Timeout/error handling
399
+ - Concurrent provider init
400
+ - Thread safety
401
+ - Cache corruption recovery
402
+
403
+ ---
404
+
405
+ ## [2026.01.22] - 2026-01-22
406
+
407
+ ### ๐Ÿ”ง Improved
408
+ - **provider**: llm4free/Provider/Deepinfra.py & llm4free/Provider/OPENAI/deepinfra.py - Enhanced model filtering:
409
+ - Updated `get_models()` to only fetch and return model IDs that have complete metadata with both `context_length` and `max_tokens` fields
410
+ - Ensures only production-ready, well-documented models are available in the model list
411
+ - Both native and OpenAI-compatible providers now implement consistent filtering logic
412
+ - Fallback to `AVAILABLE_MODELS` list when API fetch fails or no complete models are found
413
+
414
+ ### ๐Ÿ› Fixed
415
+ - **fix**: llm4free/server/server.py - Fixed critical llm4free-server startup failure when running in production mode (debug=False, workers=1). The issue was a missing `else` clause in the `run_api()` function's uvicorn configuration logic, causing the server to never start when using default settings.
416
+
417
+ ### โœ… Quality
418
+ - All ruff linting checks passed successfully on modified files
419
+ - All type checking with `ty` passed successfully
420
+
421
+ ## [2026.01.19] - 2026-01-19
422
+
423
+ ### ๐Ÿ”ง Improved
424
+ - **provider**: llm4free/Provider/Ayle.py - Reverse engineered ayle.chat to update available models and configs:
425
+ - Added support for 11 verified working models including Gemini 2.5 Flash, Grok-based models, and Sonar.
426
+ - Implemented a test suite to verify 31 discovered models, removing 20 non-functional ones.
427
+ - Verified no authentication is required and streaming is fully supported.
428
+ - Updated `AVAILABLE_MODELS` and `MODEL_CONFIGS` with the optimized list.
429
+
430
+ ## [2026.01.17] - 2026-01-17
431
+
432
+ ### ๐Ÿ”ง Improved
433
+ - **refactor**: llm4free/Provider/AISEARCH/iask_search.py - Streamlined IAsk AI search provider:
434
+ - Removed Phoenix WebSocket complexity and unused `cache_find()` helper function
435
+ - Simplified API flow to single GET request to `/q` endpoint with mode and detail_level parameters
436
+ - Added `_extract_answer()` method to parse HTML response and extract answer from `div#id="text"`
437
+ - Added `_iter_chunks()` method for improved chunked streaming (800-char chunks with word boundaries)
438
+ - Removed unnecessary `aiohttp` WebSocket dependency, simplified async implementation
439
+ - Updated endpoints: `api_endpoint` to `https://iask.ai`, new `query_endpoint` to `https://iask.ai/q`
440
+ - **Integrated LitAgent** for realistic User-Agent header generation (replaced hardcoded static user agent)
441
+ - Both streaming and non-streaming modes now use consistent `fetch_answer()` async flow
442
+ - Performance: Reduced request overhead and latency by eliminating WebSocket handshake
443
+
444
+ ### ๐Ÿ› Fixed
445
+
446
+ ### ๏ฟฝ Fixed
447
+ - **fix**: llm4free/Provider/OPENAI/sonus.py - Fixed critical non-stream request error "stream mode is not enabled":
448
+ - Root cause: SonusAI API returns a streaming response even for non-stream requests
449
+ - Solution: Added `stream=True` parameter to the `session.post()` call in `_create_non_stream()` method
450
+ - Impact: Non-streaming chat completions now work correctly with the OpenAI-compatible SonusAI provider
451
+
452
+ ### ๐Ÿ“ Documentation
453
+ - **docs**: llm4free/client.py - Generated comprehensive PEP 257-compliant docstrings for all 32+ classes and methods:
454
+ - Added detailed module-level docstrings for `load_openai_providers()`, `load_tti_providers()`, and `_get_models_safely()`
455
+ - Documented `ClientCompletions` class with intelligent provider/model resolution algorithms
456
+ - Documented `ClientChat` adapter interface for chat completions
457
+ - Documented `ClientImages` class with automatic failover for image generation
458
+ - Documented main `Client` class with comprehensive usage examples
459
+ - All docstrings include parameter descriptions, return types, exception documentation, usage examples, and important behavioral notes
460
+ - Improved IDE autocomplete and automated documentation generation support
461
+
462
+ ### ๐Ÿ”ง Improved
463
+ - **refactor**: llm4free/Provider/akashgpt.py - Replaced `cloudscraper` with `curl_cffi` for better performance and TLS/SSL handling. Changed from `cloudscraper.create_scraper()` to `curl_cffi.requests.Session()` for HTTP requests.
464
+ - **refactor**: llm4free/Provider/OPENAI/akashgpt.py - Replaced `cloudscraper` with `curl_cffi` for improved HTTP request handling. Updated session initialization to use `curl_cffi.requests.Session()` with proper proxy support in the `__init__` method.
465
+
466
+ ### โœ… Quality
467
+ - All ruff linting checks passed successfully on all modified files
468
+ - All type checking with `ty` passed successfully
469
+
470
+ ## [2026.01.16] - 2026-01-16
471
+
472
+ ### โœจ Added
473
+ - **feat**: llm4free/search/engines/brave/videos.py - New Brave video search engine that parses HTML to extract video results from YouTube and other platforms. Includes support for duration, view count, channel/uploader, published date, and pagination.
474
+ - **feat**: llm4free/search/engines/brave/news.py - New Brave news search engine that parses HTML to extract news articles with title, source, date, body, and thumbnail images. Includes pagination support.
475
+ - **feat**: llm4free/search/engines/brave/suggestions.py - New Brave search suggestions/autocomplete API that returns rich entity suggestions with metadata (name, description, category, image).
476
+ - **feat**: llm4free/search/engines/brave/images.py - New Brave image search engine using JavaScript-based crawling to extract image results with title, URL, dimensions, and source.
477
+
478
+ ### ๐Ÿ”ง Improved
479
+ - **refactor**: llm4free/search/brave_main.py - Implemented images(), news(), videos(), and suggestions() methods in BraveSearch unified interface to support all new Brave search types.
480
+ - **refactor**: llm4free/search/engines/__init__.py - Updated ENGINES dictionary and __all__ exports to register BraveVideos, BraveNews, and BraveSuggestions in their respective categories.
481
+ - **refactor**: llm4free/cli.py - Added specialized print functions for improved CLI UI:
482
+ - `_print_videos()` - Panel-based video results with duration, view count, channel, and date
483
+ - `_print_news()` - Clean news article display with source, date, and body preview
484
+ - `_print_suggestions()` - Table-based suggestions with entity type indicators
485
+ - `_print_images()` - Image result display with resolution and source info
486
+ - Updated video, news, suggestions, and images commands to use new specialized print functions
487
+ - Added helper functions `_format_views()` and `_truncate()` for better formatting
488
+ - **refactor**: llm4free/server/routes.py - Updated web search endpoint documentation to mention Brave support for videos and suggestions. Improved suggestions parameter handling with better fallback logic.
489
+ - **refactor**: llm4free/search/brave_main.py - Implemented images() method for Brave image search (previously raised NotImplementedError).
490
+
491
+ ### ๐Ÿ“ Documentation
492
+ - **docs**: Updated CLI help text to reflect Brave support for videos, news, images, and suggestions searches.
493
+
494
+ ### โœจ Added
495
+ - **feat**: llm4free/Provider/AISEARCH/BraveAI.py - New BraveAI search provider supporting AI search and deep research (streaming and non-streaming modes). Updated `llm4free/Provider/AISEARCH/__init__.py` to export the provider and added documentation to `llm4free/Provider/AISEARCH/README.md`.
496
+
497
+ ## [2026.01.06] - 2026-01-06
498
+
499
+ ### ๐Ÿšฎ Removed
500
+ - **remove**: Completely removed `llm4free/Provider/AISEARCH/genspark_search.py` provider and all references to Genspark from the codebase
501
+ - **remove**: Updated `llm4free/Provider/AISEARCH/__init__.py` to remove Genspark import and export
502
+ - **remove**: Updated documentation in `llm4free/Provider/AISEARCH/README.md` and `Provider.md` to reflect removal of Genspark provider
503
+
504
+ ### ๐Ÿ”ง Maintenance
505
+ - **refactor**: llm4free/Provider/AISEARCH/monica_search.py - Simplified streaming content extraction by switching to an inline lambda for `sanitize_stream`'s `content_extractor` that returns `chunk["text"]` when present. Removed the now-unused `_extract_monica_content` method. Note: this change intentionally stops persisting `session_id` from stream payloads; reintroduce session handling if session persistence is required.
506
+ - **fix**: llm4free/Provider/AISEARCH/webpilotai_search.py - Use `sanitize_stream`'s `content_extractor` for both streaming and non-streaming flows to parse JSON payloads and return the nested `content` (fallbacks to `text` and `data.delta.content` where present). This aligns behavior with `monica_search` and prevents empty or incomplete output when the service emits nested or delta-based content. Raw mode still returns unprocessed chunks.
507
+ - **fix**: llm4free/Provider/AISEARCH/PERPLEXED_search.py - Fixed critical streaming issues and standardized with other providers:
508
+ - Replaced manual JSON parsing with `sanitize_stream` using `line_delimiter="[/PERPLEXED-SEPARATOR]"` parameter
509
+ - Fixed streaming generator that was not yielding chunks due to incorrect delimiter handling
510
+ - Updated both streaming and non-streaming modes to use consistent `sanitize_stream` configuration
511
+ - Improved content extraction logic to properly handle answer fields from JSON responses
512
+ - Fixed `if __name__ == "__main__"` block to properly consume and display streaming responses
513
+ - Now follows same pattern as webpilotai, miromind, and monica providers for consistency
514
+
515
+ ## [2026.01.01] - 2026-01-01
516
+
517
+ ### ๐Ÿšฎ Removed
518
+ - **remove**: Completely removed `google-generativeai` package dependency from pyproject.toml - package was not actually used in the codebase (geminiapi.py uses curl_cffi directly), removing it fixes Python 3.14 compatibility issues with pydantic-core
519
+ - **remove**: Completely removed `openai` package dependency from pyproject.toml - project now uses `curl_cffi` exclusively for HTTP requests, reducing dependencies and improving consistency
520
+ - **remove**: Completely removed `orjson` dependency from codebase (including imports, `HAS_ORJSON` flag, and pyproject.toml entry) for better compatibility and simpler dependencies
521
+ - **remove**: Completely removed `llm4free/Provider/VercelAI.py` provider file and updated related imports and documentation
522
+ - **remove**: Removed `llm4free/Provider/VercelAI.py` provider file and updated related imports and documentation
523
+ - **remove**: Completely removed `nodriver` package dependency from pyproject.toml - nodriver was not actively used in the codebase, only listed as a dependency
524
+ - **remove**: Replaced aiofiles usage with Python's built-in asyncio.to_thread for async file operations in TTS streaming, removing aiofiles dependency from pyproject.toml
525
+ - **remove**: Replaced cloudscraper usage with curl_cffi Session in LLMChat and LLMChatCo providers, removing cloudscraper dependency from pyproject.toml
526
+
527
+ ### ๐Ÿ”ง Improved
528
+ - **refactor**: Made `lxml` dependency optional in pyproject.toml
529
+ - Moved `lxml` to optional `parser` dependency group in pyproject.toml
530
+ - Updated `llm4free/search/base.py` to support lxml for HTML parsing
531
+ - Updated `llm4free/search/engines/duckduckgo/base.py` to use lxml for HTML parsing
532
+ - **refactor**: Migrated from `requests` to `curl_cffi` for HTTP requests in multiple files to improve browser fingerprinting and anti-detection capabilities
533
+ - **refactor**: Migrated `llm4free/Provider/AISEARCH/iask_search.py` from `aiohttp` to `curl_cffi` for HTTP requests, while retaining `aiohttp` for WebSocket connections to improve browser fingerprinting and anti-detection capabilities
534
+
535
+ ### ๐Ÿ› Fixed
536
+ - **fix**: Fixed ModuleNotFoundError for huggingface_hub in llm4free versions > 2025.12.19 by implementing lazy imports in gguf.py
537
+ - Replaced unconditional `from huggingface_hub import HfApi` with lazy import pattern
538
+ - Added `_ensure_huggingface_hub()` function that imports HfApi only when GGUF features are used
539
+ - Updated all HfApi usage in ModelConverter class to use lazy imports
540
+ - This fixes import issues for users who only need chat/LLM provider features without GGUF conversion
541
+ - Provides clear error message when GGUF features are used without huggingface_hub installed
542
+
543
+ ### โœจ Added
544
+ - **remove**: Removed HadadXYZ providers: `llm4free/Provider/HadadXYZ.py` and `llm4free/Provider/OPENAI/hadadxyz.py`. These implementations are deprecated and removed to streamline provider maintenance.
545
+
546
+ - **feat**: llm4free/Provider/QwenLM.py - Added new models to this provider
547
+
548
+ - **feat**: Added `gpt-5.2` model to Toolbaz providers in both `llm4free/Provider/toolbaz.py` and `llm4free/Provider/OPENAI/toolbaz.py`
549
+
550
+ - **refactor**: Migrated `llm4free/Provider/OPENAI/toolbaz.py` from `cloudscraper` to `curl_cffi` for consistent HTTP client implementation across providers
551
+
552
+ - **refactor**: Migrated `llm4free/Provider/OPENAI/sonus.py` from `requests` to `curl_cffi` for improved browser emulation and consistency; updated form data handling from multipart `files` to standard `data` parameter
553
+
554
+ - **feat**: Added new OpenRouter provider in both `llm4free/Provider/OpenRouter.py` and `llm4free/Provider/OPENAI/openrouter.py` with dynamic model fetching and LitAgent browser fingerprinting
555
+
556
+ ## [2025.12.21] - 2025-12-21
557
+
558
+ ### ๐Ÿ› Fixed
559
+ - **fix**: Conducted an extensive codebase cleanup using Ruff, resolving over 200 linting issues and potential bugs.
560
+ - **fix**: Standardized error handling by replacing bare `except:` blocks with `except Exception:` or specific exception types across multiple modules (Bing search, GGUF converter, SwiftCLI, and various AI providers).
561
+ - **fix**: Resolved numerous `F821 Undefined name` and `F405` errors:
562
+ - Restored missing `get_item` method in `YTdownloader.py`.
563
+ - Defined missing variables (`result`, `content`, `tool_calls`) in `TextPollinationsAI.py` response processing.
564
+ - Fixed missing `ic` imports from `litprinter` in multiple TTS providers (`MurfAI`, `OpenAI.fm`, `Parler`, `Qwen`, `Sherpa`, `FreeTTS`).
565
+ - Fixed missing `exceptions` import in `FreeTTS`.
566
+ - Resolved undefined `CLI` reference in SwiftCLI `Context` using `TYPE_CHECKING` and explicit imports.
567
+ - Added missing type hint imports (`Optional`, `Any`, `Union`, `Generator`, `Response`) across 30+ AI provider modules including Cohere, Gemini, Groq, HuggingFace, and more.
568
+ - Fixed undefined `LitAgent` reference in `GitToolkit/utils.py` and missing `Union` in `YTdownloader.py`.
569
+ - Resolved `Response` naming conflict in `Ayle.py` by aliasing `curl_cffi` response.
570
+ - **fix**: Corrected syntax errors and corrupted logic blocks in `YTdownloader.py` and `iask_search.py`.
571
+ - **fix**: Improved project adherence to PEP 8:
572
+ - Moved module-level imports to the top of files in `server` and `aihumanizer`.
573
+ - Replaced incorrect type comparisons (e.g., `== bool`) with idiomatic `is bool`.
574
+ - Split multiple statements on single lines (E701, E702) across the entire project for better readability.
575
+ - **refactor**: Replaced star imports (`from ... import *`) with explicit imports in `GitToolkit` and `samurai` provider to eliminate name shadowing and improve static analysis.
576
+ - **refactor**: Added dynamic model fetching to both DeepInfra providers (`llm4free/Provider/Deepinfra.py`, `llm4free/Provider/OPENAI/deepinfra.py`) following Groq provider pattern. Implemented `get_models()` and `update_available_models()` class methods that fetch from `https://api.deepinfra.com/v1/models` API endpoint with fallback to default models on failure. Providers now automatically update their available models list during initialization.
577
+ ### ๐Ÿšฎ Removed
578
+ - **removed**: `yep.py` - Removed the YEPCHAT provider and related files.
579
+
580
+ ## [2025.12.20] - 2025-12-20
581
+
582
+ ### ๐Ÿ“ Documentation Updates
583
+ - **docs**: litprinter.md - Completely rewrote documentation to be comprehensive and consistent with other LLM4Free docs. Added detailed sections for IceCream debugging, Rich Console, Panels & Layouts, Traceback Enhancement, Themes & Styling, Advanced Usage, Integration with LLM4Free, API Reference, Dependencies, and Supported Python Versions. Enhanced with professional formatting, extensive code examples, and parameter tables.
584
+
585
+ ### โœจ Added
586
+
587
+ - **feat**: llm4free/Provider/Nvidia.py - New standalone Nvidia NIM provider with dynamic model fetching and advanced stream sanitization.
588
+ - **feat**: llm4free/Provider/OPENAI/nvidia.py - New OpenAI-compatible Nvidia NIM provider with manual stream parsing.
589
+ - **feat**: llm4free/Provider/HuggingFace.py - New standalone Hugging Face provider with dynamic model fetching and advanced stream sanitization.
590
+ - **feat**: llm4free/Provider/OPENAI/huggingface.py - New OpenAI-compatible Hugging Face provider using HF Router with manual stream parsing.
591
+ - **feat**: llm4free/Provider/ChatSandbox.py - Major update to ChatSandbox provider after reverse engineering. Expanded `AVAILABLE_MODELS` to include `deepseek-r1-full`, `gemini-thinking`, `llama`, and others.
592
+ - **feat**: llm4free/Provider/OPENAI/chatsandbox.py - Updated OpenAI-compatible ChatSandbox provider with new model list and improved response extraction for reasoning and content.
593
+ - **feat**: Enhanced SwiftCLI with advanced argument and option validation including min/max length, regex patterns, and choices
594
+ - **feat**: Added JSON and YAML output formatters (`json_output`, `yaml_output`) for structured data output
595
+ - **feat**: Implemented command aliases system with `app.alias()` method for creating command shortcuts
596
+ - **feat**: Added command chaining support with `app.enable_chaining()` for complex workflows
597
+ - **feat**: Implemented shell completion script generation for bash, zsh, and fish shells via `generate_completion_script()`
598
+ - **feat**: Added mutually exclusive options support to prevent conflicting option combinations
599
+ - **feat**: Enhanced argument decorator with validation and mutually exclusive support
600
+ - **feat**: Added comprehensive validation functions in `utils/parsing.py` including `validate_argument` and `check_mutually_exclusive`
601
+ - **feat**: Updated CLI core to handle command aliases and validation in argument parsing
602
+ - **feat**: Added example script demonstrating all new features in `examples/advanced_features.py`
603
+ - **feat**: Updated documentation with new features and usage examples
604
+ - **feat**: Enhanced error handling with detailed validation error messages
605
+ - **feat**: Improved type safety with better runtime validation
606
+ - **feat**: llm4free/Provider/TTI/together.py - Refactored TogetherImage provider to require a user-provided API key, removing the brittle auto-authentication logic. This aligns it with the TogetherAI chat providers.
607
+
608
+ ### ๐Ÿ”ง Maintenance
609
+ - **chore**: Simplified optimizers module to include only the core coder optimizer, removing unused specialized optimizers to reduce complexity and maintenance overhead
610
+ - **chore**: Enhanced coder optimizer with improved system context and more detailed instructions for better code generation quality
611
+ - **feat**: llm4free/Provider/TTI/pollinations.py - Expanded supported models list to include `flux-pro`, `flux-realism`, `flux-anime`, and `any-dark`.
612
+ - **feat**: `llm4free/update_checker.py` - Major overhaul of the update system:
613
+ - **Virtual Environment Awareness**: Intelligent detection of active `venv` and prioritized local package versioning.
614
+ - **Pre-release Support**: Added capability to detect and recommend pre-release (beta/alpha) updates when running on a pre-release version.
615
+ - **Development Version Detection**: Recognizes when the local version is ahead of PyPI (dev mode).
616
+ - **Rich UI**: Integrated with `rich` for beautiful, high-fidelity update panels with vibrant colors and clear call-to-actions.
617
+ - **Performance Optimization**: Implemented result caching (12 hours) and faster connection timeouts (3s) to ensure zero impact on script startup speed.
618
+ - **Silent Mode**: Automatically disables check in non-TTY environments and respects `LLM4FREE_NO_UPDATE` environment variable.
619
+ - **refactor**: `llm4free/litagent/` - Major overhaul of the LitAgent module:
620
+ - **Modernized Constants**: Updated browser and OS version ranges to reflect 2024/2025 standards (Chrome 131, Firefox 132, macOS 15.0, etc.).
621
+ - **Enhanced Logic**: Improved user agent generation for diverse device types including Smart TVs, Gaming Consoles, and Wearables.
622
+ - **Robust State Management**: Added internal pools for agents and IPs, with automatic background refresh capabilities.
623
+ - **Thread Safety**: Implemented `RLock` support for multi-threaded environments.
624
+ - **Fingerprinting**: Added support for `sec-ch-ua` headers and realistic browser fingerprints.
625
+ - **Documentation**: Moved module documentation to `docs/litagent.md` and integrated it into the central hub.
626
+
627
+ ### ๐Ÿ› ๏ธ Improved
628
+ - **refactor**: llm4free/Provider/TTI/ - Cleaned up the TTI module by removing 8 non-functional or login-required providers (`AIArta`, `BingImageAI`, `GPT1Image`, `ImagenAI`, `InfipAI`, `MonoChatAI`, `PiclumenAI`, `PixelMuse`).
629
+ - **refactor**: llm4free/client.py - Updated unified client to support authenticated TTI providers in auto-failover mode when an API key is provided.
630
+ - **docs**: llm4free/Provider/TTI/README.md - Updated documentation to reflect the current set of 5 functional TTI providers.
631
+ - **refactor**: `llm4free/Provider/AISEARCH/` - Standardized `raw` parameter handling across all providers (Perplexity, Genspark, IAsk, Monica, PERPLEXED, webpilotai). Raw mode now returns/yields unprocessed strings/lines.
632
+ - **refactor**: `llm4free/Provider/AISEARCH/` - Replaced manual SSE parsing with `sanitize_stream` using `extract_regexes` for robust JSON payload extraction in Perplexity, Genspark, and webpilotai.
633
+ - **refactor**: `llm4free/Provider/AISEARCH/` - Standardized internal state tracking by renaming `last_SearchResponse` to `last_response` across all providers for better consistency.
634
+ - **fix**: `llm4free/Provider/AISEARCH/webpilotai_search.py` - Fixed critical issue where search results were empty due to incorrect content accumulation logic; now correctly handles delta-based streaming.
635
+ - **fix**: `llm4free/Provider/AISEARCH/iask_search.py` - Improved raw mode output to yield raw strings instead of dictionaries for better consistency with other providers.
636
+ - **refactor**: `llm4free/Provider/AISEARCH/` - Enhanced `sanitize_stream` configuration with explicit encoding, buffer handling, and custom `content_extractor` functions to maintain provider-specific metadata (sources, status updates) during streaming.
637
+
638
+ ### ๐Ÿ› ๏ธ Improved
639
+ - **docs**: docs/cli.md - Updated CLI documentation to reflect all available commands, options, and examples based on actual implementation in llm4free/cli.py.
640
+ - **docs**: README.md - Enhanced CLI section with comprehensive command examples and search provider information.
641
+ - **docs**: docs/openai-api-server.md - Updated documentation to reflect actual server implementation with Docker, configuration, and API endpoint details.
642
+ - **docs**: docs/client.md - Updated to emphasize client as Python-based API using models in OpenAI format, with relationship to server API clarified.
643
+
644
+ ### โœจ Added
645
+ - **feat**: llm4free/Provider/TTS/sherpa.py - New SherpaTTS provider using Next-gen Kaldi (Sherpa-ONNX) HF Space API, supporting 50+ languages and multiple ONNX models.
646
+ - **feat**: llm4free/Provider/TTS/qwen.py - New Qwen3-TTS provider reverse engineered from Hugging Face Space demo, supporting 40+ high-quality voices and automatic language detection.
647
+ - **feat**: llm4free/Provider/TTS/deepgram.py - Updated to support Aura-2 next-gen voices and latest API endpoint.
648
+ - **feat**: llm4free/Provider/TTS/elevenlabs.py - Added support for ElevenLabs API keys.
649
+ - **feat**: llm4free/Provider/TTI/miragic.py - New MiragicAI TTI provider reverse engineered from Hugging Face Space, supporting 'flux', 'turbo', and 'gptimage' models with streaming support.
650
+ - **feat**: llm4free/server/routes.py - Added `/monitor/health` endpoint for Docker health checks, returning service status and version information.
651
+
652
+ ### ๐Ÿ› ๏ธ Improved
653
+ - **fix**: llm4free/Provider/TTS/freetts.py - Fixed 404 error by updating to the latest synthesis API and polling mechanism.
654
+ - **fix**: llm4free/Provider/TTS/parler.py - Switched to manual Gradio polling for improved reliability and timeout handling.
655
+ - **removed**: llm4free/Provider/TTS/gesserit.py - Removed dead TikTok TTS provider.
656
+ - **refactor**: llm4free/Provider/TTS/__init__.py - Added QwenTTS and SherpaTTS to the exported TTS providers.
657
+ - **refactor**: llm4free/Provider/OPENAI/__init__.py - Added LLMChat to the list of exported OpenAI-compatible providers.
658
+ - **refactor**: llm4free/Provider/OPENAI/e2b.py - Removed all unwanted `print` statements and ANSI escape codes to make the provider fully silent.
659
+ - **refactor**: llm4free/Provider/TTS/ - Updated all TTS providers to use `ic` from litprinter instead of `print` for debugging, following the pattern established in deepgram.py:
660
+ - Updated `murfai.py`, `openai_fm.py`, `parler.py`, `qwen.py`, `sherpa.py`, `streamElements.py`, `base.py`, `freetts.py`, `speechma.py`
661
+ - All debug statements now use `ic.configureOutput(prefix='DEBUG| '); ic(f"Debug message")` pattern
662
+ - **refactor**: Docker configuration files for better dynamic configuration support:
663
+ - Updated `.dockerignore` to properly exclude documentation while keeping essential files
664
+ - Enhanced `docker-compose.yml` with accurate environment variable documentation
665
+ - Improved `docker-compose.no-auth.yml` to reflect actual server capabilities
666
+ - Updated `Dockerfile` with proper health check endpoint and dynamic configuration defaults
667
+ - Improved `docs/DOCKER.md` documentation with accurate environment variable information
668
+
669
+ ### ๐Ÿšฎ Removed
670
+ - **removed**: `gradio_client` dependency from pyproject.toml as it's no longer needed.
671
+ - **removed**: `gemini-2.0-flash` from Ayle provider model lists (`llm4free/Provider/Ayle.py`, `llm4free/Provider/OPENAI/ayle.py`).
672
+ - **removed**: llm4free/Provider/AISEARCH/stellar_search.py - Removed dead Stellar AI search provider that was causing import errors and service unavailability.
673
+
674
+ ### ๐Ÿ› Fixed
675
+ - **fix**: llm4free/Provider/meta.py - Fixed HTTP/2 stream closure errors (curl error 92) by implementing robust retry mechanism with exponential backoff using AIutel retry decorator
676
+ - **fix**: llm4free/Provider/meta.py - Added HTTP/1.1 fallback via requests library when HTTP/2 streams fail, ensuring compatibility with problematic networks
677
+ - **fix**: llm4free/Provider/meta.py - Improved cookie extraction with retry logic, fallback to browser cookies, and better error handling for region-blocked sites
678
+ - **fix**: llm4free/Provider/meta.py - Added `skip_init` parameter for offline testing and development without requiring live cookie fetching
679
+ - **fix**: llm4free/Provider/meta.py - Enhanced streaming error recovery to gracefully handle connection interruptions during response iteration
680
+ - **fix**: llm4free/Provider/meta.py - Improved main module error handling with helpful guidance for network issues and testing modes
681
+ - **test**: Added comprehensive unit tests in `tests/test_meta_http2.py` for HTTP/2 fallback functionality and retry mechanisms
682
+ - **fix**: llm4free/Provider/oivscode.py - Fixed type annotation bugs by updating optional parameters to use `Optional[str]` type hints, correcting method calls, and adding proper string handling in `get_message()` method
683
+ - **fix**: llm4free/Provider/oivscode.py - Removed unwanted print statements from `fetch_available_models()` method and updated its docstring to reflect that it no longer prints models
684
+ - **fix**: llm4free/sanitize.py - Fixed import organization issues using `ruff check --fix` to properly sort and format imports according to project standards
685
+ - **fix**: llm4free/scout - Fixed multiple critical bugs, removed direct BeautifulSoup references and updated BS4-compatible messaging across the scout component. (Applied ruff checks and whitespace fixes)
686
+ - **fix**: llm4free/scout/core/scout.py - Resolved `TypeError` in `extract_metadata` and standardized `find` return types.
687
+ - **fix**: llm4free/scout/core/crawler.py - Improved domain validation security, fixed overly aggressive URL normalization, and corrected parser selection logic.
688
+ - **fix**: llm4free/scout/element.py - Fixed class matching logic and self-closing tag rendering in `prettify`.
689
+ - **fix**: llm4free/scout/parsers/lxml_parser.py - Implemented XML namespace stripping for cleaner tag names.
690
+ - **fix**: llm4free/Provider/QwenLM.py - Fixed multiple critical bugs including syntax errors, indentation issues, and formatting problems. Applied ruff check fixes to resolve blank lines with whitespace, trailing whitespace, and proper docstring formatting.
691
+
692
+ ## [2025.12.19] - 2025-12-19
693
+
694
+ ### โœจ Added
695
+ - **feat**: llm4free/client.py - Enhanced unified Client interface for AI providers:
696
+ - `client.chat.completions.create()` - OpenAI-compatible chat completions
697
+ - `client.images.generate()` / `client.images.create()` - Unified image generation
698
+ - **Intelligent Model Resolution**:
699
+ - `model="auto"`: Automatically selects a random free provider and its default model
700
+ - `model="ProviderName/model_name"`: Directly target a specific provider and model (e.g., `"Toolbaz/grok-4.1-fast"`)
701
+ - `model="model_name"`: Automatically finds which provider supports the requested model
702
+ - **Simplified Auth Detection**: Providers are now identified as "free" or "auth-required" based solely on the `required_auth` attribute
703
+ - **Auto-failover**: Improved failover logic that intelligently adjusts model names across different providers
704
+ - **Failover on Empty Response**: Added logic to detect empty or invalid non-streaming responses and automatically trigger failover to alternative providers.
705
+ - Dynamic discovery for all 39+ chat and 13+ image providers
706
+ - Support for custom `exclude` and `exclude_images` lists
707
+ - **Fuzzy Model Matching**: Automatically finds the closest matching model name across all providers (both chat and TTI) if an exact match is not found (e.g., `model="grok-4.1-fst"` matches `"grok-4.1-fast"` and `model="fluux"` matches `"flux"`). Uses `difflib` with a 0.6 confidence cutoff.
708
+ - Added `last_provider` property to track successful provider/model pairs
709
+ - Cleaned up internal implementation and removed redundant debug prints
710
+ - **feat**: llm4free/Provider/OPENAI/typliai.py - New OpenAI-compatible TypliAI provider with streaming and non-streaming support for GPT-4.1, GPT-5, Gemini 2.5, Claude 4.5, and Grok 4 models.
711
+ - **feat**: llm4free/Provider/OPENAI/easemate.py - New OpenAI-compatible Easemate provider.
712
+ - **feat**: llm4free/Provider/OPENAI/freeassist.py - New OpenAI-compatible FreeAssist provider.
713
+
714
+ ### ๐Ÿ”ง Improved
715
+ - **refactor**: llm4free/client.py - Robust model discovery logic that safely handles class attributes, instance properties (including `@property`), and `.models.list()` methods during model resolution and fuzzy matching.
716
+ - **refactor**: llm4free/Provider/Sambanova.py - Major refactor to align with TextPollinationsAI pattern: - Implemented `sanitize_stream` for robust SSE parsing.
717
+ - Added support for tools and tool calling via `tools` and `tool_choice`.
718
+ - Added dynamic model fetching with `update_available_models`.
719
+ - Integrated `LitAgent` for dynamic browser fingerprinting.
720
+
721
+ ## [2025.12.18] - 2025-12-18
722
+
723
+ ### ๐Ÿšฎ Removed
724
+ - **removed**: llm4free/Provider/Perplexitylabs.py - Removed PerplexityLabs provider file.
725
+ - **removed**: PerplexityLabs entry from Provider.md documentation and statistics.
726
+ - **removed**: References to PerplexityLabs from llm4free/Provider/__init__.py.
727
+ - **removed**: llm4free/Provider/TeachAnything.py - Removed TeachAnything provider file.
728
+ - **removed**: TeachAnything entry from Provider.md documentation and statistics.
729
+ - **removed**: References to TeachAnything from llm4free/Provider/__init__.py.
730
+ - **removed**: llm4free/Provider/GeminiProxy.py - Removed GeminiProxy provider file.
731
+ - **removed**: GeminiProxy entry from Provider.md documentation and statistics.
732
+ - **removed**: References to GeminiProxy from llm4free/Provider/__init__.py.
733
+
734
+ ### ๐Ÿ› ๏ธ Fixed
735
+ - **fix**: llm4free/Provider/OPENAI/ - Fixed "Accept-Encoding" issue in multiple providers (`K2Think`, `AkashGPT`, `LLMChatCo`, `Yep`, `Zenmux`, `DeepInfra`) that caused decompression errors and empty responses when using `requests` or `cloudscraper` libraries.
736
+ - **fix**: llm4free/Provider/turboseek.py - Updated provider to handle new HTML-based raw stream response format and improved HTML-to-Markdown conversion.
737
+
738
+
739
+ ## [2025.12.17] - 2025-12-17
740
+
741
+ ### โœจ Added
742
+
743
+ ### ๐Ÿšฎ Removed
744
+ - **removed**: llm4free/Provider/Nemotron.py - Removed Nemotron provider as the file doesn't exist and was causing import errors
745
+ - **removed**: References to NEMOTRON from llm4free/Provider/__init__.py
746
+ - **removed**: Nemotron entry from Provider.md documentation
747
+
748
+ - **feat**: llm4free/Provider/OPENAI/gradient.py - New OpenAI-compatible Gradient Network provider for accessing distributed GPU clusters with models GPT OSS 120B and Qwen3 235B
749
+ - **feat**: llm4free/Provider/OPENAI/gradient.py - Supports both streaming and non-streaming modes with thinking/reasoning capability
750
+ - **feat**: llm4free/Provider/OPENAI/gradient.py - Auto-detection of cluster mode per model (nvidia for GPT OSS 120B, hybrid for Qwen3 235B)
751
+ - **feat**: llm4free/Provider/freeassist.py - New OpenAI-compatible FreeAssist provider using FreeAssist.ai API with access to multiple AI models including gemini 2.5 flash and flash lite and GPT-5-nano and GPT-5-mini
752
+ - **feat**: llm4free/Provider/OPENAI/sambanova.py - New OpenAI-compatible Sambanova provider supporting Llama 3.1/3.3, Qwen, and DeepSeek models with streaming capabilities
753
+ - **feat**: llm4free/Provider/OPENAI/meta.py - New OpenAI-compatible Meta AI provider with web authentication, optional Facebook login, and streaming support
754
+
755
+ ### ๐Ÿ”ง Improved
756
+
757
+ - **refactor**: llm4free/Provider/Gradient.py - Major rewrite with correct headers matching actual API, proper SSE response parsing for content/reasoningContent
758
+ - **refactor**: llm4free/Provider/Gradient.py - Now uses sanitize_stream with custom _gradient_extractor following the pattern of other providers
759
+ - **refactor**: llm4free/Provider/Gradient.py - Added MODEL_CLUSTERS mapping for auto-detection of cluster mode (nvidia for GPT, hybrid for Qwen3)
760
+ - **refactor**: llm4free/Provider/Gradient.py - Updated model names to use spaces (GPT OSS 120B, Qwen3 235B) matching API format
761
+ - **feat**: llm4free/Provider/OPENAI/freeassist.py - Supports both streaming and non-streaming modes with proper SSE parsing
762
+ - **feat**: llm4free/Provider/OPENAI/zenmux.py - Implemented dynamic model list fetching from `https://zenmux.ai/api/v1/models` API endpoint, making it fully compatible with Groq provider pattern
763
+ - **refactor**: llm4free/Provider/TextPollinationsAI.py - Switched to requests library and implemented proper non-streaming support via `stream=False` to match API behavior
764
+ - **fix**: llm4free/Provider/OPENAI/textpollinations.py - Fixed duplicate code blocks and syntax errors, ensuring proper class structure and dynamic model fetching
765
+
766
+ ### ๐Ÿšฎ Removed
767
+ - **removed**: llm4free/Provider/OPENAI/FreeGemini.py - Removed FreeGemini provider due to service deprecation
768
+ - **removed**: llm4free/Provider/OpenGPT.py - Removed OpenGPT provider from the project
769
+
770
+ ### ๐Ÿ”ง Maintenance
771
+ - **refactor**: llm4free/Provider/OPENAI/DeepAI.py - Implemented dynamic model fetching using `get_models()` and `update_available_models()` class methods following Cerebras provider pattern
772
+ - **refactor**: llm4free/Provider/OPENAI/textpollinations.py - Implemented dynamic model fetching using `get_models()` and `update_available_models()` class methods following Cerebras provider pattern
773
+ - **refactor**: llm4free/Provider/TTI/together.py - Implemented dynamic model fetching using `get_models()` and `update_available_models()` class methods following Cerebras provider pattern
774
+ - **docs**: Updated provider documentation to reflect consistent dynamic model fetching implementation across providers
775
+
776
+ ## [2025.12.16] - 2025-12-16
777
+
778
+ ### โœจ Added
779
+
780
+ - **feat**: llm4free/Provider/OPENAI/zenmux.py - Added `get_models()` and `update_available_models()` class methods for automatic model discovery and updating AVAILABLE_MODELS on initialization
781
+
782
+ #### GGUF Converter v2.0 Major Update
783
+ - **feat**: llm4free/Extra/gguf.py - Upgraded to version 2.0.0 with latest llama.cpp features
784
+ - **feat**: Added new output types (`--outtype`): `f32`, `f16`, `bf16`, `q8_0`, `tq1_0`, `tq2_0`, `auto`
785
+ - **feat**: Added remote mode (`--remote`) for experimental tensor streaming without full model download
786
+ - **feat**: Added dry run mode (`--dry-run`) to preview split plans without writing files
787
+ - **feat**: Added vocab-only mode (`--vocab-only`) to extract just vocabulary without model weights
788
+ - **feat**: Added no-lazy mode (`--no-lazy`) to disable lazy evaluation for debugging
789
+ - **feat**: Added model name override (`--model-name`) for custom output naming
790
+ - **feat**: Added small first shard (`--small-first-shard`) for metadata-only first split file
791
+ - **feat**: Added new K-quant types: `q2_k_s`, `q4_k_l`, `q5_k_l`
792
+ - **feat**: Added ternary quantization: `tq1_0` (1-bit), `tq2_0` (2-bit) experimental
793
+ - **feat**: Added comprehensive IQ (importance-based) quantization methods:
794
+ - 1-bit: `iq1_s`, `iq1_m`
795
+ - 2-bit: `iq2_xxs`, `iq2_xs`, `iq2_s`, `iq2_m`
796
+ - 3-bit: `iq3_xxs`, `iq3_xs`, `iq3_s`, `iq3_m`
797
+ - 4-bit: `iq4_nl`, `iq4_xs`
798
+
799
+ #### GitToolkit Enhancements
800
+ - **feat**: llm4free/Extra/GitToolkit/gitapi/search.py - New `GitSearch` class with methods for GitHub Search API: `search_repositories()`, `search_users()`, `search_topics()`, `search_commits()`, `search_issues()`, `search_labels()`
801
+ - **feat**: llm4free/Extra/GitToolkit/gitapi/gist.py - New `Gist` class for public gist operations: `get()`, `list_public()`, `list_for_user()`, `get_commits()`, `get_forks()`, `get_revision()`, `get_comments()`
802
+ - **feat**: llm4free/Extra/GitToolkit/gitapi/organization.py - New `Organization` class for org data: `get_info()`, `get_repos()`, `get_public_members()`, `get_events()`
803
+ - **feat**: llm4free/Extra/GitToolkit/gitapi/trending.py - New `Trending` class for GitHub trending: `get_repositories()`, `get_developers()`
804
+ - **feat**: llm4free/Extra/GitToolkit/gitapi/repository.py - Added 9 new methods: `get_readme()`, `get_license()`, `get_topics()`, `get_forks()`, `get_stargazers()`, `get_watchers()`, `compare()`, `get_events()`
805
+ - **feat**: llm4free/Extra/GitToolkit/gitapi/user.py - Added 2 new methods: `get_social_accounts()`, `get_packages()`
806
+
807
+ #### YTToolkit Enhancements
808
+ - **feat**: llm4free/Extra/YTToolkit/ytapi/suggestions.py - New `Suggestions` class for YouTube autocomplete: `autocomplete()`, `trending_searches()`
809
+ - **feat**: llm4free/Extra/YTToolkit/ytapi/shorts.py - New `Shorts` class for YouTube Shorts: `is_short()`, `get_trending()`, `search()`
810
+ - **feat**: llm4free/Extra/YTToolkit/ytapi/hashtag.py - New `Hashtag` class for hashtag videos: `get_videos()`, `get_metadata()`, `extract_from_text()`
811
+ - **feat**: llm4free/Extra/YTToolkit/ytapi/captions.py - New `Captions` class for video transcripts: `get_available_languages()`, `get_transcript()`, `get_timed_transcript()`, `search_transcript()`
812
+ - **feat**: llm4free/Extra/YTToolkit/ytapi/video.py - Added new properties/methods: `is_live`, `is_short`, `hashtags`, `get_related_videos()`, `get_chapters()`, `stream_comments()`
813
+ - **feat**: llm4free/Extra/YTToolkit/ytapi/query.py - Added new search methods: `shorts()`, `live_streams()`, `videos_by_duration()`, `videos_by_upload_date()`
814
+ - **feat**: llm4free/Extra/YTToolkit/ytapi/extras.py - Added new trending methods: `shorts_videos()`, `movies()`, `podcasts()`
815
+
816
+ ### ๐Ÿ”ง Improved
817
+ - **refactor**: llm4free/Extra/YTToolkit/transcriber.py - Rewrote YTTranscriber to use YouTube's InnerTube API for more reliable transcript fetching, replacing brittle HTML parsing with direct API calls
818
+ - Uses `/youtubei/v1/player` endpoint for stable data extraction
819
+ - Added better error handling for IP blocks, bot detection, and age-restricted videos
820
+ - Fixed caption name parsing for new YouTube format (runs vs simpleText)
821
+ - Removed problematic `&fmt=srv3` from caption URLs
822
+ - Added fallback XML parsing for edge cases
823
+
824
+ ### ๐Ÿ”ง Maintenance
825
+ - **refactor**: llm4free/Extra/GitToolkit/gitapi/__init__.py - Updated exports to include new classes
826
+ - **refactor**: llm4free/Extra/YTToolkit/ytapi/__init__.py - Updated exports to include new classes
827
+ - **docs**: llm4free/Extra/GitToolkit/gitapi/README.md - Updated documentation with all new features and examples
828
+ - **docs**: llm4free/Extra/YTToolkit/README.md - Updated documentation with all new features and examples
829
+ - **refactor**: llm4free/Extra/gguf.py - Updated conversion logic to use dynamic outtype instead of hardcoded f16
830
+ - **refactor**: llm4free/Extra/gguf.py - Improved split size validation to support K, M, G units matching llama.cpp
831
+ - **refactor**: llm4free/Extra/gguf.py - Added outtype validation against VALID_OUTTYPES set
832
+ - **docs**: Moved llm4free/Extra/gguf.md โ†’ docs/gguf.md for better documentation organization
833
+ - **docs**: docs/gguf.md - Complete rewrite for v2.0 with all new features, examples, and troubleshooting
834
+
835
+ ### ๐Ÿšฎ Removed
836
+ - **removed**: llm4free/Extra/autocoder/ - Completely removed AutoCoder package directory and all its files.
837
+ - **refactor**: llm4free/AIutel.py - Removed AutoCoder import.
838
+ - **refactor**: llm4free/Extra/__init__.py - Removed AutoCoder import.
839
+
840
+
841
+ ## [2025.12.09] - 2025-12-09
842
+
843
+ ### โœจ Added
844
+ - **feat**: pyproject.toml - Added `litprinter` dependency for improved logging functionality
845
+ - **feat**: llm4free/Provider/OPENAI/utils.py - Added dict-like access methods (`__getitem__`, `__setitem__`, `keys`, `values`, `items`) to `ChatCompletionMessage` class for better compatibility
846
+ - **feat**: llm4free/Provider/OPENAI/PI.py - Added missing `count_tokens` import for proper token counting functionality
847
+
848
+ ### ๐Ÿ› Fixed
849
+ - **fix**: llm4free/server/providers.py - Added `required_auth = False` filtering to only initialize OpenAI-compatible providers that don't require authentication, improving server startup and reducing provider count to 28 no-auth providers
850
+
851
+ ### ๐Ÿ”ง Maintenance
852
+ - **refactor**: Replaced Litlogger with litprinter across entire codebase for consistent logging:
853
+ - **refactor**: llm4free/Extra/autocoder/autocoder.py - Updated logger initialization comment
854
+ - **refactor**: llm4free/Extra/tempmail/async_utils.py - Replaced standard logging with litprinter
855
+ - **refactor**: llm4free/Provider/OPENAI/K2Think.py - Replaced Litlogger imports with litprinter
856
+ - **refactor**: llm4free/Provider/OPENAI/base.py - Replaced Litlogger with litprinter for error logging
857
+ - **refactor**: llm4free/Provider/TTS/speechma.py - Replaced Litlogger with litprinter
858
+ - **refactor**: llm4free/Provider/meta.py - Removed unused logging import
859
+ - **refactor**: llm4free/__init__.py - Removed Litlogger import
860
+ - **refactor**: llm4free/conversation.py - Replaced logging with litprinter
861
+ - **refactor**: llm4free/search/base.py - Replaced logging with litprinter
862
+ - **refactor**: llm4free/search/engines/wikipedia.py - Replaced logging with litprinter
863
+ - **refactor**: llm4free/search/http_client.py - Replaced logging with litprinter
864
+ - **refactor**: llm4free/server/config.py - Replaced Litlogger with litprinter
865
+ - **refactor**: llm4free/server/providers.py - Replaced Litlogger with litprinter
866
+ - **refactor**: llm4free/server/request_processing.py - Replaced Litlogger with litprinter and added inline utility functions
867
+ - **refactor**: llm4free/server/routes.py - Replaced Litlogger with litprinter
868
+ - **refactor**: llm4free/server/server.py - Replaced Litlogger with litprinter
869
+ - **refactor**: llm4free/search/engines/__init__.py - Changed from auto-discovery to static imports for better performance and reliability
870
+ - **refactor**: llm4free/Provider/AISEARCH/__init__.py - Cleaned up import comments
871
+ - **refactor**: llm4free/server/request_processing.py - Added inline implementations of `get_client_ip()`, `generate_request_id()`, and `log_api_request()` functions to replace dependency on simple_logger.py
872
+ - **refactor**: README.md - Removed reference to deprecated LitLogger
873
+ - **refactor**: lol.py - Updated example to use ChatGPT provider and added cprint import
874
+
875
+ ### ๐Ÿšฎ Removed
876
+ - **removed**: AGENTS.md - Deleted unused documentation file
877
+ - **removed**: llm4free/Litlogger/ - Completely removed Litlogger package directory and all its files (README.md, __init__.py, formats.py, handlers.py, levels.py, logger.py)
878
+ - **removed**: llm4free/litprinter/__init__.py - Removed redundant wrapper file
879
+ - **removed**: llm4free/server/simple_logger.py - Deleted file as functionality moved inline to request_processing.py
880
+
881
+ ## [2025.12.03] - 2025-12-03
882
+
883
+ ### โœจ Added
884
+ - **feat**: llm4free/search/engines/__init__.py - Updated auto-discovery logic to register all search engine classes with `name` and `category` attributes, not just BaseSearchEngine subclasses
885
+ - **feat**: llm4free/server/routes.py - Added new `/search/provider` endpoint that returns details about each search provider including name, supported categories, and parameters
886
+ - **feat**: llm4free/models.py - Enhanced LLM models class with `providers()` and `provider()` methods that return detailed provider information including models, parameters, and metadata
887
+ - **feat**: llm4free/models.py - Added TTI (Text-to-Image) models support with `_TTIModels` class including detailed provider information methods
888
+ - **feat**: added all engines to cli.py
889
+ - **feat**: cli.py - Added CLI commands for Bing search (text, images, news, suggestions)
890
+ - **feat**: cli.py - Added CLI commands for Yahoo search (text, images, videos, news, answers, maps, translate, suggestions, weather)
891
+ - **feat**: Algion.py - Implemented dynamic model loading from API without hardcoded defaults, ensuring AVAILABLE_MODELS is only populated if API fetch succeeds
892
+ - **feat**: Cerebras.py - Modified AVAILABLE_MODELS to use dynamic loading without defaults, requiring API key for model fetching
893
+ - **feat**: OPENAI/algion.py - Added OpenAI-compatible Algion provider with dynamic model loading
894
+ - **feat**: OPENAI/cerebras.py - Added OpenAI-compatible Cerebras provider with dynamic model loading
895
+ - **feat**: OPENAI/elmo.py - Added OpenAI-compatible Elmo provider
896
+ - **feat**: conversation.py - Added logging import for debug messages in file operations
897
+ - **feat**: conversation.py - Added __trim_chat_history private method for history length management
898
+
899
+ ### ๐Ÿ› Fixed
900
+ - **fix**: llm4free/server/routes.py - Fixed search engine method checking bug where it was looking for `hasattr(searcher, type)` instead of `hasattr(searcher, "run")`, preventing DuckDuckGo and other engines from working
901
+ - **fix**: llm4free/server/routes.py - Fixed FastAPI UI documentation issue where search engines were listed multiple times by using `set()` to get unique engine names
902
+ - **fix**: llm4free/search/engines/brave.py - Added `run` method to Brave search engine class for compatibility with search endpoint
903
+ - **fix**: llm4free/search/engines/mojeek.py - Added `run` method to Mojeek search engine class for compatibility with search endpoint
904
+ - **fix**: llm4free/search/engines/yandex.py - Added `run` method to Yandex search engine class for compatibility with search endpoint
905
+ - **fix**: llm4free/search/engines/wikipedia.py - Added `run` method to Wikipedia search engine class for compatibility with search endpoint
906
+ - **fix**: llm4free/models.py - Fixed `_LLMModels.summary()` method which was missing its return statement, causing it to return `None` instead of the expected dictionary with provider and model counts
907
+
908
+ ### ๐Ÿ”ง Maintenance
909
+ - **refactor**: Added dynamic model fetching to OPENAI and GEMINIAPI providers similar to Algion provider, with get_models() classmethod that fetches available models from API
910
+ - **refactor**: Updated models.py to prioritize get_models() method over AVAILABLE_MODELS for dynamic model loading in provider discovery
911
+ - **refactor**: Added `name` and `category` attributes to all DuckDuckGo search engine classes (text, images, videos, news, suggestions, answers, maps, translate, weather)
912
+ - **refactor**: Added `name` and `category` attributes to Bing search engine classes (text, images, news, suggestions)
913
+ - **refactor**: Added `name` and `category` attributes to Yep search engine classes (text, images, suggestions)
914
+ - **refactor**: Updated llm4free/search/engines/bing/__init__.py to import and expose Bing search engine classes
915
+ - **refactor**: Updated `/search` endpoint description to reflect support for all available search engines and search types
916
+ - **refactor**: prompt_manager.py - Removed unused imports, redundant code, and cleaned up class for clarity and minimalism
917
+ - **chore**: prompt_manager.py - Minor optimizations and code style improvements
918
+ - **refactor**: cli.py - Cleaned up incomplete command stubs and fixed inconsistencies in option decorators
919
+ - **removed**: cli.py - Removed unused imports and broken command implementations
920
+ - **cleanup**: Removed unused `schemas.py` file from server.
921
+ - **refactor**: Removed all imports and references to `HealthCheckResponse` and `ErrorResponse` from `routes.py` and `__init__.py`.
922
+ - **refactor**: Cleaned up unused imports (secrets, etc.) in `routes.py`.
923
+ - **refactor**: Updated `__init__.py` to only export actively used symbols and remove legacy schema references.
924
+ - **refactor**: Ensured all server modules only contain necessary code and imports, improving maintainability and clarity.
925
+ - **refactor**: conversation.py - Simplified Conversation class to use string-based chat history instead of message objects, removing tool handling, metadata, timestamps, and complex validation
926
+ - **refactor**: conversation.py - Updated history format to use "User : %(user)s\nLLM :%(llm)s" pattern for consistency
927
+ - **refactor**: conversation.py - Removed all tool-related methods (handle_tool_response, _parse_function_call, execute_function, get_tools_description, update_chat_history_with_tool)
928
+ - **refactor**: conversation.py - Streamlined file loading and history management to use simple string concatenation
929
+ - **refactor**: yep.py - Removed tool parameter and tool handling logic from YEPCHAT provider
930
+ - **refactor**: yep.py - Simplified ask method to directly update chat history without tool processing
931
+ - **refactor**: TeachAnything.py - No changes needed as it didn't use tool functionality
932
+
933
+ ### ๐Ÿšฎ Removed
934
+ - **removed**: conversation.py - Removed Fn class, Message dataclass, FunctionCall, ToolDefinition, FunctionCallData TypedDicts
935
+ - **removed**: conversation.py - Removed add_message, validate_message, _append_to_file, _compress_history methods
936
+ - **removed**: conversation.py - Removed tool_history_format and related attributes
937
+ - **removed**: yep.py - Removed tool-related imports and examples from docstrings
938
+ - **removed**: AsyncProvider - Completely removed AsyncProvider class and all imports from provider files (Cohere.py, Groq.py, Koboldai.py, julius.py, HeckAI.py, ChatHub.py)
939
+ - **removed**: AsyncGROQ - Removed AsyncGROQ class from Groq.py that inherited from AsyncProvider
940
+ - **removed**: llm4free/server/routes.py - Removed monitoring endpoints (`/monitor/requests`, `/monitor/stats`, `/monitor/health`) and related code from server
941
+ - **removed**: llm4free/server/simple_logger.py - Removed unused monitoring methods (`get_recent_requests`, `get_stats`) from SimpleRequestLogger class
942
+
943
+
944
+ ## [2025.12.01] - 2025-12-01
945
+ ### โœจ Added
946
+ - **feat**: sanitize.py - Added `output_formatter` parameter to `sanitize_stream()` for custom output transformation
947
+ - **feat**: sanitize.py - Users can now define custom formatter functions to transform each output item into any desired structure before yielding
948
+
949
+ ### ๐Ÿšฎ Removed
950
+ - **removed**: sanitize.py - Removed built-in response formatters (`ResponseFormatter`, `OutputFormat`, `create_openai_response`, `create_openai_stream_chunk`, `create_anthropic_response`, `create_anthropic_stream_chunk`, `format_output`) in favor of user-defined `output_formatter` functions
951
+ - **removed**: sanitize.py - Removed `output_format` and `format_options` parameters from `sanitize_stream()` - use `output_formatter` instead
952
+
953
+ ### ๐Ÿ“ Documentation
954
+ - **docs**: sanitize.md - Updated documentation with `output_formatter` parameter and usage examples
955
+ - **docs**: sanitize.md - Removed references to removed built-in formatters
956
+
957
+ ## [2025.11.30] - 2025-11-30
958
+
959
+ ### ๐Ÿ”ง Maintenance
960
+ - **refactor**: Added missing `# type: ignore` to imports for optional dependencies (trio, numpy, tiktoken, pandas) in multiple modules for better compatibility and linting
961
+ - **refactor**: Improved type hints and error handling in `scout/core/crawler.py` and `scout/core/scout.py`
962
+ - **refactor**: Updated `oivscode.py` to generate and use a unique ClientId (UUID) in headers
963
+ - **refactor**: Updated CLI group import in `swiftcli/core/cli.py` to avoid circular dependency
964
+ - **refactor**: Minor docstring and comment cleanups in AISEARCH providers
965
+ - **chore**: Removed unfinished providers: `Aitopia.py`, `VercelAIGateway.py`, `puterjs.py`, `scira_search.py`, `hika_search.py` from Provider/UNFINISHED and Provider/AISEARCH
966
+
967
+ ### ๐Ÿ› Fixed
968
+ - **fix**: Fixed error handling in `sanitize.py` async stream processing (removed logger usage in extractor error branch)
969
+ - **fix**: Fixed import and type hint issues in `duckduckgo/base.py`, `search/http_client.py`, `Provider/cerebras.py`, and others
970
+ - **fix**: Fixed streaming output and test code in `genspark_search.py`, `PERPLEXED_search.py`, and `iask_search.py` for more robust CLI testing
971
+ - **fix**: Fixed YahooSearch import for Dict type in `search/yahoo_main.py`
972
+
973
+ ### ๐Ÿšฎ Removed
974
+ - **removed**: Deleted unfinished provider files: `Aitopia.py`, `VercelAIGateway.py`, `puterjs.py`, `scira_search.py`, `hika_search.py` for codebase cleanup
975
+
976
+ ### ๐Ÿ› Fixed
977
+ - **fix**: TogetherAI.py - Updated API endpoint from `https://chat.together.ai/api/chat-completion` to `https://api.together.xyz/v1/chat/completions` for compatibility with the public Together API
978
+ - **fix**: TogetherAI.py - Fixed payload parameters to use OpenAI-compatible format (`model`, `max_tokens`, `top_p` instead of `modelId`, `maxTokens`, `topP`)
979
+ - **fix**: OPENAI/TogetherAI.py - Removed self-activation endpoint logic that auto-fetched API keys from external service
980
+
981
+ ### โœจ Added
982
+ - **feat**: TogetherAI.py - Implemented dynamic model loading from `https://api.together.xyz/v1/models` API, similar to Groq provider
983
+ - **feat**: TogetherAI.py - Added `get_models()` and `update_available_models()` class methods for automatic model discovery
984
+ - **feat**: OPENAI/TogetherAI.py - Added dynamic model loading support with automatic model list updates on initialization
985
+ - **feat**: OPENAI/TogetherAI.py - Now requires user-provided API key via `api_key` parameter, following Groq provider pattern
986
+
987
+ ### ๐Ÿ”ง Maintenance
988
+ - **refactor**: TogetherAI.py - Changed `AVAILABLE_MODELS` from hardcoded dictionary to dynamically populated list
989
+ - **refactor**: TogetherAI.py - Updated model validation to handle empty model lists gracefully when API fetch fails
990
+ - **refactor**: OPENAI/TogetherAI.py - Removed `activation_endpoint` and `get_activation_key()` method for better security practices
991
+ - **refactor**: OPENAI/TogetherAI.py - Updated `__init__` to accept `api_key` parameter and conditionally update models if key is provided
992
+
993
+ ## [2025.11.21] - 2025-11-21
994
+
995
+ ### ๐Ÿ› Fixed
996
+ - **fix**: IBM.py - Fixed typo in `refresh_identity` method where `s-elf.headers` was incorrectly used instead of `self.headers`
997
+ - **fix**: AIauto.py - Fixed critical bug where `chat` method could return a generator when `stream=False`, causing `AssertionError` in providers like AI4Chat
998
+ - **fix**: AIauto.py - Added proper handling for providers that return generators even in non-streaming mode by consuming the generator to extract the return value
999
+
1000
+ ### โœจ Added
1001
+ - **feat**: AIauto.py - Enhanced provider failover mechanism to "peek" at the first chunk of streaming responses, allowing automatic failover to next provider if current one fails immediately
1002
+ - **feat**: AIauto.py - Split `chat` method into `_chat_stream` and `_chat_non_stream` helper methods for clearer separation of streaming vs non-streaming logic
1003
+ - **feat**: OPENAI/ibm.py - Added OpenAI-compatible IBM Granite provider in `llm4free/Provider/OPENAI/` with support for `granite-chat` and `granite-search` models
1004
+ - **feat**: OPENAI/ibm.py - Implemented using `format_prompt()` and `count_tokens()` utilities from utils.py for proper message formatting and accurate token counting
1005
+ - **feat**: OPENAI/ibm.py - Manual SSE (Server-Sent Events) stream parsing without sanitize_stream dependency, consistent with other OPENAI providers
1006
+
1007
+ ### ๐Ÿ”ง Maintenance
1008
+ - **refactor**: AIauto.py - Improved robustness of AUTO provider to work seamlessly with all providers in llm4free.Provider package
1009
+ - **refactor**: AIauto.py - Added generator type checking and handling to prevent type mismatches between streaming and non-streaming responses
1010
+
1011
+ ## [2025.11.20] - 2025-11-20
1012
+
1013
+ ### ๐Ÿ› Fixed
1014
+ - **fix**: sanitize.py - Fixed critical async stream processing logic error where variable `idx` was used outside its conditional scope, causing potential `UnboundLocalError`
1015
+ - **fix**: sanitize.py - Fixed Python 3.9+ compatibility issue by replacing `Pattern` from typing with `re.Pattern` for proper isinstance() checks
1016
+
1017
+ ### ๐Ÿ”ง Maintenance
1018
+ - **refactor**: sanitize.py - Reorganized imports for better structure (moved chain, functools, asyncio to top level)
1019
+ - **chore**: sanitize.py - Added `__all__` export list for explicit public API definition
1020
+ - **docs**: sanitize.py - Added comprehensive module docstring
1021
+ - **refactor**: sanitize.py - Updated all type hints to use modern syntax with `re.Pattern[str]`
1022
+ - **refactor**: Apriel.py - Simplified raw mode streaming logic for better performance
1023
+
1024
+ ## [2025.11.19] - 2025-11-19
1025
+
1026
+ ### ๐Ÿ”ง Maintenance
1027
+ - **chore**: Bard - added `gemini-3-pro` model with appropriate headers to `BardModel` enum
1028
+ - **GEMINI** - added `gemini-3-pro` model support in `GEMINI` class
1029
+ - **feat**: Updated search engines to use dataclass objects from results.py for better type safety and consistency
1030
+ - **refactor**: Updated all Providers to use `raw` flag of sanatize_stream for easy debugging
1031
+ - **removed**: Removed Cloudflare Provider
1032
+
1033
+ ### ๐Ÿ› Fixed
1034
+ - **fix**: ChatGPT provider - Fixed OpenAI compatibility issues in `llm4free/Provider/OPENAI/chatgpt.py` by updating streaming and non-streaming implementations to properly handle Server-Sent Events format and match OpenAI's response structure exactly
1035
+ - **fix**: ChatGPT provider - Enhanced error handling and parameter validation to follow OpenAI conventions
1036
+ - **fix**: AkashGPT provider - Fixed authentication issue in `llm4free/Provider/akashgpt.py` by updating API key handling to use cookies for authentication
1037
+
1038
+ ### โœจ Added
1039
+ - **feat**: ChatGPT provider - Added new models to AVAILABLE_MODELS including `gpt-5-1`, `gpt-5-1-instant`, `gpt-5-1-thinking`, `gpt-5`, `gpt-5-instant`, `gpt-5-thinking`
1040
+ - **feat**: New Provider: Algion with `gpt-5.1`and other models
1041
+
1042
+ ## [2025.11.17] - 2025-11-17
1043
+
1044
+ ### ๐Ÿ”ง Maintenance
1045
+ - **fix**: swiftcli - improved argument parsing: support `--key=value` and `-k=value` syntax; handle repeated flags/options (collected into lists)
1046
+ - **fix**: swiftcli - `convert_type` now handles boolean inputs and list-typed values robustly
1047
+ - **feat**: swiftcli - added support for option attributes: `count`, `multiple`, and `is_flag`; option callbacks supported; `choices` validation extended to multiple options
1048
+ - **fix**: swiftcli - option decorator uses a sentinel for unspecified defaults to avoid overriding function defaults with `None`
1049
+ - **feat**: swiftcli - CLI and `Group` now support the `@pass_context` decorator to inject `Context` and can run `async` coroutine commands
1050
+ - **fix**: swiftcli - help output deduplicates commands and displays aliases clearly; group help deduplicated and improved formatting
1051
+ - **test**: swiftcli - added comprehensive unit tests covering parsing, option handling (count/multiple/choices), `pass_context`, async behavior, group commands, and plugin manager lifecycle
1052
+ - **chore**: swiftcli - updated README with changelog, improved examples, and removed temporary debug/test helper files
1053
+ - **testing**: All swiftcli tests added in this change pass locally (14 tests total)
1054
+
1055
+ ## [2025.11.16] - 2025-11-16
1056
+ - **feat**: added `moonshotai/Kimi-K2-Thinking` and `MiniMaxAI/MiniMax-M2` models to DeepInfra provider AVAILABLE_MODELS in both `llm4free/Provider/Deepinfra.py` and `llm4free/Provider/OPENAI/deepinfra.py`
1057
+ - **feat**:
1058
+
1059
+ ### Maintenance
1060
+ - **feat**: fixed formating issue in HeckAI replaced `strip_chars=" \n\r\t",` with `strip_chars=""`
1061
+ - **chore**: updated CHANGELOG.md to changelog.md in MANIFEST.in for consistency
1062
+ - **chore**: updated release-with-changelog.yml to handle multiple version formats in changelog parsing
1063
+ - **feat**: Updated changelog parsing to recognize multiple version formats (e.g., "vX.Y.Z", "X.Y.Z") for improved release automation.
1064
+ - **feat**: updated `sanitize_stream` to support both `extract_regexes` and `content_extractor` at same time
1065
+ - **chore**: updated `release-with-changelog.yml` to normalize version strings by stripping leading 'v' or 'V'
1066
+ - **chore**: updated `sanitize_stream` docstring to clarify usage of `extract_regexes` and `content_extractor`
1067
+ - **chore**: updated models list in textpollionations provider
1068
+ - **chore**: replaced `anthropic:claude-3-5-haiku-20241022` with `anthropic:claude-haiku-4-5-20251001` in typefully provider
1069
+
1070
+ ### Added
1071
+ - **feat**: added `anthropic:claude-haiku-4-5-20251001` to typefully provider AVAILABLE_MODELS
1072
+ - **feat**: New IBM provider with `granite-search` and `granite-chat` models
1073
+
1074
+ ## [2025.11.06] - 2025-11-06
1075
+
1076
+ ### ๐Ÿ”ง Maintenance
1077
+ - **chore**: Remove GMI provider (a8928a0) โ€” Cleaned up provider roster by removing GMI to simplify maintenance and reduce duplicate or deprecated provider support.
1078
+
1079
+ ## [2025.10.22] - 2025-10-22
1080
+
1081
+ ### โœจ Added
1082
+ - **feat**: Add `claude-haiku-4.5` model to Flowith provider (3a80249) โ€” Flowith now supports additional Claude variants for creative text generation.
1083
+ - **feat**: Add `openai/gpt-oss-20b` and `openai/gpt-oss-120b` models to GMI provider (3a80249) โ€” Added support for larger OSS GPT models via GMI.
1084
+
1085
+ ### ๐Ÿ”ง Maintenance
1086
+ - **refactor**: Change `DeepAI` `required_auth` to `True` (3a80249) โ€” Ensure DeepAI provider requires authentication for API access.
1087
+ - **chore**: Add import error handling for `OLLAMA` provider (3a80249) โ€” Graceful degradation when optional dependencies are missing.
1088
+ - **chore**: Remove deprecated `FalconH1` and `deepseek_assistant` providers (3a80249) โ€” Reduced clutter and removed unsupported providers.
1089
+ - **chore**: Update `OPENAI`, `flowith`, and `gmi` providers with new model lists and aliases (3a80249) โ€” Keep model availability up-to-date and consistent.
1090
+
1091
+ ## [2025.10.18] - 2025-10-18
1092
+
1093
+ ### ๐Ÿš€ Major Enhancements
1094
+ - **๐Ÿค– AI Provider Expansion**: Integrated SciRA-AI and SciRA-Chat providers, adding robust model mapping and aliasing to unify behavior across providers.
1095
+
1096
+ ### ๐Ÿ“ฆ Package Structure
1097
+ - **๐Ÿ› ๏ธ Model Mapping System**: Introduced `MODEL_MAPPING` and `SCI_RA_TO_MODEL` dictionaries and updated `AVAILABLE_MODELS` lists to keep model names consistent and avoid duplication.
1098
+
1099
+ ### โšก Improvements
1100
+ - **๐Ÿ”„ Enhanced Model Resolution**: Improved `convert_model_name` and `_resolve_model` logic to better handle aliases, fallbacks, and unsupported names with clearer error messages.
1101
+ - **๐Ÿงช Test and Example Updates**: Updated provider `__main__` blocks to list available models and print streaming behavior for easier local testing.
1102
+ - **๐Ÿ“ Documentation**: Improved docstrings and comments clarifying model resolution and provider behavior.
1103
+
1104
+ ### ๐Ÿ”ง Refactoring
1105
+ - **โš™๏ธ Provider Interface Standardization**: Refactored provider base classes and initialization logic to standardize how models are selected and aliases are resolved.
1106
+
1107
+ ## [2025.10.17] - 2025-10-17
1108
+
1109
+ ### โœจ Added
1110
+ - **feat**: Add `sciRA-Coding` and `sciRA-Vision` providers (7e8f2a1)
1111
+ - **feat**: Add `sciRA-Reasoning` and `sciRA-Analyze` providers (7e8f2a1)
1112
+
1113
+ ### ๐Ÿ”ง Maintenance
1114
+ - **chore**: Update provider initialization logic to more robustly support new sciRA families (7e8f2a1)
1115
+ - **chore**: Add comprehensive model listings for newly added providers (7e8f2a1)
1116
+
1117
+ ## [2025.10.16] - 2025-10-16
1118
+
1119
+ ### โœจ Added
1120
+ - **feat**: Add `sciRA-General` and `sciRA-Assistant` providers (9c4d1b3)
1121
+ - **feat**: Add `sciRA-Research` and `sciRA-Learn` providers (9c4d1b3)
1122
+
1123
+ ### ๐Ÿ”ง Maintenance
1124
+ - **chore**: Refactor provider base classes for improved extensibility (9c4d1b3)
1125
+ - **chore**: Add model validation logic to avoid exposing unsupported names (9c4d1b3)
1126
+
1127
+ ## [2025.10.15] - 2025-10-15
1128
+
1129
+ ### โœจ Added
1130
+ - **feat**: Introduce SciRA provider framework and initial model mappings (5a2f8c7)
1131
+
1132
+ ### ๐Ÿ”ง Maintenance
1133
+ - **chore**: Set up SciRA provider infrastructure and basic authentication handling (5a2f8c7)
1134
+
1135
+ ## [2025.10.10] - 2025-10-10
1136
+
1137
+ ### โœจ Added
1138
+ - **feat**: Add Flowith provider with multiple model support (b3d8a21)
1139
+ - **feat**: Add GMI provider with advanced model options (b3d8a21)
1140
+
1141
+ ### ๐Ÿ”ง Maintenance
1142
+ - **chore**: Update provider documentation and add installation instructions for new providers (b3d8a21)
1143
+
1144
+ ## [2025.10.05] - 2025-10-05
1145
+
1146
+ ### โœจ Added
1147
+ - **feat**: Initial release with core LLM4Free functionality (1a2b3c4) โ€” Added web scraping, AI provider integration, and base CLI tooling.
1148
+
1149
+ ### ๐Ÿ”ง Maintenance
1150
+ - **chore**: Set up project structure, initial docs, and example workflows (1a2b3c4)
1151
+
1152
+ ---
1153
+
1154
+ For more details, see the [documentation](docs/) or [GitHub repository](https://github.com/pyscout/LLM4Free).
1155
+ ---
1156
+
1157
+ For more details, see the [documentation](docs/) or [GitHub repository](https://github.com/pyscout/LLM4Free).