streamlit-octostar-utils 2.11a6__py3-none-any.whl → 2.11a8__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.
- streamlit_octostar_utils/api_crafter/fastapi.py +1 -1
- streamlit_octostar_utils/api_crafter/nifi.py +15 -14
- streamlit_octostar_utils/nlp/language.py +31 -9
- streamlit_octostar_utils/ontology/inheritance.py +13 -0
- {streamlit_octostar_utils-2.11a6.dist-info → streamlit_octostar_utils-2.11a8.dist-info}/METADATA +1 -1
- {streamlit_octostar_utils-2.11a6.dist-info → streamlit_octostar_utils-2.11a8.dist-info}/RECORD +8 -8
- {streamlit_octostar_utils-2.11a6.dist-info → streamlit_octostar_utils-2.11a8.dist-info}/WHEEL +0 -0
- {streamlit_octostar_utils-2.11a6.dist-info → streamlit_octostar_utils-2.11a8.dist-info}/licenses/LICENSE +0 -0
@@ -330,7 +330,7 @@ class DefaultErrorRoute:
|
|
330
330
|
if len(message) > MAX_ERROR_MESSAGE_BYTES:
|
331
331
|
message = message[-MAX_ERROR_MESSAGE_BYTES:]
|
332
332
|
try:
|
333
|
-
tcbk = traceback.format_exception(exc)
|
333
|
+
tcbk = "\n".join(traceback.format_exception(exc))
|
334
334
|
if len(tcbk) > MAX_ERROR_TRACEBACK_BYTES:
|
335
335
|
tcbk = tcbk[-MAX_ERROR_TRACEBACK_BYTES:]
|
336
336
|
except:
|
@@ -23,7 +23,7 @@ from octostar.client import make_client
|
|
23
23
|
from ..core.dict import recursive_update_dict, travel_dict, jsondict_hash
|
24
24
|
from ..core.timestamp import now, string_to_datetime
|
25
25
|
from .fastapi import DefaultErrorRoute, Route
|
26
|
-
from ..ontology.inheritance import is_child_concept as is_child_concept_fn
|
26
|
+
from ..ontology.inheritance import is_child_concept as is_child_concept_fn, get_label_keys
|
27
27
|
from ..ontology.expand_entities import expand_entities
|
28
28
|
|
29
29
|
RELATIONSHIP_ENTITY_NAME = "os_relationship"
|
@@ -69,6 +69,7 @@ class NifiEntityModel(BaseModel):
|
|
69
69
|
class OntologyInfoModel(BaseModel):
|
70
70
|
parents: List[str]
|
71
71
|
relationships: List[str]
|
72
|
+
label_keys: List[str]
|
72
73
|
|
73
74
|
class ContentsPointerModel(BaseModel):
|
74
75
|
location: NifiContentsPointerLocationModel
|
@@ -806,15 +807,8 @@ class NifiEntity(object):
|
|
806
807
|
|
807
808
|
@property
|
808
809
|
def label(self):
|
809
|
-
|
810
|
-
|
811
|
-
label_fields = self.context.ontology["concepts"][
|
812
|
-
self.record.get("os_concept") or self.record.get("entity_type")
|
813
|
-
]["labelKeys"]
|
814
|
-
label_fields = [field for field in label_fields if field]
|
815
|
-
label = " ".join(
|
816
|
-
[(self.record.get(field) or "") for field in label_fields]
|
817
|
-
).strip()
|
810
|
+
label_keys = self.request["ontology_info"]["label_keys"]
|
811
|
+
label = " ".join([(self.record.get(field) or "") for field in label_keys]).strip()
|
818
812
|
if not label:
|
819
813
|
label = None
|
820
814
|
return label
|
@@ -923,14 +917,21 @@ class NifiEntity(object):
|
|
923
917
|
now_time = now()
|
924
918
|
random_id = str(uuid.uuid4())
|
925
919
|
username = self.jwt_data["username"]
|
920
|
+
if entity_type == self.record["entity_type"]:
|
921
|
+
ont_parents = self.request["ontology_info"]["parents"]
|
922
|
+
ont_relationships = self.request["ontology_info"]["relationships"]
|
923
|
+
ont_label_keys = self.request["ontology_info"]["label_keys"]
|
924
|
+
else:
|
925
|
+
ont_parents = self.context.ontology["concepts"][entity_type]["parents"]
|
926
|
+
ont_relationships = self.context.ontology["concepts"][entity_type]["relationships"]
|
927
|
+
ont_label_keys = get_label_keys(entity_type, self.context.ontology)
|
926
928
|
child_request = {
|
927
929
|
"jwt": self.request["jwt"],
|
928
930
|
"ontology_name": self.request["ontology_name"],
|
929
931
|
"ontology_info": {
|
930
|
-
"parents":
|
931
|
-
"relationships":
|
932
|
-
|
933
|
-
],
|
932
|
+
"parents": ont_parents,
|
933
|
+
"relationships": ont_relationships,
|
934
|
+
"label_keys": ont_label_keys,
|
934
935
|
},
|
935
936
|
"entity_timestamp": None,
|
936
937
|
"sync_params": {},
|
@@ -1,7 +1,9 @@
|
|
1
1
|
import re
|
2
|
+
from typing import Optional
|
3
|
+
|
2
4
|
import py3langid as langid
|
3
5
|
|
4
|
-
from iso639 import Lang
|
6
|
+
from iso639 import Lang, NonExistentLanguageError
|
5
7
|
|
6
8
|
FLAIR_MODELS = {
|
7
9
|
"en": "flair/ner-english-large",
|
@@ -31,7 +33,7 @@ def language_to_alpha2(language_name: str) -> str:
|
|
31
33
|
if not language_name:
|
32
34
|
raise ValueError("Language name must be a non-empty string.")
|
33
35
|
|
34
|
-
name = re.sub(r'\b\w+', lambda m: m.group(0).capitalize(),
|
36
|
+
name = re.sub(r'\b\w+', lambda m: m.group(0).capitalize(), language_name)
|
35
37
|
return Lang(name).pt1
|
36
38
|
|
37
39
|
|
@@ -46,19 +48,39 @@ def detect_language(text, min_confidence=None):
|
|
46
48
|
return detected_lang, confidence
|
47
49
|
|
48
50
|
|
51
|
+
def is_language_available(language: Optional[str], type: str) -> bool:
|
52
|
+
if not language:
|
53
|
+
return False
|
54
|
+
|
55
|
+
try:
|
56
|
+
lang_code = language_to_alpha2(language)
|
57
|
+
|
58
|
+
except NonExistentLanguageError:
|
59
|
+
lang_code = language
|
60
|
+
|
61
|
+
match type:
|
62
|
+
case "spacy":
|
63
|
+
return SPACY_MODELS.get(lang_code, None) is not None
|
64
|
+
|
65
|
+
case "flair":
|
66
|
+
return FLAIR_MODELS.get(lang_code, None) is not None
|
67
|
+
|
68
|
+
|
49
69
|
def load_language_model(language, type):
|
50
70
|
from flair.models import SequenceTagger
|
51
71
|
from spacy_download import load_spacy
|
52
72
|
|
53
|
-
model = None
|
54
|
-
|
55
73
|
match type:
|
56
74
|
case "spacy":
|
57
|
-
|
58
|
-
|
75
|
+
if is_language_available(language, "spacy"):
|
76
|
+
model_name = SPACY_MODELS.get(language_to_alpha2(language), SPACY_MODELS["en"])
|
77
|
+
return load_spacy(model_name)
|
78
|
+
|
79
|
+
raise Exception(f"SpaCy model for language '{language}' is not available.")
|
59
80
|
|
60
81
|
case "flair":
|
61
|
-
|
62
|
-
|
82
|
+
if is_language_available(language, "flair"):
|
83
|
+
model_name = FLAIR_MODELS.get(language, "flair/ner-multi")
|
84
|
+
return SequenceTagger.load(model_name)
|
63
85
|
|
64
|
-
|
86
|
+
raise Exception(f"Flair model for language '{language}' is not available.")
|
@@ -1,2 +1,15 @@
|
|
1
1
|
def is_child_concept(type, parent_type, ontology):
|
2
2
|
return type == parent_type or parent_type in ontology["concepts"][type]["parents"]
|
3
|
+
|
4
|
+
def get_label_keys(type, ontology):
|
5
|
+
parents = set(ontology["concepts"][type]["parents"])
|
6
|
+
parents.add(type)
|
7
|
+
parents = list(parents)
|
8
|
+
parents.reverse()
|
9
|
+
label_keys = {} # for guaranteed insertion order
|
10
|
+
for parent in parents:
|
11
|
+
for label_key in ontology["concepts"][parent]["labelKeys"]:
|
12
|
+
if not label_key:
|
13
|
+
continue
|
14
|
+
label_keys[label_key] = None
|
15
|
+
return list(label_keys.keys())
|
{streamlit_octostar_utils-2.11a6.dist-info → streamlit_octostar_utils-2.11a8.dist-info}/RECORD
RENAMED
@@ -1,8 +1,8 @@
|
|
1
1
|
streamlit_octostar_utils/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
2
2
|
streamlit_octostar_utils/api_crafter/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
3
3
|
streamlit_octostar_utils/api_crafter/celery.py,sha256=BXOTGN9egdD75qf-PkccLGAoniilB9PZ_NRchFIjWdw,30051
|
4
|
-
streamlit_octostar_utils/api_crafter/fastapi.py,sha256=
|
5
|
-
streamlit_octostar_utils/api_crafter/nifi.py,sha256=
|
4
|
+
streamlit_octostar_utils/api_crafter/fastapi.py,sha256=RKQrStPzG1I1pxsPJvGs_DRrnjlMJbVmu9ObMF2LgZ0,14368
|
5
|
+
streamlit_octostar_utils/api_crafter/nifi.py,sha256=6PSWIFKjv8nzlFGH9IFRI3VrYsISNjDIPyi1RvLJoKk,45810
|
6
6
|
streamlit_octostar_utils/api_crafter/parser/__init__.py,sha256=YeYWF6sdQiCFV_RKNW2t9Vs6KJExE2pbXxWTe_DOayY,107
|
7
7
|
streamlit_octostar_utils/api_crafter/parser/combine_fields.py,sha256=ddc44xkajw8MU0peAX_263DL7rPXbTKbHUjpOhRgvyU,8790
|
8
8
|
streamlit_octostar_utils/api_crafter/parser/entities_parser.py,sha256=zOQoN-p1Gz6ZzxvoX4M1b4Fi3mfmQr5zaNUcp_8gCjw,30016
|
@@ -20,7 +20,7 @@ streamlit_octostar_utils/core/threading/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEkt
|
|
20
20
|
streamlit_octostar_utils/core/threading/key_queue.py,sha256=7CJpj0gvZMQd8eC5wKQi3Ak5SQQ4zQ1OPTs_OP_kD20,2255
|
21
21
|
streamlit_octostar_utils/core/timestamp.py,sha256=a3s4xfm1nctLzYsHOJxqoWIDTdbNY_yN1OByl8ahLc8,383
|
22
22
|
streamlit_octostar_utils/nlp/__init__.py,sha256=BtlYDZK_xaEbc7Ju_7MznXbCVPZcdLn26xwR9qf_UhM,336
|
23
|
-
streamlit_octostar_utils/nlp/language.py,sha256=
|
23
|
+
streamlit_octostar_utils/nlp/language.py,sha256=WEBhjr2UYgBGQnki0cY7d9kjp5RX5cYewUh57H6Om6o,2718
|
24
24
|
streamlit_octostar_utils/nlp/ner.py,sha256=5swAuH7r9xZ7c48ApqZfLqidjdf6f2qxK52KLk7-9Cc,20406
|
25
25
|
streamlit_octostar_utils/octostar/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
26
26
|
streamlit_octostar_utils/octostar/client.py,sha256=NUvHe9asd65g4-hJ4CuUvUns-9dNWes1XZRJlO9eAAc,1690
|
@@ -28,7 +28,7 @@ streamlit_octostar_utils/octostar/context.py,sha256=TpucK48EbeVy4vDqKd9UULEtr1JO
|
|
28
28
|
streamlit_octostar_utils/octostar/permissions.py,sha256=G5nZQLR-k-5_Xeto4nDTb32828Ga-SHm1mvSB9tz-t4,1565
|
29
29
|
streamlit_octostar_utils/ontology/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
30
30
|
streamlit_octostar_utils/ontology/expand_entities.py,sha256=bBt32Dnts3VSzu13QQtPyfYe05IRodD9WfnhNTiBg_w,22749
|
31
|
-
streamlit_octostar_utils/ontology/inheritance.py,sha256=
|
31
|
+
streamlit_octostar_utils/ontology/inheritance.py,sha256=8GA2an1hbHfa6p993tIyfFLrewJHRUIFOw7dmvL8geU,583
|
32
32
|
streamlit_octostar_utils/ontology/validation.py,sha256=0cXxEq8vQ63qxn4WianTioTcsmpsg4jEXVyI4R6x1gE,1051
|
33
33
|
streamlit_octostar_utils/style/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
34
34
|
streamlit_octostar_utils/style/common.py,sha256=TKfjV9-sIoJChGM7Ewg3uPsz5sMmPxFwmc0o3L4D8Qo,1496
|
@@ -36,7 +36,7 @@ streamlit_octostar_utils/threading/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzp
|
|
36
36
|
streamlit_octostar_utils/threading/async_task_manager.py,sha256=q7N6YZwUvIYMzkSHmsJNheNVCv93c03H6Hyg9uH8pvk,4747
|
37
37
|
streamlit_octostar_utils/threading/session_callback_manager.py,sha256=LvZVP4g6tvKtYmI13f2j1sX_7hm61Groqp5xJine9_k,3973
|
38
38
|
streamlit_octostar_utils/threading/session_state_hot_swapper.py,sha256=6eeCQI6A42hp4DmW2NQw2rbeR-k9N8DhfBKQdN_fbLU,811
|
39
|
-
streamlit_octostar_utils-2.
|
40
|
-
streamlit_octostar_utils-2.
|
41
|
-
streamlit_octostar_utils-2.
|
42
|
-
streamlit_octostar_utils-2.
|
39
|
+
streamlit_octostar_utils-2.11a8.dist-info/METADATA,sha256=uoeaIC6YWiZgZAa36JP45z-AyS-s-PP2uIpfkKjtm1k,2330
|
40
|
+
streamlit_octostar_utils-2.11a8.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
41
|
+
streamlit_octostar_utils-2.11a8.dist-info/licenses/LICENSE,sha256=dkwVPyV03fPHHtERnF6RnvRXcll__tud9gWca1RcgnQ,1073
|
42
|
+
streamlit_octostar_utils-2.11a8.dist-info/RECORD,,
|
{streamlit_octostar_utils-2.11a6.dist-info → streamlit_octostar_utils-2.11a8.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|