dzenzzz commited on
Commit
df02cd1
·
1 Parent(s): d4d4459

adds config file

Browse files
Files changed (4) hide show
  1. app.py +3 -2
  2. ner.py +4 -5
  3. neural_searcher.py +8 -7
  4. senatus_client.py +14 -13
app.py CHANGED
@@ -5,13 +5,14 @@ from fastapi.responses import JSONResponse
5
  from starlette.status import HTTP_504_GATEWAY_TIMEOUT
6
  from neural_searcher import NeuralSearcher
7
  from huggingface_hub import login
 
8
  import os
9
 
10
- login(os.getenv('HUGGING_FACE_API_KEY'))
11
 
12
  app = FastAPI()
13
 
14
- neural_searcher = NeuralSearcher(collection_name=os.getenv('COLLECTION_NAME'))
15
 
16
  REQUEST_TIMEOUT_ERROR = 30
17
 
 
5
  from starlette.status import HTTP_504_GATEWAY_TIMEOUT
6
  from neural_searcher import NeuralSearcher
7
  from huggingface_hub import login
8
+ from config import HUGGING_FACE_API_KEY,COLLECTION_NAME
9
  import os
10
 
11
+ login(HUGGING_FACE_API_KEY)
12
 
13
  app = FastAPI()
14
 
15
+ neural_searcher = NeuralSearcher(collection_name=COLLECTION_NAME)
16
 
17
  REQUEST_TIMEOUT_ERROR = 30
18
 
ner.py CHANGED
@@ -1,9 +1,10 @@
1
  from transformers import AutoModelForTokenClassification, AutoTokenizer
 
2
  import torch
3
 
4
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
5
- tokenizer = AutoTokenizer.from_pretrained("kalusev/NER4Legal_SRB", use_auth_token=True)
6
- model = AutoModelForTokenClassification.from_pretrained("kalusev/NER4Legal_SRB", use_auth_token=True).to(device)
7
 
8
  id_to_label = {
9
  0: 'O',
@@ -51,9 +52,7 @@ def perform_ner(text):
51
  ]
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):
59
  merged_words, merged_labels = [], []
 
1
  from transformers import AutoModelForTokenClassification, AutoTokenizer
2
+ from config import NER_MODEL
3
  import torch
4
 
5
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
6
+ tokenizer = AutoTokenizer.from_pretrained(NER_MODEL, use_auth_token=True)
7
+ model = AutoModelForTokenClassification.from_pretrained(NER_MODEL, use_auth_token=True).to(device)
8
 
9
  id_to_label = {
10
  0: 'O',
 
52
  ]
53
  return results
54
 
55
+ text = ""
 
 
56
 
57
  def merge_entities(token_label_pairs):
58
  merged_words, merged_labels = [], []
neural_searcher.py CHANGED
@@ -3,16 +3,17 @@ 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:
9
 
10
  def __init__(self, collection_name):
11
  self.collection_name = collection_name
12
- self.dense_model = SentenceTransformer(os.getenv('DENSE_MODEL'),device="cpu")
13
- self.sparse_model = SparseTextEmbedding(os.getenv('SPARSE_MODEL'))
14
- self.late_interaction_model = LateInteractionTextEmbedding(os.getenv('LATE_INTERACTION_MODEL'))
15
- self.qdrant_client = QdrantClient(os.getenv('QDRANT_URL'),api_key=os.getenv('QDRANT_API_KEY'))
16
 
17
  async def search(self, text: str):
18
 
@@ -23,12 +24,12 @@ class NeuralSearcher:
23
  prefetch = [
24
  models.Prefetch(
25
  query=dense_query,
26
- using=os.getenv('DENSE_MODEL'),
27
  limit=200
28
  ),
29
  models.Prefetch(
30
  query=models.SparseVector(**sparse_query.as_object()),
31
- using=os.getenv('SPARSE_MODEL'),
32
  limit=200
33
  )
34
  ]
@@ -39,7 +40,7 @@ class NeuralSearcher:
39
  query=models.FusionQuery(
40
  fusion=models.Fusion.RRF,
41
  ),
42
- # using=os.getenv('LATE_INTERACTION_MODEL'),
43
  with_payload=True,
44
  limit = 10
45
  ).points
 
3
  from qdrant_client import QdrantClient, models
4
  from sentence_transformers import SentenceTransformer
5
  from collections import Counter
6
+ from config import DENSE_MODEL, SPARSE_MODEL, LATE_INTERACTION_MODEL, QDRANT_URL, QDRANT_API_KEY
7
  import os
8
 
9
  class NeuralSearcher:
10
 
11
  def __init__(self, collection_name):
12
  self.collection_name = collection_name
13
+ self.dense_model = SentenceTransformer(DENSE_MODEL,device="cpu")
14
+ self.sparse_model = SparseTextEmbedding(SPARSE_MODEL)
15
+ self.late_interaction_model = LateInteractionTextEmbedding(LATE_INTERACTION_MODEL)
16
+ self.qdrant_client = QdrantClient(QDRANT_URL,api_key=QDRANT_API_KEY)
17
 
18
  async def search(self, text: str):
19
 
 
24
  prefetch = [
25
  models.Prefetch(
26
  query=dense_query,
27
+ using=DENSE_MODEL,
28
  limit=200
29
  ),
30
  models.Prefetch(
31
  query=models.SparseVector(**sparse_query.as_object()),
32
+ using=SPARSE_MODEL,
33
  limit=200
34
  )
35
  ]
 
40
  query=models.FusionQuery(
41
  fusion=models.Fusion.RRF,
42
  ),
43
+ # using=LATE_INTERACTION_MODEL,
44
  with_payload=True,
45
  limit = 10
46
  ).points
senatus_client.py CHANGED
@@ -1,21 +1,22 @@
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):
@@ -25,14 +26,14 @@ for filename in os.listdir(folder_path):
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
 
@@ -67,12 +68,12 @@ for local_data in split_data:
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(
@@ -85,7 +86,7 @@ for local_data in split_data:
85
  # ),
86
  },
87
  sparse_vectors_config={
88
- "Qdrant/bm25": models.SparseVectorParams(
89
  modifier=models.Modifier.IDF,
90
  ),
91
  },
@@ -111,8 +112,8 @@ for local_data in split_data:
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,
 
1
  import json
2
  import uuid
3
+ import numpy as np
4
+ import os
5
  from huggingface_hub import login
6
  from fastembed import SparseTextEmbedding,LateInteractionTextEmbedding
7
  from qdrant_client import QdrantClient, models
8
  from sentence_transformers import SentenceTransformer
9
  from tqdm import tqdm
 
10
  from huggingface_hub import login
11
+ from config import HUGGING_FACE_API_KEY, DENSE_MODEL, SPARSE_MODEL, LATE_INTERACTION_MODEL, QDRANT_URL, QDRANT_API_KEY, COLLECTION_NAME
12
 
13
+ login(HUGGING_FACE_API_KEY)
14
 
15
  folder_path = 'data'
16
 
17
+ dense_model = SentenceTransformer(DENSE_MODEL)
18
+ sparse_model = SparseTextEmbedding(SPARSE_MODEL)
19
+ # late_interaction_embedding_model = LateInteractionTextEmbedding(LATE_INTERACTION_MODEL)
20
 
21
  data = []
22
  for filename in os.listdir(folder_path):
 
26
  data = json.load(f)
27
 
28
 
29
+ client = QdrantClient(QDRANT_URL,api_key=QDRANT_API_KEY)
30
 
31
 
32
  data_array = np.array(data)
33
 
34
  split_data = np.array_split(data_array, 1000)
35
 
36
+ collection_name = COLLECTION_NAME
37
 
38
  for local_data in split_data:
39
 
 
68
  client.create_collection(
69
  collection_name=collection_name,
70
  vectors_config={
71
+ DENSE_MODEL: models.VectorParams(
72
  size=len(dense_embeddings[0]),
73
  distance=models.Distance.COSINE,
74
  on_disk=True
75
  ),
76
+ # LATE_INTERACTION_MODEL: models.VectorParams(
77
  # size=len(late_interaction_embeddings[0][0]),
78
  # distance=models.Distance.COSINE,
79
  # multivector_config=models.MultiVectorConfig(
 
86
  # ),
87
  },
88
  sparse_vectors_config={
89
+ SPARSE_MODEL: models.SparseVectorParams(
90
  modifier=models.Modifier.IDF,
91
  ),
92
  },
 
112
  models.PointStruct(
113
  id=uuid.uuid4().hex,
114
  vector={
115
+ DENSE_MODEL: dense_embedding,
116
+ SPARSE_MODEL: sparse_embedding.as_object(),
117
  # "answerdotai/answerai-colbert-small-v1":late_interaction_embedding
118
  },
119
  payload=doc,