SimplerLLM 0.3.5__tar.gz → 0.3.7__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 (155) hide show
  1. simplerllm-0.3.7/MANIFEST.in +3 -0
  2. {simplerllm-0.3.5 → simplerllm-0.3.7}/PKG-INFO +24 -5
  3. {simplerllm-0.3.5 → simplerllm-0.3.7}/README.md +19 -3
  4. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/__init__.py +4 -0
  5. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/embeddings/__init__.py +13 -2
  6. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/embeddings/base.py +35 -4
  7. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/embeddings/models.py +11 -0
  8. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/embeddings/providers.py +258 -0
  9. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/base.py +4 -0
  10. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/reliable.py +3 -0
  11. simplerllm-0.3.7/SimplerLLM/language/llm/wrappers/cometapi_wrapper.py +437 -0
  12. simplerllm-0.3.7/SimplerLLM/language/llm_providers/cometapi_llm.py +973 -0
  13. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM.egg-info/PKG-INFO +24 -5
  14. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM.egg-info/SOURCES.txt +5 -0
  15. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM.egg-info/requires.txt +3 -1
  16. simplerllm-0.3.7/requirements.txt +30 -0
  17. {simplerllm-0.3.5 → simplerllm-0.3.7}/setup.py +6 -1
  18. simplerllm-0.3.7/tests/test_cometapi.py +281 -0
  19. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_embeddings.py +90 -5
  20. {simplerllm-0.3.5 → simplerllm-0.3.7}/LICENSE +0 -0
  21. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/__init__.py +0 -0
  22. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/__init__.py +0 -0
  23. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/__init__.py +0 -0
  24. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/base.py +0 -0
  25. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/__init__.py +0 -0
  26. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/google_image.py +0 -0
  27. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/image_response_models.py +0 -0
  28. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/openai_image.py +0 -0
  29. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/seedream_image.py +0 -0
  30. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/stability_image.py +0 -0
  31. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/wrappers/__init__.py +0 -0
  32. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/wrappers/google_wrapper.py +0 -0
  33. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/wrappers/openai_wrapper.py +0 -0
  34. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/wrappers/seedream_wrapper.py +0 -0
  35. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/wrappers/stability_wrapper.py +0 -0
  36. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/__init__.py +0 -0
  37. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/__init__.py +0 -0
  38. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/anthropic_wrapper.py +0 -0
  39. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/cohere_wrapper.py +0 -0
  40. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/deepseek_wrapper.py +0 -0
  41. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/gemini_wrapper.py +0 -0
  42. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/hf_local_wrapper.py +0 -0
  43. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/moonshot_wrapper.py +0 -0
  44. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/ollama_wrapper.py +0 -0
  45. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/openai_wrapper.py +0 -0
  46. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/openrouter_wrapper.py +0 -0
  47. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/perplexity_wrapper.py +0 -0
  48. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_addons/__init__.py +0 -0
  49. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_addons/cost_utils.py +0 -0
  50. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_addons/json_generation.py +0 -0
  51. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_addons/pattern_extraction.py +0 -0
  52. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_brainstorm/__init__.py +0 -0
  53. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_brainstorm/models.py +0 -0
  54. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_brainstorm/recursive_brainstorm.py +0 -0
  55. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_feedback/__init__.py +0 -0
  56. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_feedback/feedback_loop.py +0 -0
  57. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_feedback/models.py +0 -0
  58. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_judge/__init__.py +0 -0
  59. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_judge/judge.py +0 -0
  60. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_judge/models.py +0 -0
  61. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/__init__.py +0 -0
  62. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/anthropic_llm.py +0 -0
  63. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/cohere_llm.py +0 -0
  64. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/deepseek_llm.py +0 -0
  65. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/gemini_llm.py +0 -0
  66. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/hf_local_llm.py +0 -0
  67. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/llm_response_models.py +0 -0
  68. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/moonshot_llm.py +0 -0
  69. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/ollama_llm.py +0 -0
  70. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/openai_llm.py +0 -0
  71. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/openrouter_llm.py +0 -0
  72. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/perplexity_llm.py +0 -0
  73. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/voyage_llm.py +0 -0
  74. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_router/__init__.py +0 -0
  75. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_router/models.py +0 -0
  76. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_router/router.py +0 -0
  77. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/__init__.py +0 -0
  78. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/hub/__init__.py +0 -0
  79. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/hub/agentic_prompts.py +0 -0
  80. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/hub/prompt_manager.py +0 -0
  81. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/messages_template.py +0 -0
  82. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/prompt_builder.py +0 -0
  83. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/__init__.py +0 -0
  84. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/apify_api.py +0 -0
  85. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/email_functions.py +0 -0
  86. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/file_functions.py +0 -0
  87. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/file_loader.py +0 -0
  88. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/generic_loader.py +0 -0
  89. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/image_helpers.py +0 -0
  90. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/json_helpers.py +0 -0
  91. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/pandas_func.py +0 -0
  92. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/pattern_helpers.py +0 -0
  93. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/python_func.py +0 -0
  94. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/rapid_api.py +0 -0
  95. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/serp.py +0 -0
  96. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/text_chunker.py +0 -0
  97. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/youtube.py +0 -0
  98. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/utils/__init__.py +0 -0
  99. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/utils/custom_verbose.py +0 -0
  100. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/__init__.py +0 -0
  101. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/base.py +0 -0
  102. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/exceptions.py +0 -0
  103. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/models.py +0 -0
  104. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/providers/__init__.py +0 -0
  105. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/providers/local_provider.py +0 -0
  106. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/providers/qdrant_provider.py +0 -0
  107. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/wrappers/__init__.py +0 -0
  108. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/wrappers/local_wrapper.py +0 -0
  109. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/wrappers/qdrant_wrapper.py +0 -0
  110. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/__init__.py +0 -0
  111. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/__init__.py +0 -0
  112. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/base.py +0 -0
  113. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/providers/__init__.py +0 -0
  114. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/providers/openai_stt.py +0 -0
  115. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/providers/stt_response_models.py +0 -0
  116. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/wrappers/__init__.py +0 -0
  117. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/wrappers/openai_wrapper.py +0 -0
  118. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/__init__.py +0 -0
  119. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/base.py +0 -0
  120. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/factory.py +0 -0
  121. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/models.py +0 -0
  122. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/providers/__init__.py +0 -0
  123. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/providers/elevenlabs_tts.py +0 -0
  124. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/providers/lahajati_tts.py +0 -0
  125. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/providers/openai_tts.py +0 -0
  126. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM.egg-info/dependency_links.txt +0 -0
  127. {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM.egg-info/top_level.txt +0 -0
  128. {simplerllm-0.3.5 → simplerllm-0.3.7}/setup.cfg +0 -0
  129. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/__init__.py +0 -0
  130. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_anthropic.py +0 -0
  131. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_aspect_ratio_debug.py +0 -0
  132. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_brainstorm.py +0 -0
  133. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_cohere.py +0 -0
  134. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_deepseek.py +0 -0
  135. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_gemini.py +0 -0
  136. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_google_image.py +0 -0
  137. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_hf_local.py +0 -0
  138. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_hf_mini.py +0 -0
  139. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_judge.py +0 -0
  140. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_lahajati_tts.py +0 -0
  141. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_llm_addons.py +0 -0
  142. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_moonshot.py +0 -0
  143. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_ollama.py +0 -0
  144. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_openai.py +0 -0
  145. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_openai_image.py +0 -0
  146. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_openrouter.py +0 -0
  147. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_perplexity.py +0 -0
  148. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_pydantic_advanced.py +0 -0
  149. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_pydantic_json.py +0 -0
  150. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_reliable.py +0 -0
  151. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_reliable_pydantic.py +0 -0
  152. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_seedream_image.py +0 -0
  153. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_stability_image.py +0 -0
  154. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_tts.py +0 -0
  155. {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_vectors.py +0 -0
@@ -0,0 +1,3 @@
1
+ include requirements.txt
2
+ include README.md
3
+ include LICENSE
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SimplerLLM
3
- Version: 0.3.5
3
+ Version: 0.3.7
4
4
  Summary: An easy-to-use Library for interacting with language models.
5
5
  Home-page: https://github.com/hassancs91/SimplerLLM
6
6
  Author: Hasan Aboul Hasan
@@ -18,6 +18,8 @@ Classifier: Programming Language :: Python :: 3.9
18
18
  Classifier: Programming Language :: Python :: 3.10
19
19
  Classifier: Programming Language :: Python :: 3.11
20
20
  Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
21
23
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
24
  Requires-Python: >=3.6
23
25
  Description-Content-Type: text/markdown
@@ -43,7 +45,6 @@ Requires-Dist: colorama>=0.4
43
45
  Requires-Dist: scipy>=1.15
44
46
  Requires-Dist: tiktoken>=0.9
45
47
  Requires-Dist: qdrant-client==1.14.3
46
- Requires-Dist: voyageai==0.3.3
47
48
  Requires-Dist: pydub>=0.25.1
48
49
  Requires-Dist: elevenlabs>=2.22.0
49
50
  Requires-Dist: moviepy>=1.0.3
@@ -52,6 +53,8 @@ Provides-Extra: transformers
52
53
  Requires-Dist: transformers>=4.36.0; extra == "transformers"
53
54
  Requires-Dist: torch>=2.0.0; extra == "transformers"
54
55
  Requires-Dist: accelerate>=0.25.0; extra == "transformers"
56
+ Provides-Extra: voyage
57
+ Requires-Dist: voyageai>=0.3.3; extra == "voyage"
55
58
  Dynamic: author
56
59
  Dynamic: author-email
57
60
  Dynamic: classifier
@@ -97,9 +100,9 @@ pip install pygame>=2.5.0
97
100
  ## Key Features
98
101
 
99
102
  ### 🔗 Unified LLM Interface
100
- - **8 LLM Providers**: OpenAI, Anthropic, Google Gemini, Cohere, OpenRouter, DeepSeek, and Ollama
103
+ - **9+ LLM Providers**: OpenAI, Anthropic, Google Gemini, Cohere, OpenRouter, CometAPI, DeepSeek, and Ollama
101
104
  - **Consistent API**: Same interface across all providers
102
- - **100+ Models**: Access to diverse models through OpenRouter integration
105
+ - **500+ Models**: Access to diverse models through OpenRouter and CometAPI integrations
103
106
  - **Async Support**: Full asynchronous capabilities
104
107
 
105
108
  ### 🛡️ Reliability & Failover
@@ -113,7 +116,7 @@ pip install pygame>=2.5.0
113
116
  - **Retry Logic**: Automatic retry on validation failures
114
117
 
115
118
  ### 🔍 Vector Operations
116
- - **Multiple Providers**: OpenAI, Voyage AI, and Cohere embeddings
119
+ - **Multiple Providers**: OpenAI, Voyage AI, Cohere, OpenRouter, and CometAPI embeddings
117
120
  - **Local & Cloud Storage**: Local vector database and Qdrant integration
118
121
  - **Semantic Search**: Advanced similarity search capabilities
119
122
 
@@ -163,6 +166,9 @@ cohere_llm = LLM.create(provider=LLMProvider.COHERE, model_name="command-r-plus"
163
166
  # OpenRouter (Access to 100+ models)
164
167
  openrouter_llm = LLM.create(provider=LLMProvider.OPENROUTER, model_name="openai/gpt-4o")
165
168
 
169
+ # CometAPI (Access to 500+ models with native model names)
170
+ cometapi_llm = LLM.create(provider=LLMProvider.COMETAPI, model_name="claude-sonnet-4-6")
171
+
166
172
  # DeepSeek
167
173
  deepseek_llm = LLM.create(provider=LLMProvider.DEEPSEEK, model_name="deepseek-chat")
168
174
 
@@ -262,6 +268,18 @@ cohere_embeddings = EmbeddingsLLM.create(
262
268
  model_name="embed-english-v3.0"
263
269
  )
264
270
 
271
+ # OpenRouter Embeddings (any model via one API key)
272
+ openrouter_embeddings = EmbeddingsLLM.create(
273
+ provider=EmbeddingsProvider.OPENROUTER,
274
+ model_name="openai/text-embedding-3-small"
275
+ )
276
+
277
+ # CometAPI Embeddings (one key, native model names)
278
+ cometapi_embeddings = EmbeddingsLLM.create(
279
+ provider=EmbeddingsProvider.COMETAPI,
280
+ model_name="text-embedding-3-small"
281
+ )
282
+
265
283
  # Generate embeddings
266
284
  text = "SimplerLLM makes AI development easier"
267
285
  embeddings = openai_embeddings.generate_embeddings(text)
@@ -490,6 +508,7 @@ COHERE_API_KEY=your_cohere_api_key
490
508
  OPENROUTER_API_KEY=your_openrouter_api_key
491
509
  OPENROUTER_SITE_URL=your_site_url # Optional
492
510
  OPENROUTER_SITE_NAME=your_site_name # Optional
511
+ COMETAPI_API_KEY=your_cometapi_api_key # COMETAPI_KEY also works
493
512
 
494
513
  # Embeddings
495
514
  VOYAGE_API_KEY=your_voyage_api_key
@@ -29,9 +29,9 @@ pip install pygame>=2.5.0
29
29
  ## Key Features
30
30
 
31
31
  ### 🔗 Unified LLM Interface
32
- - **8 LLM Providers**: OpenAI, Anthropic, Google Gemini, Cohere, OpenRouter, DeepSeek, and Ollama
32
+ - **9+ LLM Providers**: OpenAI, Anthropic, Google Gemini, Cohere, OpenRouter, CometAPI, DeepSeek, and Ollama
33
33
  - **Consistent API**: Same interface across all providers
34
- - **100+ Models**: Access to diverse models through OpenRouter integration
34
+ - **500+ Models**: Access to diverse models through OpenRouter and CometAPI integrations
35
35
  - **Async Support**: Full asynchronous capabilities
36
36
 
37
37
  ### 🛡️ Reliability & Failover
@@ -45,7 +45,7 @@ pip install pygame>=2.5.0
45
45
  - **Retry Logic**: Automatic retry on validation failures
46
46
 
47
47
  ### 🔍 Vector Operations
48
- - **Multiple Providers**: OpenAI, Voyage AI, and Cohere embeddings
48
+ - **Multiple Providers**: OpenAI, Voyage AI, Cohere, OpenRouter, and CometAPI embeddings
49
49
  - **Local & Cloud Storage**: Local vector database and Qdrant integration
50
50
  - **Semantic Search**: Advanced similarity search capabilities
51
51
 
@@ -95,6 +95,9 @@ cohere_llm = LLM.create(provider=LLMProvider.COHERE, model_name="command-r-plus"
95
95
  # OpenRouter (Access to 100+ models)
96
96
  openrouter_llm = LLM.create(provider=LLMProvider.OPENROUTER, model_name="openai/gpt-4o")
97
97
 
98
+ # CometAPI (Access to 500+ models with native model names)
99
+ cometapi_llm = LLM.create(provider=LLMProvider.COMETAPI, model_name="claude-sonnet-4-6")
100
+
98
101
  # DeepSeek
99
102
  deepseek_llm = LLM.create(provider=LLMProvider.DEEPSEEK, model_name="deepseek-chat")
100
103
 
@@ -194,6 +197,18 @@ cohere_embeddings = EmbeddingsLLM.create(
194
197
  model_name="embed-english-v3.0"
195
198
  )
196
199
 
200
+ # OpenRouter Embeddings (any model via one API key)
201
+ openrouter_embeddings = EmbeddingsLLM.create(
202
+ provider=EmbeddingsProvider.OPENROUTER,
203
+ model_name="openai/text-embedding-3-small"
204
+ )
205
+
206
+ # CometAPI Embeddings (one key, native model names)
207
+ cometapi_embeddings = EmbeddingsLLM.create(
208
+ provider=EmbeddingsProvider.COMETAPI,
209
+ model_name="text-embedding-3-small"
210
+ )
211
+
197
212
  # Generate embeddings
198
213
  text = "SimplerLLM makes AI development easier"
199
214
  embeddings = openai_embeddings.generate_embeddings(text)
@@ -422,6 +437,7 @@ COHERE_API_KEY=your_cohere_api_key
422
437
  OPENROUTER_API_KEY=your_openrouter_api_key
423
438
  OPENROUTER_SITE_URL=your_site_url # Optional
424
439
  OPENROUTER_SITE_NAME=your_site_name # Optional
440
+ COMETAPI_API_KEY=your_cometapi_api_key # COMETAPI_KEY also works
425
441
 
426
442
  # Embeddings
427
443
  VOYAGE_API_KEY=your_voyage_api_key
@@ -17,6 +17,8 @@ from .embeddings import (
17
17
  OpenAIEmbeddings,
18
18
  VoyageEmbeddings,
19
19
  CohereEmbeddings,
20
+ OpenRouterEmbeddings,
21
+ CometAPIEmbeddings,
20
22
  )
21
23
  from .llm_addons import (
22
24
  create_optimized_prompt,
@@ -63,6 +65,8 @@ __all__ = [
63
65
  'OpenAIEmbeddings',
64
66
  'VoyageEmbeddings',
65
67
  'CohereEmbeddings',
68
+ 'OpenRouterEmbeddings',
69
+ 'CometAPIEmbeddings',
66
70
  # LLM Addons
67
71
  'create_optimized_prompt',
68
72
  'generate_pydantic_json_model',
@@ -2,8 +2,9 @@
2
2
  Embeddings Module - Unified Interface for Text Embeddings.
3
3
 
4
4
  This module provides a factory-based interface for generating text embeddings
5
- using multiple providers (OpenAI, Voyage AI, Cohere). It supports both
6
- synchronous and asynchronous operations with provider-specific optimizations.
5
+ using multiple providers (OpenAI, Voyage AI, Cohere, OpenRouter). It supports
6
+ both synchronous and asynchronous operations with provider-specific
7
+ optimizations.
7
8
 
8
9
  Supported Providers:
9
10
  OpenAI:
@@ -22,10 +23,16 @@ Supported Providers:
22
23
  - embed-multilingual-v3.0: 100+ languages (1024 dimensions)
23
24
  - embed-v4.0: Latest model with configurable dimensions
24
25
 
26
+ OpenRouter (unified gateway, models use 'provider/model' format):
27
+ - openai/text-embedding-3-small (default): 1536 dimensions
28
+ - openai/text-embedding-3-large: 3072 dimensions
29
+ - qwen/qwen3-embedding-8b: Open-weights multilingual embeddings
30
+
25
31
  Environment Variables:
26
32
  OPENAI_API_KEY: Required for OpenAI embeddings
27
33
  VOYAGE_API_KEY: Required for Voyage AI embeddings
28
34
  COHERE_API_KEY: Required for Cohere embeddings
35
+ OPENROUTER_API_KEY: Required for OpenRouter embeddings
29
36
 
30
37
  Quick Start:
31
38
  >>> from SimplerLLM.language import EmbeddingsLLM, EmbeddingsProvider
@@ -80,6 +87,8 @@ from .providers import (
80
87
  OpenAIEmbeddings,
81
88
  VoyageEmbeddings,
82
89
  CohereEmbeddings,
90
+ OpenRouterEmbeddings,
91
+ CometAPIEmbeddings,
83
92
  )
84
93
 
85
94
  __all__ = [
@@ -91,4 +100,6 @@ __all__ = [
91
100
  "OpenAIEmbeddings",
92
101
  "VoyageEmbeddings",
93
102
  "CohereEmbeddings",
103
+ "OpenRouterEmbeddings",
104
+ "CometAPIEmbeddings",
94
105
  ]
@@ -13,6 +13,8 @@ from .providers import (
13
13
  OpenAIEmbeddings,
14
14
  VoyageEmbeddings,
15
15
  CohereEmbeddings,
16
+ OpenRouterEmbeddings,
17
+ CometAPIEmbeddings,
16
18
  )
17
19
 
18
20
 
@@ -21,6 +23,8 @@ DEFAULT_MODELS = {
21
23
  EmbeddingsProvider.OPENAI: "text-embedding-3-small",
22
24
  EmbeddingsProvider.VOYAGE: "voyage-3",
23
25
  EmbeddingsProvider.COHERE: "embed-english-v3.0",
26
+ EmbeddingsProvider.OPENROUTER: "openai/text-embedding-3-small",
27
+ EmbeddingsProvider.COMETAPI: "text-embedding-3-small",
24
28
  }
25
29
 
26
30
 
@@ -36,6 +40,8 @@ class EmbeddingsLLM:
36
40
  - OPENAI: OpenAI's text-embedding models
37
41
  - VOYAGE: Voyage AI embeddings with retrieval optimization
38
42
  - COHERE: Cohere embeddings with multilingual support
43
+ - OPENROUTER: Any embedding model via the OpenRouter gateway
44
+ - COMETAPI: Embedding models via the CometAPI aggregator
39
45
 
40
46
  Example:
41
47
  >>> from SimplerLLM.language.embeddings import EmbeddingsLLM, EmbeddingsProvider
@@ -60,6 +66,8 @@ class EmbeddingsLLM:
60
66
  - OpenAIEmbeddings: OpenAI-specific implementation
61
67
  - VoyageEmbeddings: Voyage AI-specific implementation
62
68
  - CohereEmbeddings: Cohere-specific implementation
69
+ - OpenRouterEmbeddings: OpenRouter gateway implementation
70
+ - CometAPIEmbeddings: CometAPI aggregator implementation
63
71
  """
64
72
 
65
73
  def __init__(
@@ -104,18 +112,23 @@ class EmbeddingsLLM:
104
112
  - EmbeddingsProvider.OPENAI: OpenAI embeddings
105
113
  - EmbeddingsProvider.VOYAGE: Voyage AI embeddings
106
114
  - EmbeddingsProvider.COHERE: Cohere embeddings
115
+ - EmbeddingsProvider.OPENROUTER: OpenRouter gateway embeddings
116
+ - EmbeddingsProvider.COMETAPI: CometAPI aggregator embeddings
107
117
  model_name: Model identifier. If not provided, uses provider default:
108
118
  - OPENAI: "text-embedding-3-small"
109
119
  - VOYAGE: "voyage-3"
110
120
  - COHERE: "embed-english-v3.0"
121
+ - OPENROUTER: "openai/text-embedding-3-small"
122
+ - COMETAPI: "text-embedding-3-small"
111
123
  api_key: API key for authentication. Falls back to environment
112
- variables (OPENAI_API_KEY, VOYAGE_API_KEY, COHERE_API_KEY).
124
+ variables (OPENAI_API_KEY, VOYAGE_API_KEY, COHERE_API_KEY,
125
+ OPENROUTER_API_KEY, COMETAPI_API_KEY/COMETAPI_KEY).
113
126
  user_id: Optional user identifier for tracking/billing.
114
127
 
115
128
  Returns:
116
129
  Provider-specific embeddings instance (OpenAIEmbeddings,
117
- VoyageEmbeddings, or CohereEmbeddings), or None if provider
118
- is not specified.
130
+ VoyageEmbeddings, CohereEmbeddings, OpenRouterEmbeddings,
131
+ or CometAPIEmbeddings), or None if provider is not specified.
119
132
 
120
133
  Raises:
121
134
  ValueError: If provider is not a valid EmbeddingsProvider enum.
@@ -138,6 +151,18 @@ class EmbeddingsLLM:
138
151
  ... model_name="embed-multilingual-v3.0",
139
152
  ... api_key="your-api-key"
140
153
  ... )
154
+ >>>
155
+ >>> # Any model through OpenRouter
156
+ >>> embeddings = EmbeddingsLLM.create(
157
+ ... provider=EmbeddingsProvider.OPENROUTER,
158
+ ... model_name="openai/text-embedding-3-large"
159
+ ... )
160
+ >>>
161
+ >>> # Through CometAPI
162
+ >>> embeddings = EmbeddingsLLM.create(
163
+ ... provider=EmbeddingsProvider.COMETAPI,
164
+ ... model_name="text-embedding-3-small"
165
+ ... )
141
166
  """
142
167
  if provider is None:
143
168
  return None
@@ -145,7 +170,9 @@ class EmbeddingsLLM:
145
170
  if not isinstance(provider, EmbeddingsProvider):
146
171
  raise ValueError(
147
172
  f"provider must be an EmbeddingsProvider enum, got {type(provider).__name__}. "
148
- f"Use EmbeddingsProvider.OPENAI, EmbeddingsProvider.VOYAGE, or EmbeddingsProvider.COHERE"
173
+ f"Use EmbeddingsProvider.OPENAI, EmbeddingsProvider.VOYAGE, "
174
+ f"EmbeddingsProvider.COHERE, EmbeddingsProvider.OPENROUTER, "
175
+ f"or EmbeddingsProvider.COMETAPI"
149
176
  )
150
177
 
151
178
  # Use default model if not specified
@@ -157,6 +184,10 @@ class EmbeddingsLLM:
157
184
  return VoyageEmbeddings(provider, model_name, api_key, user_id)
158
185
  elif provider == EmbeddingsProvider.COHERE:
159
186
  return CohereEmbeddings(provider, model_name, api_key, user_id)
187
+ elif provider == EmbeddingsProvider.OPENROUTER:
188
+ return OpenRouterEmbeddings(provider, model_name, api_key, user_id)
189
+ elif provider == EmbeddingsProvider.COMETAPI:
190
+ return CometAPIEmbeddings(provider, model_name, api_key, user_id)
160
191
  else:
161
192
  return None
162
193
 
@@ -28,6 +28,15 @@ class EmbeddingsProvider(Enum):
28
28
  Models: embed-english-v3.0, embed-multilingual-v3.0
29
29
  Features: input_type for search optimization, truncation control
30
30
 
31
+ OPENROUTER: OpenRouter unified gateway. Access embedding models
32
+ from multiple providers through a single API.
33
+ Models use 'provider/model' format:
34
+ openai/text-embedding-3-small, qwen/qwen3-embedding-8b
35
+
36
+ COMETAPI: CometAPI all-in-one aggregator. Access OpenAI embedding
37
+ models (and more) through a single CometAPI key, using native
38
+ model names: text-embedding-3-small, text-embedding-3-large
39
+
31
40
  Example:
32
41
  >>> from SimplerLLM.language.embeddings import EmbeddingsProvider
33
42
  >>> provider = EmbeddingsProvider.OPENAI
@@ -37,3 +46,5 @@ class EmbeddingsProvider(Enum):
37
46
  OPENAI = 1
38
47
  VOYAGE = 2
39
48
  COHERE = 3
49
+ OPENROUTER = 4
50
+ COMETAPI = 5
@@ -5,6 +5,8 @@ This module contains the concrete implementations for each embedding provider:
5
5
  - OpenAIEmbeddings: OpenAI's text-embedding models
6
6
  - VoyageEmbeddings: Voyage AI embeddings with retrieval optimization
7
7
  - CohereEmbeddings: Cohere embeddings with multilingual support
8
+ - OpenRouterEmbeddings: Any embedding model via the OpenRouter gateway
9
+ - CometAPIEmbeddings: Embedding models via the CometAPI aggregator
8
10
  """
9
11
 
10
12
  import os
@@ -13,6 +15,8 @@ from typing import List, Optional, Union, Any
13
15
  import SimplerLLM.language.llm_providers.openai_llm as openai_llm
14
16
  import SimplerLLM.language.llm_providers.voyage_llm as voyage_llm
15
17
  import SimplerLLM.language.llm_providers.cohere_llm as cohere_llm
18
+ import SimplerLLM.language.llm_providers.openrouter_llm as openrouter_llm
19
+ import SimplerLLM.language.llm_providers.cometapi_llm as cometapi_llm
16
20
  from SimplerLLM.language.llm_providers.llm_response_models import LLMEmbeddingsResponse
17
21
 
18
22
  from .models import EmbeddingsProvider
@@ -184,6 +188,260 @@ class OpenAIEmbeddings(BaseEmbeddings):
184
188
  )
185
189
 
186
190
 
191
+ class OpenRouterEmbeddings(BaseEmbeddings):
192
+ """
193
+ OpenRouter embeddings implementation.
194
+
195
+ Generates text embeddings through OpenRouter's unified gateway, giving
196
+ access to embedding models from multiple providers with a single API key.
197
+ Model names use the 'provider/model' format.
198
+
199
+ Attributes:
200
+ provider: Always EmbeddingsProvider.OPENROUTER
201
+ model_name: OpenRouter model identifier in 'provider/model' format
202
+ (default: "openai/text-embedding-3-small")
203
+ api_key: OpenRouter API key (falls back to OPENROUTER_API_KEY env var)
204
+
205
+ Example:
206
+ >>> embeddings = OpenRouterEmbeddings(
207
+ ... provider=EmbeddingsProvider.OPENROUTER,
208
+ ... model_name="openai/text-embedding-3-small"
209
+ ... )
210
+ >>> vector = embeddings.generate_embeddings("Hello world")
211
+ >>> print(len(vector)) # 1536
212
+ """
213
+
214
+ def __init__(
215
+ self,
216
+ provider: EmbeddingsProvider,
217
+ model_name: str,
218
+ api_key: Optional[str] = None,
219
+ user_id: Optional[str] = None,
220
+ ):
221
+ super().__init__(provider, model_name, api_key, user_id)
222
+ self.api_key = api_key or os.getenv("OPENROUTER_API_KEY", "")
223
+
224
+ def generate_embeddings(
225
+ self,
226
+ user_input: Union[str, List[str]],
227
+ model_name: Optional[str] = None,
228
+ full_response: bool = False,
229
+ ) -> Union[List[float], List[List[float]], LLMEmbeddingsResponse]:
230
+ """
231
+ Generate embeddings using any model through OpenRouter.
232
+
233
+ Args:
234
+ user_input: Text or list of texts to embed. Single strings return
235
+ a single embedding vector. Lists return a list of vectors.
236
+ model_name: Model name override in 'provider/model' format
237
+ (e.g., 'openai/text-embedding-3-large'). If not provided,
238
+ uses the instance's model_name.
239
+ full_response: If True, returns LLMEmbeddingsResponse with metadata.
240
+ If False, returns just the embedding vector(s).
241
+
242
+ Returns:
243
+ If full_response=False:
244
+ - Single input: List[float] - embedding vector
245
+ - List input: List[List[float]] - list of embedding vectors
246
+ If full_response=True:
247
+ LLMEmbeddingsResponse with generated_embedding, model,
248
+ process_time, and llm_provider_response.
249
+
250
+ Raises:
251
+ ValueError: If user_input is empty or None.
252
+ Exception: On API errors after retry attempts exhausted.
253
+
254
+ Example:
255
+ >>> embeddings = OpenRouterEmbeddings(
256
+ ... provider=EmbeddingsProvider.OPENROUTER,
257
+ ... model_name="openai/text-embedding-3-small"
258
+ ... )
259
+ >>> # Single text
260
+ >>> vector = embeddings.generate_embeddings("Hello world")
261
+ >>> print(f"Dimensions: {len(vector)}") # 1536
262
+ >>>
263
+ >>> # Different model through the same gateway
264
+ >>> vector = embeddings.generate_embeddings(
265
+ ... "Hello world",
266
+ ... model_name="qwen/qwen3-embedding-8b"
267
+ ... )
268
+ """
269
+ model_name = model_name if model_name is not None else self.model_name
270
+
271
+ return openrouter_llm.generate_embeddings(
272
+ user_input=user_input,
273
+ model_name=model_name,
274
+ full_response=full_response,
275
+ api_key=self.api_key
276
+ )
277
+
278
+ async def generate_embeddings_async(
279
+ self,
280
+ user_input: Union[str, List[str]],
281
+ model_name: Optional[str] = None,
282
+ full_response: bool = False,
283
+ ) -> Union[List[float], List[List[float]], LLMEmbeddingsResponse]:
284
+ """
285
+ Asynchronously generate embeddings through OpenRouter.
286
+
287
+ This is the async version of generate_embeddings(). See
288
+ generate_embeddings() for full parameter documentation.
289
+
290
+ Args:
291
+ user_input: Text or list of texts to embed.
292
+ model_name: Model name override in 'provider/model' format.
293
+ full_response: If True, returns LLMEmbeddingsResponse.
294
+
295
+ Returns:
296
+ Embedding vector(s) or LLMEmbeddingsResponse.
297
+
298
+ Example:
299
+ >>> import asyncio
300
+ >>> embeddings = OpenRouterEmbeddings(
301
+ ... provider=EmbeddingsProvider.OPENROUTER,
302
+ ... model_name="openai/text-embedding-3-small"
303
+ ... )
304
+ >>> vector = asyncio.run(
305
+ ... embeddings.generate_embeddings_async("Hello world")
306
+ ... )
307
+ """
308
+ model_name = model_name if model_name is not None else self.model_name
309
+
310
+ return await openrouter_llm.generate_embeddings_async(
311
+ user_input=user_input,
312
+ model_name=model_name,
313
+ full_response=full_response,
314
+ api_key=self.api_key
315
+ )
316
+
317
+
318
+ class CometAPIEmbeddings(BaseEmbeddings):
319
+ """
320
+ CometAPI embeddings implementation.
321
+
322
+ Generates text embeddings through CometAPI's all-in-one aggregator,
323
+ giving access to OpenAI embedding models (and more) with a single
324
+ CometAPI key. Model names use their native format without a prefix.
325
+
326
+ Attributes:
327
+ provider: Always EmbeddingsProvider.COMETAPI
328
+ model_name: Native model identifier
329
+ (default: "text-embedding-3-small")
330
+ api_key: CometAPI key (falls back to COMETAPI_API_KEY then
331
+ COMETAPI_KEY env vars)
332
+
333
+ Example:
334
+ >>> embeddings = CometAPIEmbeddings(
335
+ ... provider=EmbeddingsProvider.COMETAPI,
336
+ ... model_name="text-embedding-3-small"
337
+ ... )
338
+ >>> vector = embeddings.generate_embeddings("Hello world")
339
+ >>> print(len(vector)) # 1536
340
+ """
341
+
342
+ def __init__(
343
+ self,
344
+ provider: EmbeddingsProvider,
345
+ model_name: str,
346
+ api_key: Optional[str] = None,
347
+ user_id: Optional[str] = None,
348
+ ):
349
+ super().__init__(provider, model_name, api_key, user_id)
350
+ self.api_key = api_key or os.getenv("COMETAPI_API_KEY") or os.getenv("COMETAPI_KEY", "")
351
+
352
+ def generate_embeddings(
353
+ self,
354
+ user_input: Union[str, List[str]],
355
+ model_name: Optional[str] = None,
356
+ full_response: bool = False,
357
+ ) -> Union[List[float], List[List[float]], LLMEmbeddingsResponse]:
358
+ """
359
+ Generate embeddings using an embedding model through CometAPI.
360
+
361
+ Args:
362
+ user_input: Text or list of texts to embed. Single strings return
363
+ a single embedding vector. Lists return a list of vectors.
364
+ model_name: Model name override (e.g., 'text-embedding-3-large').
365
+ If not provided, uses the instance's model_name.
366
+ full_response: If True, returns LLMEmbeddingsResponse with metadata.
367
+ If False, returns just the embedding vector(s).
368
+
369
+ Returns:
370
+ If full_response=False:
371
+ - Single input: List[float] - embedding vector
372
+ - List input: List[List[float]] - list of embedding vectors
373
+ If full_response=True:
374
+ LLMEmbeddingsResponse with generated_embedding, model,
375
+ process_time, and llm_provider_response.
376
+
377
+ Raises:
378
+ ValueError: If user_input is empty or None.
379
+ Exception: On API errors after retry attempts exhausted.
380
+
381
+ Example:
382
+ >>> embeddings = CometAPIEmbeddings(
383
+ ... provider=EmbeddingsProvider.COMETAPI,
384
+ ... model_name="text-embedding-3-small"
385
+ ... )
386
+ >>> # Single text
387
+ >>> vector = embeddings.generate_embeddings("Hello world")
388
+ >>> print(f"Dimensions: {len(vector)}") # 1536
389
+ >>>
390
+ >>> # Larger model through the same key
391
+ >>> vector = embeddings.generate_embeddings(
392
+ ... "Hello world",
393
+ ... model_name="text-embedding-3-large"
394
+ ... )
395
+ """
396
+ model_name = model_name if model_name is not None else self.model_name
397
+
398
+ return cometapi_llm.generate_embeddings(
399
+ user_input=user_input,
400
+ model_name=model_name,
401
+ full_response=full_response,
402
+ api_key=self.api_key
403
+ )
404
+
405
+ async def generate_embeddings_async(
406
+ self,
407
+ user_input: Union[str, List[str]],
408
+ model_name: Optional[str] = None,
409
+ full_response: bool = False,
410
+ ) -> Union[List[float], List[List[float]], LLMEmbeddingsResponse]:
411
+ """
412
+ Asynchronously generate embeddings through CometAPI.
413
+
414
+ This is the async version of generate_embeddings(). See
415
+ generate_embeddings() for full parameter documentation.
416
+
417
+ Args:
418
+ user_input: Text or list of texts to embed.
419
+ model_name: Model name override.
420
+ full_response: If True, returns LLMEmbeddingsResponse.
421
+
422
+ Returns:
423
+ Embedding vector(s) or LLMEmbeddingsResponse.
424
+
425
+ Example:
426
+ >>> import asyncio
427
+ >>> embeddings = CometAPIEmbeddings(
428
+ ... provider=EmbeddingsProvider.COMETAPI,
429
+ ... model_name="text-embedding-3-small"
430
+ ... )
431
+ >>> vector = asyncio.run(
432
+ ... embeddings.generate_embeddings_async("Hello world")
433
+ ... )
434
+ """
435
+ model_name = model_name if model_name is not None else self.model_name
436
+
437
+ return await cometapi_llm.generate_embeddings_async(
438
+ user_input=user_input,
439
+ model_name=model_name,
440
+ full_response=full_response,
441
+ api_key=self.api_key
442
+ )
443
+
444
+
187
445
  class VoyageEmbeddings(BaseEmbeddings):
188
446
  """
189
447
  Voyage AI embeddings implementation.
@@ -25,6 +25,7 @@ class LLMProvider(Enum):
25
25
  PERPLEXITY = 9
26
26
  MOONSHOT = 10
27
27
  HUGGING_FACE_LOCAL = 11
28
+ COMETAPI = 12
28
29
 
29
30
  class LLM:
30
31
  def __init__(
@@ -89,6 +90,9 @@ class LLM:
89
90
  if provider == LLMProvider.HUGGING_FACE_LOCAL:
90
91
  from .wrappers.hf_local_wrapper import HuggingFaceLocalLLM
91
92
  return HuggingFaceLocalLLM(provider, model_name, temperature, top_p, verbose=verbose)
93
+ if provider == LLMProvider.COMETAPI:
94
+ from .wrappers.cometapi_wrapper import CometAPILLM
95
+ return CometAPILLM(provider, model_name, temperature, top_p, api_key, verbose=verbose)
92
96
  else:
93
97
  return None
94
98
 
@@ -26,6 +26,9 @@ PROVIDER_CAPABILITIES: Dict[LLMProvider, Set[str]] = {
26
26
  LLMProvider.OLLAMA: {"images"},
27
27
  LLMProvider.COHERE: set(),
28
28
  LLMProvider.HUGGING_FACE_LOCAL: set(),
29
+ LLMProvider.COMETAPI: {
30
+ "reasoning_effort", "timeout", "images", "detail"
31
+ },
29
32
  }
30
33
 
31
34
  # Universal parameters supported by all providers