g4f 6.9.8__tar.gz → 6.9.9__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 (224) hide show
  1. {g4f-6.9.8/g4f.egg-info → g4f-6.9.9}/PKG-INFO +1 -1
  2. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/PollinationsAI.py +3 -3
  3. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/Yupp.py +2 -2
  4. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/__init__.py +0 -2
  5. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/local/Ollama.py +3 -2
  6. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Azure.py +1 -1
  7. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Claude.py +1 -1
  8. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/GeminiPro.py +1 -1
  9. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Groq.py +1 -0
  10. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Nvidia.py +1 -0
  11. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/OpenRouter.py +1 -0
  12. {g4f-6.9.8 → g4f-6.9.9}/g4f/client/__init__.py +1 -1
  13. {g4f-6.9.8 → g4f-6.9.9}/g4f/models.py +1 -4
  14. {g4f-6.9.8 → g4f-6.9.9/g4f.egg-info}/PKG-INFO +1 -1
  15. {g4f-6.9.8 → g4f-6.9.9}/g4f.egg-info/SOURCES.txt +0 -2
  16. g4f-6.9.8/g4f/Provider/Startnest.py +0 -215
  17. g4f-6.9.8/g4f/Provider/StringableInference.py +0 -31
  18. {g4f-6.9.8 → g4f-6.9.9}/LICENSE +0 -0
  19. {g4f-6.9.8 → g4f-6.9.9}/MANIFEST.in +0 -0
  20. {g4f-6.9.8 → g4f-6.9.9}/README.md +0 -0
  21. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/ApiAirforce.py +0 -0
  22. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/Chatai.py +0 -0
  23. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/Cloudflare.py +0 -0
  24. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/Copilot.py +0 -0
  25. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/CopilotSession.py +0 -0
  26. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/DeepInfra.py +0 -0
  27. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/EasyChat.py +0 -0
  28. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/GLM.py +0 -0
  29. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/GradientNetwork.py +0 -0
  30. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/ItalyGPT.py +0 -0
  31. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/LambdaChat.py +0 -0
  32. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/Mintlify.py +0 -0
  33. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/OIVSCodeSer.py +0 -0
  34. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/OperaAria.py +0 -0
  35. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/Perplexity.py +0 -0
  36. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/PollinationsImage.py +0 -0
  37. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/Qwen.py +0 -0
  38. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/TeachAnything.py +0 -0
  39. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/WeWordle.py +0 -0
  40. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/Yqcloud.py +0 -0
  41. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/audio/EdgeTTS.py +0 -0
  42. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/audio/MarkItDown.py +0 -0
  43. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/audio/OpenAIFM.py +0 -0
  44. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/audio/__init__.py +0 -0
  45. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/audio/gTTS.py +0 -0
  46. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/base_provider.py +0 -0
  47. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/helper.py +0 -0
  48. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/BAAI_Ling.py +0 -0
  49. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/BlackForestLabs_Flux1Dev.py +0 -0
  50. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/BlackForestLabs_Flux1KontextDev.py +0 -0
  51. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/CohereForAI_C4AI_Command.py +0 -0
  52. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/DeepseekAI_JanusPro7b.py +0 -0
  53. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/Microsoft_Phi_4_Multimodal.py +0 -0
  54. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/Qwen_Qwen_2_5.py +0 -0
  55. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/Qwen_Qwen_2_5M.py +0 -0
  56. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/Qwen_Qwen_2_5_Max.py +0 -0
  57. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/Qwen_Qwen_2_72B.py +0 -0
  58. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/Qwen_Qwen_3.py +0 -0
  59. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/StabilityAI_SD35Large.py +0 -0
  60. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/__init__.py +0 -0
  61. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/hf_space/raise_for_status.py +0 -0
  62. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/local/Local.py +0 -0
  63. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/local/__init__.py +0 -0
  64. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/AIBadgr.py +0 -0
  65. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Anthropic.py +0 -0
  66. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/BingCreateImages.py +0 -0
  67. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/BlackboxPro.py +0 -0
  68. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/CablyAI.py +0 -0
  69. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Cerebras.py +0 -0
  70. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Cohere.py +0 -0
  71. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/CopilotAccount.py +0 -0
  72. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Custom.py +0 -0
  73. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/DeepSeek.py +0 -0
  74. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/DeepSeekAPI.py +0 -0
  75. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/FenayAI.py +0 -0
  76. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Gemini.py +0 -0
  77. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/GeminiCLI.py +0 -0
  78. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/GigaChat.py +0 -0
  79. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/GithubCopilot.py +0 -0
  80. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/GithubCopilotAPI.py +0 -0
  81. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/GlhfChat.py +0 -0
  82. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Grok.py +0 -0
  83. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/LMArena.py +0 -0
  84. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/MetaAI.py +0 -0
  85. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/MetaAIAccount.py +0 -0
  86. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/MicrosoftDesigner.py +0 -0
  87. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/OpenaiAPI.py +0 -0
  88. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/OpenaiAccount.py +0 -0
  89. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/OpenaiChat.py +0 -0
  90. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/PerplexityApi.py +0 -0
  91. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Pi.py +0 -0
  92. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/PuterJS.py +0 -0
  93. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Reka.py +0 -0
  94. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Replicate.py +0 -0
  95. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/ThebApi.py +0 -0
  96. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Together.py +0 -0
  97. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/Video.py +0 -0
  98. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/WhiteRabbitNeo.py +0 -0
  99. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/You.py +0 -0
  100. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/__init__.py +0 -0
  101. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/bing/__init__.py +0 -0
  102. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/bing/create_images.py +0 -0
  103. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/hf/HuggingChat.py +0 -0
  104. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/hf/HuggingFaceAPI.py +0 -0
  105. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/hf/HuggingFaceInference.py +0 -0
  106. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/hf/HuggingFaceMedia.py +0 -0
  107. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/hf/__init__.py +0 -0
  108. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/hf/models.py +0 -0
  109. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/mini_max/HailuoAI.py +0 -0
  110. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/mini_max/MiniMax.py +0 -0
  111. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/mini_max/__init__.py +0 -0
  112. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/mini_max/crypt.py +0 -0
  113. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/needs_auth/xAI.py +0 -0
  114. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/openai/__init__.py +0 -0
  115. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/openai/crypt.py +0 -0
  116. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/openai/har_file.py +0 -0
  117. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/openai/models.py +0 -0
  118. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/openai/new.py +0 -0
  119. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/openai/proofofwork.py +0 -0
  120. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/qwen/QwenCode.py +0 -0
  121. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/qwen/__init__.py +0 -0
  122. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/qwen/cookie_generator.py +0 -0
  123. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/qwen/fingerprint.py +0 -0
  124. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/qwen/generate_ua.py +0 -0
  125. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/qwen/oauthFlow.py +0 -0
  126. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/qwen/qwenContentGenerator.py +0 -0
  127. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/qwen/qwenOAuth2.py +0 -0
  128. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/qwen/sharedTokenManager.py +0 -0
  129. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/qwen/stubs.py +0 -0
  130. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/search/CachedSearch.py +0 -0
  131. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/search/DDGS.py +0 -0
  132. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/search/GoogleSearch.py +0 -0
  133. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/search/SearXNG.py +0 -0
  134. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/search/YouTube.py +0 -0
  135. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/search/__init__.py +0 -0
  136. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/template/BackendApi.py +0 -0
  137. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/template/OpenaiTemplate.py +0 -0
  138. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/template/__init__.py +0 -0
  139. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/yupp/__init__.py +0 -0
  140. {g4f-6.9.8 → g4f-6.9.9}/g4f/Provider/yupp/models.py +0 -0
  141. {g4f-6.9.8 → g4f-6.9.9}/g4f/__init__.py +0 -0
  142. {g4f-6.9.8 → g4f-6.9.9}/g4f/__main__.py +0 -0
  143. {g4f-6.9.8 → g4f-6.9.9}/g4f/api/__init__.py +0 -0
  144. {g4f-6.9.8 → g4f-6.9.9}/g4f/api/_logging.py +0 -0
  145. {g4f-6.9.8 → g4f-6.9.9}/g4f/api/_tokenizer.py +0 -0
  146. {g4f-6.9.8 → g4f-6.9.9}/g4f/api/run.py +0 -0
  147. {g4f-6.9.8 → g4f-6.9.9}/g4f/api/stubs.py +0 -0
  148. {g4f-6.9.8 → g4f-6.9.9}/g4f/cli/__init__.py +0 -0
  149. {g4f-6.9.8 → g4f-6.9.9}/g4f/cli/__main__.py +0 -0
  150. {g4f-6.9.8 → g4f-6.9.9}/g4f/cli/client.py +0 -0
  151. {g4f-6.9.8 → g4f-6.9.9}/g4f/client/helper.py +0 -0
  152. {g4f-6.9.8 → g4f-6.9.9}/g4f/client/models.py +0 -0
  153. {g4f-6.9.8 → g4f-6.9.9}/g4f/client/service.py +0 -0
  154. {g4f-6.9.8 → g4f-6.9.9}/g4f/client/stubs.py +0 -0
  155. {g4f-6.9.8 → g4f-6.9.9}/g4f/client/types.py +0 -0
  156. {g4f-6.9.8 → g4f-6.9.9}/g4f/config.py +0 -0
  157. {g4f-6.9.8 → g4f-6.9.9}/g4f/cookies.py +0 -0
  158. {g4f-6.9.8 → g4f-6.9.9}/g4f/debug.py +0 -0
  159. {g4f-6.9.8 → g4f-6.9.9}/g4f/errors.py +0 -0
  160. {g4f-6.9.8 → g4f-6.9.9}/g4f/files.py +0 -0
  161. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/__init__.py +0 -0
  162. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/gui_parser.py +0 -0
  163. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/run.py +0 -0
  164. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/server/__init__.py +0 -0
  165. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/server/api.py +0 -0
  166. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/server/app.py +0 -0
  167. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/server/backend_api.py +0 -0
  168. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/server/config.py +0 -0
  169. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/server/crypto.py +0 -0
  170. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/server/internet.py +0 -0
  171. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/server/js_api.py +0 -0
  172. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/server/website.py +0 -0
  173. {g4f-6.9.8 → g4f-6.9.9}/g4f/gui/webview.py +0 -0
  174. {g4f-6.9.8 → g4f-6.9.9}/g4f/image/__init__.py +0 -0
  175. {g4f-6.9.8 → g4f-6.9.9}/g4f/image/copy_images.py +0 -0
  176. {g4f-6.9.8 → g4f-6.9.9}/g4f/integration/__init__.py +0 -0
  177. {g4f-6.9.8 → g4f-6.9.9}/g4f/integration/langchain.py +0 -0
  178. {g4f-6.9.8 → g4f-6.9.9}/g4f/integration/markitdown/__init__.py +0 -0
  179. {g4f-6.9.8 → g4f-6.9.9}/g4f/integration/markitdown/_audio_converter.py +0 -0
  180. {g4f-6.9.8 → g4f-6.9.9}/g4f/integration/markitdown/_base_converter.py +0 -0
  181. {g4f-6.9.8 → g4f-6.9.9}/g4f/integration/markitdown/_image_converter.py +0 -0
  182. {g4f-6.9.8 → g4f-6.9.9}/g4f/integration/markitdown/_llm_caption.py +0 -0
  183. {g4f-6.9.8 → g4f-6.9.9}/g4f/integration/markitdown/_transcribe_audio.py +0 -0
  184. {g4f-6.9.8 → g4f-6.9.9}/g4f/integration/markitdown/_youtube_converter.py +0 -0
  185. {g4f-6.9.8 → g4f-6.9.9}/g4f/integration/pydantic_ai.py +0 -0
  186. {g4f-6.9.8 → g4f-6.9.9}/g4f/local/__init__.py +0 -0
  187. {g4f-6.9.8 → g4f-6.9.9}/g4f/locals/__init__.py +0 -0
  188. {g4f-6.9.8 → g4f-6.9.9}/g4f/locals/models.py +0 -0
  189. {g4f-6.9.8 → g4f-6.9.9}/g4f/locals/provider.py +0 -0
  190. {g4f-6.9.8 → g4f-6.9.9}/g4f/mcp/__init__.py +0 -0
  191. {g4f-6.9.8 → g4f-6.9.9}/g4f/mcp/__main__.py +0 -0
  192. {g4f-6.9.8 → g4f-6.9.9}/g4f/mcp/server.py +0 -0
  193. {g4f-6.9.8 → g4f-6.9.9}/g4f/mcp/tools.py +0 -0
  194. {g4f-6.9.8 → g4f-6.9.9}/g4f/providers/__init__.py +0 -0
  195. {g4f-6.9.8 → g4f-6.9.9}/g4f/providers/any_model_map.py +0 -0
  196. {g4f-6.9.8 → g4f-6.9.9}/g4f/providers/any_provider.py +0 -0
  197. {g4f-6.9.8 → g4f-6.9.9}/g4f/providers/asyncio.py +0 -0
  198. {g4f-6.9.8 → g4f-6.9.9}/g4f/providers/base_provider.py +0 -0
  199. {g4f-6.9.8 → g4f-6.9.9}/g4f/providers/create_images.py +0 -0
  200. {g4f-6.9.8 → g4f-6.9.9}/g4f/providers/helper.py +0 -0
  201. {g4f-6.9.8 → g4f-6.9.9}/g4f/providers/response.py +0 -0
  202. {g4f-6.9.8 → g4f-6.9.9}/g4f/providers/retry_provider.py +0 -0
  203. {g4f-6.9.8 → g4f-6.9.9}/g4f/providers/tool_support.py +0 -0
  204. {g4f-6.9.8 → g4f-6.9.9}/g4f/providers/types.py +0 -0
  205. {g4f-6.9.8 → g4f-6.9.9}/g4f/requests/__init__.py +0 -0
  206. {g4f-6.9.8 → g4f-6.9.9}/g4f/requests/aiohttp.py +0 -0
  207. {g4f-6.9.8 → g4f-6.9.9}/g4f/requests/curl_cffi.py +0 -0
  208. {g4f-6.9.8 → g4f-6.9.9}/g4f/requests/defaults.py +0 -0
  209. {g4f-6.9.8 → g4f-6.9.9}/g4f/requests/raise_for_status.py +0 -0
  210. {g4f-6.9.8 → g4f-6.9.9}/g4f/tools/__init__.py +0 -0
  211. {g4f-6.9.8 → g4f-6.9.9}/g4f/tools/auth.py +0 -0
  212. {g4f-6.9.8 → g4f-6.9.9}/g4f/tools/fetch_and_scrape.py +0 -0
  213. {g4f-6.9.8 → g4f-6.9.9}/g4f/tools/files.py +0 -0
  214. {g4f-6.9.8 → g4f-6.9.9}/g4f/tools/media.py +0 -0
  215. {g4f-6.9.8 → g4f-6.9.9}/g4f/tools/run_tools.py +0 -0
  216. {g4f-6.9.8 → g4f-6.9.9}/g4f/tools/web_search.py +0 -0
  217. {g4f-6.9.8 → g4f-6.9.9}/g4f/typing.py +0 -0
  218. {g4f-6.9.8 → g4f-6.9.9}/g4f/version.py +0 -0
  219. {g4f-6.9.8 → g4f-6.9.9}/g4f.egg-info/dependency_links.txt +0 -0
  220. {g4f-6.9.8 → g4f-6.9.9}/g4f.egg-info/entry_points.txt +0 -0
  221. {g4f-6.9.8 → g4f-6.9.9}/g4f.egg-info/requires.txt +0 -0
  222. {g4f-6.9.8 → g4f-6.9.9}/g4f.egg-info/top_level.txt +0 -0
  223. {g4f-6.9.8 → g4f-6.9.9}/setup.cfg +0 -0
  224. {g4f-6.9.8 → g4f-6.9.9}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: g4f
3
- Version: 6.9.8
3
+ Version: 6.9.9
4
4
  Summary: The official gpt4free repository | various collection of powerful language models
5
5
  Home-page: https://github.com/xtekky/gpt4free
6
6
  Author: Tekky
@@ -44,9 +44,9 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
44
44
  gen_text_api_endpoint = "https://gen.pollinations.ai/v1/chat/completions"
45
45
  image_models_endpoint = "https://gen.pollinations.ai/image/models"
46
46
  text_models_endpoint = "https://gen.pollinations.ai/text/models"
47
- balance_endpoint = "https://api.gpt4free.workers.dev/api/pollinations/account/balance"
48
- worker_api_endpoint = "https://api.gpt4free.workers.dev/api/pollinations/chat/completions"
49
- worker_models_endpoint = "https://api.gpt4free.workers.dev/api/pollinations/text/models"
47
+ balance_endpoint = "https://g4f.space/api/pollinations/account/balance"
48
+ worker_api_endpoint = "https://g4f.space/api/pollinations/chat/completions"
49
+ worker_models_endpoint = "https://g4f.space/api/pollinations/models"
50
50
 
51
51
  # Models configuration
52
52
  default_model = "openai"
@@ -305,8 +305,8 @@ class Yupp(AsyncGeneratorProvider, ProviderModelMixin):
305
305
  }
306
306
  )
307
307
  resp.raise_for_status()
308
- data = resp.json()
309
- return data[0]["result"]["data"]["json"]["signed_url"]
308
+ data = resp.json()[0]["result"]["data"]["json"]
309
+ return data.get("signed_url", data.get("signedURL"))
310
310
 
311
311
  @classmethod
312
312
  async def get_signed_image(cls, scraper: CloudScraper, image_id: str) -> str:
@@ -49,9 +49,7 @@ from .OperaAria import OperaAria
49
49
  from .Perplexity import Perplexity
50
50
  from .PollinationsAI import PollinationsAI
51
51
  from .PollinationsImage import PollinationsImage
52
- from .Startnest import Startnest
53
52
  from .Qwen import Qwen
54
- from .StringableInference import StringableInference
55
53
  from .TeachAnything import TeachAnything
56
54
  from .WeWordle import WeWordle
57
55
  from .Yqcloud import Yqcloud
@@ -13,6 +13,7 @@ from ...typing import AsyncResult, Messages
13
13
  class Ollama(OpenaiTemplate):
14
14
  label = "Ollama 🦙"
15
15
  url = "https://ollama.com"
16
+ base_url = "https://g4f.space/api/ollama"
16
17
  login_url = "https://ollama.com/settings/keys"
17
18
  needs_auth = False
18
19
  working = True
@@ -34,7 +35,7 @@ class Ollama(OpenaiTemplate):
34
35
  cls.live += 1
35
36
  cls.models = [model["name"] for model in models]
36
37
  if base_url is None:
37
- host = os.getenv("OLLAMA_HOST", "127.0.0.1")
38
+ host = os.getenv("OLLAMA_HOST", "localhost")
38
39
  port = os.getenv("OLLAMA_PORT", "11434")
39
40
  url = f"http://{host}:{port}/api/tags"
40
41
  else:
@@ -66,7 +67,7 @@ class Ollama(OpenaiTemplate):
66
67
  base_url: str = f"http://{host}:{port}/v1"
67
68
  if model in cls.local_models:
68
69
  async with StreamSession(headers={"Authorization": f"Bearer {api_key}"}, proxy=proxy) as session:
69
- async with session.post(f"{base_url}/api/chat", json={
70
+ async with session.post(f"{base_url.replace('/v1', '')}/api/chat", json={
70
71
  "model": model,
71
72
  "messages": messages,
72
73
  }) as response:
@@ -14,7 +14,7 @@ from ..helper import format_media_prompt
14
14
  class Azure(OpenaiTemplate):
15
15
  label = "Azure ☁️"
16
16
  url = "https://ai.azure.com"
17
- base_url = "https://g4f.dev/api/azure"
17
+ base_url = "https://g4f.space/api/azure"
18
18
  working = True
19
19
  active_by_default = False
20
20
  login_url = "https://discord.gg/qXA4Wf4Fsm"
@@ -9,7 +9,7 @@ from ..template import OpenaiTemplate
9
9
  class Claude(OpenaiTemplate):
10
10
  label = "Claude 💥"
11
11
  url = "https://claude.ai"
12
- base_url = "https://g4f.dev/api/claude"
12
+ base_url = "https://g4f.space/api/claude"
13
13
  working = True
14
14
  active_by_default = True
15
15
  login_url = "https://discord.gg/qXA4Wf4Fsm"
@@ -7,7 +7,7 @@ class GeminiPro(OpenaiTemplate):
7
7
  url = "https://ai.google.dev"
8
8
  login_url = "https://aistudio.google.com/u/0/apikey"
9
9
  base_url = "https://generativelanguage.googleapis.com/v1beta/openai"
10
- backup_url = "https://g4f.dev/custom/srv_mjnryskw9fe0567fa267"
10
+ backup_url = "https://g4f.space/api/gemini-v1beta"
11
11
  active_by_default = True
12
12
  working = True
13
13
  default_model = "models/gemini-2.5-flash"
@@ -7,6 +7,7 @@ class Groq(OpenaiTemplate):
7
7
  url = "https://console.groq.com/playground"
8
8
  login_url = "https://console.groq.com/keys"
9
9
  base_url = "https://api.groq.com/openai/v1"
10
+ backup_url = "https://g4f.space/api/groq"
10
11
  working = True
11
12
  active_by_default = True
12
13
  default_model = DEFAULT_MODEL
@@ -6,6 +6,7 @@ from ...config import DEFAULT_MODEL
6
6
  class Nvidia(OpenaiTemplate):
7
7
  label = "Nvidia"
8
8
  base_url = "https://integrate.api.nvidia.com/v1"
9
+ backup_url = "https://g4f.space/api/nvidia"
9
10
  login_url = "https://google.com"
10
11
  url = "https://build.nvidia.com"
11
12
  working = True
@@ -13,6 +13,7 @@ class OpenRouter(OpenaiTemplate):
13
13
 
14
14
  class OpenRouterFree(OpenRouter):
15
15
  label = "OpenRouter (free)"
16
+ base_url = "https://g4f.space/api/openrouter"
16
17
  max_tokens = 4096
17
18
  active_by_default = True
18
19
 
@@ -821,7 +821,7 @@ class ClientFactory:
821
821
  elif provider.startswith("custom:"):
822
822
  if provider.startswith("custom:"):
823
823
  serverId = provider[7:]
824
- base_url = f"https://api.gpt4free.workers.dev/custom/{serverId}"
824
+ base_url = f"https://g4f.space/custom/{serverId}"
825
825
  if not base_url:
826
826
  raise ValueError("base_url is required for custom providers")
827
827
  provider = create_custom_provider(base_url, api_key, name=name, **kwargs)
@@ -19,7 +19,6 @@ from .Provider import (
19
19
  OIVSCodeSer0501,
20
20
  OperaAria,
21
21
  Perplexity,
22
- Startnest,
23
22
  OpenAIFM,
24
23
  PollinationsAI,
25
24
  PollinationsImage,
@@ -157,7 +156,6 @@ default = Model(
157
156
  Copilot,
158
157
  DeepInfra,
159
158
  OperaAria,
160
- Startnest,
161
159
  GLM,
162
160
  PollinationsAI,
163
161
  Qwen,
@@ -179,7 +177,6 @@ default_vision = VisionModel(
179
177
  OIVSCodeSer2,
180
178
  PollinationsAI,
181
179
  OperaAria,
182
- Startnest,
183
180
  Together,
184
181
  HuggingSpace,
185
182
  GeminiPro,
@@ -207,7 +204,7 @@ gpt_4o = VisionModel(
207
204
  gpt_4o_mini = Model(
208
205
  name = 'gpt-4o-mini',
209
206
  base_provider = 'OpenAI',
210
- best_provider = IterListProvider([Chatai, OIVSCodeSer2, Startnest, OpenaiChat])
207
+ best_provider = IterListProvider([Chatai, OIVSCodeSer2, OpenaiChat])
211
208
  )
212
209
 
213
210
  # gpt_4o_mini_audio = AudioModel(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: g4f
3
- Version: 6.9.8
3
+ Version: 6.9.9
4
4
  Summary: The official gpt4free repository | various collection of powerful language models
5
5
  Home-page: https://github.com/xtekky/gpt4free
6
6
  Author: Tekky
@@ -36,8 +36,6 @@ g4f/Provider/Perplexity.py
36
36
  g4f/Provider/PollinationsAI.py
37
37
  g4f/Provider/PollinationsImage.py
38
38
  g4f/Provider/Qwen.py
39
- g4f/Provider/Startnest.py
40
- g4f/Provider/StringableInference.py
41
39
  g4f/Provider/TeachAnything.py
42
40
  g4f/Provider/WeWordle.py
43
41
  g4f/Provider/Yqcloud.py
@@ -1,215 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from aiohttp import ClientSession
4
- import json
5
- import time
6
- import hashlib
7
-
8
- from ..typing import AsyncResult, Messages, MediaListType
9
- from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
10
- from .helper import format_prompt
11
- from ..tools.media import merge_media
12
- from ..image import to_data_uri
13
- from ..providers.response import FinishReason
14
-
15
-
16
- class Startnest(AsyncGeneratorProvider, ProviderModelMixin):
17
- label = "Startnest"
18
- url = "https://play.google.com/store/apps/details?id=starnest.aitype.aikeyboard.chatbot.chatgpt"
19
- api_endpoint = "https://api.startnest.uk/api/completions/stream"
20
-
21
- working = False
22
- needs_auth = False
23
- supports_stream = True
24
- supports_system_message = True
25
- supports_message_history = True
26
-
27
- default_model = 'gpt-4o-mini'
28
- models = [default_model]
29
- vision_models = models
30
-
31
- @classmethod
32
- def generate_signature(cls, timestamp: int) -> str:
33
- """
34
- Generate signature for authorization header
35
- You may need to adjust this based on the actual signature algorithm
36
- """
37
- # This is a placeholder - the actual signature generation might involve:
38
- # - A secret key
39
- # - Specific string formatting
40
- # - Different hash input
41
-
42
- # Example implementation (adjust as needed):
43
- kid = "36ccfe00-78fc-4cab-9c5b-5460b0c78513"
44
- algorithm = "sha256"
45
- validity = 90
46
- user_id = ""
47
-
48
- # The actual signature generation logic needs to be determined
49
- # This is just a placeholder that creates a hash from timestamp
50
- signature_input = f"{kid}{timestamp}{validity}".encode()
51
- signature_value = hashlib.sha256(signature_input).hexdigest()
52
-
53
- return f"Signature kid={kid}&algorithm={algorithm}&timestamp={timestamp}&validity={validity}&userId={user_id}&value={signature_value}"
54
-
55
- @classmethod
56
- async def create_async_generator(
57
- cls,
58
- model: str,
59
- messages: Messages,
60
- proxy: str = None,
61
- media: MediaListType = None,
62
- stream: bool = True,
63
- max_tokens: int = None,
64
- **kwargs
65
- ) -> AsyncResult:
66
- model = cls.get_model(model)
67
-
68
- # Generate current timestamp
69
- timestamp = int(time.time())
70
-
71
- headers = {
72
- "Accept-Encoding": "gzip",
73
- "app_name": "AIKEYBOARD",
74
- "Authorization": cls.generate_signature(timestamp),
75
- "Connection": "Keep-Alive",
76
- "Content-Type": "application/json; charset=UTF-8",
77
- "Host": "api.startnest.uk",
78
- "User-Agent": "okhttp/4.9.0",
79
- }
80
-
81
- async with ClientSession() as session:
82
- # Merge media with messages
83
- media = list(merge_media(media, messages))
84
-
85
- # Convert messages to the required format
86
- formatted_messages = []
87
- for i, msg in enumerate(messages):
88
- if isinstance(msg, dict):
89
- role = msg.get("role", "user")
90
- content = msg.get("content", "")
91
-
92
- # Create content array
93
- content_array = []
94
-
95
- # Add images if this is the last user message and media exists
96
- if media and role == "user" and i == len(messages) - 1:
97
- for image, _ in media:
98
- image_data_uri = to_data_uri(image)
99
- content_array.append({
100
- "image_url": {
101
- "url": image_data_uri
102
- },
103
- "type": "image_url"
104
- })
105
-
106
- # Add text content
107
- if content:
108
- content_array.append({
109
- "text": content,
110
- "type": "text"
111
- })
112
-
113
- formatted_messages.append({
114
- "role": role,
115
- "content": content_array
116
- })
117
-
118
- # If only one message and no media, use format_prompt as requested
119
- if len(messages) == 1 and not media:
120
- prompt_text = format_prompt(messages)
121
- formatted_messages = [{
122
- "role": "user",
123
- "content": [{"text": prompt_text, "type": "text"}]
124
- }]
125
-
126
- data = {
127
- "isVip": True,
128
- "max_tokens": max_tokens,
129
- "messages": formatted_messages,
130
- "stream": stream
131
- }
132
-
133
- # Add advanceToolType if media is present
134
- if media:
135
- data["advanceToolType"] = "upload_and_ask"
136
-
137
- async with session.post(cls.api_endpoint, json=data, headers=headers, proxy=proxy) as response:
138
- response.raise_for_status()
139
-
140
- if stream:
141
- # Handle streaming response (SSE format)
142
- async for line in response.content:
143
- if line:
144
- line = line.decode('utf-8').strip()
145
- if line.startswith("data: "):
146
- data_str = line[6:]
147
- if data_str == "[DONE]":
148
- break
149
- try:
150
- json_data = json.loads(data_str)
151
- if "choices" in json_data and len(json_data["choices"]) > 0:
152
- choice = json_data["choices"][0]
153
-
154
- # Handle content
155
- delta = choice.get("delta", {})
156
- content = delta.get("content", "")
157
- if content:
158
- yield content
159
-
160
- # Handle finish_reason
161
- if "finish_reason" in choice and choice["finish_reason"] is not None:
162
- yield FinishReason(choice["finish_reason"])
163
- break
164
-
165
- except json.JSONDecodeError:
166
- continue
167
- else:
168
- # Handle non-streaming response (regular JSON)
169
- response_text = await response.text()
170
- try:
171
- json_data = json.loads(response_text)
172
- if "choices" in json_data and len(json_data["choices"]) > 0:
173
- choice = json_data["choices"][0]
174
- if "message" in choice and "content" in choice["message"]:
175
- content = choice["message"]["content"]
176
- if content:
177
- yield content.strip()
178
-
179
- # Handle finish_reason for non-streaming
180
- if "finish_reason" in choice and choice["finish_reason"] is not None:
181
- yield FinishReason(choice["finish_reason"])
182
- return
183
-
184
- except json.JSONDecodeError:
185
- # If it's still SSE format even when stream=False, handle it
186
- lines = response_text.strip().split('\n')
187
- full_content = []
188
- finish_reason_value = None
189
-
190
- for line in lines:
191
- if line.startswith("data: "):
192
- data_str = line[6:]
193
- if data_str == "[DONE]":
194
- break
195
- try:
196
- json_data = json.loads(data_str)
197
- if "choices" in json_data and len(json_data["choices"]) > 0:
198
- choice = json_data["choices"][0]
199
- delta = choice.get("delta", {})
200
- content = delta.get("content", "")
201
- if content:
202
- full_content.append(content)
203
-
204
- # Store finish_reason
205
- if "finish_reason" in choice and choice["finish_reason"] is not None:
206
- finish_reason_value = choice["finish_reason"]
207
-
208
- except json.JSONDecodeError:
209
- continue
210
-
211
- if full_content:
212
- yield ''.join(full_content)
213
-
214
- if finish_reason_value:
215
- yield FinishReason(finish_reason_value)
@@ -1,31 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import secrets
4
- import string
5
-
6
- from .template import OpenaiTemplate
7
-
8
- class StringableInference(OpenaiTemplate):
9
- label = "Stringable Inference"
10
- url = "https://stringable-inference.onrender.com"
11
- base_url = "https://stringableinf.com/api"
12
- api_endpoint = "https://stringableinf.com/api/v1/chat/completions"
13
-
14
- working = False
15
- active_by_default = True
16
- default_model = "deepseek-v3.2"
17
- default_vision_model = "gpt-oss-120b"
18
-
19
- @classmethod
20
- def get_headers(cls, stream: bool, api_key: str = None, headers: dict = None) -> dict:
21
- return {
22
- "Accept": "text/event-stream" if stream else "application/json",
23
- "Content-Type": "application/json",
24
- "HTTP-Referer": "https://g4f.dev/",
25
- "X-Title": "G4F Python",
26
- **(
27
- {"Authorization": f"Bearer {api_key}"}
28
- if api_key else {}
29
- ),
30
- **({} if headers is None else headers)
31
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes