morphik 1.2.0__tar.gz → 1.2.1__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.
- {morphik-1.2.0 → morphik-1.2.1}/PKG-INFO +1 -1
- {morphik-1.2.0 → morphik-1.2.1}/morphik/__init__.py +1 -1
- {morphik-1.2.0 → morphik-1.2.1}/morphik/_shared.py +3 -24
- {morphik-1.2.0 → morphik-1.2.1}/morphik/async_.py +6 -36
- {morphik-1.2.0 → morphik-1.2.1}/morphik/sync.py +6 -36
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/test_app_ops.py +4 -5
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/test_shared_helpers.py +3 -17
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/test_update_document_metadata_rename.py +0 -1
- {morphik-1.2.0 → morphik-1.2.1}/pyproject.toml +1 -1
- {morphik-1.2.0 → morphik-1.2.1}/.gitignore +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/README.md +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/_internal.py +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/_scoped_ops.py +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/exceptions.py +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/models.py +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/README.md +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/__init__.py +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/example_usage.py +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/test_async.py +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/test_docs/sample1.txt +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/test_docs/sample2.txt +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/test_docs/sample3.txt +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/test_scoped_ops_unit.py +0 -0
- {morphik-1.2.0 → morphik-1.2.1}/morphik/tests/test_sync.py +0 -0
|
@@ -95,27 +95,8 @@ def build_rotate_app_params(
|
|
|
95
95
|
return params
|
|
96
96
|
|
|
97
97
|
|
|
98
|
-
def build_create_app_payload(
|
|
99
|
-
|
|
100
|
-
name: str,
|
|
101
|
-
app_id: Optional[str],
|
|
102
|
-
user_id: Optional[str],
|
|
103
|
-
expiry_days: Optional[int],
|
|
104
|
-
org_id: Optional[str],
|
|
105
|
-
created_by_user_id: Optional[str],
|
|
106
|
-
) -> Dict[str, Any]:
|
|
107
|
-
payload: Dict[str, Any] = {"name": name}
|
|
108
|
-
if app_id is not None:
|
|
109
|
-
payload["app_id"] = app_id
|
|
110
|
-
if user_id is not None:
|
|
111
|
-
payload["user_id"] = user_id
|
|
112
|
-
if expiry_days is not None:
|
|
113
|
-
payload["expiry_days"] = expiry_days
|
|
114
|
-
if org_id is not None:
|
|
115
|
-
payload["org_id"] = org_id
|
|
116
|
-
if created_by_user_id is not None:
|
|
117
|
-
payload["created_by_user_id"] = created_by_user_id
|
|
118
|
-
return payload
|
|
98
|
+
def build_create_app_payload(*, name: str) -> Dict[str, Any]:
|
|
99
|
+
return {"name": name}
|
|
119
100
|
|
|
120
101
|
|
|
121
102
|
def build_requeue_payload(
|
|
@@ -140,9 +121,7 @@ def build_requeue_payload(
|
|
|
140
121
|
return payload
|
|
141
122
|
|
|
142
123
|
|
|
143
|
-
def build_logs_params(
|
|
144
|
-
*, limit: int, hours: float, op_type: Optional[str], status: Optional[str]
|
|
145
|
-
) -> Dict[str, Any]:
|
|
124
|
+
def build_logs_params(*, limit: int, hours: float, op_type: Optional[str], status: Optional[str]) -> Dict[str, Any]:
|
|
146
125
|
params: Dict[str, Any] = {
|
|
147
126
|
"limit": max(1, min(limit, MAX_LIMIT)),
|
|
148
127
|
"hours": max(MIN_LOG_HOURS, min(hours, MAX_LOG_HOURS)),
|
|
@@ -11,19 +11,19 @@ from pydantic import BaseModel
|
|
|
11
11
|
|
|
12
12
|
from ._internal import FinalChunkResult, _MorphikClientLogic
|
|
13
13
|
from ._scoped_ops import _ScopedOperationsMixin
|
|
14
|
-
from .models import CompletionResponse # Prompt override models
|
|
15
14
|
from ._shared import (
|
|
16
15
|
build_create_app_payload,
|
|
17
16
|
build_document_by_filename_params,
|
|
18
17
|
build_list_apps_params,
|
|
19
18
|
build_logs_params,
|
|
20
|
-
build_requeue_payload,
|
|
21
19
|
build_rename_app_params,
|
|
20
|
+
build_requeue_payload,
|
|
22
21
|
build_rotate_app_params,
|
|
23
22
|
collect_directory_files,
|
|
24
23
|
merge_folders,
|
|
25
24
|
normalize_additional_folders,
|
|
26
25
|
)
|
|
26
|
+
from .models import CompletionResponse # Prompt override models
|
|
27
27
|
from .models import (
|
|
28
28
|
AppStorageUsageResponse,
|
|
29
29
|
ChunkSource,
|
|
@@ -128,9 +128,7 @@ class _AsyncScopedClientOps:
|
|
|
128
128
|
if not files:
|
|
129
129
|
return []
|
|
130
130
|
|
|
131
|
-
return await self.ingest_files(
|
|
132
|
-
files=files, metadata=metadata, use_colpali=use_colpali, parallel=parallel
|
|
133
|
-
)
|
|
131
|
+
return await self.ingest_files(files=files, metadata=metadata, use_colpali=use_colpali, parallel=parallel)
|
|
134
132
|
|
|
135
133
|
async def query_document(
|
|
136
134
|
self,
|
|
@@ -492,7 +490,6 @@ class AsyncFolder(_AsyncScopedClientOps):
|
|
|
492
490
|
return None
|
|
493
491
|
|
|
494
492
|
|
|
495
|
-
|
|
496
493
|
class AsyncUserScope(_AsyncScopedClientOps):
|
|
497
494
|
"""
|
|
498
495
|
A user scope that allows operations to be scoped to a specific end user and optionally a folder.
|
|
@@ -525,7 +522,6 @@ class AsyncUserScope(_AsyncScopedClientOps):
|
|
|
525
522
|
return self._end_user_id
|
|
526
523
|
|
|
527
524
|
|
|
528
|
-
|
|
529
525
|
class AsyncMorphik(_ScopedOperationsMixin):
|
|
530
526
|
"""
|
|
531
527
|
Morphik client for document operations.
|
|
@@ -996,9 +992,7 @@ class AsyncMorphik(_ScopedOperationsMixin):
|
|
|
996
992
|
return []
|
|
997
993
|
|
|
998
994
|
# Use ingest_files with collected paths
|
|
999
|
-
return await self.ingest_files(
|
|
1000
|
-
files=files, metadata=metadata, use_colpali=use_colpali, parallel=parallel
|
|
1001
|
-
)
|
|
995
|
+
return await self.ingest_files(files=files, metadata=metadata, use_colpali=use_colpali, parallel=parallel)
|
|
1002
996
|
|
|
1003
997
|
async def retrieve_chunks(
|
|
1004
998
|
self,
|
|
@@ -1947,42 +1941,18 @@ class AsyncMorphik(_ScopedOperationsMixin):
|
|
|
1947
1941
|
self,
|
|
1948
1942
|
*,
|
|
1949
1943
|
name: str,
|
|
1950
|
-
app_id: Optional[str] = None,
|
|
1951
|
-
user_id: Optional[str] = None,
|
|
1952
|
-
expiry_days: Optional[int] = None,
|
|
1953
|
-
org_id: Optional[str] = None,
|
|
1954
|
-
created_by_user_id: Optional[str] = None,
|
|
1955
1944
|
) -> Dict[str, str]:
|
|
1956
1945
|
"""Create a cloud app and return its authenticated URI (async)."""
|
|
1957
|
-
payload = build_create_app_payload(
|
|
1958
|
-
name=name,
|
|
1959
|
-
app_id=app_id,
|
|
1960
|
-
user_id=user_id,
|
|
1961
|
-
expiry_days=expiry_days,
|
|
1962
|
-
org_id=org_id,
|
|
1963
|
-
created_by_user_id=created_by_user_id,
|
|
1964
|
-
)
|
|
1946
|
+
payload = build_create_app_payload(name=name)
|
|
1965
1947
|
return await self._request("POST", "cloud/generate_uri", data=payload)
|
|
1966
1948
|
|
|
1967
1949
|
async def generate_cloud_uri(
|
|
1968
1950
|
self,
|
|
1969
1951
|
*,
|
|
1970
1952
|
name: str,
|
|
1971
|
-
app_id: Optional[str] = None,
|
|
1972
|
-
user_id: Optional[str] = None,
|
|
1973
|
-
expiry_days: Optional[int] = None,
|
|
1974
|
-
org_id: Optional[str] = None,
|
|
1975
|
-
created_by_user_id: Optional[str] = None,
|
|
1976
1953
|
) -> Dict[str, str]:
|
|
1977
1954
|
"""Deprecated alias for create_app (async)."""
|
|
1978
|
-
return await self.create_app(
|
|
1979
|
-
name=name,
|
|
1980
|
-
app_id=app_id,
|
|
1981
|
-
user_id=user_id,
|
|
1982
|
-
expiry_days=expiry_days,
|
|
1983
|
-
org_id=org_id,
|
|
1984
|
-
created_by_user_id=created_by_user_id,
|
|
1985
|
-
)
|
|
1955
|
+
return await self.create_app(name=name)
|
|
1986
1956
|
|
|
1987
1957
|
async def requeue_ingestion_jobs(
|
|
1988
1958
|
self,
|
|
@@ -11,19 +11,19 @@ from pydantic import BaseModel
|
|
|
11
11
|
|
|
12
12
|
from ._internal import FinalChunkResult, _MorphikClientLogic
|
|
13
13
|
from ._scoped_ops import _ScopedOperationsMixin
|
|
14
|
-
from .models import CompletionResponse # Prompt override models
|
|
15
14
|
from ._shared import (
|
|
16
15
|
build_create_app_payload,
|
|
17
16
|
build_document_by_filename_params,
|
|
18
17
|
build_list_apps_params,
|
|
19
18
|
build_logs_params,
|
|
20
|
-
build_requeue_payload,
|
|
21
19
|
build_rename_app_params,
|
|
20
|
+
build_requeue_payload,
|
|
22
21
|
build_rotate_app_params,
|
|
23
22
|
collect_directory_files,
|
|
24
23
|
merge_folders,
|
|
25
24
|
normalize_additional_folders,
|
|
26
25
|
)
|
|
26
|
+
from .models import CompletionResponse # Prompt override models
|
|
27
27
|
from .models import (
|
|
28
28
|
AppStorageUsageResponse,
|
|
29
29
|
ChunkSource,
|
|
@@ -136,9 +136,7 @@ class _ScopedClientOps:
|
|
|
136
136
|
if not files:
|
|
137
137
|
return []
|
|
138
138
|
|
|
139
|
-
return self.ingest_files(
|
|
140
|
-
files=files, metadata=metadata, use_colpali=use_colpali, parallel=parallel
|
|
141
|
-
)
|
|
139
|
+
return self.ingest_files(files=files, metadata=metadata, use_colpali=use_colpali, parallel=parallel)
|
|
142
140
|
|
|
143
141
|
def query_document(
|
|
144
142
|
self,
|
|
@@ -519,7 +517,6 @@ class Folder(_ScopedClientOps):
|
|
|
519
517
|
return None
|
|
520
518
|
|
|
521
519
|
|
|
522
|
-
|
|
523
520
|
class UserScope(_ScopedClientOps):
|
|
524
521
|
"""
|
|
525
522
|
A user scope that allows operations to be scoped to a specific end user and optionally a folder.
|
|
@@ -552,7 +549,6 @@ class UserScope(_ScopedClientOps):
|
|
|
552
549
|
return self._end_user_id
|
|
553
550
|
|
|
554
551
|
|
|
555
|
-
|
|
556
552
|
class Morphik(_ScopedOperationsMixin):
|
|
557
553
|
"""
|
|
558
554
|
Morphik client for document operations.
|
|
@@ -1039,9 +1035,7 @@ class Morphik(_ScopedOperationsMixin):
|
|
|
1039
1035
|
return []
|
|
1040
1036
|
|
|
1041
1037
|
# Use ingest_files with collected paths
|
|
1042
|
-
return self.ingest_files(
|
|
1043
|
-
files=files, metadata=metadata, use_colpali=use_colpali, parallel=parallel
|
|
1044
|
-
)
|
|
1038
|
+
return self.ingest_files(files=files, metadata=metadata, use_colpali=use_colpali, parallel=parallel)
|
|
1045
1039
|
|
|
1046
1040
|
def retrieve_chunks(
|
|
1047
1041
|
self,
|
|
@@ -1984,42 +1978,18 @@ class Morphik(_ScopedOperationsMixin):
|
|
|
1984
1978
|
self,
|
|
1985
1979
|
*,
|
|
1986
1980
|
name: str,
|
|
1987
|
-
app_id: Optional[str] = None,
|
|
1988
|
-
user_id: Optional[str] = None,
|
|
1989
|
-
expiry_days: Optional[int] = None,
|
|
1990
|
-
org_id: Optional[str] = None,
|
|
1991
|
-
created_by_user_id: Optional[str] = None,
|
|
1992
1981
|
) -> Dict[str, str]:
|
|
1993
1982
|
"""Create a cloud app and return its authenticated URI."""
|
|
1994
|
-
payload = build_create_app_payload(
|
|
1995
|
-
name=name,
|
|
1996
|
-
app_id=app_id,
|
|
1997
|
-
user_id=user_id,
|
|
1998
|
-
expiry_days=expiry_days,
|
|
1999
|
-
org_id=org_id,
|
|
2000
|
-
created_by_user_id=created_by_user_id,
|
|
2001
|
-
)
|
|
1983
|
+
payload = build_create_app_payload(name=name)
|
|
2002
1984
|
return self._request("POST", "cloud/generate_uri", data=payload)
|
|
2003
1985
|
|
|
2004
1986
|
def generate_cloud_uri(
|
|
2005
1987
|
self,
|
|
2006
1988
|
*,
|
|
2007
1989
|
name: str,
|
|
2008
|
-
app_id: Optional[str] = None,
|
|
2009
|
-
user_id: Optional[str] = None,
|
|
2010
|
-
expiry_days: Optional[int] = None,
|
|
2011
|
-
org_id: Optional[str] = None,
|
|
2012
|
-
created_by_user_id: Optional[str] = None,
|
|
2013
1990
|
) -> Dict[str, str]:
|
|
2014
1991
|
"""Deprecated alias for create_app."""
|
|
2015
|
-
return self.create_app(
|
|
2016
|
-
name=name,
|
|
2017
|
-
app_id=app_id,
|
|
2018
|
-
user_id=user_id,
|
|
2019
|
-
expiry_days=expiry_days,
|
|
2020
|
-
org_id=org_id,
|
|
2021
|
-
created_by_user_id=created_by_user_id,
|
|
2022
|
-
)
|
|
1992
|
+
return self.create_app(name=name)
|
|
2023
1993
|
|
|
2024
1994
|
def requeue_ingestion_jobs(
|
|
2025
1995
|
self,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import pytest
|
|
2
|
-
|
|
3
2
|
from morphik.async_ import AsyncMorphik
|
|
4
3
|
from morphik.models import DetailedHealthCheckResponse, LogResponse, RequeueIngestionJob
|
|
5
4
|
from morphik.sync import Morphik
|
|
@@ -102,10 +101,10 @@ def test_sync_app_ops_payloads():
|
|
|
102
101
|
assert call["endpoint"] == "apps/rotate_token"
|
|
103
102
|
assert call["params"] == {"app_name": "demo", "expiry_days": 10}
|
|
104
103
|
|
|
105
|
-
client.create_app(name="demo"
|
|
104
|
+
client.create_app(name="demo")
|
|
106
105
|
call = calls.pop()
|
|
107
106
|
assert call["endpoint"] == "cloud/generate_uri"
|
|
108
|
-
assert call["data"] == {"name": "demo"
|
|
107
|
+
assert call["data"] == {"name": "demo"}
|
|
109
108
|
|
|
110
109
|
client.requeue_ingestion_jobs(jobs=[RequeueIngestionJob(external_id="doc-1")])
|
|
111
110
|
call = calls.pop()
|
|
@@ -146,10 +145,10 @@ async def test_async_app_ops_payloads():
|
|
|
146
145
|
assert call["endpoint"] == "apps/rotate_token"
|
|
147
146
|
assert call["params"] == {"app_id": "app-1"}
|
|
148
147
|
|
|
149
|
-
await client.create_app(name="demo"
|
|
148
|
+
await client.create_app(name="demo")
|
|
150
149
|
call = calls.pop()
|
|
151
150
|
assert call["endpoint"] == "cloud/generate_uri"
|
|
152
|
-
assert call["data"] == {"name": "demo"
|
|
151
|
+
assert call["data"] == {"name": "demo"}
|
|
153
152
|
|
|
154
153
|
await client.requeue_ingestion_jobs(include_all=True, statuses=["failed"])
|
|
155
154
|
call = calls.pop()
|
|
@@ -2,14 +2,13 @@ import json
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
|
-
|
|
6
5
|
from morphik._shared import (
|
|
7
6
|
build_create_app_payload,
|
|
8
7
|
build_document_by_filename_params,
|
|
9
8
|
build_list_apps_params,
|
|
10
9
|
build_logs_params,
|
|
11
|
-
build_requeue_payload,
|
|
12
10
|
build_rename_app_params,
|
|
11
|
+
build_requeue_payload,
|
|
13
12
|
build_rotate_app_params,
|
|
14
13
|
collect_directory_files,
|
|
15
14
|
merge_folders,
|
|
@@ -71,21 +70,8 @@ def test_build_rotate_app_params_validation():
|
|
|
71
70
|
|
|
72
71
|
|
|
73
72
|
def test_build_create_app_payload():
|
|
74
|
-
payload = build_create_app_payload(
|
|
75
|
-
|
|
76
|
-
app_id="id",
|
|
77
|
-
user_id=None,
|
|
78
|
-
expiry_days=7,
|
|
79
|
-
org_id="org",
|
|
80
|
-
created_by_user_id="creator",
|
|
81
|
-
)
|
|
82
|
-
assert payload == {
|
|
83
|
-
"name": "app",
|
|
84
|
-
"app_id": "id",
|
|
85
|
-
"expiry_days": 7,
|
|
86
|
-
"org_id": "org",
|
|
87
|
-
"created_by_user_id": "creator",
|
|
88
|
-
}
|
|
73
|
+
payload = build_create_app_payload(name="app")
|
|
74
|
+
assert payload == {"name": "app"}
|
|
89
75
|
|
|
90
76
|
|
|
91
77
|
def test_build_requeue_payload_with_jobs():
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|