From 2bd68c2a926f4eb9c97e6d868801914f5fbaf1f0 Mon Sep 17 00:00:00 2001 From: Albert Sawczyn <34009816+asawczyn@users.noreply.github.com> Date: Mon, 10 Jun 2024 16:01:09 +0200 Subject: [PATCH] Feat: huggingface raw dataset with readme and instruct readme (#26) * feat: add push raw dataset script * feat: add push instruct dataset script * refactor: dvc commit raw_dataset_readme * feat: extend scripts readme --- data/datasets/pl/readme/.gitignore | 2 + dvc.lock | 33 ++ dvc.yaml | 26 ++ nbs/Data/02_Dataset_Description_Raw.ipynb | 419 ++++++++++++++++++ .../03_Dataset_Description_Instruct.ipynb | 419 ++++++++++++++++++ requirements.txt | 2 +- scripts/README.md | 36 +- scripts/dataset/push_instruct_readme.py | 52 +++ scripts/dataset/push_raw_dataset.py | 61 +++ 9 files changed, 1036 insertions(+), 14 deletions(-) create mode 100644 data/datasets/pl/readme/.gitignore create mode 100644 nbs/Data/02_Dataset_Description_Raw.ipynb create mode 100644 nbs/Data/03_Dataset_Description_Instruct.ipynb create mode 100644 scripts/dataset/push_instruct_readme.py create mode 100644 scripts/dataset/push_raw_dataset.py diff --git a/data/datasets/pl/readme/.gitignore b/data/datasets/pl/readme/.gitignore new file mode 100644 index 0000000..47b637c --- /dev/null +++ b/data/datasets/pl/readme/.gitignore @@ -0,0 +1,2 @@ +/raw +/instruct diff --git a/dvc.lock b/dvc.lock index 8d4a7a2..7a3675d 100644 --- a/dvc.lock +++ b/dvc.lock @@ -425,3 +425,36 @@ stages: hash: md5 md5: 68b09dd0ce741e6ee1fff4e37c954fa6 size: 564 + raw_dataset_readme: + cmd: jupyter nbconvert --no-input --to markdown --execute nbs/Data/02_Dataset_Description_Raw.ipynb + --output-dir data/datasets/pl/readme/raw --output README + deps: + - path: data/datasets/pl/raw + hash: md5 + md5: 5dd44be2eea852bcce3d0918ff8b97da.dir + size: 10234880729 + nfiles: 17 + - path: nbs/Data/02_Dataset_Description_Raw.ipynb + hash: md5 + md5: d3d7509d084b85676857e13a2f20b82a + size: 73872 + outs: + - path: data/datasets/pl/readme/raw/ + hash: md5 + md5: f1d267b2829519729d5615b4a128e03b.dir + size: 473589 + nfiles: 8 + instruct_dataset_readme: + cmd: jupyter nbconvert --no-input --to markdown --execute nbs/Data/03_Dataset_Description_Instruct.ipynb + --output-dir data/datasets/pl/readme/instruct --output README + deps: + - path: nbs/Data/03_Dataset_Description_Instruct.ipynb + hash: md5 + md5: 27e6d517445028d45e5c40b22febece4 + size: 16215 + outs: + - path: data/datasets/pl/readme/instruct/ + hash: md5 + md5: de02794df3d74d86f8610f040a17dcbe.dir + size: 144326 + nfiles: 5 diff --git a/dvc.yaml b/dvc.yaml index efd1855..27882bf 100644 --- a/dvc.yaml +++ b/dvc.yaml @@ -1,4 +1,30 @@ stages: + raw_dataset_readme: + cmd: >- + jupyter nbconvert + --no-input + --to markdown + --execute nbs/Data/02_Dataset_Description_Raw.ipynb + --output-dir data/datasets/pl/readme/raw + --output README + deps: + - nbs/Data/02_Dataset_Description_Raw.ipynb + - data/datasets/pl/raw + outs: + - data/datasets/pl/readme/raw/ + + instruct_dataset_readme: + cmd: >- + jupyter nbconvert + --no-input + --to markdown + --execute nbs/Data/03_Dataset_Description_Instruct.ipynb + --output-dir data/datasets/pl/readme/instruct + --output README + deps: + - nbs/Data/03_Dataset_Description_Instruct.ipynb + outs: + - data/datasets/pl/readme/instruct/ build_instruct_dataset: cmd: >- PYTHONPATH=. python scripts/dataset/build_instruct_dataset.py diff --git a/nbs/Data/02_Dataset_Description_Raw.ipynb b/nbs/Data/02_Dataset_Description_Raw.ipynb new file mode 100644 index 0000000..8cba868 --- /dev/null +++ b/nbs/Data/02_Dataset_Description_Raw.ipynb @@ -0,0 +1,419 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "initial_id", + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "\n", + "import datasets\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.ticker as ticker\n", + "import polars as pl\n", + "import seaborn as sns\n", + "import transformers\n", + "from datasets import load_dataset\n", + "from transformers import AutoTokenizer\n", + "\n", + "warnings.filterwarnings('ignore')\n", + "sns.set_theme(\"notebook\")\n", + "transformers.logging.set_verbosity_error()\n", + "datasets.logging.set_verbosity_error()\n", + "datasets.utils.disable_progress_bars()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3105d222", + "metadata": {}, + "outputs": [], + "source": [ + "raw_ds = pl.scan_parquet(source=\"../../data/datasets/pl/raw/*\")" + ] + }, + { + "cell_type": "markdown", + "id": "bac42f58ea3c3d96", + "metadata": {}, + "source": [ + "---\n", + "language: {{language}}\n", + "multilinguality: {{multilinguality}}\n", + "language_creators: {{language_creators}}\n", + "size_categories: {{size_categories}}\n", + "source_datasets: {{source_datasets}}\n", + "pretty_name: {{pretty_name}}\n", + "tags: {{tags}}\n", + "---" + ] + }, + { + "cell_type": "markdown", + "id": "350cb2d131ba5aeb", + "metadata": {}, + "source": [ + "# Dataset Card for [JuDDGES/pl-court-raw](https://huggingface.co/datasets/JuDDGES/pl-court-raw)\n", + "\n", + "## Table of Contents\n", + "- [Table of Contents](#table-of-contents)\n", + "- [Dataset Description](#dataset-description)\n", + " - [Dataset Summary](#dataset-summary)\n", + " - [Supported Tasks and Leaderboards](#supported-tasks-and-leaderboards)\n", + " - [Languages](#languages)\n", + "- [Dataset Structure](#dataset-structure)\n", + " - [Data Instances](#data-instances)\n", + " - [Data Fields](#data-fields)\n", + " - [Data Splits](#data-splits)\n", + "- [Dataset Creation](#dataset-creation)\n", + " - [Curation Rationale](#curation-rationale)\n", + " - [Source Data](#source-data)\n", + " - [Annotations](#annotations)\n", + " - [Personal and Sensitive Information](#personal-and-sensitive-information)\n", + "- [Considerations for Using the Data](#considerations-for-using-the-data)\n", + " - [Social Impact of Dataset](#social-impact-of-dataset)\n", + " - [Discussion of Biases](#discussion-of-biases)\n", + " - [Other Known Limitations](#other-known-limitations)\n", + "- [Additional Information](#additional-information)\n", + " - [Dataset Curators](#dataset-curators)\n", + " - [Licensing Information](#licensing-information)\n", + " - [Citation Information](#citation-information)\n", + " - [Contributions](#contributions)\n", + "- [Statistics](#statistics)\n", + "\n", + "## Dataset Description\n", + "\n", + "- **Homepage: TBA**\n", + "- **Repository: [github](https://github.com/pwr-ai/JuDDGES)**\n", + "- **Paper: TBA**\n", + "- **Point of Contact: lukasz.augustyniak@pwr.edu.pl; jakub.binkowski@pwr.edu.pl; albert.sawczyn@pwr.edu.pl**\n", + "\n", + "### Dataset Summary\n", + "\n", + "The dataset consists of Polish Court judgements available at https://orzeczenia.ms.gov.pl/, containing full content of the judgements along with metadata sourced from official API and extracted from the judgement contents. This dataset contains raw data. For instruction dataset see [`JuDDGES/pl-court-instruct`](https://huggingface.co/datasets/JuDDGES/pl-court-instruct). For graph dataset see [`JuDDGES/pl-court-graph`](https://huggingface.co/datasets/JuDDGES/pl-court-graph).\n", + "\n", + "### Supported Tasks and Leaderboards\n", + "\n", + "The dataset can be used for various tasks. However, it contains raw data acquired from official API, and we rather recommend using instruction dataset [`JuDDGES/pl-court-instruct`](https://huggingface.co/datasets/JuDDGES/pl-court-instruct) for straightforward usage. \n", + "\n", + "### Languages\n", + "\n", + "pl-PL Polish \n", + "\n", + "## Dataset Structure\n", + "\n", + "### Data Instances\n", + "\n", + "
\n", + " Click to expand \n", + "\n", + "```\n", + "{'_id': '154505000005127_XVII_AmA_000014_1994_Uz_1994-07-20_001',\n", + " 'signature': 'XVII AmA 14/94',\n", + " 'date': '1994-07-20 02:00:00.0 CEST',\n", + " 'publicationDate': '2018-06-13 22:10:05.0 CEST',\n", + " 'lastUpdate': '2018-06-13 16:22:22.0 CEST',\n", + " 'courtId': '15450500',\n", + " 'departmentId': '5127',\n", + " 'type': 'SENTENCE, REASON',\n", + " 'excerpt': 'Sygn. akt. XVII Amr 14/94 WYROK W IMIENIU RZECZYPOSPOLITEJ POLSKIEJ Dnia 20 lipca 1994 r. Sąd Wojewódzki w Warszawie - Sąd Antymonopolowy w składzie następującym: Przewodniczący SSW Stanisław Gronowski (spr.) Sędziowie: SW Jacek Sikorski i SR Bogdan Gierzyński Protokólant apl. rade. A. Grześkiewicz po rozpoznaniu w dniu 6 lipca 1994 r. w Warszawie na rozpra\\xadwie spraw z odwołań: A. M. , B. U. Sklep (...) we W. , Przedsiębiorstwa Handlowego (...) s.c. we W. , W. K. i A. B. (...) we W. od decyzji U',\n", + " 'content': '\\n\\n Wyrok+Uzasadnienie\\n \\n Sygn. akt. XVII Amr 14/94\\n \\n WYROK\\n W IMIENIU RZECZYPOSPOLITEJ POLSKIEJ\\n Dnia 20 lipca 1994 r.\\n Sąd Wojewódzki w Warszawie - Sąd Antymonopolowy w składzie następującym:\\n Przewodniczący SSW Stanisław Gronowski (spr.)\\n Sędziowie: SW Jacek Sikorski i SR Bogdan Gierzyński\\n Protokólant apl. rade. A. Grześkiewicz\\n po rozpoznaniu w dniu 6 lipca 1994 r. w Warszawie na rozpra\\xadwie\\n spraw z odwołań: A. M., B. U.\\n Sklep (...) we W., Przedsiębiorstwa Handlowego (...) s.c. we W., W. K. i A. B. (...) we W.\\n od decyzji Urzędu Antymonopo1owego Delegatury we W. z dnia 29 października 1993 r., sygn. akt (...) przeciwko Urzędowi Antymonopolowemu zainteresowany: Gmina W.\\n o przeciwdziałanie praktykom monopolistycznym\\n \\n 1\\n odwołania oddala\\n \\n \\n 2\\n zasądza na rzecz Urzędu Antymonopolowego od:\\n \\n a\\n A. M. kwotę 5.000.000 (pięć milionów) złotych\\n \\n \\n b\\n B. U. Sklep (...) we W. kwotę 5.000.000 (pięć milionów) złotych\\n \\n \\n c\\n Przedsiębiorstwa Handlowego (...) s.c. we W. kwotę 5.000.000 (pięć milionów) złotych\\n \\n \\n (...)-\\n \\n d\\n \\n W. K.i A. B. (...) s.c. we W.kwotę 5.000.000 (pięć milionów) złotych tytułem kosztów postępowania.\\n \\n \\n \\n UZASADNIENIE\\n Gmina W. (zainteresowana w postępowaniu przed Sądem Antymonopolowym w rozumieniu art. 479(\\n \\n \\n 31)§ 2 k.p.c.) jest wła\\xadścicielem lokali użytkowych zlokalizowanych na terenie miasta W., które wynajmuje podmiotom gospodarczym. Zadecydo\\xadwała, aby najem wspomnianych lokali był poprzedzony procedurą przetargową. W tym przedmiocie podjęta została uchwała Nr (...) Rady Miejskiej we W. z dnia 20 lutego 1993 r. w sprawie zasad wynajmowania lokali użytkowych stanowią\\xadcych własność Gminy W.. Przetargami, w świetle §3 uchwały, objęto w szczególności lokale użytkowe przeznaczone na działalność handlową, produkcyjną, usługową i gastronomi\\xadczną położone w centrum handlowymW.. Wspomniana pro\\xadcedura obejmowała także lokale oddane pomiotom gospodarczym w następstwie działań prywatyzujących handel, usługi i gastro\\xadnomię, jakie miały miejsce w 1990 r.\\n Z najemcami lokali przewidzianych do przetargu, do czasu ich przeprowadzenia, zawierano w miesiącach 1istopad-grudzień 1990 r. umowy najmu według ramowego wzoru. Umowa była zawie\\xadrana na okres 1,5 roku, a więc na czas ściśle określony (§ 12). Po upływie tego terminu dotychczasowy najemca nadal uży\\xadtkował lokal, jednakże musiał się liczyć z koniecznością jego natychmiastowego opróżnienia, jeżeli nie wygrał przetargu. Umowa zawierała zapisy dotyczące możliwości jej zmiany. W świetle § 17 ust. 1 wszelkie zmiany warunków umowy wymagają\\n - 3\\n formy pisemnej w postaci aneksu. Wyjątek stanowią zmiany w wysokości czynszu i innych opłat, o których najemca będzie powiadomiony odrębnym pismem (§ 17 ust. 2 umowy). Ponadto, jeżeli w czasie trwania stosunku najmu nastąpi zmiana okoli\\xadczności mających wpływ na wysokość czynszu najmu, wynajmujący określa wysokość czynszu stosownie do zmienionych okolicznoś\\xadci (§ 17 ust. 3 umowy). Dotychczasowi najemcy stawali do przetargu i w około 65 % przetarg kończył się dla nich pomyś\\xadlnie. Z najemcami tymi były zawierane umowy na okres 5 lat.\\n Najemcy, w tym m. in. B. U., Przedsiębiors\\xadtwo Handlowe (...) s.c. we W., W. K. i A. B. \"(...)\" s.c. we \\'W. i A. M. (powo\\xaddowie w postępowaniu przed Sądem Antymonopolowym) upatrywali w postanowieniach §§ 12 i 17 umowy nadużywanie pozycji domi\\xadnującej na rynku lokali użytkowych przez Gminę W.. Za\\xadrzucali również kilkakrotne podwyższanie czynszu i ustalenie go na zbyt wysokim poziomie. Wskazywali także, iż po upływie umownego okresu, na jaki zawarto umowę najmu, gmina ustala wysokie opłaty za bezumowne korzystanie z lokalu. Domagali się od Urzędu Antymonopolowego (pozwany w postępowaniu przed Sądem Antymonopolowym) wszczęcia przeciwko Gminie W. po\\xadstępowań i administracyjnego.\\n Najemcy wnosili o nakazanie gminie zaniechania stosowa\\xadnia praktyk monopolistycznych polegających na nadużywaniu po\\xadzycji dominującej na rynku przez:\\n - jednostronne ustalanie zawyżonych stawek czynszu najmu lokali użytkowych z pominięciem trybu renegocjowania wa\\xadrunków umowy z dotychczasowymi użytkownikami,\\n \\n -\\n \\n zawieranie krótkotrwałych umów najmu oraz udostępnianie lo\\xadkali po upływie okresu umownego dotychczasowym najemcom na warunkach bezumownego korzystania z tychże lokali,\\n \\n \\n - 4-\\n \\n -\\n \\n przekazywanie do wynajęcia lokali w trybie przetargowym bez uprzedniego porozumienia się z dotychczasowymi najemcami co do warunków kontynuowania stosunku najmu.\\n \\n \\n Najemcy domagali się także, aby Urząd Antymonopolowy na\\xadkazał gminie renegocjację warunków umowy najmu w części doty\\xadczącej terminu obowiązywania umowy oraz zasad określenia sta\\xadwek czynszu.\\n Urząd Antymonopolowy wszczął postępowanie administracyj\\xadne w sprawie naruszenia przez gminę art. 4 ust. 1 pkt 1 i art. 5 ustawy z dnia 24 lutego 1990 r. o przeciwdziałaniu praktykom monopolistycznym (Dz. U. z 1991 r. Nr 89, poz. 403), zwana dalej ustawą antymonopolową. W świetle art. 4 ust. 1 pkt 1 w/w ustawy praktyką monopolistyczną jest narzu\\xadcanie uciążliwych warunków umów, przynoszących podmiotowi go\\xadspodarczemu narzucającemu te warunki nieuzasadnione korzyści. Natomiast stosownie do art. 5 ustawy antymonopolowej praktyką monopolistyczną jest nadużywanie pozycji dominującej na ryn\\xadku. Ponadto na okoliczność zawyżania czynszu Urząd Antymono\\xadpolowy prowadził postępowanie z punktu widzenia naruszenia przez Gminę W. art. 7 ust. 1 pkt 3 w związku z art. 7 ust. 2 ustawy antymonopolowej. W świetle tych przepisów prak\\xadtyką monopolistyczną jest pobieranie nadmiernie wygórowanych cen przez podmiot gospodarczy o utrwalonej pozycji dominują\\xadcej na rynku.\\n W związku z zaskarżeniem przez najemców uchwały Rady Miejskiej W. z dnia 20 lutego 1993 r. Nr (...) do Naczelnego Sądu Administracyjnego sąd ten ustalił, że gmina zmierza drogą przetargu podwyższać czynsz najmu, w tym także w odniesieniu do osób z którymi zawarto umowy na czas okreś\\xadlony, co stanowi działalność niezgodną z prawem. Tryb przeta\\xadrgu nie może być wykorzystywany do zmiany wiążących umów naj-\\n - 5-\\n mu bądź ich rozwiązywania. W rezultacie wyrokiem z dnia 3 września 1993 r., sygn. akt SA/Wr/821-751-1236-1339/93 NSA\\n stwierdził nieważność § 3 wspomnianej uchwały.\\n W trakcie postępowania administracyjnego przed Urzędem Antymonopolowym gmina nie zaprzeczyła, udokumentowanym zresz\\xadtą przez najemców faktom, stanowiącym podstawę żądania wszczęcia postępowania. Według gminy stosuje stawki opłat czynszowych ustalone uchwałą Zarządu Miasta W.. Stawki opłat czynszowych są zróżnicowane w zależności od strefy (po\\xadłożenia lokalu) oraz branży od 150 tys./m2 do 300 tys./m2. W następstwie przetargów gmina uzyskała czynsze od 300 tys./m2 do 700 tys./m2. Deklarowała, iż najemcom którzy przegrali przetargi przygotuje lokale zamienne dla kontynuowania dzia\\xadłalności gospodarczej.\\n Według ustaleń Urzędu Antymonopolowego na lokalnym rynku lokali użytkowych gmina posiada udział wynoszący około 80%. Posiada zatem pozycję dominującą w rozumieniu art. 2 pkt 7 ustawy antymonpolowej. Nadużyciem pozycji dominującej na ryn\\xadku, godzącym w zasadę pewności obrotu, było bezumowne udostę\\xadpnianie przez gminę lokali użytkowych podmiotom gospodarczym, zamiast zawieranie z nimi umów najmu. Urząd Antymonopolowy nakazał zatem gminie zaniechanie stosowania tej praktyki mo\\xadnopolistycznej (pkt I decyzji z dnia 29 października 1993 r. nr (...)).\\n Ustosunkowując się do zarzutów najemców w przedmiocie zawierania z nimi przez gminę umów na okres 1,5 roku Urząd Antymonopolowy wyraził pogląd, iż jest to element, nie kwes\\xadtionowanej przez niego, polityki gminy w zakresie oddawania lokali po uprzednim przeprowadzeniu przetargu. Do czasu okre\\xadślenia zasad przeznaczenia lokali do przetargu gmina musiała zawierać z najemcami takie umowy. Stąd też Urząd Antymonopo-\\n - 6 -\\n Iowy nie dopatrzył się nadużycia pozycji dominującej ze stro\\xadny gminy w zawieraniu umów na czas oznaczony, tym bardziej że Kodeks cywilny nie zawiera ograniczeń co do długości trwania najmu. Urząd Antymonopolowy nie podzielił także stanowiska najemców zarzucających gminie nadużywanie pozycji dominującej na rynku przez jednostronne ustalanie zawyżonych stawek czyn\\xadszu najmu. Porównując stawki czynszowe stosowane przez gminę ze stawkami innych podmiotów gospodarczych wynajmujących lo\\xadkale użytkowe Urząd Antymonopolowy ustalił, iż gmina stosuje w tym względzie stawki na średnim poziomie. Uznał za dopusz\\xadczalne w świetle przepisów Kodeksu cywilnego jednostronne określanie przez wynajmującego wysokości czynszu bez zmiany samej umowy. W rezultacie więc kwestionowany przez najemców § 17 umowy uznał za nie naruszający prawa. Reasumując w pkt II decyzji Urząd Antymonopolowy nie stwierdził stosowania przez gminę praktyk monopolistycznych w zakresie nadużywania pozy\\xadcji dominującej na rynku poprzez zawyżanie stawek czynszowych oraz zawieranie krótkoterminowych umów najmu. Jak to ustalił przy tym Urząd Antymonopolowy przeszkodą w ewentualnym kwes\\xadtionowaniu tej części umowy, z punktu widzenia przepisów ustawy antymonopolowej, jest niestosowanie przez gminę wspom\\xadnianych praktyk już od blisko 3 lat. W świetle art. S ust. 1 ustawy antymonopolowej nie wydaje się decyzji stwierdzającej stosowanie praktyk monopolistycznych i nakazującej ich zanie\\xadchanie, jeżeli od końca roku, w którym zaprzestano stosowania praktyk monopolistycznych, upłynął rok.\\n Według Urzędu Antymonopolowego uchwała Rady Gminy W., ustalająca wymóg przetargów}\\' w odniesieniu do lokali użytkowych oddawanych w najem, nie podlega ocenie przepisów ustawy antymonopolowej. Wspomniana uchwała może być obalona jedynie w trybie przepisów ustawy o samorządzie terytorial-\\n nym. Stąd też Urząd Antymonopolowy na podstawie art. 10.5 §1 k.p.a. umorzył postępowanie w sprawie przeciwko gminie w za\\xadkresie przeznaczenia lokali użytkowych do przetargu w centrum handlowym W. (pkt III decyzji).\\n Od decyzji Urzędu Antymonopolowego najemcy odwołali się do Sądu Antymonopolowego.\\n Pełnomocnik procesowy A. M. zaskarżył pkt II i III decyzji. Wystąpił w swym odwołaniu także poza przedmiot prowadzonego postępowania administracyjnego. Odwołanie upa\\xadtruje bowiem w odmowie gminy sprzedaży lokali użytkowych ograniczenia wolnej konkurencji na rynku, co uzasadnia zarzut naruszenia art. 5 pkt 1 ustawy antymonopolowej. Według odwo\\xadłania niezakwestionowane przez Urząd Antymonopolowy różnico\\xadwanie przez gminę warunków umów lokali użytkowych w centrum handlowym W.i poza nim uzasadnia postawienie zaskar\\xadżonej decyzji zarzutu naruszenia art. 5 pkt 2 ustawy antymo\\xadnopolowej. W świetle tego przepisu praktyką monopolistyczną jest nadużycie pozycji dominującej w następstwie podziału ry\\xadnku według kryteriów terytorialnych. Podtrzymuje też dotych\\xadczasowe stanowisko prezentowane w postępowaniu administracyj\\xadnym, iż praktyką monopolistyczną jest jednostronne dyktowanie przez gminę zawyżonych opłat czynszowych, jak również zawie\\xadranie krótkoterminowych umów najmu. Polemizuje ze stanowis\\xadkiem zajętym w pkt III zaskarżonej decyzji, iż Urząd Antymo\\xadnopolowy nie może ingerować w sposób wykonywania przez gminę przysługujących jej praw własności do sporem objętych lokali użytkowych.\\n Odwołanie wniesione przez pozostałych najemców, aczkol\\xadwiek formalnie ograniczone do pktu III decyzji, zarzuca za\\xadskarżonej decyzji niedostrzeganie praktyk monopolistycznych w działalności gminy w zakresie prowadzenia przetargów lokali w\\n - 8\\n stosunku do których przysługują podmiotom gospodarczym prawa wynikające z umowy najmu. Odwołanie wywodzi, iż po upływie okresu najmu przyzwolenie gminy na dalsze używanie lokali re\\xadaktywuje urnowe najmu. Gmina powinna zatem najpierw uregulować stosunki łączące je z dotychczasowymi najemcami, a dopiero następnie skierować wolne lokale do przetargu. W tej sytuacji umorzenie w zaskarżonej decyzji postępowania w zakresie prze\\xadznaczenia lokali do przetargu narusza art. 105 § 1 k.p.a.\\n Sąd Antymonopolowy zważył, co następuje:\\n Umowy są podstawowym instrumentem prawnym organizującym działalność pomiędzy podmiotami gospodarczymi w warunkach go\\xadspodarki rynkowej. Zgodnie z założeniami takiej gospodarki strony mają swobodę wyboru kontrahenta, zaś istotne elementy treści umowy, w szczególności odnoszące się do ekwiwalentnoś\\xadci świadczeń, kształtują wolne od zewnętrznych wpływów mecha\\xadnizmy rynkowe. Pozwala to w sposób optymalny kształtować pra\\xadwa i obowiązki stron i przeciwdziała zjawisku dyktowania tre\\xadści umów przez podmiot silniejszy ekonomicznie. Wspomniane założenia mogą być jednakże realizowane jedynie w sytuacji rozbudowanego rynku, a w szczególności funkcjonowania po stronie podaży znacznej liczby podmiotów gospodarczych, kon\\xadkurujących ze sobą. W okolicznościach faktycznych niniejszej sprawy taka sytuacja nie zachodzi. Gmina na rynku lokali uży\\xadtkowych posiada bowiem silnie dominującą pozycję, zbliżoną do monopolistycznej. Pozwala to dyktować jej treść umów działa\\xadjącym w rozproszeniu najemcom.\\n W celu przeciwdziałania nadużywaniu władzy rynkowej, a w szczególności tam, gdzie nie mogą funkcjonować mechanizmy ekonomiczne (z uwagi na szczupły rynek), umowy organizujące działalność gospodarczą powinny podlegać reglamentacji z pun\\xadktu widzenia przestrzegania przepisów ustawy antymonopolowej.\\n - 9\\n Należy podkreślić, że zasada swobody umów wyrażona w art. 3531 k.c. nie ma bezwzględnego charakteru. Treść umów nie mo\\xadże bowiem sprzeciwiać się ustawom, w tym także przepisom ustawy antymonopolowej. Zgodnie z art. 8 ust. 2 w/w ustawy umowy zawarte z naruszeniem art. 4, art. 5 oraz art. 7 są w całości lub w odpowiedniej części nieważne. Wynika stąd, że ustawa antymonopolowa jest jedną z tych ustaw, do których od\\xadsyła art. 3531 k.c. dla określenia granic swobody umów. W świetle powyższego stanowiska Sąd Antymonopolowy nie podziela argumentacji zaskarżonej decyzji, nie dopatrującej się naru\\xadszenia ustawy antymonopolowej w sytuacji gdy treść umów najmu mieści ;się w granicach przepisów Kodeksu cywilnego, normują\\xadcych umowę najmu. Wręcz przeciwnie. Ustawa antymonopolowa po\\xadwinna zapobiegać nadużywaniu kodeksowej zasady swobody umów przez podmiot posiadający władzę na rynku, tym bardziej zaś gdy narzuca on swym kontrahentom umowy naruszające przepisy wspomnianego kodeksu.\\n Według zaskarżonej decyzji nie naruszało ustawy antymo\\xadnopolowej zawarcie przez gminę umów najmu na czas oznaczony wynoszący 1,5 roku, skoro Kodeks cywilny nie zawiera ograni\\xadczeń co do minimalnego okresu najmu. Z tym stanowiskiem trud\\xadno się zgodzić. Lokale użytkowe, stanowiące przedmiot postę\\xadpowania, służą najemcom do prowadzenia działalności gospodar\\xadczej, przede wszystkim handlowej. Umowa najmu lokalu użytko\\xadwego zawarta na okres 1,5 roku podważa sens działalności gos\\xadpodarczej, gdyż czyni ją tymczasową. Najemca lokalu nie może planować swej działalności gospodarczej, a w szczególności czynić stosownych nakładów. Musi się realnie liczyć, iż po upływie tak zakreślonego terminu będzie zmuszony lokal opróż\\xadnić. W ocenie Sądu Antymonopolowego wymuszenie na najemcach zawarcia umów najmu na okres 1,5 roku było ze strony gminy\\n - 10\\n nadużyciem pozycji dominującej na rynku w świetle art. 5 ustawy antymonopolowej. Tym sposobem gmina, nie licząc się z potrzebami najemców, którym narzucała niekorzystne warunki umów, eksploatowała silnie dominującą pozycję na rynku.\\n Także nadużyciem pozycji dominującej na rynku ze strony gminy, czego nie zauważono w zaskarżonej decyzji, a na co wskazywali najemcy, było wymuszenie w § 17 umowy najmu możli\\xadwości jej wypowiedzenia, w szczególności zaś w zakresie wyso\\xadkości czynszu. Tym sposobem, pomimo że umowa najmu zawarta była na czas oznaczony, gmina podwyższała czynsz najmu ponad kwotę ustaloną w umowie. Postanowienie § 17 umowy naruszało zresztą także i art. 68S k.c. W świetle tego przepisu wypo\\xadwiedzieć można jedynie umowę najmu zawartą na czas nie ozna\\xadczony. Umowa zawarta na czas ściśle oznaczony nie podlega wypowiedzeniu.\\n Zasadniczo jedyną sankcją, która może być zastosowana w stosunku do podmiotu stosującego praktyki monopolistyczne, jest decyzja nakazująca ich zaniechanie (art. 8 ust. 1 usta\\xadwy). Wydanie takiej decyzji, w razie jej nierespektowania, pozwala na uruchamianie kar pieniężnych (art. 15 ustawy). Za\\xadstosowanie sankcji administracyjnej z art. 8 ust. 1 w/w ustawy jest jednakże ograniczone pod względem czasowym. Decyzja taka, na mocy wyraźnego zapisu ustawowego, nie może być wyda\\xadna, jeżeli od końca roku, w którym zaprzestano stosowania praktyki monopolistycznej, upłynął rok. W odniesieniu do sto\\xadsowanej przez gminę praktyki zawierania umów na okres 1,5 ro\\xadku zaniechano tego z końcem 1990 r. Natomiast praktyka wypo\\xadwiadania wspomnianych umów w części dotyczącej czynszu nie miała już miejsca począwszy od marca 1991 r. Z omawianych więc względów w dacie złożenia przez najemców w miesiącu kwietniu 1993 r. żądania wszczęcia postępowania administracy-\\xad\\n - 11\\n jnego przeciwko gminie nie wchodziła już w grę możliwość wy\\xaddania decyzji z art. 8 ust. 1 w/w ustawy w odniesieniu do wspomnianych praktyk monopolistycznych.\\n Rozpoznając w pozostałym zakresie odwołania wniesione przez najemców Sąd Antymonopolowy również nie znalazł podstaw do ich uwzględnienia. Nietrafne są w szczególności zarzuty odwołań, iż w zaskarżonej decyzji nie dostrzeżono praktyki monopolistycznej w prowadzeniu przez gminę przetargów w od\\xadniesieniu do lokali, w stosunku do których najemcom przysłu\\xadgują prawa wynikające z umowy najmu. Przeciwdziała tej prak\\xadtyce pkt I zaskarżonej decyzji, gdzie nakazano gminie zanie\\xadchanie odmowy zawierania umów najmu w formie pisemnej w od-r niesieniu do lokali udostępnianych najemcom na zasadzie bezu\\xadmownego korzystania. Rozstrzygnięcie Urzędu Antymonopolowego zgodne jest tutaj z zasadą wyrażoną w art. 674 k.c.\\n Wprawdzie nie można podzielić poglądu zajętego w zaskar\\xadżonej decyzji jakoby podejmowane przez gminę, w wykonaniu przepisów gminnych, działania zmierzające do kierowania loka\\xadli użytkowych do przetargu nie podlegały ocenie ustawy anty\\xadmonopolowej. Tym niemniej, zakładając uporządkowanie gospoda\\xadrki lokalami użytkowymi w następstwie wykonania pktu I decy\\xadzji, trudno dopatrzyć się w instytucji przetargu naruszenia przepisów ustawy antymonopolowej. Jeżeli do przetargu mogą na równych prawach przystąpić wszystkie zainteresowane podmioty gospodarcze, przetarg nie narusza celów ustawy antymonopolo\\xadwej a w szczególności ochrony wolnej konkurencji.\\n Sąd Antymonopolowy nie podzielił stanowiska zajętego w odwołaniu A. M., w świetle którego różnicowanie przez gminę warunków umów najmu lokali użytkowych zlokalizo\\xadwanych w centrum handlowym miasta w porównaniu do pozostałych lokali, stanowi podział rynku według kryterium terytorialnego\\n \\n - 12\\n\\n lub asortymentowego w rozumieniu art. 5 pkt 2 ustawy antymo\\xadnopolowej. Rynek w ujęciu przedmiotowym odnosi się do wszyst\\xadkich towarów jednego rodzaju, które poprzez szczególne właś\\xadciwości, w szczególności zaś przeznaczenie, użytkowość i cenę odróżniają się od innych towarów w taki sposób, że nie ist\\xadnieje możliwość dowolnej ich zamiany. Rynek pod względem przedmiotowym (asortymentowym) tworzą więc towary, które z punktu widzenia nabywcy charakteryzują się substytutywnością. Pomimo więc podobnego pod względem przedmiotowym asortymentu, lokali użytkowych zlokalizowanych w centrum handlowym miasta w porównaniu do innych lokali użytkowych w tym mieście nie można, z punktu widzenia ogółu nabywców (najemców), uznać za substytutywne. Możliwości prowadzenia działalności gospodar\\xadczej w lokalach znajdujących się w centrum handlowym miasta sa zdecydowanie korzystniejsze. Istotne jest także i to, że w warunkach gospodarki rynkowej obiektywną prawidłowością są znacznie wyższe czynsze najmu lokali użytkowych zlokalizowa\\xadnych w centrach handlowych miast w porównaniu do pozostałych lokali. Uzasadnia to traktowanie takich lokali użytkowych ja\\xadko odrębnego rynku. Z tego też względu stosowanie przez gminę innej polityki najmu w odniesieniu do tej kategorii lokali nic może być uznane jako podział rynku, lecz jako działania na dwóch odrębnych rynkach.\\n Brak jest także podstaw do uwzględnienia zarzutu odwoła\\xadnia upatrującego w odmowie sprzedaży lokali użytkowych ogra\\xadniczanie przez gminę wolnej konkurencji na rynku w świetle art. 5 pkt 1 ustawy antymonopolowej, skoro nie stanowiło to przedmiotu rozstrzygnięcia zaskarżonej decyzji, a nawet przedmiotu żądania zgłoszonego we wniosku o wszczęcie postę\\xadpowania. Formalnie rzecz biorąc nie ma przeszkód, aby wspom-\\xad\\n \\n - 13\\n\\n niany zarzut stanowił przedmiot odrębnego postępowania administracyjnego.\\n Nie znajdują także uzasadnienia, podnoszone w szczególności w postępowaniu administracyjnym, żądania skierowane pod adresem Urzędu Antymonopolowego, aby ten zobowiązał gminę do renegocjowania treści umów najmu z dotychczasowymi najemcami. W świetle art. 8 ust. 1 ustawy antymonopolowej takie oczeki\\xadwania pod adresem organów działających w trybie wspomnianej ustawy, są za daleko idące. W postępowaniu administracyjnym toczącym się w trybie wspomnianej ustawy podmiotowi stosują\\xadcemu praktyki monopolistyczne można jedynie nakazać ich za\\xadniechanie. Nie można natomiast, w sposób pozytywny, nakazać podmiotowi spełnienie określonego zachowania mieszczącego się w granicach prawa. Reasumując zatem w trybie ustawy antymono\\xadpolowej można wskazać podmiotowi gospodarczemu czego ma za\\xadniechać. Natomiast nie wolno mu w prawnoprocesowych formach działania wskazać jak konkretnie ma się zachować w określonej sytuacji.\\n W tym stanie sprawy Sąd Antymonopolowy odwołania oddalił (art. 4793 1 § 1 k.p.c.).\\n O kosztach postępowania orzeczono na zasadzie art. 98 i 99 k.p.c.\\n \\n \\n\\n',\n", + " 'chairman': 'SSW Stanisław Gronowski',\n", + " 'decision': None,\n", + " 'judges': ['SW Jacek Sikorski i Bogdan Gierzyński',\n", + " 'SSW Stanisław Gronowski'],\n", + " 'legalBases': ['art. 6 ust. 1 pkt 1 ustawy ochronie konkurencji i konsumentów',\n", + " 'art. 106 ust. 1 pkt 1 ustawy ochronie konkurencji i konsumentów'],\n", + " 'publisher': 'Beata Gonera',\n", + " 'recorder': None,\n", + " 'references': ['Ustawa z dnia 17 listopada 1964 r. - Kodeks postępowania cywilnego (Dz. U. z 1964 r. Nr 43, poz. 296 - art. 479; art. 479(31); art. 479(31) § 2; art. 98; art. 99; § 1)',\n", + " 'Ustawa z dnia 14 czerwca 1960 r. - Kodeks postępowania administracyjnego (Dz. U. z 1960 r. Nr 30, poz. 168 - art. 10/5; art. 10/5 § 1; art. 105; art. 105 § 1)',\n", + " 'Ustawa z dnia 28 lutego 2003 r. - Prawo upadłościowe i naprawcze (Dz. U. z 2003 r. Nr 60, poz. 535 - )',\n", + " 'Ustawa z dnia 24 lutego 1990 r. o przeciwdziałaniu praktykom monopolistycznym (Dz. U. z 1990 r. Nr 14, poz. 88 - art. 4; art. 4 ust. 1; art. 4 ust. 1 pkt. 1; art. 5)',\n", + " 'Ustawa z dnia 23 kwietnia 1964 r. - Kodeks cywilny (Dz. U. z 1964 r. Nr 16, poz. 93 - art. 353(1); art. 674)'],\n", + " 'reviser': 'Beata Gonera',\n", + " 'themePhrases': ['Praktyki ograniczające konkurencję',\n", + " 'Kary pieniężne UOKIK'],\n", + " 'num_pages': 7.0,\n", + " 'text': 'Sygn. akt. XVII Amr 14/94\\n\\nWYROK\\nW IMIENIU RZECZYPOSPOLITEJ POLSKIEJ\\nDnia 20 lipca 1994 r.\\nSąd Wojewódzki w Warszawie - Sąd Antymonopolowy w składzie następującym:\\nPrzewodniczący SSW Stanisław Gronowski (spr.)\\nSędziowie: SW Jacek Sikorski i SR Bogdan Gierzyński\\nProtokólant apl. rade. A. Grześkiewicz\\npo rozpoznaniu w dniu 6 lipca 1994 r. w Warszawie na rozpra\\xadwie\\nspraw z odwołań:A. M.,B. U.\\nSklep (...)weW.,Przedsiębiorstwa Handlowego (...) s.c.weW.,W. K.iA. B.(...)weW.\\nod decyzji Urzędu Antymonopo1owego Delegatury weW.z dnia 29 października 1993 r., sygn. akt(...)przeciwko Urzędowi Antymonopolowemu zainteresowany: GminaW.\\no przeciwdziałanie praktykom monopolistycznym\\n\\n1\\nodwołania oddala\\n\\n2\\nzasądza na rzecz Urzędu Antymonopolowego od:\\n\\na\\nA. M.kwotę 5.000.000 (pięć milionów) złotych\\n\\nb\\nB. U.Sklep (...)weW.kwotę 5.000.000 (pięć milionów) złotych\\n\\nc\\nPrzedsiębiorstwa Handlowego (...) s.c.weW.kwotę 5.000.000 (pięć milionów) złotych\\n\\n(...)-\\n\\nd\\n\\nW. K.iA. B.(...)s.c. weW.kwotę 5.000.000 (pięć milionów) złotych tytułem kosztów postępowania.\\n\\nUZASADNIENIE\\nGminaW.(zainteresowana w postępowaniu przed Sądem Antymonopolowym w rozumieniuart. 479(\\n\\n 31)§ 2 k.p.c.) jest wła\\xadścicielem lokali użytkowych zlokalizowanych na terenie miastaW., które wynajmuje podmiotom gospodarczym. Zadecydo\\xadwała, aby najem wspomnianych lokali był poprzedzony procedurą przetargową. W tym przedmiocie podjęta została uchwała Nr(...)Rady Miejskiej weW.z dnia 20 lutego 1993 r. w sprawie zasad wynajmowania lokali użytkowych stanowią\\xadcych własność GminyW.. Przetargami, w świetle §3 uchwały, objęto w szczególności lokale użytkowe przeznaczone na działalność handlową, produkcyjną, usługową i gastronomi\\xadczną położone w centrum handlowymW.. Wspomniana pro\\xadcedura obejmowała także lokale oddane pomiotom gospodarczym w następstwie działań prywatyzujących handel, usługi i gastro\\xadnomię, jakie miały miejsce w 1990 r.\\nZ najemcami lokali przewidzianych do przetargu, do czasu ich przeprowadzenia, zawierano w miesiącach 1istopad-grudzień 1990 r. umowy najmu według ramowego wzoru. Umowa była zawie\\xadrana na okres 1,5 roku, a więc na czas ściśle określony (§ 12). Po upływie tego terminu dotychczasowy najemca nadal uży\\xadtkował lokal, jednakże musiał się liczyć z koniecznością jego natychmiastowego opróżnienia, jeżeli nie wygrał przetargu. Umowa zawierała zapisy dotyczące możliwości jej zmiany. W świetle § 17 ust. 1 wszelkie zmiany warunków umowy wymagają\\n- 3\\nformy pisemnej w postaci aneksu. Wyjątek stanowią zmiany w wysokości czynszu i innych opłat, o których najemca będzie powiadomiony odrębnym pismem (§ 17 ust. 2 umowy). Ponadto, jeżeli w czasie trwania stosunku najmu nastąpi zmiana okoli\\xadczności mających wpływ na wysokość czynszu najmu, wynajmujący określa wysokość czynszu stosownie do zmienionych okolicznoś\\xadci (§ 17 ust. 3 umowy). Dotychczasowi najemcy stawali do przetargu i w około 65 % przetarg kończył się dla nich pomyś\\xadlnie. Z najemcami tymi były zawierane umowy na okres 5 lat.\\nNajemcy, w tym m. in.B. U., Przedsiębiors\\xadtwo Handlowe(...)s.c. weW.,W. K.iA. B.\"(...)\" s.c. we \\'W.iA. M.(powo\\xaddowie w postępowaniu przed Sądem Antymonopolowym) upatrywali w postanowieniach §§ 12 i 17 umowy nadużywanie pozycji domi\\xadnującej na rynku lokali użytkowych przez GminęW.. Za\\xadrzucali również kilkakrotne podwyższanie czynszu i ustalenie go na zbyt wysokim poziomie. Wskazywali także, iż po upływie umownego okresu, na jaki zawarto umowę najmu, gmina ustala wysokie opłaty za bezumowne korzystanie z lokalu. Domagali się od Urzędu Antymonopolowego (pozwany w postępowaniu przed Sądem Antymonopolowym) wszczęcia przeciwko GminieW.po\\xadstępowań i administracyjnego.\\nNajemcy wnosili o nakazanie gminie zaniechania stosowa\\xadnia praktyk monopolistycznych polegających na nadużywaniu po\\xadzycji dominującej na rynku przez:\\n- jednostronne ustalanie zawyżonych stawek czynszu najmu lokali użytkowych z pominięciem trybu renegocjowania wa\\xadrunków umowy z dotychczasowymi użytkownikami,\\n\\n-\\n\\nzawieranie krótkotrwałych umów najmu oraz udostępnianie lo\\xadkali po upływie okresu umownego dotychczasowym najemcom na warunkach bezumownego korzystania z tychże lokali,\\n\\n- 4-\\n\\n-\\n\\nprzekazywanie do wynajęcia lokali w trybie przetargowym bez uprzedniego porozumienia się z dotychczasowymi najemcami co do warunków kontynuowania stosunku najmu.\\n\\nNajemcy domagali się także, aby Urząd Antymonopolowy na\\xadkazał gminie renegocjację warunków umowy najmu w części doty\\xadczącej terminu obowiązywania umowy oraz zasad określenia sta\\xadwek czynszu.\\nUrząd Antymonopolowy wszczął postępowanie administracyj\\xadne w sprawie naruszenia przez gminęart. 4 ust. 1 pkt 1 i art. 5 ustawy z dnia 24 lutego 1990 r. o przeciwdziałaniu praktykom monopolistycznym(Dz. U. z 1991 r. Nr 89, poz. 403), zwana dalej ustawą antymonopolową. W świetle art. 4 ust. 1 pkt 1 w/w ustawy praktyką monopolistyczną jest narzu\\xadcanie uciążliwych warunków umów, przynoszących podmiotowi go\\xadspodarczemu narzucającemu te warunki nieuzasadnione korzyści. Natomiast stosownie do art. 5 ustawy antymonopolowej praktyką monopolistyczną jest nadużywanie pozycji dominującej na ryn\\xadku. Ponadto na okoliczność zawyżania czynszu Urząd Antymono\\xadpolowy prowadził postępowanie z punktu widzenia naruszenia przez GminęW.art. 7 ust. 1 pkt 3 w związku z art. 7 ust. 2 ustawy antymonopolowej. W świetle tych przepisów prak\\xadtyką monopolistyczną jest pobieranie nadmiernie wygórowanych cen przez podmiot gospodarczy o utrwalonej pozycji dominują\\xadcej na rynku.\\nW związku z zaskarżeniem przez najemców uchwały Rady MiejskiejW.z dnia 20 lutego 1993 r. Nr(...)do Naczelnego Sądu Administracyjnego sąd ten ustalił, że gmina zmierza drogą przetargu podwyższać czynsz najmu, w tym także w odniesieniu do osób z którymi zawarto umowy na czas okreś\\xadlony, co stanowi działalność niezgodną z prawem. Tryb przeta\\xadrgu nie może być wykorzystywany do zmiany wiążących umów naj-\\n- 5-\\nmu bądź ich rozwiązywania. W rezultacie wyrokiem z dnia 3 września 1993 r., sygn. akt SA/Wr/821-751-1236-1339/93 NSA\\nstwierdził nieważność § 3 wspomnianej uchwały.\\nW trakcie postępowania administracyjnego przed Urzędem Antymonopolowym gmina nie zaprzeczyła, udokumentowanym zresz\\xadtą przez najemców faktom, stanowiącym podstawę żądania wszczęcia postępowania. Według gminy stosuje stawki opłat czynszowych ustalone uchwałą Zarządu MiastaW.. Stawki opłat czynszowych są zróżnicowane w zależności od strefy (po\\xadłożenia lokalu) oraz branży od 150 tys./m2do 300 tys./m2. W następstwie przetargów gmina uzyskała czynsze od 300 tys./m2do 700 tys./m2. Deklarowała, iż najemcom którzy przegrali przetargi przygotuje lokale zamienne dla kontynuowania dzia\\xadłalności gospodarczej.\\nWedług ustaleń Urzędu Antymonopolowego na lokalnym rynku lokali użytkowych gmina posiada udział wynoszący około 80%. Posiada zatem pozycję dominującą w rozumieniu art. 2 pkt 7 ustawy antymonpolowej. Nadużyciem pozycji dominującej na ryn\\xadku, godzącym w zasadę pewności obrotu, było bezumowne udostę\\xadpnianie przez gminę lokali użytkowych podmiotom gospodarczym, zamiast zawieranie z nimi umów najmu. Urząd Antymonopolowy nakazał zatem gminie zaniechanie stosowania tej praktyki mo\\xadnopolistycznej (pkt I decyzji z dnia 29 października 1993 r. nr(...)).\\nUstosunkowując się do zarzutów najemców w przedmiocie zawierania z nimi przez gminę umów na okres 1,5 roku Urząd Antymonopolowy wyraził pogląd, iż jest to element, nie kwes\\xadtionowanej przez niego, polityki gminy w zakresie oddawania lokali po uprzednim przeprowadzeniu przetargu. Do czasu okre\\xadślenia zasad przeznaczenia lokali do przetargu gmina musiała zawierać z najemcami takie umowy. Stąd też Urząd Antymonopo-\\n- 6 -\\nIowy nie dopatrzył się nadużycia pozycji dominującej ze stro\\xadny gminy w zawieraniu umów na czas oznaczony, tym bardziej żeKodeks cywilnynie zawiera ograniczeń co do długości trwania najmu. Urząd Antymonopolowy nie podzielił także stanowiska najemców zarzucających gminie nadużywanie pozycji dominującej na rynku przez jednostronne ustalanie zawyżonych stawek czyn\\xadszu najmu. Porównując stawki czynszowe stosowane przez gminę ze stawkami innych podmiotów gospodarczych wynajmujących lo\\xadkale użytkowe Urząd Antymonopolowy ustalił, iż gmina stosuje w tym względzie stawki na średnim poziomie. Uznał za dopusz\\xadczalne w świetle przepisówKodeksu cywilnegojednostronne określanie przez wynajmującego wysokości czynszu bez zmiany samej umowy. W rezultacie więc kwestionowany przez najemców § 17 umowy uznał za nie naruszający prawa. Reasumując w pkt II decyzji Urząd Antymonopolowy nie stwierdził stosowania przez gminę praktyk monopolistycznych w zakresie nadużywania pozy\\xadcji dominującej na rynku poprzez zawyżanie stawek czynszowych oraz zawieranie krótkoterminowych umów najmu. Jak to ustalił przy tym Urząd Antymonopolowy przeszkodą w ewentualnym kwes\\xadtionowaniu tej części umowy, z punktu widzenia przepisów ustawy antymonopolowej, jest niestosowanie przez gminę wspom\\xadnianych praktyk już od blisko 3 lat. W świetle art. S ust. 1 ustawy antymonopolowej nie wydaje się decyzji stwierdzającej stosowanie praktyk monopolistycznych i nakazującej ich zanie\\xadchanie, jeżeli od końca roku, w którym zaprzestano stosowania praktyk monopolistycznych, upłynął rok.\\nWedług Urzędu Antymonopolowego uchwała Rady GminyW., ustalająca wymóg przetargów}\\' w odniesieniu do lokali użytkowych oddawanych w najem, nie podlega ocenie przepisów ustawy antymonopolowej. Wspomniana uchwała może być obalona jedynie w trybie przepisów ustawy o samorządzie terytorial-\\nnym. Stąd też Urząd Antymonopolowy na podstawieart. 10.5 §1 k.p.a.umorzył postępowanie w sprawie przeciwko gminie w za\\xadkresie przeznaczenia lokali użytkowych do przetargu w centrum handlowymW.(pkt III decyzji).\\nOd decyzji Urzędu Antymonopolowego najemcy odwołali się do Sądu Antymonopolowego.\\nPełnomocnik procesowyA. M.zaskarżył pkt II i III decyzji. Wystąpił w swym odwołaniu także poza przedmiot prowadzonego postępowania administracyjnego. Odwołanie upa\\xadtruje bowiem w odmowie gminy sprzedaży lokali użytkowych ograniczenia wolnej konkurencji na rynku, co uzasadnia zarzut naruszenia art. 5 pkt 1 ustawy antymonopolowej. Według odwo\\xadłania niezakwestionowane przez Urząd Antymonopolowy różnico\\xadwanie przez gminę warunków umów lokali użytkowych w centrum handlowymW.i poza nim uzasadnia postawienie zaskar\\xadżonej decyzji zarzutu naruszenia art. 5 pkt 2 ustawy antymo\\xadnopolowej. W świetle tego przepisu praktyką monopolistyczną jest nadużycie pozycji dominującej w następstwie podziału ry\\xadnku według kryteriów terytorialnych. Podtrzymuje też dotych\\xadczasowe stanowisko prezentowane w postępowaniu administracyj\\xadnym, iż praktyką monopolistyczną jest jednostronne dyktowanie przez gminę zawyżonych opłat czynszowych, jak również zawie\\xadranie krótkoterminowych umów najmu. Polemizuje ze stanowis\\xadkiem zajętym w pkt III zaskarżonej decyzji, iż Urząd Antymo\\xadnopolowy nie może ingerować w sposób wykonywania przez gminę przysługujących jej praw własności do sporem objętych lokali użytkowych.\\nOdwołanie wniesione przez pozostałych najemców, aczkol\\xadwiek formalnie ograniczone do pktu III decyzji, zarzuca za\\xadskarżonej decyzji niedostrzeganie praktyk monopolistycznych w działalności gminy w zakresie prowadzenia przetargów lokali w\\n- 8\\nstosunku do których przysługują podmiotom gospodarczym prawa wynikające z umowy najmu. Odwołanie wywodzi, iż po upływie okresu najmu przyzwolenie gminy na dalsze używanie lokali re\\xadaktywuje urnowe najmu. Gmina powinna zatem najpierw uregulować stosunki łączące je z dotychczasowymi najemcami, a dopiero następnie skierować wolne lokale do przetargu. W tej sytuacji umorzenie w zaskarżonej decyzji postępowania w zakresie prze\\xadznaczenia lokali do przetargu naruszaart. 105 § 1 k.p.a.\\nSąd Antymonopolowy zważył, co następuje:\\nUmowy są podstawowym instrumentem prawnym organizującym działalność pomiędzy podmiotami gospodarczymi w warunkach go\\xadspodarki rynkowej. Zgodnie z założeniami takiej gospodarki strony mają swobodę wyboru kontrahenta, zaś istotne elementy treści umowy, w szczególności odnoszące się do ekwiwalentnoś\\xadci świadczeń, kształtują wolne od zewnętrznych wpływów mecha\\xadnizmy rynkowe. Pozwala to w sposób optymalny kształtować pra\\xadwa i obowiązki stron i przeciwdziała zjawisku dyktowania tre\\xadści umów przez podmiot silniejszy ekonomicznie. Wspomniane założenia mogą być jednakże realizowane jedynie w sytuacji rozbudowanego rynku, a w szczególności funkcjonowania po stronie podaży znacznej liczby podmiotów gospodarczych, kon\\xadkurujących ze sobą. W okolicznościach faktycznych niniejszej sprawy taka sytuacja nie zachodzi. Gmina na rynku lokali uży\\xadtkowych posiada bowiem silnie dominującą pozycję, zbliżoną do monopolistycznej. Pozwala to dyktować jej treść umów działa\\xadjącym w rozproszeniu najemcom.\\nW celu przeciwdziałania nadużywaniu władzy rynkowej, a w szczególności tam, gdzie nie mogą funkcjonować mechanizmy ekonomiczne (z uwagi na szczupły rynek), umowy organizujące działalność gospodarczą powinny podlegać reglamentacji zpun\\xadktu widzenia przestrzegania przepisów ustawy antymonopolowej.\\n- 9\\nNależy podkreślić, że zasada swobody umów wyrażona wart. 3531k.c.nie ma bezwzględnego charakteru. Treść umów nie mo\\xadże bowiem sprzeciwiać się ustawom, w tym także przepisom ustawy antymonopolowej. Zgodnie z art. 8 ust. 2 w/w ustawy umowy zawarte z naruszeniem art. 4, art. 5 oraz art. 7 są w całości lub w odpowiedniej części nieważne. Wynika stąd, że ustawa antymonopolowa jest jedną z tych ustaw, do których od\\xadsyłaart. 3531k.c.dla określenia granic swobody umów. W świetle powyższego stanowiska Sąd Antymonopolowy nie podziela argumentacji zaskarżonej decyzji, nie dopatrującej się naru\\xadszenia ustawy antymonopolowej w sytuacji gdy treść umów najmu mieści;się w granicach przepisówKodeksu cywilnego, normują\\xadcych umowę najmu. Wręcz przeciwnie. Ustawa antymonopolowa po\\xadwinna zapobiegać nadużywaniu kodeksowej zasady swobody umów przez podmiot posiadający władzę na rynku, tym bardziej zaś gdy narzuca on swym kontrahentom umowy naruszające przepisy wspomnianego kodeksu.\\nWedług zaskarżonej decyzji nie naruszało ustawy antymo\\xadnopolowej zawarcie przez gminę umów najmu na czas oznaczony wynoszący 1,5 roku, skoroKodeks cywilnynie zawiera ograni\\xadczeń co do minimalnego okresu najmu. Z tym stanowiskiem trud\\xadno się zgodzić. Lokale użytkowe, stanowiące przedmiot postę\\xadpowania, służą najemcom do prowadzenia działalności gospodar\\xadczej, przede wszystkim handlowej. Umowa najmu lokalu użytko\\xadwego zawarta na okres 1,5 roku podważa sens działalności gos\\xadpodarczej, gdyż czyni ją tymczasową. Najemca lokalu nie może planować swej działalności gospodarczej, a w szczególności czynić stosownych nakładów. Musi się realnie liczyć, iż po upływie tak zakreślonego terminu będzie zmuszony lokal opróż\\xadnić. W ocenie Sądu Antymonopolowego wymuszenie na najemcach zawarcia umów najmu na okres 1,5 roku było ze strony gminy\\n- 10\\nnadużyciem pozycji dominującej na rynku w świetle art. 5 ustawy antymonopolowej. Tym sposobem gmina, nie licząc się z potrzebami najemców, którym narzucała niekorzystne warunki umów, eksploatowała silnie dominującą pozycję na rynku.\\nTakże nadużyciem pozycji dominującej na rynku ze strony gminy, czego nie zauważono w zaskarżonej decyzji, a na co wskazywali najemcy, było wymuszenie w § 17 umowy najmu możli\\xadwości jej wypowiedzenia, w szczególności zaś w zakresie wyso\\xadkości czynszu. Tym sposobem, pomimo że umowa najmu zawarta była na czas oznaczony, gmina podwyższała czynsz najmu ponad kwotę ustaloną w umowie. Postanowienie § 17 umowy naruszało zresztą także i art. 68Sk.c.W świetle tego przepisu wypo\\xadwiedzieć można jedynie umowę najmu zawartą na czas nie ozna\\xadczony. Umowa zawarta na czas ściśle oznaczony nie podlega wypowiedzeniu.\\nZasadniczo jedyną sankcją, która może być zastosowana w stosunku do podmiotu stosującego praktyki monopolistyczne, jest decyzja nakazująca ich zaniechanie (art. 8 ust. 1 usta\\xadwy). Wydanie takiej decyzji, w razie jej nierespektowania, pozwala na uruchamianie kar pieniężnych (art. 15 ustawy). Za\\xadstosowanie sankcji administracyjnej z art. 8 ust. 1 w/w ustawy jest jednakże ograniczone pod względem czasowym. Decyzja taka, na mocy wyraźnego zapisu ustawowego, nie może być wyda\\xadna, jeżeli od końca roku, w którym zaprzestano stosowania praktyki monopolistycznej, upłynął rok. W odniesieniu do sto\\xadsowanej przez gminę praktyki zawierania umów na okres 1,5 ro\\xadku zaniechano tego z końcem 1990 r. Natomiast praktyka wypo\\xadwiadania wspomnianych umów w części dotyczącej czynszu nie miała już miejsca począwszy od marca 1991 r. Z omawianych więc względów w dacie złożenia przez najemców w miesiącu kwietniu 1993 r. żądania wszczęcia postępowania administracy-\\xad\\n- 11\\njnego przeciwko gminie nie wchodziła już w grę możliwość wy\\xaddania decyzji z art. 8 ust. 1 w/w ustawy w odniesieniu do wspomnianych praktyk monopolistycznych.\\nRozpoznając w pozostałym zakresie odwołania wniesione przez najemców Sąd Antymonopolowy również nie znalazł podstaw do ich uwzględnienia. Nietrafne są w szczególności zarzuty odwołań, iż w zaskarżonej decyzji nie dostrzeżono praktyki monopolistycznej w prowadzeniu przez gminę przetargów w od\\xadniesieniu do lokali, w stosunku do których najemcom przysłu\\xadgują prawa wynikające z umowy najmu. Przeciwdziała tej prak\\xadtyce pkt I zaskarżonej decyzji, gdzie nakazano gminie zanie\\xadchanie odmowy zawierania umów najmu w formie pisemnej w od-r niesieniu do lokali udostępnianych najemcom na zasadzie bezu\\xadmownego korzystania. Rozstrzygnięcie Urzędu Antymonopolowego zgodne jest tutaj z zasadą wyrażoną wart. 674 k.c.\\nWprawdzie nie można podzielić poglądu zajętego w zaskar\\xadżonej decyzji jakoby podejmowane przez gminę, w wykonaniu przepisów gminnych, działania zmierzające do kierowania loka\\xadli użytkowych do przetargu nie podlegały ocenie ustawy anty\\xadmonopolowej. Tym niemniej, zakładając uporządkowanie gospoda\\xadrki lokalami użytkowymi w następstwie wykonania pktu I decy\\xadzji, trudno dopatrzyć się w instytucji przetargu naruszenia przepisów ustawy antymonopolowej. Jeżeli do przetargu mogą na równych prawach przystąpić wszystkie zainteresowane podmioty gospodarcze, przetarg nie narusza celów ustawy antymonopolo\\xadwej a w szczególności ochrony wolnej konkurencji.\\nSąd Antymonopolowy nie podzielił stanowiska zajętego w odwołaniuA. M., w świetle którego różnicowanie przez gminę warunków umów najmu lokali użytkowych zlokalizo\\xadwanych w centrum handlowym miasta w porównaniu do pozostałych lokali, stanowi podział rynku według kryterium terytorialnego\\n\\n - 12\\n\\nlub asortymentowego w rozumieniu art. 5 pkt 2 ustawy antymo\\xadnopolowej. Rynek w ujęciu przedmiotowym odnosi się do wszyst\\xadkich towarów jednego rodzaju, które poprzez szczególne właś\\xadciwości, w szczególności zaś przeznaczenie, użytkowość i cenę odróżniają się od innych towarów w taki sposób, że nie ist\\xadnieje możliwość dowolnej ich zamiany. Rynek pod względem przedmiotowym (asortymentowym) tworzą więc towary, które z punktu widzenia nabywcy charakteryzują się substytutywnością. Pomimo więc podobnego pod względem przedmiotowym asortymentu, lokali użytkowych zlokalizowanych w centrum handlowym miasta w porównaniu do innych lokali użytkowych w tym mieście nie można, z punktu widzenia ogółu nabywców (najemców), uznać za substytutywne. Możliwości prowadzenia działalności gospodar\\xadczej w lokalach znajdujących się w centrum handlowym miasta sa zdecydowanie korzystniejsze. Istotne jest także i to, że w warunkach gospodarki rynkowej obiektywną prawidłowością są znacznie wyższe czynsze najmu lokali użytkowych zlokalizowa\\xadnych w centrach handlowych miast w porównaniu do pozostałych lokali. Uzasadnia to traktowanie takich lokali użytkowych ja\\xadko odrębnego rynku. Z tego też względu stosowanie przez gminę innej polityki najmu w odniesieniu do tej kategorii lokali nic może być uznane jako podział rynku, lecz jako działania na dwóch odrębnych rynkach.\\nBrak jest także podstaw do uwzględnienia zarzutu odwoła\\xadnia upatrującego w odmowie sprzedaży lokali użytkowych ogra\\xadniczanie przez gminę wolnej konkurencji na rynku w świetle art. 5 pkt 1 ustawy antymonopolowej, skoro nie stanowiło to przedmiotu rozstrzygnięcia zaskarżonej decyzji, a nawet przedmiotu żądania zgłoszonego we wniosku o wszczęcie postę\\xadpowania. Formalnie rzecz biorąc nie ma przeszkód, aby wspom-\\xad\\n\\n - 13\\n\\nniany zarzut stanowił przedmiot odrębnego postępowania administracyjnego.\\nNie znajdują także uzasadnienia, podnoszone w szczególności w postępowaniu administracyjnym, żądania skierowane pod adresem Urzędu Antymonopolowego, aby ten zobowiązał gminę do renegocjowania treści umów najmu z dotychczasowymi najemcami. W świetle art. 8 ust. 1 ustawy antymonopolowej takie oczeki\\xadwania pod adresem organów działających w trybie wspomnianej ustawy, są za daleko idące. W postępowaniu administracyjnym toczącym się w trybie wspomnianej ustawy podmiotowi stosują\\xadcemu praktyki monopolistyczne można jedynie nakazać ich za\\xadniechanie. Nie można natomiast, w sposób pozytywny, nakazać podmiotowi spełnienie określonego zachowania mieszczącego się w granicach prawa. Reasumując zatem w trybie ustawy antymono\\xadpolowej można wskazać podmiotowi gospodarczemu czego ma za\\xadniechać. Natomiast nie wolno mu w prawnoprocesowych formach działania wskazać jak konkretnie ma się zachować w określonej sytuacji.\\nW tym stanie sprawy Sąd Antymonopolowy odwołania oddalił (art. 4793 1§ 1 k.p.c.).\\nO kosztach postępowania orzeczono na zasadzieart. 98 i 99 k.p.c.',\n", + " 'vol_number': 14.0,\n", + " 'vol_type': '15/450500/0005127/AmA',\n", + " 'court_name': 'Sąd Okręgowy w Warszawie',\n", + " 'department_name': 'XVII Wydział Sąd Ochrony Konkurencji i Konsumenta',\n", + " 'text_legal_bases': [{'address': 'Dz. U. z 1964 r. Nr 43, poz. 296',\n", + " 'art': 'art. 98;art. 99',\n", + " 'isap_id': 'WDU19640430296',\n", + " 'text': 'art. 98 i 99 k.p.c.',\n", + " 'title': 'Ustawa z dnia 17 listopada 1964 r. - Kodeks postępowania cywilnego'},\n", + " {'address': 'Dz. U. z 1990 r. Nr 14, poz. 88',\n", + " 'art': 'art. 4;art. 4 ust. 1;art. 4 ust. 1 pkt. 1;art. 5',\n", + " 'isap_id': 'WDU19900140088',\n", + " 'text': 'art. 4 ust. 1 pkt 1 i art. 5 ustawy z dnia 24 lutego 1990 r. o przeciwdziałaniu praktykom monopolistycznym',\n", + " 'title': 'Ustawa z dnia 24 lutego 1990 r. o przeciwdziałaniu praktykom monopolistycznym'},\n", + " {'address': 'Dz. U. z 1960 r. Nr 30, poz. 168',\n", + " 'art': 'art. 10/5;art. 10/5 § 1',\n", + " 'isap_id': 'WDU19600300168',\n", + " 'text': 'art. 10.5 §1 k.p.a.',\n", + " 'title': 'Ustawa z dnia 14 czerwca 1960 r. - Kodeks postępowania administracyjnego'},\n", + " {'address': 'Dz. U. z 1964 r. Nr 16, poz. 93',\n", + " 'art': 'art. 674',\n", + " 'isap_id': 'WDU19640160093',\n", + " 'text': 'art. 674 k.c.',\n", + " 'title': 'Ustawa z dnia 23 kwietnia 1964 r. - Kodeks cywilny'}],\n", + " 'thesis': None}\n", + "```\n", + "\n", + "
\n", + "\n", + "### Data Fields\n", + "\n", + "| Feature name | Feature description | Type |\n", + "|------------------|--------------------------------------------------------------------------------------------------|--------------------------------------------------|\n", + "| _id | unique identifier of the judgement | `string` or `None` |\n", + "| signature | signature of judgement (unique within court) | `string` or `None` |\n", + "| date | date of judgement | `datetime` (ISO format with timezone) or `None` |\n", + "| publicationDate | date of judgement publication | `datetime` (ISO format with timezone) or `None` |\n", + "| lastUpdate | date of last update of judgement | `datetime` (ISO format with timezone) or `None` |\n", + "| courtId | system unique identifier of the court | `int` or `None` |\n", + "| departmentId | system unique identifier of the court's department | `int` or `None` |\n", + "| type | type of the judgement (one of ) | `string` or `None` |\n", + "| excerpt | First 500 characters of the judgement | `string` or `None` |\n", + "| content | Full content of judgement in XML format | `string` or `None` |\n", + "| chairman | chairman judge name | `string` or `None` |\n", + "| decision | decision | `string` or `None` |\n", + "| judges | list of judge names participating in the judgement | `list[string]` or `None` |\n", + "| legalBases | legal acts which are bases for the judgement | `list[dict[str, str]]` or `None` |\n", + "| publisher | name of the person publishing the judgement | `string` or `None` |\n", + "| recorder | name of the person recording the judgement | `string` or `None` |\n", + "| reviser | name of the person revising the judgement | `string` or `None` |\n", + "| themePhrases | list of phrases representing the themes/topics of the judgement | `list[string]` or `None` |\n", + "| num_pages | number of pages in the judgement | `float` or `None` |\n", + "| text | full text of the judgement | `string` or `None` |\n", + "| vol_number | volume number | `float` or `None` |\n", + "| vol_type | type of volume | `string` or `None` |\n", + "| court_name | name of the court where the judgement was made | `string` or `None` |\n", + "| department_name | name of the department within the court where the judgement was made | `string` or `None` |\n", + "| text_legal_bases | textual representation of the legal bases for the judgement (with references to online repository | `list[dict[str, str]]` or `None` |\n", + "| thesis | thesis of the judgement | `string` or `None` |\n", + "\n", + "\n", + "### Data Splits\n", + "\n", + "This dataset is not split into subsets. The dataset has only `train` split.\n", + "\n", + "## Dataset Creation\n", + "\n", + "For details on the dataset creation, see the paper [TBA]() and the code repository [here](https://github.com/pwr-ai/JuDDGES).\n", + "\n", + "### Curation Rationale\n", + "\n", + "Created to enable cross-jurisdictional legal analytics.\n", + "\n", + "### Source Data\n", + "\n", + "#### Initial Data Collection and Normalization\n", + "\n", + "1. Download judgements metadata.\n", + "1. Download judgements text (XML content of judgements).\n", + "1. Download additional details available for each judgement.\n", + "1. Map id of courts and departments to court name.\n", + "1. Extract raw text from XML content and details of judgments not available through API.\n", + "1. For further processing prepare local dataset dump in parquet file, version it with dvc and push to remote storage.\n", + "\n", + "#### Who are the source language producers?\n", + "\n", + "Produced by human legal professionals (judges, court clerks). Demographics was not analysed. Sourced from public court databases.\n", + "\n", + "### Annotations\n", + "\n", + "#### Annotation process\n", + "\n", + "No annotation was performed by us. All features were provided via API.\n", + "\n", + "#### Who are the annotators?\n", + "\n", + "As above.\n", + "\n", + "### Personal and Sensitive Information\n", + "\n", + "Pseudoanonymized to comply with GDPR (art. 4 sec. 5 GDPR).\n", + "\n", + "## Considerations for Using the Data\n", + "\n", + "### Social Impact of Dataset\n", + "\n", + "[More Information Needed]\n", + "\n", + "### Discussion of Biases\n", + "\n", + "[More Information Needed]\n", + "\n", + "### Other Known Limitations\n", + "\n", + "[More Information Needed]\n", + "\n", + "## Additional Information\n", + "\n", + "### Dataset Curators\n", + "\n", + "[More Information Needed]\n", + "\n", + "### Licensing Information\n", + "\n", + "[More Information Needed]\n", + "\n", + "### Citation Information\n", + "\n", + "[More Information Needed]" + ] + }, + { + "cell_type": "markdown", + "id": "ac74927a24aba40b", + "metadata": {}, + "source": [ + "## Statistics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5c2f63ac", + "metadata": {}, + "outputs": [], + "source": [ + "court_distribution = raw_ds.drop_nulls(subset=\"court_name\").select(\"court_name\").group_by(\"court_name\").len().sort(\"len\", descending=True).collect().to_pandas()\n", + "ax = sns.histplot(data=court_distribution, x=\"len\", log_scale=True, kde=True)\n", + "ax.set(title=\"Distribution of judgments per court\", xlabel=\"#Judgements in single court\", ylabel=\"Count\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12acf455", + "metadata": {}, + "outputs": [], + "source": [ + "judgements_per_year = raw_ds.select(\"date\").collect()[\"date\"].str.split(\" \").list.get(0).str.to_date().dt.year().value_counts().sort(\"date\").to_pandas()\n", + "judgements_per_year = judgements_per_year[judgements_per_year[\"date\"] < 2024]\n", + "\n", + "_, ax = plt.subplots(1, 1, figsize=(10, 5))\n", + "ax = sns.pointplot(data=judgements_per_year, x=\"date\", y=\"count\", linestyles=\"--\", ax=ax)\n", + "ax.set(xlabel=\"Year\", ylabel=\"Number of Judgements\", title=\"Yearly Number of Judgements\", yscale=\"log\")\n", + "plt.xticks(rotation=90)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3df2d2fa", + "metadata": {}, + "outputs": [], + "source": [ + "types = raw_ds.fill_null(value=\"\").select(\"type\").group_by(\"type\").len().sort(\"len\", descending=True).collect().to_pandas()\n", + "\n", + "_, ax = plt.subplots(1, 1, figsize=(8, 8))\n", + "ax = sns.barplot(data=types, x=\"len\", y=\"type\", errorbar=None, ax=ax)\n", + "ax.set(xlabel=\"Count\", ylabel=\"Type\", title=\"Judgement types cardinality\", xscale=\"log\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e0801346", + "metadata": {}, + "outputs": [], + "source": [ + "num_judges = raw_ds.with_columns([pl.col(\"judges\").list.len().alias(\"num_judges\")]).select(\"num_judges\").sort(\"num_judges\").collect().to_pandas()\n", + "ax = sns.histplot(data=num_judges, x=\"num_judges\", bins=num_judges[\"num_judges\"].nunique())\n", + "ax.set(xlabel=\"#Judges per judgement\", ylabel=\"Count\", yscale=\"log\", title=\"#Judges per single judgement\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "758f41b7", + "metadata": {}, + "outputs": [], + "source": [ + "num_lb = raw_ds.with_columns([pl.col(\"legalBases\").list.len().alias(\"num_lb\")]).select(\"num_lb\").sort(\"num_lb\").collect().to_pandas()\n", + "ax = sns.histplot(data=num_lb, x=\"num_lb\", bins=num_lb[\"num_lb\"].nunique())\n", + "ax.set(xlabel=\"#Legal bases\", ylabel=\"Count\", yscale=\"log\", title=\"#Legal bases per judgement\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1f2f3de", + "metadata": {}, + "outputs": [], + "source": [ + "raw_text_ds = load_dataset(\"parquet\", data_dir=\"../../data/datasets/pl/raw/\", columns=[\"_id\", \"text\"])\n", + "raw_text_ds = raw_text_ds.filter(lambda x: x[\"text\"] is not None)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "030652c5", + "metadata": {}, + "outputs": [], + "source": [ + "tokenizer = AutoTokenizer.from_pretrained(\"meta-llama/Meta-Llama-3-8B\")\n", + "\n", + "def tokenize(batch: dict[str, list]) -> list[int]: \n", + " tokenized = tokenizer(batch[\"text\"], add_special_tokens=False, return_attention_mask=False, return_token_type_ids=False, return_length=True)\n", + " return {\"length\": tokenized[\"length\"]}\n", + "\n", + "raw_text_ds = raw_text_ds.map(tokenize, batched=True, batch_size=16, remove_columns=[\"text\"], num_proc=20)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8f46bd1", + "metadata": {}, + "outputs": [], + "source": [ + "judgement_len = raw_text_ds[\"train\"].to_pandas()\n", + "\n", + "ax = sns.histplot(data=judgement_len, x=\"length\", bins=50)\n", + "ax.set(xlabel=\"#Tokens\", ylabel=\"Count\", title=\"#Tokens distribution in judgements (llama-3 tokenizer)\", yscale=\"log\")\n", + "ax.xaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: f'{int(x/1_000)}k'))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4b180955", + "metadata": {}, + "outputs": [], + "source": [ + "per_type_tokens = raw_ds.fill_null(value=\"\").select([\"_id\", \"type\"]).collect().to_pandas().set_index(\"_id\").join(judgement_len.set_index(\"_id\"))\n", + "\n", + "_, ax = plt.subplots(1, 1, figsize=(10, 10))\n", + "ax = sns.boxenplot(data=per_type_tokens, y=\"type\", x=\"length\")\n", + "ax.set(xscale=\"log\", title=\"Judgement token count per type\", xlabel=\"#Tokens\", ylabel=\"Type\")\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3", + "language": "python", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/nbs/Data/03_Dataset_Description_Instruct.ipynb b/nbs/Data/03_Dataset_Description_Instruct.ipynb new file mode 100644 index 0000000..998b302 --- /dev/null +++ b/nbs/Data/03_Dataset_Description_Instruct.ipynb @@ -0,0 +1,419 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "initial_id", + "metadata": {}, + "outputs": [], + "source": [ + "import datasets\n", + "import transformers\n", + "import warnings\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.ticker as ticker\n", + "import pandas as pd\n", + "import polars as pl\n", + "import seaborn as sns\n", + "import yaml\n", + "from datasets import load_dataset\n", + "from transformers import AutoTokenizer\n", + "from IPython.display import display\n", + "\n", + "\n", + "warnings.filterwarnings('ignore')\n", + "sns.set_theme(\"notebook\")\n", + "transformers.logging.set_verbosity_error()\n", + "datasets.logging.set_verbosity_error()\n", + "datasets.utils.disable_progress_bars()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3105d222", + "metadata": {}, + "outputs": [], + "source": [ + "ds = load_dataset(\"JuDDGES/pl-court-instruct\") " + ] + }, + { + "cell_type": "markdown", + "id": "bac42f58ea3c3d96", + "metadata": {}, + "source": [ + "---\n", + "language: {{language}}\n", + "multilinguality: {{multilinguality}}\n", + "language_creators: {{language_creators}}\n", + "size_categories: {{size_categories}}\n", + "source_datasets: {{source_datasets}}\n", + "pretty_name: {{pretty_name}}\n", + "tags: {{tags}}\n", + "task_categories: {{task_categories}}\n", + "---" + ] + }, + { + "cell_type": "markdown", + "id": "350cb2d131ba5aeb", + "metadata": {}, + "source": [ + "# Dataset Card for [JuDDGES/pl-court-instruct](https://huggingface.co/datasets/JuDDGES/pl-court-instruct)\n", + "\n", + "## Table of Contents\n", + "- [Table of Contents](#table-of-contents)\n", + "- [Dataset Description](#dataset-description)\n", + " - [Dataset Summary](#dataset-summary)\n", + " - [Supported Tasks and Leaderboards](#supported-tasks-and-leaderboards)\n", + " - [Languages](#languages)\n", + "- [Dataset Structure](#dataset-structure)\n", + " - [Data Instances](#data-instances)\n", + " - [Data Fields](#data-fields)\n", + " - [Data Splits](#data-splits)\n", + "- [Dataset Creation](#dataset-creation)\n", + " - [Curation Rationale](#curation-rationale)\n", + " - [Source Data](#source-data)\n", + " - [Annotations](#annotations)\n", + " - [Personal and Sensitive Information](#personal-and-sensitive-information)\n", + "- [Considerations for Using the Data](#considerations-for-using-the-data)\n", + " - [Social Impact of Dataset](#social-impact-of-dataset)\n", + " - [Discussion of Biases](#discussion-of-biases)\n", + " - [Other Known Limitations](#other-known-limitations)\n", + "- [Additional Information](#additional-information)\n", + " - [Dataset Curators](#dataset-curators)\n", + " - [Licensing Information](#licensing-information)\n", + " - [Citation Information](#citation-information)\n", + " - [Contributions](#contributions)\n", + "- [Statistics](#statistics)\n", + "\n", + "## Dataset Description\n", + "\n", + "- **Homepage: TBA**\n", + "- **Repository: [github](https://github.com/pwr-ai/JuDDGES)**\n", + "- **Paper: TBA**\n", + "- **Point of Contact: lukasz.augustyniak@pwr.edu.pl; jakub.binkowski@pwr.edu.pl; albert.sawczyn@pwr.edu.pl**\n", + "\n", + "### Dataset Summary\n", + "\n", + "The dataset consists of Polish Court judgements available at https://orzeczenia.ms.gov.pl/, containing full content of the judgements along with metadata sourced from official API and extracted from the judgement contents. This dataset is designed for fine-tuning large language models (LLMs) for information extraction tasks and is formatted as instructions. For raw dataset see [`JuDDGES/pl-court-raw`](https://huggingface.co/datasets/JuDDGES/pl-court-raw). For graph dataset see [`JuDDGES/pl-court-graph`](https://huggingface.co/datasets/JuDDGES/pl-court-graph).\n", + "\n", + "### Supported Tasks and Leaderboards\n", + "\n", + "- `information-extraction`: The dataset can be used for information extraction tasks.\n", + "- `text-generation`: The dataset can be used for text generation tasks, as the dataset is formatted as instructions.\n", + "\n", + "### Languages\n", + "\n", + "pl-PL Polish \n", + "\n", + "## Dataset Structure\n", + "\n", + "### Data Instances\n", + "\n", + "
\n", + " Click to expand \n", + "\n", + "```json" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3f161970acf83cfa", + "metadata": {}, + "outputs": [], + "source": "display(ds[\"train\"][0])" + }, + { + "cell_type": "markdown", + "id": "beb7071df5232016", + "metadata": {}, + "source": [ + "```\n", + "\n", + " \n", + "
\n", + "\n", + "### Data Fields\n", + "\n", + "\n", + "| Feature name | Feature description | Type |\n", + "|------------------|-------------------------------------------------------------------------------------------------------------------------------------------|------------|\n", + "| _id | Unique identifier of the judgement | `string` |\n", + "| prompt | The prompt template provided for extracting information from the judgement. It contains placeholder `{context}` for the judgement content. | `string` |\n", + "| context | The full text content of the judgement | `string` |\n", + "| output | The extracted information in YAML format based on the provided context | `string` |\n", + "\n", + "\n", + "### Data Splits\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ee96bab3205ad17a", + "metadata": {}, + "outputs": [], + "source": [ + "data = []\n", + "for split in ds.keys():\n", + " data.append({\"split\": split, \"# samples\": len(ds[split])})\n", + "\n", + "df = pd.DataFrame(data)\n", + "df[\"% samples\"] = (df[\"# samples\"] / df[\"# samples\"].sum() * 100).round(2)\n", + "# print(df.to_markdown(index=False))" + ] + }, + { + "cell_type": "markdown", + "id": "4ee99a119109fc75", + "metadata": {}, + "source": [ + "| split | # samples | % samples |\n", + "|:--------|------------:|------------:|\n", + "| train | 238851 | 99.17 |\n", + "| test | 2000 | 0.83 |" + ] + }, + { + "cell_type": "markdown", + "id": "970a616415592b60", + "metadata": {}, + "source": [ + "\n", + "\n", + "## Dataset Creation\n", + "\n", + "For details on the dataset creation, see the paper [TBA]() and the code repository [here](https://github.com/pwr-ai/JuDDGES).\n", + "\n", + "### Curation Rationale\n", + "\n", + "Created to enable cross-jurisdictional legal analytics.\n", + "\n", + "### Source Data\n", + "\n", + "#### Initial Data Collection and Normalization\n", + "\n", + "1. Utilize the raw dataset [`JuDDGES/pl-court-raw`](https://huggingface.co/datasets/JuDDGES/pl-court-raw).\n", + "1. First, we identified information from metadata which is contained in text of the judgement. Therefore, the following fields were selected for extraction as targets:\n", + " * `date`\n", + " * `judges`\n", + " * `recorder`\n", + " * `signature`\n", + " * `court_name`\n", + " * `department_name`\n", + " * `legal_bases`\n", + "1. **Data filtering**: In order to ensure high quality of the dataset, we performed filtering procedure, as described below.\n", + " 1. Removal of judgements with missing values in targets - if any of the target field has missing value, entire judgement is discarded (information might still be contained in judgement text, and in such case the targets would be incorrect)\n", + " 1. Cleaning `judges` field - in some examples, names of judges were concatenated into single name instead of being list of names, so we split them based on conjunction\n", + " 1. Removing examples wherein targets are not in text - due to inherent errors in acquired data, some targets might be mistyped, hence we filter them out\n", + "(Data cleaning removes 173297 examples, and dataset consists of 240851.)\n", + "1. **Generating instructions**: After cleaning we generate instructions for information extraction. Specifically, we define same prompt for each document, as follows:\n", + "\n", + " ```text\n", + " You are extracting information from the Polish court judgments.\n", + " Extract specified values strictly from the provided judgement. If information is not provided in the judgement, leave the field with null value.\n", + " Please return the response in the identical YAML format:\n", + " '''yaml\n", + " court_name: \"\"\n", + " date: \n", + " department_name: \"\"\n", + " judges: \"\"\n", + " legal_bases: \n", + " recorder: \n", + " signature: \n", + " '''\n", + " =====\n", + " {context}\n", + " ======\n", + " ```\n", + " where `{context}` is replaced by text of each judgement. We highlight that judgements are in Polish, hence to foster model responding in Polish, we provide name Polish names of the field in the prompt.\n", + "\n", + "\n", + "#### Who are the source language producers?\n", + "\n", + "Produced by human legal professionals (judges, court clerks). Demographics was not analysed. Sourced from public court databases.\n", + "\n", + "### Annotations\n", + "\n", + "#### Annotation process\n", + "\n", + "No annotation was performed by us. All features were provided via API.\n", + "\n", + "#### Who are the annotators?\n", + "\n", + "As above.\n", + "\n", + "### Personal and Sensitive Information\n", + "\n", + "Pseudoanonymized to comply with GDPR (art. 4 sec. 5 GDPR).\n", + "\n", + "## Considerations for Using the Data\n", + "\n", + "### Social Impact of Dataset\n", + "\n", + "[More Information Needed]\n", + "\n", + "### Discussion of Biases\n", + "\n", + "[More Information Needed]\n", + "\n", + "### Other Known Limitations\n", + "\n", + "[More Information Needed]\n", + "\n", + "## Additional Information\n", + "\n", + "### Dataset Curators\n", + "\n", + "[More Information Needed]\n", + "\n", + "### Licensing Information\n", + "\n", + "[More Information Needed]\n", + "\n", + "### Citation Information\n", + "\n", + "[More Information Needed]" + ] + }, + { + "cell_type": "markdown", + "id": "ac74927a24aba40b", + "metadata": {}, + "source": [ + "## Statistics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd1df108f7be20e5", + "metadata": {}, + "outputs": [], + "source": [ + "data = yaml.safe_load(ds[\"train\"][\"output\"][0].replace(\"```yaml\", \"\").replace(\"```\", \"\"))\n", + "data[\"date\"] = pd.to_datetime(data[\"date\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d29a063bc04e4df5", + "metadata": {}, + "outputs": [], + "source": [ + "def parse_output(output: str) -> dict:\n", + " data = yaml.safe_load(output.replace(\"```yaml\", \"\").replace(\"```\", \"\"))\n", + " data[\"date\"] = pd.to_datetime(data[\"date\"])\n", + " return data\n", + "\n", + "ds = ds.map(parse_output, input_columns=\"output\", num_proc=20)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cd31a01d116567", + "metadata": {}, + "outputs": [], + "source": [ + "pl_ds = pl.concat([pl.from_arrow(ds[\"train\"].data.table), pl.from_arrow(ds[\"test\"].data.table)])\n", + "pl_ds = pl_ds.with_columns(pl.Series(name=\"subset\", values=[\"train\"] * len(ds[\"train\"]) + [\"test\"] * len(ds[\"test\"]))) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5c2f63ac", + "metadata": {}, + "outputs": [], + "source": [ + "court_distribution = pl_ds.select([\"subset\", \"court_name\"]).group_by([\"subset\", \"court_name\"]).len().sort(\"len\", descending=True).to_pandas()\n", + "ax = sns.histplot(data=court_distribution, x=\"len\", hue=\"subset\", log_scale=True, kde=True, stat=\"percent\", common_norm=False )\n", + "ax.set(title=\"Distribution of judgments per court\", xlabel=\"#Judgements in single court\", ylabel=\"percent\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4201a1725cbbca26", + "metadata": {}, + "outputs": [], + "source": [ + "judgements_per_year = pl_ds.select([\"subset\", \"date\"])[[\"subset\", \"date\"]]\n", + "judgements_per_year = judgements_per_year.with_columns(judgements_per_year[\"date\"].dt.year()) \n", + "judgements_per_year = judgements_per_year.group_by([\"subset\", \"date\"]).len().sort(\"date\")\n", + "judgements_per_year = judgements_per_year.to_pandas()\n", + "judgements_per_year[\"%\"] = judgements_per_year.groupby(\"subset\")[\"len\"].transform(lambda x: x / x.sum() * 100) \n", + "\n", + "_, ax = plt.subplots(1, 1, figsize=(10, 5))\n", + "ax = sns.pointplot(data=judgements_per_year, x=\"date\", y=\"%\", hue=\"subset\", linestyles=\"--\", ax=ax)\n", + "ax.set(xlabel=\"Year\", ylabel=\"% Judgements\", title=\"Yearly Number of Judgements\", yscale=\"log\")\n", + "plt.xticks(rotation=90)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e0801346", + "metadata": {}, + "outputs": [], + "source": [ + "num_judges = pl_ds.with_columns([pl.col(\"judges\").list.len().alias(\"num_judges\")]).select([\"subset\", \"num_judges\"]).to_pandas()\n", + "ax = sns.histplot(data=num_judges, x=\"num_judges\", hue=\"subset\", bins=num_judges[\"num_judges\"].nunique(), stat=\"percent\", common_norm=False)\n", + "ax.set(xlabel=\"#Judges per judgement\", ylabel=\"%\", title=\"#Judges per single judgement\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "030652c5", + "metadata": {}, + "outputs": [], + "source": [ + "tokenizer = AutoTokenizer.from_pretrained(\"meta-llama/Meta-Llama-3-8B\")\n", + "\n", + "def tokenize(batch: dict[str, list]) -> list[int]: \n", + " tokenized = tokenizer(batch[\"context\"], add_special_tokens=False, return_attention_mask=False, return_token_type_ids=False, return_length=True)\n", + " return {\"length\": tokenized[\"length\"]}\n", + "\n", + "ds = ds.map(tokenize, batched=True, batch_size=16, remove_columns=[\"context\"], num_proc=20)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8f46bd1", + "metadata": {}, + "outputs": [], + "source": [ + "context_len_train = ds[\"train\"].to_pandas()\n", + "context_len_train[\"subset\"] = \"train\"\n", + "context_len_test = ds[\"test\"].to_pandas()\n", + "context_len_test[\"subset\"] = \"test\"\n", + "context_len = pd.concat([context_len_train, context_len_test])\n", + "\n", + "ax = sns.histplot(data=context_len, x=\"length\", bins=50, hue=\"subset\")\n", + "ax.set(xlabel=\"#Tokens\", ylabel=\"Count\", title=\"#Tokens distribution in context (llama-3 tokenizer)\", yscale=\"log\")\n", + "ax.xaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: f'{int(x/1_000)}k'))\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3", + "language": "python", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/requirements.txt b/requirements.txt index 65e2238..af77995 100644 --- a/requirements.txt +++ b/requirements.txt @@ -39,7 +39,7 @@ coverage==7.4.3 dvc[s3]==3.48.3 mlflow==2.11.3 mypy==1.8.0 -nbdev==2.3.13 +nbdev==2.3.25 psycopg2-binary==2.9.9 pytest==8.0.2 ruff==0.2.2 diff --git a/scripts/README.md b/scripts/README.md index 5450353..82f914c 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -56,46 +56,56 @@ MONGO_DB_NAME="datasets" dvc add data/datasets/pl/raw/raw.parquet && dvc push ``` 7. Generate dataset card for `pl-court-raw` - ```shell - TBD - ``` - -9. Upload `pl-court-raw` dataset to huggingface ```shell - TBD + dvc repro raw_dataset_readme && dvc push ``` +9. Upload `pl-court-raw` dataset (with card) to huggingface + ```shell + PYTHONPATH=. python scripts/dataset/push_raw_dataset.py --repo-id "JuDDGES/pl-court-raw" + ``` + ### Instruction dataset -10. Generate intruction dataset and upload it to huggingface +10. Generate intruction dataset and upload it to huggingface (`pl-court-instruct`) ```shell NUM_JOBS=8 dvc repro build_instruct_dataset ``` + +11. Generate dataset card for `pl-court-instruct` + ```shell + dvc repro instruct_dataset_readme && dvc push + ``` + +12. Upload `pl-court-instruct` dataset card to huggingface + ```shell + PYTHONPATH=. scripts/dataset/push_instruct_readme.py --repo-id JuDDGES/pl-court-instruct + ``` ### Graph dataset -11. Embed judgments with pre-trained lanuage model (documents arechunked and embeddings are computed per chunk) +13. Embed judgments with pre-trained lanuage model (documents arechunked and embeddings are computed per chunk) ```shell CUDA_VISIBLE_DEVICES= dvc repro embed ``` -12. Aggregate embeddings of chunks into embeddings of document +14. Aggregate embeddings of chunks into embeddings of document ```shell NUM_PROC=4 dvc repro embed aggregate_embeddings ``` -13. Eventually ingest data to `mongodb` (e.g. for vector search) +15. Eventually ingest data to `mongodb` (e.g. for vector search) ```shell PYTHONPATH=. python scripts/embed/ingest.py --embeddings-file ``` -14. Generate graph dataset +16. Generate graph dataset ```shell dvc repro embed build_graph_dataset ``` -16. Generate dataset card and upload it to huggingface (remember to be logged in to `huggingface` or set `HUGGING_FACE_HUB_TOKEN` env variable) +17. Generate dataset card and upload it to huggingface (remember to be logged in to `huggingface` or set `HUGGING_FACE_HUB_TOKEN` env variable) ```shell PYTHONPATH=. python scripts/dataset/upload_graph_dataset.py \ --root-dir \ --repo-id JuDDGES/pl-court-graph \ --commit-message - ``` \ No newline at end of file + ``` diff --git a/scripts/dataset/push_instruct_readme.py b/scripts/dataset/push_instruct_readme.py new file mode 100644 index 0000000..c253de6 --- /dev/null +++ b/scripts/dataset/push_instruct_readme.py @@ -0,0 +1,52 @@ +from pathlib import Path +from typing import Optional + +import typer +from dotenv import load_dotenv +from huggingface_hub import DatasetCardData, DatasetCard, HfApi + +load_dotenv() + +MAX_SHARD_SIZE = "4GB" + +DATASET_CARD_TEMPLATE_DIR = Path("data/datasets/pl/readme/instruct") + + +def main( + dataset_card_template_dir: Path = typer.Option( + DATASET_CARD_TEMPLATE_DIR, + help="Path to the directory with the dataset card. It should contain a README.md file and (optionally) a README_files directory.", + ), + repo_id: Optional[str] = typer.Option(...), + branch: Optional[str] = typer.Option(None, help="Branch to push the dataset to"), +) -> None: + assert any(file.name == "README.md" for file in dataset_card_template_dir.iterdir()) + assert any(file.name == "README_files" for file in dataset_card_template_dir.iterdir()) + + card_data = DatasetCardData( + language="pl", + multilinguality="monolingual", + size_categories="100K None: + logger.info("Loading dataset...") + ds = load_dataset("parquet", name="pl_judgements", data_dir=dataset_dir) + + num_rows = ds["train"].num_rows + logger.info(f"Loaded dataset size: {num_rows}") + + ds.push_to_hub(repo_id, max_shard_size=MAX_SHARD_SIZE, revision=branch) + + # Card creation + + assert 100_000 < num_rows < 1_000_000 + card_data = DatasetCardData( + language="pl", + multilinguality="monolingual", + size_categories="100K