embed-client-dev 4.0.78__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- embed_client/__init__.py +36 -0
- embed_client/__main__.py +15 -0
- embed_client/_version.py +3 -0
- embed_client/adapter_config_factory.py +213 -0
- embed_client/adapter_config_normalizer.py +135 -0
- embed_client/adapter_generator_bridge.py +166 -0
- embed_client/auth.py +189 -0
- embed_client/cli.py +483 -0
- embed_client/cli_core.py +427 -0
- embed_client/client_factory.py +515 -0
- embed_client/client_factory_examples.py +375 -0
- embed_client/client_factory_helpers.py +59 -0
- embed_client/config.py +408 -0
- embed_client/config_defaults.py +77 -0
- embed_client/config_examples.py +228 -0
- embed_client/config_generator.py +652 -0
- embed_client/config_generator_cli.py +151 -0
- embed_client/config_presets.py +245 -0
- embed_client/config_validator.py +246 -0
- embed_client/config_validator_cli.py +141 -0
- embed_client/constants.py +52 -0
- embed_client/demo_cli.py +78 -0
- embed_client/demo_security_cli.py +206 -0
- embed_client/embed_file_output_validate.py +348 -0
- embed_client/embed_file_status_store.py +80 -0
- embed_client/embedding_client.py +1929 -0
- embed_client/embedding_client_helpers.py +105 -0
- embed_client/example_async_usage.py +357 -0
- embed_client/example_async_usage_demo.py +282 -0
- embed_client/example_async_usage_ru.py +340 -0
- embed_client/example_async_usage_ru_demo.py +313 -0
- embed_client/exceptions.py +122 -0
- embed_client/identifier_types.py +56 -0
- embed_client/json_embed_file_preflight.py +128 -0
- embed_client/local_json_embed_file.py +73 -0
- embed_client/md_embed_file_prep.py +197 -0
- embed_client/response_normalizer.py +160 -0
- embed_client/response_parsers.py +219 -0
- embed_client/security_cli.py +200 -0
- embed_client/security_cli_core.py +227 -0
- embed_client/ssl_examples.py +278 -0
- embed_client/ssl_manager.py +141 -0
- embed_client_dev-4.0.78.dist-info/METADATA +155 -0
- embed_client_dev-4.0.78.dist-info/RECORD +48 -0
- embed_client_dev-4.0.78.dist-info/WHEEL +5 -0
- embed_client_dev-4.0.78.dist-info/entry_points.txt +4 -0
- embed_client_dev-4.0.78.dist-info/licenses/LICENSE +21 -0
- embed_client_dev-4.0.78.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SSL/TLS Manager for embed-client.
|
|
3
|
+
|
|
4
|
+
This module provides SSL/TLS configuration validation for the embed-client.
|
|
5
|
+
All actual SSL/TLS operations are handled by mcp_proxy_adapter JsonRpcClient,
|
|
6
|
+
which uses mcp_security_framework internally via SSLUtils.
|
|
7
|
+
|
|
8
|
+
Author: Vasiliy Zdanovskiy
|
|
9
|
+
email: vasilyvz@gmail.com
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import logging
|
|
13
|
+
import os
|
|
14
|
+
from typing import Any, Dict, List
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class SSLManagerError(Exception):
|
|
18
|
+
"""Raised when SSL/TLS operations fail."""
|
|
19
|
+
|
|
20
|
+
def __init__(self, message: str, error_code: int = -32002):
|
|
21
|
+
self.message = message
|
|
22
|
+
self.error_code = error_code
|
|
23
|
+
super().__init__(self.message)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ClientSSLManager:
|
|
27
|
+
"""
|
|
28
|
+
Client SSL/TLS Manager.
|
|
29
|
+
|
|
30
|
+
This class provides SSL/TLS configuration validation for the embed-client.
|
|
31
|
+
All actual SSL/TLS operations are handled by mcp_proxy_adapter JsonRpcClient,
|
|
32
|
+
which uses mcp_security_framework internally via SSLUtils.
|
|
33
|
+
|
|
34
|
+
This class is used only for configuration structure validation and diagnostics.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
def __init__(self, config: Dict[str, Any]):
|
|
38
|
+
"""
|
|
39
|
+
Initialize SSL/TLS manager.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
config: SSL/TLS configuration dictionary
|
|
43
|
+
|
|
44
|
+
Note:
|
|
45
|
+
This class only validates configuration structure.
|
|
46
|
+
Actual SSL/TLS is handled by mcp_proxy_adapter JsonRpcClient.
|
|
47
|
+
"""
|
|
48
|
+
self.config = config
|
|
49
|
+
self.logger = logging.getLogger(__name__)
|
|
50
|
+
|
|
51
|
+
def get_ssl_config(self) -> Dict[str, Any]:
|
|
52
|
+
"""
|
|
53
|
+
Get current SSL configuration.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Dictionary with SSL configuration
|
|
57
|
+
"""
|
|
58
|
+
return self.config.get("ssl", {})
|
|
59
|
+
|
|
60
|
+
def is_ssl_enabled(self) -> bool:
|
|
61
|
+
"""
|
|
62
|
+
Check if SSL/TLS is enabled.
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
True if SSL/TLS is enabled, False otherwise
|
|
66
|
+
"""
|
|
67
|
+
return self.config.get("ssl", {}).get("enabled", False)
|
|
68
|
+
|
|
69
|
+
def is_mtls_enabled(self) -> bool:
|
|
70
|
+
"""
|
|
71
|
+
Check if mTLS (mutual TLS) is enabled.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
True if mTLS is enabled, False otherwise
|
|
75
|
+
"""
|
|
76
|
+
ssl_config = self.config.get("ssl", {})
|
|
77
|
+
return (
|
|
78
|
+
ssl_config.get("enabled", False)
|
|
79
|
+
and bool(ssl_config.get("cert_file"))
|
|
80
|
+
and bool(ssl_config.get("key_file"))
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
def validate_ssl_config(self) -> List[str]:
|
|
84
|
+
"""
|
|
85
|
+
Validate SSL configuration.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
List of validation errors
|
|
89
|
+
"""
|
|
90
|
+
errors: List[str] = []
|
|
91
|
+
ssl_config = self.config.get("ssl", {})
|
|
92
|
+
|
|
93
|
+
if not ssl_config.get("enabled", False):
|
|
94
|
+
return errors # SSL disabled, no validation needed
|
|
95
|
+
|
|
96
|
+
# Check certificate files if mTLS is configured
|
|
97
|
+
cert_file = ssl_config.get("cert_file")
|
|
98
|
+
key_file = ssl_config.get("key_file")
|
|
99
|
+
|
|
100
|
+
if cert_file and not os.path.exists(cert_file):
|
|
101
|
+
errors.append(f"Certificate file not found: {cert_file}")
|
|
102
|
+
|
|
103
|
+
if key_file and not os.path.exists(key_file):
|
|
104
|
+
errors.append(f"Key file not found: {key_file}")
|
|
105
|
+
|
|
106
|
+
# Check CA certificate if provided
|
|
107
|
+
ca_cert_file = ssl_config.get("ca_cert_file")
|
|
108
|
+
if ca_cert_file and not os.path.exists(ca_cert_file):
|
|
109
|
+
errors.append(f"CA certificate file not found: {ca_cert_file}")
|
|
110
|
+
|
|
111
|
+
# Certificate validation is handled by adapter via mcp_security_framework
|
|
112
|
+
# We only validate file existence here
|
|
113
|
+
|
|
114
|
+
return errors
|
|
115
|
+
|
|
116
|
+
def get_supported_protocols(self) -> List[str]:
|
|
117
|
+
"""
|
|
118
|
+
Get list of supported SSL/TLS protocols.
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
List of supported protocol names
|
|
122
|
+
"""
|
|
123
|
+
# Protocols are handled by adapter, return standard list
|
|
124
|
+
return ["TLSv1.2", "TLSv1.3"]
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def create_ssl_manager(config: Dict[str, Any]) -> ClientSSLManager:
|
|
128
|
+
"""
|
|
129
|
+
Create SSL/TLS manager from configuration.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
config: Configuration dictionary
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
ClientSSLManager instance
|
|
136
|
+
|
|
137
|
+
Note:
|
|
138
|
+
This manager only validates configuration structure.
|
|
139
|
+
Actual SSL/TLS is handled by mcp_proxy_adapter JsonRpcClient.
|
|
140
|
+
"""
|
|
141
|
+
return ClientSSLManager(config)
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: embed-client-dev
|
|
3
|
+
Version: 4.0.78
|
|
4
|
+
Summary: Async client for the Embedding Service API. Canonical class: EmbeddingClient (JSON-RPC via mcp-proxy-adapter >=8.10).
|
|
5
|
+
Author-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/maverikod/ai-embed
|
|
8
|
+
Project-URL: Repository, https://github.com/maverikod/ai-embed
|
|
9
|
+
Project-URL: Documentation, https://github.com/maverikod/ai-embed/tree/main/client#readme
|
|
10
|
+
Project-URL: Bug Tracker, https://github.com/maverikod/ai-embed/issues
|
|
11
|
+
Project-URL: Configuration Reference, https://github.com/maverikod/ai-embed/blob/main/client/CONFIGURATION.md
|
|
12
|
+
Keywords: embedding,async,client,api,authentication,ssl,tls,mtls,config,generator,validator,configuration
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
24
|
+
Classifier: Topic :: Security
|
|
25
|
+
Classifier: Topic :: System :: Networking
|
|
26
|
+
Requires-Python: >=3.8
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Requires-Dist: mcp-proxy-adapter>=8.11.14
|
|
30
|
+
Requires-Dist: mcp_security_framework>=2.3.2
|
|
31
|
+
Provides-Extra: scripts
|
|
32
|
+
Requires-Dist: pydantic>=2.0.0; extra == "scripts"
|
|
33
|
+
Provides-Extra: test
|
|
34
|
+
Requires-Dist: pytest; extra == "test"
|
|
35
|
+
Requires-Dist: pytest-asyncio; extra == "test"
|
|
36
|
+
Requires-Dist: pytest-xdist; extra == "test"
|
|
37
|
+
Requires-Dist: pytest-timeout; extra == "test"
|
|
38
|
+
Provides-Extra: dev
|
|
39
|
+
Requires-Dist: pytest; extra == "dev"
|
|
40
|
+
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest-xdist; extra == "dev"
|
|
42
|
+
Requires-Dist: pytest-timeout; extra == "dev"
|
|
43
|
+
Requires-Dist: black; extra == "dev"
|
|
44
|
+
Requires-Dist: flake8; extra == "dev"
|
|
45
|
+
Requires-Dist: mypy; extra == "dev"
|
|
46
|
+
Dynamic: license-file
|
|
47
|
+
|
|
48
|
+
# embed-client
|
|
49
|
+
|
|
50
|
+
Python **async** client bundled with the Embedding Service in this repository's
|
|
51
|
+
`client/` directory. The canonical public client is **`EmbeddingClient`** (JSON-RPC
|
|
52
|
+
via **`mcp-proxy-adapter`**). The distribution and import names are unchanged.
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
from embed_client import EmbeddingClient
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Installation
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
pip install embed-client
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Editable development checkout:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
git clone https://github.com/maverikod/ai-embed.git
|
|
68
|
+
cd ai-embed
|
|
69
|
+
pip install -e ./client
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Canonical real-server E2E (localhost:8001, mTLS)
|
|
73
|
+
|
|
74
|
+
The repository ships a **runnable** end-to-end tour of the public API against **localhost:8001** with **mTLS**, using certificates under **`mtls_certificates/`** (see **`mtls_certificates/README.md`** if present).
|
|
75
|
+
|
|
76
|
+
| Artifact | Path |
|
|
77
|
+
|----------|------|
|
|
78
|
+
| Example script | [`examples/canonical_mtls_localhost_8001.py`](examples/canonical_mtls_localhost_8001.py) |
|
|
79
|
+
| Live integration | Set **`RUN_CANONICAL_MTLS_E2E=1`** to perform real network calls (otherwise dry run / config check) |
|
|
80
|
+
| Optional `embed_file` | Set **`CANONICAL_EMBED_FILE_SERVER_PATH`** to a **server-visible** file path to include **`embed_file`** in the tour |
|
|
81
|
+
| Tests | [`tests/test_canonical_mtls_example.py`](tests/test_canonical_mtls_example.py) |
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
python examples/canonical_mtls_localhost_8001.py
|
|
85
|
+
RUN_CANONICAL_MTLS_E2E=1 python examples/canonical_mtls_localhost_8001.py
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Minimal usage
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
import asyncio
|
|
92
|
+
from embed_client import EmbeddingClient
|
|
93
|
+
|
|
94
|
+
async def main() -> None:
|
|
95
|
+
async with EmbeddingClient.from_base_url_port("http://localhost", 8001) as client:
|
|
96
|
+
h = await client.health()
|
|
97
|
+
print("health:", h)
|
|
98
|
+
data = await client.embed(["hello"], error_policy="continue", wait=True)
|
|
99
|
+
print("embed keys:", list(data.keys()) if isinstance(data, dict) else type(data))
|
|
100
|
+
|
|
101
|
+
if __name__ == "__main__":
|
|
102
|
+
asyncio.run(main())
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Public queue-oriented helpers include **`embed`**, **`wait_for_job`**, **`job_status`**, **`list_queued_commands`**, **`cmd`**, optional **`embed_file`**, plus introspection (**`list_commands`**, **`models`**, **`default_model`**, **`fetch_openapi_schema`**, **`http_get`**, **`timing_stats`**) and TLS helpers **`is_mtls_enabled`**, **`get_ssl_config`**. See **`embed_client/embedding_client.py`** for the full list.
|
|
106
|
+
|
|
107
|
+
**`embed_file` vs local JSON without shared server disk:** use **`embed_file`** with a server-visible **`input_file`** when the input already exists on the service host. For a **`json_array`** file that exists only on the client machine (no shared filesystem), use the CLI **`embed-file-json`** subcommand (or **`embed_file_from_local_json_file`**) so the client validates, uploads through the adapter, resolves **`storage_path`** via **`get_upload_session`**, then runs **`embed_file`** with that path and **`format=json_array`**. For Markdown sources (e.g. with YAML front matter), run **`prepare-embed-file-json`** first to emit a valid **`json_array`** (array of strings): the body is split **only** on blank lines (**`\n\n`**) into paragraph-sized strings, with per-paragraph UTF-8 size limits and **no** automatic oversize split — oversized paragraphs require editing the source or raising the byte cap; then **`embed-file-json`**. Add **`--show-progress`** to stream server WebSocket/status lines to stderr during the job wait (see **`CLI_README.md`**).
|
|
108
|
+
|
|
109
|
+
**Providers (server 4.0.46+):** the full model id is provider + model. **`embed`** and **`embed_file`** take an optional **`provider`** (`"local"` = the server's own model, or a live macsc provider id such as `"openai"`); it is sent only when not `None`. There is no `backend` argument any more (a `TypeError` is raised for `backend=`); the `backend` field of results and `models()` entries is still returned. **`default_model()`** returns exactly `{model, dimension, provider}`; **`models()`** returns `{use_own_model, default: {provider, model}, external: {configured, service}, models: [...]}` with entries `{name, provider, dimension, supported_dimensions, max_tokens, backend, residency (local)}`.
|
|
110
|
+
|
|
111
|
+
Resolution order (server): provider given -> must be known, model omitted -> the default model of that provider (it must be the default provider's, else `UNKNOWN_MODEL`); provider and model omitted -> the default pair; provider omitted and model given -> the default provider first (if it lists the model it is used and macsc is not consulted for a local default), else the other providers are searched: exactly one offers it -> used, several -> `PROVIDER_REQUIRED`, none -> `UNKNOWN_MODEL`. Dimension omitted -> the entry's default; given -> must satisfy `supported_dimensions` else `UNSUPPORTED_DIMENSION`.
|
|
112
|
+
|
|
113
|
+
Error codes (`error.data.code` / `error.data.kind`, surfaced unchanged): `-32602` `UNKNOWN_PROVIDER`, `UNKNOWN_MODEL`, `UNSUPPORTED_DIMENSION`, `PROVIDER_REQUIRED`; `-32003` `EXTERNAL_UNAVAILABLE`, `EXTERNAL_UPSTREAM_FAILURE`, `EXTERNAL_BAD_RESPONSE`, `EXTERNAL_INVALID_REQUEST`; `-32001` `MODEL_LOADING` (retry); `-32004` `OWN_MODEL_DISABLED`; `-32005` `GPU_DISABLED`; `-32603` `MODEL_LOAD_FAILED`, `NO_GPU_AVAILABLE`. **`model_offload()`** moves the resident local model VRAM -> RAM (pinned against the GPU watcher) and **`model_load(model=None, device=None, wait=None)`** moves it back (`wait=False` returns at once while the load continues, `wait=True` blocks until it is in VRAM); neither takes a provider. Refusals of `model_offload`/`model_load`/`default_model` arrive as **`EmbedAPIError`** carrying the server error object. Every embed result carries `provider`, `model`, `dimension` and `backend`; external results also carry `usage`.
|
|
114
|
+
|
|
115
|
+
**Input-limit table (server input_limit_* commands):** **`input_limit_add(provider, model, max_input_tokens, tokenizer, max_inputs_per_request=None, max_total_tokens_per_request=None, source=None)`** adds a manual row (`-32602` `INPUT_LIMIT_EXISTS`, `LOCAL_LIMIT_FROM_MODEL`); **`input_limit_delete(provider, model)`** removes a row (`-32602` `INPUT_LIMIT_NOT_FOUND`); **`input_limit_update(provider, model, *, <named cells>)`** changes only the cells passed explicitly (`None` sends null, which only the three nullable cells accept; `-32602` `INPUT_LIMIT_NOT_FOUND`, `INPUT_LIMIT_EMPTY_UPDATE`, `LOCAL_LIMIT_FROM_MODEL`); **`input_limit_list(provider=None)`** returns `{rows: [...]}` sorted by `(provider, model)` with each row's `origin` (`module` | `manual`). Mutating commands may also return `-32603` `INPUT_LIMIT_PERSIST_FAILED`. Refusals arrive as **`EmbedAPIError`**. The client does not validate these parameters.
|
|
116
|
+
|
|
117
|
+
## Documentation
|
|
118
|
+
|
|
119
|
+
- **[CONFIGURATION.md](CONFIGURATION.md)** — JSON config schema, protocols, validation
|
|
120
|
+
- **[CLI_README.md](CLI_README.md)** — `embed-config-generator`, `embed-config-validator`, `embed-vectorize`
|
|
121
|
+
- **[docs/api_format.md](docs/api_format.md)** — JSON-RPC shapes for `embed` and `embed_file` (server path vs upload)
|
|
122
|
+
- **[examples/README.md](examples/README.md)** — example index (canonical mTLS first)
|
|
123
|
+
- **[docs/SERVER_MODES_AND_CLIENT.md](docs/SERVER_MODES_AND_CLIENT.md)** — security modes vs client behavior (short summary; not full matrix)
|
|
124
|
+
|
|
125
|
+
## Security modes
|
|
126
|
+
|
|
127
|
+
The server supports multiple HTTP/HTTPS/mTLS and auth combinations. For deploy-time verification expectations, see the project deploy rule; for field-level mapping, see **CONFIGURATION.md** and **docs/SERVER_MODES_AND_CLIENT.md**.
|
|
128
|
+
|
|
129
|
+
## Development and tests
|
|
130
|
+
|
|
131
|
+
The original client test modules are preserved under `client/tests/`; the shared
|
|
132
|
+
project pipeline owns executable acceptance from the repository root.
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
python -m pipeline
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Release
|
|
139
|
+
|
|
140
|
+
The server and client read one version from `embed_client/_version.py` here.
|
|
141
|
+
The root `../build.sh` builds the client wheel and sdist, checks their metadata,
|
|
142
|
+
publishes only the client to PyPI and pushes the server image to Docker Hub on
|
|
143
|
+
every successful run. It accepts no arguments or skip options and invokes no
|
|
144
|
+
pipeline. Run the shared pipeline separately before releasing the candidate.
|
|
145
|
+
|
|
146
|
+
For isolated package artifacts without publishing, run `python -m build client`
|
|
147
|
+
from the repository root. This is packaging only, not service acceptance.
|
|
148
|
+
|
|
149
|
+
## License
|
|
150
|
+
|
|
151
|
+
MIT License
|
|
152
|
+
|
|
153
|
+
## Author
|
|
154
|
+
|
|
155
|
+
**Vasiliy Zdanovskiy** — vasilyvz@gmail.com
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
embed_client/__init__.py,sha256=TXsT5_4Yukd6sk6L46Ly4Cn2Vp9UwK5mie9O4DV3zao,1075
|
|
2
|
+
embed_client/__main__.py,sha256=s6by_GD-zenUpAmR7iSTKSsGAiMyix6XRHy2b6lim-Y,248
|
|
3
|
+
embed_client/_version.py,sha256=BfMNh6sTO74qCDUVDe8SqqmwKZ4X5XbDJFL7yAoHLrM,95
|
|
4
|
+
embed_client/adapter_config_factory.py,sha256=kCYKUdOnnwQQXMkxuFIEUxvnnqpveXl9iFT3lJ2OxPg,7629
|
|
5
|
+
embed_client/adapter_config_normalizer.py,sha256=LcTz19NL2fJanEW1w1sktPiPxCzW6jmhdvoDiebI3-U,4766
|
|
6
|
+
embed_client/adapter_generator_bridge.py,sha256=kXapqowjOmA1PYyD54ltvJyd-VZ1PBMLl-tdbjnw2MM,6131
|
|
7
|
+
embed_client/auth.py,sha256=BwH1-mXtfgTSMnprp8aTGShfdHngOLmSMGOr1TC2HEQ,5963
|
|
8
|
+
embed_client/cli.py,sha256=mZouCNpr65XaGlfHvsAz-58e5cfMGitDkzu5dqk3GOY,16875
|
|
9
|
+
embed_client/cli_core.py,sha256=oWKtJUKpyCyROXz8knkZieCvuylaCNXuwa2E648Yldk,17026
|
|
10
|
+
embed_client/client_factory.py,sha256=nwI6Lt1YgW6JE-Y_DmVBdEhyk3pbXU7z8Gr6rfc2Y8Y,17764
|
|
11
|
+
embed_client/client_factory_examples.py,sha256=oK0v87M5QRuh0xZkDMAGoBAPjvLGibtEztYAMzpRIQU,11790
|
|
12
|
+
embed_client/client_factory_helpers.py,sha256=e0_7HAhFIUgAYnIz3f36TtnudhJxQ7DB5rGXIKUrr8Y,1518
|
|
13
|
+
embed_client/config.py,sha256=huSBvKOR2PllsYpW1xorFmG8dTHdHmdTQ2JnQ-dUMK8,13110
|
|
14
|
+
embed_client/config_defaults.py,sha256=2AKkTwtwRDiB4TDzdiGXIemLam3UR7D76cFkiXTVIgQ,2040
|
|
15
|
+
embed_client/config_examples.py,sha256=t63XiYlDYGClbj7pms0wI7l-LmUARc6Cg-ba4ddJonA,5997
|
|
16
|
+
embed_client/config_generator.py,sha256=cYVX4MnEVZt1wE2HcgrFB7eLCCIUj2GCeu_ryaUKKo4,22384
|
|
17
|
+
embed_client/config_generator_cli.py,sha256=eBxG3pTpbWdNREo3NKbQwTaH6EMHaZU9CE4VmpONeFQ,5338
|
|
18
|
+
embed_client/config_presets.py,sha256=DxWRaDsM24wqVIBfv-XqdwDaB2ClqZVSlbLu3zLtv0M,7706
|
|
19
|
+
embed_client/config_validator.py,sha256=0Ohwzw4KkF1K3O_YV9YczQgGB-pWF2uHT09Pu9bIKME,8867
|
|
20
|
+
embed_client/config_validator_cli.py,sha256=w0iGZ5mqy5lprKEIlmjUu24731KypBDBmkJXejwXuGo,4002
|
|
21
|
+
embed_client/constants.py,sha256=iw2DoOp18akDJxtH-PzNQbAfLYHuE4_bmzy6iDG47Kg,1764
|
|
22
|
+
embed_client/demo_cli.py,sha256=wuBfAvvq7cKJyo1r718t9alXN_qMyrTXb9WO0vXTF2M,1945
|
|
23
|
+
embed_client/demo_security_cli.py,sha256=r9RUnNaMnmDgXq-F4ZBXzbQuC4uGkZxqfxN1vmvwLEM,6812
|
|
24
|
+
embed_client/embed_file_output_validate.py,sha256=AArxe_3mkKvMjqZfcfjWkGfPE13uvRR51e3SfXa1Hmg,12076
|
|
25
|
+
embed_client/embed_file_status_store.py,sha256=zmWGhMmlJAv2q3tOiKnicU-Nkb93-djtq2aUrRlX0_o,2665
|
|
26
|
+
embed_client/embedding_client.py,sha256=7W7d-_8pJvRBYUlsmWoFb8aBACsNGfPJLIZLTxftt_k,81789
|
|
27
|
+
embed_client/embedding_client_helpers.py,sha256=WWgRqvU0U61EyLFfdJ0qAw0WpJxK7wevTxdjQbeBfDY,3950
|
|
28
|
+
embed_client/example_async_usage.py,sha256=cSvpUoMrdbSQuYTnenjzU9lkHnwH6X9Bq7mGMmsBO54,13279
|
|
29
|
+
embed_client/example_async_usage_demo.py,sha256=rJH6min_iynU7RxYHuncRYXA98WucciKvPvECY80diM,10001
|
|
30
|
+
embed_client/example_async_usage_ru.py,sha256=hFN2b5_9iaKeURJRU2egGt3aykwFQLgMwxf1K_YPUcc,14938
|
|
31
|
+
embed_client/example_async_usage_ru_demo.py,sha256=ls8ow8R9iOj110Tx5nKzwHhhcnx-N9SS92ClJkn819o,14499
|
|
32
|
+
embed_client/exceptions.py,sha256=SYBaTgTnCNSY_ZX2OWOIXTGRG1AHh42pc9fKzHsbXY8,3445
|
|
33
|
+
embed_client/identifier_types.py,sha256=8ODHxmCLqhZ9PVU8EfpYQ05i8MS9u93N7GabWGF-Icg,1452
|
|
34
|
+
embed_client/json_embed_file_preflight.py,sha256=Frii83oLvOjgo9Mx_urRkqe8BGai2CrqEL6kVlKbl98,4177
|
|
35
|
+
embed_client/local_json_embed_file.py,sha256=FSGCyLK4Kk2aEqjgJAJyGHyUfuZVnkBHUAg0qnbstOI,2786
|
|
36
|
+
embed_client/md_embed_file_prep.py,sha256=MZgFEuQk9cuD5gs5RfKApooOtbTU7vQIw7t_vmblkLU,6866
|
|
37
|
+
embed_client/response_normalizer.py,sha256=oQfKAMVHTm6IUShvTYpskOfzrVI1TbxTwq-otyjcgsg,5516
|
|
38
|
+
embed_client/response_parsers.py,sha256=LAlXwEGpycHerp-VNAuwbDxkNxW7ZDXtRRGOZPXnmyA,7443
|
|
39
|
+
embed_client/security_cli.py,sha256=OlwSDBfHmBQkqvlsLFFrl6cKj06yVANnAsLP-7SZBSM,6556
|
|
40
|
+
embed_client/security_cli_core.py,sha256=XsnEDC7EZVexOTtqegAL1rKUAiH2lcF6P6ba1VSZD88,7878
|
|
41
|
+
embed_client/ssl_examples.py,sha256=zCYPA9MBPQ_kegocoU-dqsnzZ36ZqgopzgzF0jgFzvI,8101
|
|
42
|
+
embed_client/ssl_manager.py,sha256=NstROd2w7QrKSkFHAVHVxdDev1GVMByc7wmQcPnwNwo,4115
|
|
43
|
+
embed_client_dev-4.0.78.dist-info/licenses/LICENSE,sha256=6KdtUcTwmTRbJrAmYjVn7e6S-V42ubeDJ-AiVEzZ510,1075
|
|
44
|
+
embed_client_dev-4.0.78.dist-info/METADATA,sha256=CZF4J2qIS27bRoGwIovl_viQtv588hq-esvPVLxQwVk,10439
|
|
45
|
+
embed_client_dev-4.0.78.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
|
|
46
|
+
embed_client_dev-4.0.78.dist-info/entry_points.txt,sha256=vBxl72oNqpWRuhx529QQ9LTyu8EASdITGU-5Eh4u3hU,190
|
|
47
|
+
embed_client_dev-4.0.78.dist-info/top_level.txt,sha256=uG00A4d9o9DFrhiN7goObpeig72Pniby0E7UpDRgyXY,13
|
|
48
|
+
embed_client_dev-4.0.78.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Vasiliy Zdanovskiy
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
embed_client
|