compair-core 0.4.12__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.
- compair_core/__init__.py +8 -0
- compair_core/api.py +3598 -0
- compair_core/compair/__init__.py +57 -0
- compair_core/compair/celery_app.py +31 -0
- compair_core/compair/default_groups.py +14 -0
- compair_core/compair/embeddings.py +141 -0
- compair_core/compair/feedback.py +368 -0
- compair_core/compair/logger.py +29 -0
- compair_core/compair/main.py +276 -0
- compair_core/compair/models.py +453 -0
- compair_core/compair/schema.py +146 -0
- compair_core/compair/tasks.py +106 -0
- compair_core/compair/utils.py +42 -0
- compair_core/compair_email/__init__.py +0 -0
- compair_core/compair_email/email.py +6 -0
- compair_core/compair_email/email_core.py +15 -0
- compair_core/compair_email/templates.py +6 -0
- compair_core/compair_email/templates_core.py +32 -0
- compair_core/db.py +64 -0
- compair_core/server/__init__.py +0 -0
- compair_core/server/app.py +97 -0
- compair_core/server/deps.py +77 -0
- compair_core/server/local_model/__init__.py +1 -0
- compair_core/server/local_model/app.py +87 -0
- compair_core/server/local_model/ocr.py +107 -0
- compair_core/server/providers/__init__.py +0 -0
- compair_core/server/providers/console_mailer.py +9 -0
- compair_core/server/providers/contracts.py +66 -0
- compair_core/server/providers/http_ocr.py +60 -0
- compair_core/server/providers/local_storage.py +28 -0
- compair_core/server/providers/noop_analytics.py +7 -0
- compair_core/server/providers/noop_billing.py +30 -0
- compair_core/server/providers/noop_ocr.py +10 -0
- compair_core/server/routers/__init__.py +0 -0
- compair_core/server/routers/capabilities.py +46 -0
- compair_core/server/settings.py +66 -0
- compair_core-0.4.12.dist-info/METADATA +136 -0
- compair_core-0.4.12.dist-info/RECORD +41 -0
- compair_core-0.4.12.dist-info/WHEEL +5 -0
- compair_core-0.4.12.dist-info/licenses/LICENSE +674 -0
- compair_core-0.4.12.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Local filesystem storage provider used in the Core edition."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import BinaryIO
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class LocalStorage:
|
|
9
|
+
def __init__(self, base_dir: str = "/data/uploads", base_url: str = "/uploads") -> None:
|
|
10
|
+
self.base_dir = Path(base_dir)
|
|
11
|
+
self.base_url = base_url.rstrip("/") or "/uploads"
|
|
12
|
+
self.base_dir.mkdir(parents=True, exist_ok=True)
|
|
13
|
+
|
|
14
|
+
def put_file(self, key: str, fileobj: BinaryIO, content_type: str) -> str:
|
|
15
|
+
destination = self.base_dir / key
|
|
16
|
+
destination.parent.mkdir(parents=True, exist_ok=True)
|
|
17
|
+
with destination.open("wb") as dest:
|
|
18
|
+
dest.write(fileobj.read())
|
|
19
|
+
return self.build_url(key)
|
|
20
|
+
|
|
21
|
+
def get_file(self, key: str) -> tuple[BinaryIO, str]:
|
|
22
|
+
path = self.base_dir / key
|
|
23
|
+
if not path.exists():
|
|
24
|
+
raise FileNotFoundError(key)
|
|
25
|
+
return path.open("rb"), "application/octet-stream"
|
|
26
|
+
|
|
27
|
+
def build_url(self, key: str) -> str:
|
|
28
|
+
return f"{self.base_url}/{key}".replace("//", "/")
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""Billing provider placeholder for the Core edition."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from .contracts import BillingSession
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class NoopBilling:
|
|
8
|
+
def ensure_customer(self, **_: object) -> str:
|
|
9
|
+
raise NotImplementedError("Billing is not available in the Core edition.")
|
|
10
|
+
|
|
11
|
+
def create_checkout_session(self, **_: object) -> BillingSession:
|
|
12
|
+
raise NotImplementedError("Billing is not available in the Core edition.")
|
|
13
|
+
|
|
14
|
+
def retrieve_session(self, *_: object, **__: object) -> BillingSession:
|
|
15
|
+
raise NotImplementedError("Billing is not available in the Core edition.")
|
|
16
|
+
|
|
17
|
+
def get_checkout_url(self, *_: object, **__: object) -> str:
|
|
18
|
+
raise NotImplementedError("Billing is not available in the Core edition.")
|
|
19
|
+
|
|
20
|
+
def create_customer_portal(self, *_: object, **__: object) -> str:
|
|
21
|
+
raise NotImplementedError("Billing is not available in the Core edition.")
|
|
22
|
+
|
|
23
|
+
def create_coupon(self, *_: object, **__: object) -> str:
|
|
24
|
+
raise NotImplementedError("Billing is not available in the Core edition.")
|
|
25
|
+
|
|
26
|
+
def apply_coupon(self, *_: object, **__: object) -> None:
|
|
27
|
+
raise NotImplementedError("Billing is not available in the Core edition.")
|
|
28
|
+
|
|
29
|
+
def construct_event(self, *_: object, **__: object) -> dict[str, object]:
|
|
30
|
+
raise NotImplementedError("Billing is not available in the Core edition.")
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""OCR provider placeholder for the Core edition."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class NoopOCR:
|
|
6
|
+
def submit(self, **_: object) -> str:
|
|
7
|
+
raise NotImplementedError("OCR is not available in the Core edition.")
|
|
8
|
+
|
|
9
|
+
def status(self, task_id: str) -> dict[str, object]:
|
|
10
|
+
return {"status": "unknown", "task_id": task_id}
|
|
File without changes
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""Meta endpoints that describe edition capabilities for the CLI."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from fastapi import APIRouter, Depends
|
|
5
|
+
|
|
6
|
+
from ..settings import Settings, get_settings
|
|
7
|
+
|
|
8
|
+
router = APIRouter(tags=["meta"])
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@router.get("/capabilities")
|
|
12
|
+
def capabilities(settings: Settings = Depends(get_settings)) -> dict[str, object]:
|
|
13
|
+
edition = settings.edition.lower()
|
|
14
|
+
require_auth = settings.require_authentication
|
|
15
|
+
return {
|
|
16
|
+
"auth": {
|
|
17
|
+
"device_flow": edition == "cloud",
|
|
18
|
+
"password_login": require_auth,
|
|
19
|
+
"required": require_auth,
|
|
20
|
+
"single_user": not require_auth,
|
|
21
|
+
},
|
|
22
|
+
"inputs": {
|
|
23
|
+
"text": True,
|
|
24
|
+
"ocr": settings.ocr_enabled,
|
|
25
|
+
"repos": True,
|
|
26
|
+
},
|
|
27
|
+
"models": {
|
|
28
|
+
"premium": settings.premium_models,
|
|
29
|
+
"open": True,
|
|
30
|
+
},
|
|
31
|
+
"integrations": {
|
|
32
|
+
"slack": settings.integrations_enabled,
|
|
33
|
+
"github": settings.integrations_enabled,
|
|
34
|
+
},
|
|
35
|
+
"limits": {
|
|
36
|
+
"docs": None if edition == "core" else 100,
|
|
37
|
+
"feedback_per_day": None if edition == "core" else 50,
|
|
38
|
+
},
|
|
39
|
+
"features": {
|
|
40
|
+
"ocr_upload": settings.ocr_enabled,
|
|
41
|
+
"activity_feed": edition == "cloud",
|
|
42
|
+
},
|
|
43
|
+
"server": "Compair Cloud" if edition == "cloud" else "Compair Core",
|
|
44
|
+
"version": settings.version,
|
|
45
|
+
"legacy_routes": settings.include_legacy_routes,
|
|
46
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"""Application settings and feature flag definitions."""
|
|
2
|
+
from functools import lru_cache
|
|
3
|
+
|
|
4
|
+
from pydantic_settings import BaseSettings
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Settings(BaseSettings):
|
|
8
|
+
"""Configuration injected via COMPAIR_ environment variables."""
|
|
9
|
+
|
|
10
|
+
# Edition metadata
|
|
11
|
+
edition: str = "core" # core | cloud
|
|
12
|
+
version: str = "dev"
|
|
13
|
+
|
|
14
|
+
# Feature gates
|
|
15
|
+
ocr_enabled: bool = True
|
|
16
|
+
billing_enabled: bool = False
|
|
17
|
+
integrations_enabled: bool = False
|
|
18
|
+
premium_models: bool = False
|
|
19
|
+
require_authentication: bool = False
|
|
20
|
+
require_email_verification: bool = False
|
|
21
|
+
single_user_username: str = "compair-local@example.com"
|
|
22
|
+
single_user_name: str = "Compair Local User"
|
|
23
|
+
include_legacy_routes: bool = False
|
|
24
|
+
|
|
25
|
+
# Core/local storage defaults
|
|
26
|
+
local_upload_dir: str = "~/.compair-core/data/uploads"
|
|
27
|
+
local_upload_base_url: str = "/uploads"
|
|
28
|
+
|
|
29
|
+
# Cloud storage (R2/S3-compatible)
|
|
30
|
+
r2_bucket: str | None = None
|
|
31
|
+
r2_cdn_base: str | None = None
|
|
32
|
+
r2_access_key: str | None = None
|
|
33
|
+
r2_secret_key: str | None = None
|
|
34
|
+
r2_endpoint_url: str | None = None
|
|
35
|
+
|
|
36
|
+
# Optional cloud secrets
|
|
37
|
+
stripe_key: str | None = None
|
|
38
|
+
stripe_endpoint_secret: str | None = None
|
|
39
|
+
stripe_success_url: str = "https://compair.sh/home"
|
|
40
|
+
stripe_cancel_url: str = "https://compair.sh/home"
|
|
41
|
+
ga4_measurement_id: str | None = None
|
|
42
|
+
ga4_api_secret: str | None = None
|
|
43
|
+
|
|
44
|
+
# Local model endpoints
|
|
45
|
+
local_model_url: str = "http://127.0.0.1:9000"
|
|
46
|
+
local_embedding_route: str = "/embed"
|
|
47
|
+
local_generation_route: str = "/generate"
|
|
48
|
+
|
|
49
|
+
# OCR
|
|
50
|
+
ocr_endpoint: str | None = "http://127.0.0.1:9001"
|
|
51
|
+
ocr_request_timeout: float = 30.0
|
|
52
|
+
|
|
53
|
+
class Config:
|
|
54
|
+
env_prefix = "COMPAIR_"
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@lru_cache
|
|
58
|
+
def get_settings() -> Settings:
|
|
59
|
+
"""Cached settings instance for dependency injection."""
|
|
60
|
+
settings = Settings()
|
|
61
|
+
# Auto-enable OCR when a local endpoint is configured (Core) unless explicitly disabled.
|
|
62
|
+
if settings.ocr_endpoint and not settings.ocr_enabled:
|
|
63
|
+
object.__setattr__(settings, "ocr_enabled", True)
|
|
64
|
+
if not settings.ocr_endpoint and settings.edition.lower() != "cloud":
|
|
65
|
+
object.__setattr__(settings, "ocr_enabled", False)
|
|
66
|
+
return settings
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: compair-core
|
|
3
|
+
Version: 0.4.12
|
|
4
|
+
Summary: Open-source foundation of the Compair collaboration platform.
|
|
5
|
+
Author: RocketResearch, Inc.
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/RocketResearch-Inc/compair_core
|
|
8
|
+
Project-URL: Documentation, https://github.com/RocketResearch-Inc/compair_core
|
|
9
|
+
Project-URL: Source, https://github.com/RocketResearch-Inc/compair_core
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Requires-Dist: fastapi>=0.110
|
|
14
|
+
Requires-Dist: uvicorn>=0.29
|
|
15
|
+
Requires-Dist: celery>=5.3
|
|
16
|
+
Requires-Dist: sqlalchemy>=2.0
|
|
17
|
+
Requires-Dist: pgvector>=0.2
|
|
18
|
+
Requires-Dist: pydantic>=2.6
|
|
19
|
+
Requires-Dist: pydantic-settings>=2.2
|
|
20
|
+
Requires-Dist: requests>=2.31
|
|
21
|
+
Requires-Dist: httpx>=0.27
|
|
22
|
+
Requires-Dist: redis>=5.0
|
|
23
|
+
Requires-Dist: psutil>=5.9
|
|
24
|
+
Requires-Dist: python-Levenshtein>=0.23
|
|
25
|
+
Requires-Dist: redmail>=0.6
|
|
26
|
+
Requires-Dist: python-multipart>=0.0.20
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: build>=1.0; extra == "dev"
|
|
29
|
+
Requires-Dist: twine>=5.0; extra == "dev"
|
|
30
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
31
|
+
Requires-Dist: ruff>=0.3; extra == "dev"
|
|
32
|
+
Provides-Extra: ocr
|
|
33
|
+
Requires-Dist: pillow>=10.0; extra == "ocr"
|
|
34
|
+
Requires-Dist: pytesseract>=0.3.10; extra == "ocr"
|
|
35
|
+
Requires-Dist: pypdf>=4.0; extra == "ocr"
|
|
36
|
+
Provides-Extra: postgres
|
|
37
|
+
Requires-Dist: psycopg2-binary>=2.9; extra == "postgres"
|
|
38
|
+
Dynamic: license-file
|
|
39
|
+
|
|
40
|
+
# Compair Core
|
|
41
|
+
|
|
42
|
+
Compair Core is the open-source foundation of the Compair platform. It bundles the shared data models, FastAPI application, email utilities, and local-only helpers so that you can run Compair in a self-hosted or evaluation environment without premium cloud integrations.
|
|
43
|
+
|
|
44
|
+
The premium cloud offering (available at [https://www.compair.sh/](https://www.compair.sh/)) layers on premium services (premium models, OCR, storage, etc.). Core gracefully falls back to local behaviour when those packages are not present.
|
|
45
|
+
|
|
46
|
+
## Repository Layout
|
|
47
|
+
|
|
48
|
+
| Path | Purpose |
|
|
49
|
+
| --- | --- |
|
|
50
|
+
| `compair/` | Core runtime (ORM models, tasks, embeddings, feedback). |
|
|
51
|
+
| `server/` | FastAPI app factory and dependency providers used by both editions. |
|
|
52
|
+
| `compair_email/` | Console mailer + minimal templates for account verification and password reset. |
|
|
53
|
+
| `docs/` | Additional documentation (see `docs/editions.md` for an overview of the two editions). |
|
|
54
|
+
|
|
55
|
+
## Installing
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pip install compair-core
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
This installs the package as a dependency so you can embed Compair into your own FastAPI instance or reuse the models in scripts. The core library exposes hooks for the private cloud extension that Compair itself uses for hosted deployments.
|
|
62
|
+
|
|
63
|
+
### Installing from source
|
|
64
|
+
|
|
65
|
+
You can also install directly from GitHub (handy for pinning to a specific commit or branch):
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
pip install "git+https://github.com/RocketResearch-Inc/compair_core.git@main"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
For local development:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
git clone https://github.com/RocketResearch-Inc/compair_core.git
|
|
75
|
+
cd compair_core
|
|
76
|
+
python -m venv .venv
|
|
77
|
+
source .venv/bin/activate
|
|
78
|
+
pip install -e ".[dev]"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
> 🔧 The optional OCR stack relies on the Tesseract CLI. When running outside the container image, install Tesseract separately (for example, `brew install tesseract` on macOS or `apt-get install tesseract-ocr` on Debian/Ubuntu) so pytesseract can invoke it.
|
|
82
|
+
|
|
83
|
+
## Containers
|
|
84
|
+
|
|
85
|
+
Container definitions and build pipelines live outside this public package:
|
|
86
|
+
|
|
87
|
+
- The **core** container lives alongside the private CI workflow in the `compair_cloud` repository (`Dockerfile.core`). It installs this package from PyPI and runs the FastAPI factory with SQLite defaults.
|
|
88
|
+
- A **cloud** container (`Dockerfile.cloud`) is built from a private cloud extension that enables premium features. For more information, please visit [https://www.compair.sh/](https://www.compair.sh/).
|
|
89
|
+
|
|
90
|
+
## Configuration
|
|
91
|
+
|
|
92
|
+
Key environment variables for the core edition:
|
|
93
|
+
|
|
94
|
+
- `COMPAIR_EDITION` (`core`) – corresponds to this core local implementation.
|
|
95
|
+
- `COMPAIR_DATABASE_URL` – optional explicit SQLAlchemy URL (e.g. `postgresql+psycopg2://user:pass@host/db`). When omitted, Compair falls back to a local SQLite file.
|
|
96
|
+
- `COMPAIR_DB_DIR` / `COMPAIR_DB_NAME` – directory and filename for the bundled SQLite database (default: `~/.compair-core/data/compair.db`). Legacy `COMPAIR_SQLITE_*` variables remain supported.
|
|
97
|
+
- `COMPAIR_LOCAL_MODEL_URL` – endpoint for your local embeddings/feedback service (defaults to `http://127.0.0.1:9000`).
|
|
98
|
+
- `COMPAIR_EMBEDDING_PROVIDER` – choose `local` (default) or `openai` for embeddings independent of feedback.
|
|
99
|
+
- `COMPAIR_OPENAI_EMBED_MODEL` – override the OpenAI embedding model when `COMPAIR_EMBEDDING_PROVIDER=openai`.
|
|
100
|
+
- `COMPAIR_EMAIL_BACKEND` – the core mailer logs emails to stdout; cloud overrides this with transactional delivery.
|
|
101
|
+
- `COMPAIR_REQUIRE_AUTHENTICATION` (`true`) – set to `false` to run the API in single-user mode without login or account management. When disabled, Compair auto-provisions a local user, group, and long-lived session token so you can upload documents immediately.
|
|
102
|
+
- `COMPAIR_REQUIRE_EMAIL_VERIFICATION` (`false`) – require new users to confirm via email before activation. Set to `true` only when SMTP credentials are configured.
|
|
103
|
+
- `COMPAIR_SINGLE_USER_USERNAME` / `COMPAIR_SINGLE_USER_NAME` – override the email-style username and display name that are used for the auto-provisioned local user in single-user mode.
|
|
104
|
+
- `COMPAIR_INCLUDE_LEGACY_ROUTES` (`false`) – opt-in to the full legacy API surface (used by the hosted product) when running the core edition. Leave unset to expose only the streamlined single-user endpoints in Swagger.
|
|
105
|
+
- `COMPAIR_EMBEDDING_DIM` – force the embedding vector size stored in the database (defaults to 384 for core, 1536 for cloud). Keep this in sync with whichever embedding model you configure.
|
|
106
|
+
- `COMPAIR_VECTOR_BACKEND` (`auto`) – set to `pgvector` when running against PostgreSQL with the pgvector extension, or `json` to store embeddings as JSON (the default for SQLite deployments).
|
|
107
|
+
- `COMPAIR_GENERATION_PROVIDER` (`local`) – choose how feedback is produced. Options: `local` (call the bundled FastAPI service), `openai` (use ChatGPT-compatible APIs with an API key), `http` (POST the request to a custom endpoint), or `fallback` (skip generation and surface similar references only).
|
|
108
|
+
- `COMPAIR_OPENAI_API_KEY` / `COMPAIR_OPENAI_MODEL` – when using the OpenAI provider, supply your API key and optional model name (defaults to `gpt-5-nano`). The fallback kicks in automatically if the key or SDK is unavailable.
|
|
109
|
+
- `COMPAIR_GENERATION_ENDPOINT` – HTTP endpoint invoked when `COMPAIR_GENERATION_PROVIDER=http`; the service receives a JSON payload (`document`, `references`, `length_instruction`) and should return `{"feedback": ...}`.
|
|
110
|
+
- `COMPAIR_OCR_ENDPOINT` – endpoint the backend calls for OCR uploads. Setting this (e.g., to the bundled Tesseract wrapper at `http://127.0.0.1:9001/ocr-file`) automatically enables OCR.
|
|
111
|
+
- `COMPAIR_OCR_REQUEST_TIMEOUT` – timeout in seconds for HTTP OCR requests (default `30`).
|
|
112
|
+
|
|
113
|
+
When verification is required, configure `EMAIL_HOST`, `EMAIL_USER`, and `EMAIL_PW` so the mailer can deliver verification and password reset emails.
|
|
114
|
+
|
|
115
|
+
See `compair_core/server/settings.py` for the full settings surface.
|
|
116
|
+
|
|
117
|
+
## Developing Locally
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
python -m venv .venv
|
|
121
|
+
source .venv/bin/activate
|
|
122
|
+
pip install -e ".[dev]"
|
|
123
|
+
uvicorn compair_core.server.app:create_app --factory --reload
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
The API will be available at http://127.0.0.1:8000 and supports the Swagger UI at `/docs`.
|
|
127
|
+
|
|
128
|
+
## Tests / Linting
|
|
129
|
+
|
|
130
|
+
Core currently ships with a syntax sanity check (`python -m compileall ...`). You can add pytest or other tooling as needed.
|
|
131
|
+
|
|
132
|
+
Release and packaging steps are documented in `docs/maintainers.md`.
|
|
133
|
+
|
|
134
|
+
## Reporting Issues
|
|
135
|
+
|
|
136
|
+
Please open GitHub issues or PRs against this repository. If you are a Compair Cloud customer, reach out through your support channel for issues related to premium features.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
compair_core/__init__.py,sha256=ktPgTk1QCd7PF-CUzfcd49JvkEut68SEefx2qcL5M5s,122
|
|
2
|
+
compair_core/api.py,sha256=LWefBRIV54hjaWuYQVosHRxfpkZBztN4Kswn5_LKd2Q,138239
|
|
3
|
+
compair_core/db.py,sha256=eOFnwD4VLRre_zk5iR-sh3Gd2MUqO5v7XTCIV-eVMHg,1989
|
|
4
|
+
compair_core/compair/__init__.py,sha256=Tt_wPW8GrE5Kp1PvtiT_w_LN458ysr9x6Xa-xhXq1uM,1753
|
|
5
|
+
compair_core/compair/celery_app.py,sha256=S-xt38oBz08wMofgcJ-Yk9L1fhead6q1Y_VpXyjcxfw,881
|
|
6
|
+
compair_core/compair/default_groups.py,sha256=dbacrFkSjqEQZ_uoFU5gYhgIoP_3lmvz6LJNHCJvxlw,498
|
|
7
|
+
compair_core/compair/embeddings.py,sha256=iAJBAEZmbeFe5bOdgKt79Ndv79ZZnIrkqKvvw0VX5Yk,5803
|
|
8
|
+
compair_core/compair/feedback.py,sha256=45s6hzWH_3y3grl0-_s0RzIoyag_sedNYJrcoPF-ANI,15228
|
|
9
|
+
compair_core/compair/logger.py,sha256=mB9gV3FfC0qE_G9NBErpEAJhyGxDxEVKqWKu3n8hOkc,802
|
|
10
|
+
compair_core/compair/main.py,sha256=cRk7azCCMY1F4e5hjF0NH9Wxv2nDUq3FBf8KGEGAmjY,9227
|
|
11
|
+
compair_core/compair/models.py,sha256=0ysM2HG1E8j4MmW6P7abEgNFfor_yfFffScYIl8xku8,16590
|
|
12
|
+
compair_core/compair/schema.py,sha256=TxQpDQ96J_tIj-Y_1C_x2eUYn9n_LOG6XiNLCX1-GYY,2902
|
|
13
|
+
compair_core/compair/tasks.py,sha256=HHf2Kk2_okfJqzbZV6GOrP3st4HuWDaPHEGvYT48iW4,4093
|
|
14
|
+
compair_core/compair/utils.py,sha256=7bbkRb-9zmPAogqR7zQHLnQUkoeW9bwhqPz2S5FRKSc,978
|
|
15
|
+
compair_core/compair_email/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
+
compair_core/compair_email/email.py,sha256=bedTrcfmi4K2kB0B2bSbryhq5k_4C-QNtb8wZjvzKAs,238
|
|
17
|
+
compair_core/compair_email/email_core.py,sha256=da7JxTo5ude55mB7UNLlpNp8xenYwoPaqyTunxjU7to,316
|
|
18
|
+
compair_core/compair_email/templates.py,sha256=JVlLdJEcpu14mVKRAYRIPIw2JGy70kG70mfjXgby-To,206
|
|
19
|
+
compair_core/compair_email/templates_core.py,sha256=1XzBXGjmM6gApSXq382fxCRiVa5J-iskC3r9QQvmV1U,967
|
|
20
|
+
compair_core/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
compair_core/server/app.py,sha256=-pYKPsn0TIL75oJXPdHEHDFnEssDbdJgOW1JnBvh9w0,3692
|
|
22
|
+
compair_core/server/deps.py,sha256=zjcnGJv7MHsZneewjuSSd6_JESfAWjQgXeXoYxmwvmg,1915
|
|
23
|
+
compair_core/server/settings.py,sha256=FdrUoAgmUpkC91ZlwUlTx3JzuVYkh_bz43vgGsCa_gY,2194
|
|
24
|
+
compair_core/server/local_model/__init__.py,sha256=YlzDgorgAjGou9d_W29Xp3TVu08e4t9x8csFxn8cgSE,50
|
|
25
|
+
compair_core/server/local_model/app.py,sha256=943dnixGcaxHixBXVgJmG5G69gisFcwcIh65NJ5scGU,2552
|
|
26
|
+
compair_core/server/local_model/ocr.py,sha256=Y-njNUWDIGvrnL3MefuWkxtfckcWW9RawJJu5PCvdgk,3460
|
|
27
|
+
compair_core/server/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
+
compair_core/server/providers/console_mailer.py,sha256=7ady954yOPlT8t3spkDvdMdO3BTwosJUj1cpVNOwj8U,308
|
|
29
|
+
compair_core/server/providers/contracts.py,sha256=pYA_2AaPHw089O_UP2JtWRHbIiVkoNGhLuesuNATowU,1858
|
|
30
|
+
compair_core/server/providers/http_ocr.py,sha256=X5_CFHIzREWuXdN3_4CiDZ9hjuHzeoROUNeenDkxQVg,1711
|
|
31
|
+
compair_core/server/providers/local_storage.py,sha256=UNCDHejeWlDlPVDRdwsN13toNRi_qHiaX-kbmzxf0OA,1054
|
|
32
|
+
compair_core/server/providers/noop_analytics.py,sha256=OKw23SObxBlQzFdB0xEBg5qD1Fcq_bcx6OOb4S3Mbd0,194
|
|
33
|
+
compair_core/server/providers/noop_billing.py,sha256=V18Cpl1D1reM3xhgw-lShGliVpYO8IsiAPWOAIR34jM,1358
|
|
34
|
+
compair_core/server/providers/noop_ocr.py,sha256=fMaJrivDef38-ECgIuTXUBCIm_avgvZf3nQ3UTdFPNI,341
|
|
35
|
+
compair_core/server/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
+
compair_core/server/routers/capabilities.py,sha256=hM7HNM6efkyZ7xk0-CLI31qMJvbKM1MwC7xBgj_5-Qw,1479
|
|
37
|
+
compair_core-0.4.12.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
38
|
+
compair_core-0.4.12.dist-info/METADATA,sha256=_W4cxc3NdGAeX2grGdAWYhRoOFUMBpWc11J5DJATUOk,7921
|
|
39
|
+
compair_core-0.4.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
40
|
+
compair_core-0.4.12.dist-info/top_level.txt,sha256=1dpwoLSY2DWQUVGS05Tq0MuFXg8sabYzg4V2deLzzuo,13
|
|
41
|
+
compair_core-0.4.12.dist-info/RECORD,,
|