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.
Files changed (48) hide show
  1. embed_client/__init__.py +36 -0
  2. embed_client/__main__.py +15 -0
  3. embed_client/_version.py +3 -0
  4. embed_client/adapter_config_factory.py +213 -0
  5. embed_client/adapter_config_normalizer.py +135 -0
  6. embed_client/adapter_generator_bridge.py +166 -0
  7. embed_client/auth.py +189 -0
  8. embed_client/cli.py +483 -0
  9. embed_client/cli_core.py +427 -0
  10. embed_client/client_factory.py +515 -0
  11. embed_client/client_factory_examples.py +375 -0
  12. embed_client/client_factory_helpers.py +59 -0
  13. embed_client/config.py +408 -0
  14. embed_client/config_defaults.py +77 -0
  15. embed_client/config_examples.py +228 -0
  16. embed_client/config_generator.py +652 -0
  17. embed_client/config_generator_cli.py +151 -0
  18. embed_client/config_presets.py +245 -0
  19. embed_client/config_validator.py +246 -0
  20. embed_client/config_validator_cli.py +141 -0
  21. embed_client/constants.py +52 -0
  22. embed_client/demo_cli.py +78 -0
  23. embed_client/demo_security_cli.py +206 -0
  24. embed_client/embed_file_output_validate.py +348 -0
  25. embed_client/embed_file_status_store.py +80 -0
  26. embed_client/embedding_client.py +1929 -0
  27. embed_client/embedding_client_helpers.py +105 -0
  28. embed_client/example_async_usage.py +357 -0
  29. embed_client/example_async_usage_demo.py +282 -0
  30. embed_client/example_async_usage_ru.py +340 -0
  31. embed_client/example_async_usage_ru_demo.py +313 -0
  32. embed_client/exceptions.py +122 -0
  33. embed_client/identifier_types.py +56 -0
  34. embed_client/json_embed_file_preflight.py +128 -0
  35. embed_client/local_json_embed_file.py +73 -0
  36. embed_client/md_embed_file_prep.py +197 -0
  37. embed_client/response_normalizer.py +160 -0
  38. embed_client/response_parsers.py +219 -0
  39. embed_client/security_cli.py +200 -0
  40. embed_client/security_cli_core.py +227 -0
  41. embed_client/ssl_examples.py +278 -0
  42. embed_client/ssl_manager.py +141 -0
  43. embed_client_dev-4.0.78.dist-info/METADATA +155 -0
  44. embed_client_dev-4.0.78.dist-info/RECORD +48 -0
  45. embed_client_dev-4.0.78.dist-info/WHEEL +5 -0
  46. embed_client_dev-4.0.78.dist-info/entry_points.txt +4 -0
  47. embed_client_dev-4.0.78.dist-info/licenses/LICENSE +21 -0
  48. 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,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.2.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,4 @@
1
+ [console_scripts]
2
+ embed-config-generator = embed_client.config_generator_cli:main
3
+ embed-config-validator = embed_client.config_validator_cli:main
4
+ embed-vectorize = embed_client.cli:cli_main
@@ -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