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.
- simplerllm-0.3.7/MANIFEST.in +3 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/PKG-INFO +24 -5
- {simplerllm-0.3.5 → simplerllm-0.3.7}/README.md +19 -3
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/__init__.py +4 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/embeddings/__init__.py +13 -2
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/embeddings/base.py +35 -4
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/embeddings/models.py +11 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/embeddings/providers.py +258 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/base.py +4 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/reliable.py +3 -0
- simplerllm-0.3.7/SimplerLLM/language/llm/wrappers/cometapi_wrapper.py +437 -0
- simplerllm-0.3.7/SimplerLLM/language/llm_providers/cometapi_llm.py +973 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM.egg-info/PKG-INFO +24 -5
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM.egg-info/SOURCES.txt +5 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM.egg-info/requires.txt +3 -1
- simplerllm-0.3.7/requirements.txt +30 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/setup.py +6 -1
- simplerllm-0.3.7/tests/test_cometapi.py +281 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_embeddings.py +90 -5
- {simplerllm-0.3.5 → simplerllm-0.3.7}/LICENSE +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/base.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/google_image.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/image_response_models.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/openai_image.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/seedream_image.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/providers/stability_image.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/wrappers/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/wrappers/google_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/wrappers/seedream_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/image/generation/wrappers/stability_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/anthropic_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/cohere_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/deepseek_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/gemini_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/hf_local_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/moonshot_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/ollama_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/openrouter_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm/wrappers/perplexity_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_addons/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_addons/cost_utils.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_addons/json_generation.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_addons/pattern_extraction.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_brainstorm/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_brainstorm/models.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_brainstorm/recursive_brainstorm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_feedback/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_feedback/feedback_loop.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_feedback/models.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_judge/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_judge/judge.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_judge/models.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/anthropic_llm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/cohere_llm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/deepseek_llm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/gemini_llm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/hf_local_llm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/llm_response_models.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/moonshot_llm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/ollama_llm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/openai_llm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/openrouter_llm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/perplexity_llm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_providers/voyage_llm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_router/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_router/models.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/language/llm_router/router.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/hub/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/hub/agentic_prompts.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/hub/prompt_manager.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/messages_template.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/prompts/prompt_builder.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/apify_api.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/email_functions.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/file_functions.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/file_loader.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/generic_loader.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/image_helpers.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/json_helpers.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/pandas_func.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/pattern_helpers.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/python_func.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/rapid_api.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/serp.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/text_chunker.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/tools/youtube.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/utils/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/utils/custom_verbose.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/base.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/exceptions.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/models.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/providers/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/providers/local_provider.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/providers/qdrant_provider.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/wrappers/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/wrappers/local_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/vectors/wrappers/qdrant_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/base.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/providers/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/providers/openai_stt.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/providers/stt_response_models.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/wrappers/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/stt/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/base.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/factory.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/models.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/providers/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/providers/elevenlabs_tts.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/providers/lahajati_tts.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM/voice/tts/providers/openai_tts.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM.egg-info/dependency_links.txt +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/SimplerLLM.egg-info/top_level.txt +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/setup.cfg +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/__init__.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_anthropic.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_aspect_ratio_debug.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_brainstorm.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_cohere.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_deepseek.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_gemini.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_google_image.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_hf_local.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_hf_mini.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_judge.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_lahajati_tts.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_llm_addons.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_moonshot.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_ollama.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_openai.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_openai_image.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_openrouter.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_perplexity.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_pydantic_advanced.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_pydantic_json.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_reliable.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_reliable_pydantic.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_seedream_image.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_stability_image.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_tts.py +0 -0
- {simplerllm-0.3.5 → simplerllm-0.3.7}/tests/test_vectors.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: SimplerLLM
|
|
3
|
-
Version: 0.3.
|
|
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
|
-
- **
|
|
103
|
+
- **9+ LLM Providers**: OpenAI, Anthropic, Google Gemini, Cohere, OpenRouter, CometAPI, DeepSeek, and Ollama
|
|
101
104
|
- **Consistent API**: Same interface across all providers
|
|
102
|
-
- **
|
|
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
|
|
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
|
-
- **
|
|
32
|
+
- **9+ LLM Providers**: OpenAI, Anthropic, Google Gemini, Cohere, OpenRouter, CometAPI, DeepSeek, and Ollama
|
|
33
33
|
- **Consistent API**: Same interface across all providers
|
|
34
|
-
- **
|
|
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
|
|
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
|
|
6
|
-
synchronous and asynchronous operations with provider-specific
|
|
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,
|
|
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,
|
|
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
|