Spaces:
Running
Running
additional changes
Browse files- .gitignore +110 -0
- config.py +18 -0
- ner.py +1 -1
- neural_searcher.py +1 -0
- senatus_client.py +135 -0
.gitignore
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Byte-compiled / optimized / DLL files
|
2 |
+
__pycache__/
|
3 |
+
*.py[cod]
|
4 |
+
*$py.class
|
5 |
+
|
6 |
+
# C extensions
|
7 |
+
*.so
|
8 |
+
|
9 |
+
/data
|
10 |
+
|
11 |
+
# Distribution / packaging
|
12 |
+
.Python
|
13 |
+
build/
|
14 |
+
develop-eggs/
|
15 |
+
dist/
|
16 |
+
downloads/
|
17 |
+
eggs/
|
18 |
+
.eggs/
|
19 |
+
lib/
|
20 |
+
lib64/
|
21 |
+
parts/
|
22 |
+
sdist/
|
23 |
+
var/
|
24 |
+
wheels/
|
25 |
+
*.egg-info/
|
26 |
+
.installed.cfg
|
27 |
+
*.egg
|
28 |
+
MANIFEST
|
29 |
+
|
30 |
+
# PyInstaller
|
31 |
+
# Usually these files are written by a python script from a template
|
32 |
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
33 |
+
*.manifest
|
34 |
+
*.spec
|
35 |
+
|
36 |
+
# Installer logs
|
37 |
+
pip-log.txt
|
38 |
+
pip-delete-this-directory.txt
|
39 |
+
|
40 |
+
# Unit test / coverage reports
|
41 |
+
htmlcov/
|
42 |
+
.tox/
|
43 |
+
.coverage
|
44 |
+
.coverage.*
|
45 |
+
.cache
|
46 |
+
nosetests.xml
|
47 |
+
coverage.xml
|
48 |
+
*.cover
|
49 |
+
.hypothesis/
|
50 |
+
.pytest_cache/
|
51 |
+
|
52 |
+
# Translations
|
53 |
+
*.mo
|
54 |
+
*.pot
|
55 |
+
|
56 |
+
# Django stuff:
|
57 |
+
*.log
|
58 |
+
local_settings.py
|
59 |
+
db.sqlite3
|
60 |
+
|
61 |
+
# Flask stuff:
|
62 |
+
instance/
|
63 |
+
.webassets-cache
|
64 |
+
|
65 |
+
# Scrapy stuff:
|
66 |
+
.scrapy
|
67 |
+
|
68 |
+
# Sphinx documentation
|
69 |
+
docs/_build/
|
70 |
+
|
71 |
+
# PyBuilder
|
72 |
+
target/
|
73 |
+
|
74 |
+
# Jupyter Notebook
|
75 |
+
.ipynb_checkpoints
|
76 |
+
|
77 |
+
# pyenv
|
78 |
+
.python-version
|
79 |
+
pyvenv.cfg
|
80 |
+
|
81 |
+
# celery beat schedule file
|
82 |
+
celerybeat-schedule
|
83 |
+
|
84 |
+
# SageMath parsed files
|
85 |
+
*.sage.py
|
86 |
+
|
87 |
+
# Environments
|
88 |
+
.env
|
89 |
+
.venv
|
90 |
+
env/
|
91 |
+
venv/
|
92 |
+
ENV/
|
93 |
+
env.bak/
|
94 |
+
venv.bak/
|
95 |
+
|
96 |
+
# Spyder project settings
|
97 |
+
.spyderproject
|
98 |
+
.spyproject
|
99 |
+
|
100 |
+
# Rope project settings
|
101 |
+
.ropeproject
|
102 |
+
|
103 |
+
# mkdocs documentation
|
104 |
+
/site
|
105 |
+
|
106 |
+
# mypy
|
107 |
+
.mypy_cache/
|
108 |
+
|
109 |
+
# Mac OS
|
110 |
+
.DS_Store
|
config.py
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
|
3 |
+
from dotenv import find_dotenv, load_dotenv
|
4 |
+
|
5 |
+
dotenv_path = find_dotenv()
|
6 |
+
load_dotenv(dotenv_path)
|
7 |
+
|
8 |
+
API_KEY = os.getenv("API_KEY")
|
9 |
+
HOST = os.getenv("HOST")
|
10 |
+
|
11 |
+
COLLECTION_NAME = os.getenv("COLLECTION_NAME")
|
12 |
+
TEXT_FIELD_NAME = os.getenv("TEXT_FIELD_NAME")
|
13 |
+
|
14 |
+
DENSE_MODEL = os.getenv("DENSE_MODEL")
|
15 |
+
SPARSE_MODEL = os.getenv("SPARSE_MODEL")
|
16 |
+
|
17 |
+
DENSE_MODEL_SHORT = os.getenv("DENSE_MODEL_SHORT")
|
18 |
+
SPARSE_MODEL_SHORT = os.getenv("SPARSE_MODEL_SHORT")
|
ner.py
CHANGED
@@ -52,7 +52,7 @@ def perform_ner(text):
|
|
52 |
return results
|
53 |
|
54 |
text = """1
|
55 |
-
|
56 |
"""
|
57 |
|
58 |
def merge_entities(token_label_pairs):
|
|
|
52 |
return results
|
53 |
|
54 |
text = """1
|
55 |
+
IP 229/16 PRIVREDNI SUD CRNE GORE, u VijeΔu sastavljenom od sudija Dijane RaiΔkoviΔ kao predsjednika VijeΔa, Ivana KovaΔeviΔa i NataΕ‘e SekuliΔ, kao Δlanova VijeΔa, u pravnoj stvari izvrΕ‘nog povjerioca ''M.β AD P., protiv izvrΕ‘nog duΕΎnika ''F.β DOO P., koga zastupa punomoΔnik N. M. advokat iz P. odluΔujuΔi po prigovoru izvrΕ‘nog duΕΎnika na rjeΕ‘enje Javnog izvrΕ‘itelja A. T. V. I.br.4282/2015 od 29.12.2015.godine, radi naplate novΔanog potraΕΎivanja u iznosu od 24.750,00β¬, u sjednici VijeΔa odrΕΎanoj danaβ19.01.2016.godine, donio je RJEΕ ENJE Usvaja se prigovor izvrΕ‘nog duΕΎnika pa se rjeΕ‘enje o izvrΕ‘enju Javnog izvrΕ‘itelja A. T. V. I.br.4282/2015 od 29.12.2015.godine, stavlja van snage i ukidaju sprovedene izvrΕ‘ne radnje. Predlog za izvrΕ‘enje ima se smatrati tuΕΎbom. Spise predmeta zavesti u upisnik P . OBRAZLOΕ½ENJE Javni izvrΕ‘itelj A. T. V. iz P. je na predlog izvrΕ‘nog povjerioca, na osnovu vjerodostojne isprave-raΔuna br.2015/03/S02/277,dana 29.12.2015.godine, donio rjeΕ‘enje o izvrΕ‘enju I br.4282/2015, kojim je obavezao izvrΕ‘nog duΕΎnika da izvrΕ‘nom povjeriocu isplati iznos od 24.750,00β¬ sa kamatom i troΕ‘kovima postupka, kako je to bliΕΎe precizirano navedenim rjeΕ‘enjem o izvrΕ‘enju. IzvrΕ‘ni duΕΎnik je blagovremeno izjavio prigovor kojim je osporio navedeno rjeΕ‘enje o izvrΕ‘enju istiΔuΔi da je odmah nakon prijema predmetne fakture istu vratio u originalu izvrΕ‘nom povjeriocu dana 09.12.2015.godine,osporavajuΔi u cjelosti sadrΕΎaj iste i postojanje bilo kakve obaveze prema izvrΕ‘nom povjeriocu.Navodi da pomenutu fakturu,izvrΕ‘ni duΕΎnik uopΕ‘te nije knjiΕΎio u svom knjigovodstvu,o Δemu je obavijestio izvrΕ‘nog povjerioca prilikom vraΔanja iste,obavjeΕ‘tavajuΔi ga istovremeno da po predmetnoj fakturi neΔe vrΕ‘iti plaΔanje,kako po osnovu tako i visini,o Δemu u prilogu dostavlja dopise br.10596 od 09.12.2015.godine i od 17.12.2015.godine, u kojem je, izjaΕ‘njavajuΔi se na opomenu od 14.12.2015.godine,ponovo osporio predmetnu fakturu.IstiΔe da je povjerilac pauΕ‘alno odmjerio iznos iz fakture,te iz tih razloga predlaΕΎe finansijsko vjeΕ‘taΔenje.PojaΕ‘njava da se potraΕΎivanje odnosi na otkazane letove od 04,11 i 18.01.2014.godine,na relaciji P.-H.-P.,a po ugovoru br.10638,koji nije dostavljen uz predlog,dok oznaΔeni letovi nijesu otkazani krivicom izvrΕ‘nog duΕΎnika.Dalje istiΔe da je povjerilac dozvolu za saobraΔaj u dobio tek 24.12.2013.godine,a koju dozvolu je dostavio izvrΕ‘nom duΕΎniku putem e-maila,pa stoga dana 21.12.2013.godine,let nije bio relizovan iskljuΔivom krivicom izvrΕ‘nog povjerioca,jer nije obezbijedio neophodne dozvole za letenje.Navedeno je uzrokovalo i potpuno zaustavljanje prodaje karata od strane izvrΕ‘nog duΕΎnika za naredni period jer neizvjesnost oko dobijanja dozvole za let na pomenutoj relaciji,za duΕΎnika kao zakupca Δartera,proizvodila veliki rizik naknadni refundacija i negativnog publiciteta,kod turista i stalnih klijenata.Ukazuje da bilateralni sporazum zakljuΔen izmeΔu Crne Gore i U. Privredni Sud Crne Gore Ip 229/2016 19. Januar 2016 ne tretira Δarter saobraΔaj,Ε‘to je predmet ugovora meΔu strankama,veΔ samo redovni vazduΕ‘ni saobraΔaj izmeΔu ove dvije zemlje,koji se prema definiciji odvija po utvrΔenom redu letenja i sa unaprijed utvrΔenim linijama.Posebno istiΔe da je Sporazumom o vazduΕ‘nom saobraΔaju izmeΔu Vlade Crne Gore i kabineta ministara U. od09.12.2011.godine- Δlan 3 i 12 odreΔeno da se radi o preciziranim rutama do maksimalnih frekvencija,Ε‘to znaΔi da izvrΕ‘ni pojerilac moΕΎe da obavlja samo redovni a ne i Δarter prevoz.Dodaje da izvrΕ‘ni duΕΎnik nije bio u moguΔnosti da postupi shodno Δlan 5 osnovnog ugovora,u kome su precizirane otkazne klauzule u sluΔaju kad zakupac Δartera otkazuje let,te blagovremeno otkaΕΎe letove,buduΔi da isti nijesu potvrΔeni od strane prevoznika-izvrΕ‘nog povjerioca.,te predlaΕΎe sasluΕ‘anje ovlaΕ‘Δenih zastupnika parniΔnih stranaka.PredlaΕΎe da VijeΔe usvoji prigovor ukine rjeΕ‘enje o izvrΕ‘enju i obustavi sprovedeneizvrΕ‘ne radnje.TraΕΎio je troΕ‘kove posstupka po AT-u. IzvrΕ‘ni povjerilac je u odgovoru na prigovor istakao da Ugovorom o Δarter prevozu Δlan 5 st1 t.1 i 2,definiΕ‘e da zakupac Δartera(izvrΕ‘ni duΕΎnik),zadrΕΎava pravo da otkaΕΎe bilo koji let iz Anexa 1 Ugovora,navodeΔi uslove koji su za to neophodni.IstiΔe da je Δlan 1 Anexa 2 Ugovora o Δarter prevozu br.2909/13 ugovorena cijena Δarter prevoza na predmetnoj relaciji u iznosu od 22.500,00β¬,tako da nije proizvoljno izvrΕ‘en obraΔun taksi za otkaz, kako je to navedeno u prigovoru.Navodi da je dana 23.12.2013.godine dobijena dozvola za obavljanje serije Δarter letova na pomenutoj ruti za dane 28.12.2013.godine,04./11./18./25.01.2014.godine,01.08/15/22.02.2014.godine i 01/08/15/ 03.2014.godine.IstiΔe da je za potrebe izvrΕ‘nog duΕΎnika obavio let dana 28.12.2013.godine,te da je izvrΕ‘ni duΕΎnika nakon toga putem maila otkazao sve letove ,u potpunosti svestan svoje obaveze u sluΔaju otkazivanja leta za 04./11./18.01.2014.godine,saglasno odredbama Δlan 5 st1 t.1 i 2 Ugovora o Δarter prevozu,o Δemu prilogu dostavlja mail izvrΕ‘nog direktora izvrΕ‘nog duΕΎnika od 25.12.2013.godine.PredlaΕΎe da se prigovor odbije. Odredbom Δlana 60 stav 3 Zakona o izvrΕ‘enju i obezbjeΔenju ( Sl.list CG , br.36/2011-u daljem tekstu ZIO), propisano je da ako izvrΕ‘ni duΕΎnik uΔini vjerovatnim navode iz prigovora kojim rjeΕ‘enje pobija u cjelini ili u dijelu kojim je obavezan da namiri potraΕΎivanje, vijeΔe suda Δe staviti van snage rjeΕ‘enje o izvrΕ‘enju u dijelu kojim je odreΔeno izvrΕ‘enje i odrediti da se postupak nastavi kao povodom prigovora protiv platnog naloga. Protiv rjeΕ‘enja o stavljanju van snage rjeΕ‘enja o izvrΕ‘enju nije dozvoljen prigovor. Kako je izvrΕ‘ni duΕΎnik blagovremenim i obrazloΕΎenim prigovorom osporio navedeno rjeΕ‘enje o izvrΕ‘enju I.br.4282/2015.godine,uz navoΔenje konkretnih radnji na kojima se zasniva prigovor u dijelu nepostojanja obaveze u odnosu na vjerodostojnu ispravu,a takoΔe osporavajuΔi osnov i visinu potraΕΎivanja,a sve vezano za meΔusobne obaveze izvrΕ‘nog povjerioca i izvrΕ‘nog duΕΎnika,odnosno neipunjavanje obaveze izvrΕ‘nog povjerioca,uΔinio vjerovatnim svoje navode iz prigovora i u cjelosti osporio rjeΕ‘enje kojim je obavezan da namiri potraΕΎivanje,to je VijeΔe na osnovu Δlana 60 stav 3 Zakona o izvrΕ‘enju i obezbjeΔenju, odluΔilo kao u izreci. PRIVREDNI SUD CRNE GORE Dana, 19.01.2016.godine Predsjednik VijeΔa - Sudija, Dijana RaiΔkoviΔ,s.r. PRAVNA POUKA:Protiv ovog rjeΕ‘enja, nije dozvoljen prigovor.
|
56 |
"""
|
57 |
|
58 |
def merge_entities(token_label_pairs):
|
neural_searcher.py
CHANGED
@@ -2,6 +2,7 @@ from qdrant_client import QdrantClient
|
|
2 |
from fastembed import SparseTextEmbedding, LateInteractionTextEmbedding
|
3 |
from qdrant_client import QdrantClient, models
|
4 |
from sentence_transformers import SentenceTransformer
|
|
|
5 |
import os
|
6 |
|
7 |
class NeuralSearcher:
|
|
|
2 |
from fastembed import SparseTextEmbedding, LateInteractionTextEmbedding
|
3 |
from qdrant_client import QdrantClient, models
|
4 |
from sentence_transformers import SentenceTransformer
|
5 |
+
from collections import Counter
|
6 |
import os
|
7 |
|
8 |
class NeuralSearcher:
|
senatus_client.py
ADDED
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
import uuid
|
3 |
+
from huggingface_hub import login
|
4 |
+
from fastembed import SparseTextEmbedding,LateInteractionTextEmbedding
|
5 |
+
from qdrant_client import QdrantClient, models
|
6 |
+
from sentence_transformers import SentenceTransformer
|
7 |
+
from tqdm import tqdm
|
8 |
+
import numpy as np
|
9 |
+
from huggingface_hub import login
|
10 |
+
import os
|
11 |
+
|
12 |
+
login(os.getenv('HUGGING_FACE_API_KEY'))
|
13 |
+
|
14 |
+
folder_path = 'data'
|
15 |
+
|
16 |
+
dense_model = SentenceTransformer(os.getenv('DENSE_MODEL'))
|
17 |
+
sparse_model = SparseTextEmbedding(os.getenv('SPARSE_MODEL'))
|
18 |
+
# late_interaction_embedding_model = LateInteractionTextEmbedding("answerdotai/answerai-colbert-small-v1")
|
19 |
+
|
20 |
+
data = []
|
21 |
+
for filename in os.listdir(folder_path):
|
22 |
+
if filename.endswith('.json'):
|
23 |
+
file_path = os.path.join(folder_path, filename)
|
24 |
+
with open(file_path,encoding='utf-8') as f:
|
25 |
+
data = json.load(f)
|
26 |
+
|
27 |
+
|
28 |
+
client = QdrantClient(os.getenv('QDRANT_URL'),api_key=os.getenv('QDRANT_API_KEY'))
|
29 |
+
|
30 |
+
|
31 |
+
data_array = np.array(data)
|
32 |
+
|
33 |
+
split_data = np.array_split(data_array, 1000)
|
34 |
+
|
35 |
+
collection_name = "mne-law"
|
36 |
+
|
37 |
+
for local_data in split_data:
|
38 |
+
|
39 |
+
payload = []
|
40 |
+
documents = []
|
41 |
+
for obj in local_data:
|
42 |
+
documents.append(obj["tekst"])
|
43 |
+
payload.append(obj)
|
44 |
+
|
45 |
+
sparse_embeddings = list(
|
46 |
+
tqdm(
|
47 |
+
sparse_model.passage_embed(doc for doc in documents),
|
48 |
+
total=len(documents),
|
49 |
+
desc="π¨ Encoding Sparse Embeddings"
|
50 |
+
)
|
51 |
+
)
|
52 |
+
|
53 |
+
# late_interaction_embeddings = list(
|
54 |
+
# tqdm(
|
55 |
+
# late_interaction_embedding_model.passage_embed(doc for doc in documents),
|
56 |
+
# total=len(documents),
|
57 |
+
# desc="π¨ Encoding Late Interaction Embeddings"
|
58 |
+
# )
|
59 |
+
# )
|
60 |
+
|
61 |
+
dense_embeddings = dense_model.encode(documents, show_progress_bar=True, device="cuda")
|
62 |
+
|
63 |
+
existing_collections = client.get_collections().collections
|
64 |
+
collection_names = [col.name for col in existing_collections]
|
65 |
+
|
66 |
+
if collection_name not in collection_names:
|
67 |
+
client.create_collection(
|
68 |
+
collection_name=collection_name,
|
69 |
+
vectors_config={
|
70 |
+
os.getenv('DENSE_MODEL'): models.VectorParams(
|
71 |
+
size=len(dense_embeddings[0]),
|
72 |
+
distance=models.Distance.COSINE,
|
73 |
+
on_disk=True
|
74 |
+
),
|
75 |
+
# "answerdotai/answerai-colbert-small-v1": models.VectorParams(
|
76 |
+
# size=len(late_interaction_embeddings[0][0]),
|
77 |
+
# distance=models.Distance.COSINE,
|
78 |
+
# multivector_config=models.MultiVectorConfig(
|
79 |
+
# comparator=models.MultiVectorComparator.MAX_SIM,
|
80 |
+
# ),
|
81 |
+
# hnsw_config=models.HnswConfigDiff(
|
82 |
+
# m=0, # Disable HNSW graph creation
|
83 |
+
# ),
|
84 |
+
# on_disk=True
|
85 |
+
# ),
|
86 |
+
},
|
87 |
+
sparse_vectors_config={
|
88 |
+
"Qdrant/bm25": models.SparseVectorParams(
|
89 |
+
modifier=models.Modifier.IDF,
|
90 |
+
),
|
91 |
+
},
|
92 |
+
quantization_config=models.ScalarQuantization(
|
93 |
+
scalar=models.ScalarQuantizationConfig(
|
94 |
+
type=models.ScalarType.INT8,
|
95 |
+
always_ram=True
|
96 |
+
)
|
97 |
+
),
|
98 |
+
optimizers_config=models.OptimizersConfigDiff(
|
99 |
+
indexing_threshold=10000,
|
100 |
+
),
|
101 |
+
shard_number = 4,
|
102 |
+
hnsw_config=models.HnswConfigDiff(on_disk=True),
|
103 |
+
)
|
104 |
+
|
105 |
+
print("π Uploading to qdrant collection: " + collection_name)
|
106 |
+
client.upload_points(
|
107 |
+
collection_name=collection_name,
|
108 |
+
batch_size = 32,
|
109 |
+
parallel = 16,
|
110 |
+
points=[
|
111 |
+
models.PointStruct(
|
112 |
+
id=uuid.uuid4().hex,
|
113 |
+
vector={
|
114 |
+
os.getenv('DENSE_MODEL'): dense_embedding,
|
115 |
+
os.getenv('SPARSE_MODEL'): sparse_embedding.as_object(),
|
116 |
+
# "answerdotai/answerai-colbert-small-v1":late_interaction_embedding
|
117 |
+
},
|
118 |
+
payload=doc,
|
119 |
+
)
|
120 |
+
for doc, dense_embedding, sparse_embedding in zip(
|
121 |
+
payload, dense_embeddings, sparse_embeddings
|
122 |
+
)
|
123 |
+
],
|
124 |
+
)
|
125 |
+
|
126 |
+
client.create_payload_index(
|
127 |
+
collection_name=collection_name,
|
128 |
+
field_name="dbid",
|
129 |
+
field_schema=models.PayloadSchemaType.INTEGER
|
130 |
+
)
|
131 |
+
|
132 |
+
client.update_collection(
|
133 |
+
collection_name=collection_name,
|
134 |
+
optimizer_config=models.OptimizersConfigDiff(indexing_threshold=20000),
|
135 |
+
)
|