xefr762 commited on
Commit
fafbbd5
·
1 Parent(s): c127fa7

add all files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ data/embeddings filter=lfs diff=lfs merge=lfs -text
37
+ data/movie_data.csv filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,13 +1,58 @@
1
- ---
2
- title: Movie Finder
3
- emoji: ⚡
4
- colorFrom: pink
5
- colorTo: indigo
6
- sdk: streamlit
7
- sdk_version: 1.42.2
8
- app_file: app.py
9
- pinned: false
10
- short_description: Find your own movie by description
11
- ---
12
-
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Semantic-Search
2
+ Семантический поиск фильмов
3
+ https://...streamlit.app/...
4
+
5
+ ## Описание
6
+ Разработать систему поиска фильма по пользовательскому запросу. Сервис должен принимать на вход описание фильма от пользователя и возвращать заданное количество подходящих вариантов.
7
+
8
+ Совет от LLM к просмотру фильма, возможность получать краткое содержание сюжета фильма (Sber GigaChat)
9
+
10
+ Случайные фильмы - возвращает случайные 10 позиций из csv-файла формате: название фильма – описание
11
+
12
+ ## Структура проекта
13
+
14
+ (Основная структура на данный момент - будет докручиваться по мере дальнейшего развития проекта)
15
+
16
+ - **data/** - папка с данными парсинга и эмбедингами
17
+ - **images/** - папка с используемыми в streamlit иллюстрациями
18
+ - **notebooks/** - папка с кодом создания и настройки моделей
19
+ - **app_pages/** - папка со страницами для Streamlit
20
+ - **funcs/** - папка со вспомогательными функциями для Streamlit
21
+ - **main.py** - основной файл для запуска приложения Streamlit
22
+ - **README.md** - файл описания проекта
23
+ - **.gitignrore** - игнорируемые для загрузки файлы
24
+ - **requirements.txt** - файл с зависимостями для установки окружения
25
+
26
+ ## Команда
27
+ - [Нанзат](https://github.com/nanzat)
28
+ - [Илья](https://github.com/xefr762)
29
+ - [Миша](https://github.com/allspicepaege)
30
+
31
+ ## Установка
32
+
33
+ 1. Клонируйте репозиторий:
34
+
35
+ git clone https://github.com/xefr762/Semantic-Search
36
+ cd Semantic-Search
37
+
38
+ 2. Создайте виртуальное окружение:
39
+
40
+ python -m venv .myenv
41
+ source .myenv/bin/activate
42
+
43
+
44
+ 3. Установите необходимые зависимости:
45
+
46
+ pip install -r requirements.txt
47
+
48
+
49
+ 4. Установите Git LFS:
50
+
51
+ git lfs install
52
+ git lfs track '*.pt'
53
+
54
+ ## Использование
55
+
56
+ 1. Запустите приложение Streamlit:
57
+
58
+ streamlit run app.py
app.py ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+
3
+ st.set_page_config(page_title="Семантический поиск кино", page_icon="🎦", layout='wide')
4
+
5
+ if "page" not in st.session_state:
6
+ st.session_state.page = "Главная"
7
+
8
+ def go_to(page):
9
+ st.session_state.page = page
10
+
11
+ st.sidebar.title("📌 Меню")
12
+ st.sidebar.button("🏠 Главная", on_click=lambda: go_to("Главная"), use_container_width=True)
13
+ st.sidebar.button("🎰 Сходить к тарологу", on_click=lambda: go_to("Рандом"), use_container_width=True)
14
+ st.sidebar.button("🎬 Подбор фильма по запросу", on_click=lambda: go_to("Подбор"), use_container_width=True)
15
+ st.sidebar.button("🤖 Подбор фильма с GPT", on_click=lambda: go_to("Генерация"), use_container_width=True)
16
+
17
+ if st.session_state.page == "Главная":
18
+ st.title("Семантический поиск кино")
19
+ st.markdown("""
20
+ ## Добро пожаловать на главную страницу приложения по подбору фильмов!
21
+
22
+ **Описание:**
23
+ - **Главная страница**: Общая информация и навигация 🌌
24
+ - **Release 1.0**: 🍀 Рандомный выбор 10 фильмов, испытай свою удачу! 🎰
25
+ - **Release 2.0**: Подбор кино по запросу 👀
26
+ - **Release 3.0**: Подбор кино на по запросу с использованием GPT 🥂
27
+ Переключайтесь между страницами через левый сайдбар!
28
+ """)
29
+
30
+ elif st.session_state.page == "Рандом":
31
+ from app_pages import random_selection
32
+ random_selection.run()
33
+ elif st.session_state.page == "Подбор":
34
+ from app_pages import bert
35
+ bert.run()
36
+ elif st.session_state.page == "Генерация":
37
+ from app_pages import gpt_generation
38
+ gpt_generation.run()
app_pages/bert.py ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import numpy as np
4
+ import pickle
5
+
6
+ from funcs.preproc import *
7
+
8
+ def run():
9
+
10
+ st.subheader('Подбор фильма по запросу, но с секретом!')
11
+ nlp, morph = load_models()
12
+ user_text = st.text_input('Введите запрос на желаемый фильм')
13
+
14
+ def display_movie_card(row):
15
+ st.markdown(
16
+ f"""
17
+ **{row['title']}**\n
18
+ *Описание:* {row['description']}\n
19
+ *Год:* {row['year']}\n
20
+ *Актеры:* {row['actors']}\n
21
+ *Сходство:* {row['similarity']:.4f}\n
22
+ {"----------"}
23
+ """
24
+ )
25
+
26
+ left, middle, right = st.columns(3)
27
+ if middle.button('Получить топ фильмов по-моему запросу', icon="👀", use_container_width=True):
28
+ if user_text: # Проверяем, что поле ввода не пустое
29
+ result = search_movie(user_text)
30
+ output = sort_by_entities(result, user_text, morph, nlp)
31
+ output = output[['title', 'year', 'actors', 'description', 'similarity']]
32
+ #st.write('Предлагаю посмотреть вам следующие фильмы:')
33
+ #for index, rows in output.iterrows():
34
+ # st.write(rows)
35
+ for index, row in output.iterrows():
36
+ display_movie_card(row)
37
+
38
+ else:
39
+ st.warning("Пожалуйста, введите свой запрос на фильм.")
app_pages/gpt_generation.py ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+
3
+ ###########################
4
+ ### Пишем функцию работы ГПТ
5
+ ###########################
6
+ from funcs.try_gpt import ask_gigachat
7
+
8
+ def run():
9
+ ###########################
10
+ ### Блок описания страницы
11
+ ###########################
12
+ st.subheader('Привет, путник! На этой странице ты найдёшь ответы на все свои запросы и пожелания по фильмам, не стесняйся, задавай вопрос ниже!')
13
+
14
+ user_text = st.text_input('Введите свой запрос на фильм')
15
+
16
+ # Добавляем кнопку для получения ответа
17
+ left, middle, right = st.columns(3)
18
+ if middle.button('Смотреть фильм', icon="👀", use_container_width=True):
19
+ if user_text: # Проверяем, что поле ввода не пустое
20
+ resp = ask_gigachat(user_text)
21
+ st.write('Предлагаю посмотреть вам следующие фильмы:')
22
+ st.markdown(f"""
23
+ <h2 style='text-align: center; color:#3262a8; font-size: 30px; font-weight: bold; padding: 10px; border-radius:10px;'>
24
+ {resp}
25
+ </h2>
26
+ """, unsafe_allow_html=True)
27
+ else:
28
+ st.warning("Пожалуйста, введите свой запрос на фильм.")
app_pages/random_selection.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import random
4
+
5
+ @st.cache_data
6
+ def load_df():
7
+ path = 'data/movie_data.csv'
8
+ df = pd.read_csv(path)
9
+ df = df[['title_full', 'description']]
10
+ return df
11
+
12
+ def run():
13
+ # read df
14
+ df = load_df()
15
+
16
+ # Функция генерации и вывода 10 рандомных фильмов из датафрейма
17
+ #l, mid, r = st.columns(3)
18
+ st.subheader('Привет, ты решил испытать удачу, и посмотреть 10 случайных фильмов. Вот твоя топовая подборка на сегодня!')
19
+
20
+ def random_generator(df: pd.DataFrame):
21
+ return df.sample(10).reset_index(drop=True)
22
+
23
+ if not st.session_state:
24
+ st.session_state['rand_movies'] = random_generator(df)
25
+
26
+ left, middle, right = st.columns(3)
27
+ if middle.button('Крутите барабан', icon="🎰", use_container_width=True):
28
+ st.session_state['rand_movies'] = random_generator(df)
29
+
30
+ output = st.session_state['rand_movies']
31
+
32
+ row1 = st.columns(3)
33
+ row2 = st.columns(3)
34
+ row3 = st.columns(3)
35
+
36
+ rows = row1 + row2 + row3
37
+
38
+ for i, (col, (_, movie)) in enumerate(zip(rows, output.iterrows())):
39
+ key = f"key_{i}" # Уникальный ключ для состояния
40
+
41
+ if key not in st.session_state:
42
+ st.session_state[key] = False
43
+
44
+ expanded = st.session_state[key]
45
+ height = 330 if expanded else 180
46
+ tile = col.container(height=height)
47
+
48
+ tile.subheader(f"🎬 {movie['title_full']}")
49
+
50
+ def toggle_description(k=key): # Функция, изменяющая "состояние" кнопки
51
+ st.session_state[k] = not st.session_state[k]
52
+
53
+ tile.button(
54
+ "🔍 Описание",
55
+ key=f"btn_{i}", # Отдельный ключ под кнопочку
56
+ on_click=toggle_description
57
+ )
58
+ if expanded:
59
+ tile.write(movie['description'])
data/embeddings ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:df7a0ec930ef0cedd3b8f7ca220cef078c5395a78baf42862e41ea54b12f14e8
3
+ size 82376807
data/movie_data.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:428e982bba0db036fe626e74672e47a306bfc14052ac99a5c43e457ffd8b0b16
3
+ size 76470740
funcs/preproc.py ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
+ import pandas as pd
3
+ import numpy as np
4
+ from sentence_transformers import util
5
+ import torch
6
+ from transformers import AutoTokenizer, AutoModel
7
+ from tqdm import tqdm
8
+ tqdm.pandas()
9
+ from sklearn.metrics.pairwise import cosine_similarity
10
+ import pickle
11
+ import streamlit as st
12
+ import spacy
13
+ import pymorphy3
14
+
15
+ if torch.cuda.is_available():
16
+ print("CUDA доступна!")
17
+ device = torch.device("cuda")
18
+ else:
19
+ print("CUDA недоступна. Вычисления будут выполняться на CPU.")
20
+ device = torch.device("cpu")
21
+
22
+ max_length = 512
23
+ @st.cache_data
24
+ def load_models():
25
+ # Создание объекта для морфологического анализа
26
+ morph = pymorphy3.MorphAnalyzer()
27
+ # Загрузка модели spaCy для русского языка
28
+ nlp = spacy.load("ru_core_news_lg")
29
+ return nlp, morph
30
+
31
+ def get_df():
32
+ df = pd.read_csv('/home/marena/Elbrus_phase_2/Semantic-Search/data/movie_data.csv')
33
+ df['all_text'] = df.apply(lambda row: f"{row['title']} {row['genre']} {row['director']} {row['actors']} {row['description']}", axis=1)
34
+ df['all_text'][0]
35
+ return df
36
+
37
+ @st.cache_data
38
+ def autobot():
39
+ model = AutoModel.from_pretrained('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2').to(device).half()
40
+ return model
41
+ @st.cache_data
42
+ def token():
43
+ tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2', truncation=True, max_length=max_length)
44
+ return tokenizer
45
+
46
+ def mean_pooling(model_output, attention_mask):
47
+ token_embeddings = model_output[0]
48
+ input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
49
+ return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
50
+
51
+ @st.cache_data
52
+ def get_sentence_embedding(text):
53
+ tokenizer = token()
54
+ model = autobot()
55
+ inputs = tokenizer(text, return_tensors='pt', truncation=True, padding=True).to(device)
56
+ with torch.amp.autocast('cuda'):
57
+ with torch.no_grad():
58
+ outputs = model(**inputs)
59
+ embeddings = mean_pooling(outputs, inputs['attention_mask']).cpu().numpy()[0] # Удаление лишней размерности [0]
60
+ return embeddings
61
+
62
+ @st.cache_data
63
+ def get_embs():
64
+ with open('/home/marena/Elbrus_phase_2/Semantic-Search/data/embeddings', 'rb') as file:
65
+ embeddings = pickle.load(file)
66
+ return embeddings
67
+
68
+ def search_movie(query, top_k=8, year=None):
69
+ query_embedding = get_sentence_embedding(query)
70
+ embeddings = get_embs()
71
+ df = get_df()
72
+ cos_scores = torch.nn.functional.cosine_similarity(torch.tensor(query_embedding), torch.tensor(embeddings))
73
+ df['similarity'] = cos_scores.tolist()
74
+ res = df.sort_values(by='similarity', ascending=False)
75
+ if year:
76
+ res = res[res['year'] == year]
77
+ return res.head(top_k)
78
+
79
+
80
+
81
+
82
+ def sort_by_entities(df: pd.DataFrame, text: str, morph: pymorphy3.analyzer.MorphAnalyzer, nlp):
83
+ genres = {'аниме',
84
+ 'биография',
85
+ 'боевик',
86
+ 'вестерн',
87
+ 'военный',
88
+ 'детектив',
89
+ 'детский',
90
+ 'документальный',
91
+ 'драма',
92
+ 'исторический',
93
+ 'комедия',
94
+ 'короткометражный',
95
+ 'криминал',
96
+ 'мелодрама',
97
+ 'музыкальный',
98
+ 'мультфильмы',
99
+ 'мюзикл',
100
+ 'приключения',
101
+ 'семейный',
102
+ 'спорт',
103
+ 'триллер',
104
+ 'ужасы',
105
+ 'фантастика',
106
+ 'фэнтези',
107
+ 'эротика'}
108
+ # Обработка текста
109
+ doc = nlp(text)
110
+
111
+ # Извлечение сущностей
112
+ entities = [entity.text for entity in doc.ents if entity.label_ == "PER"]
113
+
114
+ persons = []
115
+ for entity in entities:
116
+ persons.append(" ".join([morph.parse(person)[0].normal_form for person in entity.split()]))
117
+
118
+ conditions = []
119
+ for person in persons:
120
+ for word in person.split(" "):
121
+ if len(word) > 3:
122
+ word = word[:-1]
123
+ conditions.append(df["actors"].str.contains(word, na=False, case=False))
124
+ conditions.append(df["director"].str.contains(word, na=False, case=False))
125
+
126
+ combined_condition = pd.Series([False] * len(df), index=df.index)
127
+ if len(conditions) > 1:
128
+ combined_condition = conditions[0]
129
+ for condition in conditions[1:]:
130
+ combined_condition |= condition
131
+
132
+ search_genre = []
133
+ for genre in genres:
134
+ if genre in text.lower():
135
+ search_genre.append(df[genre] == 1)
136
+
137
+ if len(search_genre) > 0:
138
+ for condition in search_genre:
139
+ combined_condition |= condition
140
+
141
+ if len(search_genre) + len(persons) > 0:
142
+ filtered = pd.concat([df[combined_condition], df[~combined_condition]])
143
+ else:
144
+ filtered = df
145
+ return filtered
funcs/try_gpt.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain_gigachat.chat_models import GigaChat
2
+ from langchain_core.messages import HumanMessage
3
+ import os
4
+
5
+ def ask_gigachat(user_message, credentials=os.environ.get("API_KEY")):
6
+ # Инициализация GigaChat
7
+ giga = GigaChat(
8
+ model="GigaChat",
9
+ credentials=credentials,
10
+ verify_ssl_certs=False,
11
+ temperature=0.7,
12
+ MaxTokens=300,
13
+ profanity_check=True
14
+ )
15
+
16
+ # Создание списка сообщений
17
+ messages = [
18
+ {
19
+ "role": "system",
20
+ "content": 'Ты эксперт по кинематографу. Рекомендуй только лучшие фильмы, под запрос пользователя. Отвечай коротко и лаконично в формате "Название" - короткое описание'
21
+ },
22
+ HumanMessage(
23
+ content=user_message
24
+ )
25
+ ]
26
+
27
+ # Получение ответа
28
+ response = giga.invoke(messages)
29
+
30
+ return response.content
images/architecture.png ADDED
images/mock.png ADDED
requirements.txt ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ accelerate==1.4.0
2
+ aiohappyeyeballs==2.4.6
3
+ aiohttp==3.11.12
4
+ aiosignal==1.3.2
5
+ altair==5.5.0
6
+ annotated-types==0.7.0
7
+ anyio==4.8.0
8
+ asttokens==3.0.0
9
+ async-timeout==5.0.1
10
+ attrs==25.1.0
11
+ beautifulsoup4==4.13.3
12
+ bitsandbytes==0.45.2
13
+ blinker==1.9.0
14
+ blis==1.2.0
15
+ Brotli==1.1.0
16
+ cachetools==5.5.2
17
+ catalogue==2.0.10
18
+ catboost==1.2.7
19
+ certifi==2025.1.31
20
+ cffi==1.17.1
21
+ charset-normalizer==3.4.1
22
+ click==8.1.8
23
+ cloudpathlib==0.20.0
24
+ colorama==0.4.6
25
+ comm==0.2.2
26
+ confection==0.1.5
27
+ contourpy==1.3.1
28
+ cut-cross-entropy==25.1.1
29
+ cycler==0.12.1
30
+ cymem==2.0.11
31
+ datasets==3.3.2
32
+ DAWG-Python==0.7.2
33
+ DAWG2-Python==0.9.0
34
+ debugpy==1.8.12
35
+ decorator==5.1.1
36
+ diffusers==0.32.2
37
+ dill==0.3.8
38
+ distro==1.9.0
39
+ docopt==0.6.2
40
+ docstring_parser==0.16
41
+ exceptiongroup==1.2.2
42
+ executing==2.1.0
43
+ filelock==3.17.0
44
+ filetype==1.2.0
45
+ fonttools==4.55.8
46
+ frozenlist==1.5.0
47
+ fsspec==2024.12.0
48
+ gensim==4.3.3
49
+ gigachat==0.1.38
50
+ gitdb==4.0.12
51
+ GitPython==3.1.44
52
+ graphviz==0.20.3
53
+ h11==0.14.0
54
+ h2==4.2.0
55
+ hf_transfer==0.1.9
56
+ hpack==4.1.0
57
+ httpcore==1.0.7
58
+ httpx==0.27.2
59
+ huggingface-hub==0.29.0
60
+ hyperframe==6.1.0
61
+ idna==3.10
62
+ imbalanced-learn==0.13.0
63
+ imblearn==0.0
64
+ importlib_metadata==8.6.1
65
+ ipykernel==6.29.5
66
+ ipython==8.32.0
67
+ jedi==0.19.2
68
+ Jinja2==3.1.5
69
+ jiter==0.8.2
70
+ joblib==1.4.2
71
+ jsonpatch==1.33
72
+ jsonpointer==3.0.0
73
+ jsonschema==4.23.0
74
+ jsonschema-specifications==2024.10.1
75
+ jupyter_client==8.6.3
76
+ jupyter_core==5.7.2
77
+ kiwisolver==1.4.7
78
+ langchain-core==0.3.40
79
+ langchain-gigachat==0.3.4
80
+ langcodes==3.5.0
81
+ langsmith==0.3.11
82
+ language_data==1.3.0
83
+ lightning-utilities==0.12.0
84
+ marisa-trie==1.2.1
85
+ markdown-it-py==3.0.0
86
+ MarkupSafe==3.0.2
87
+ matplotlib==3.10.0
88
+ matplotlib-inline==0.1.7
89
+ mdurl==0.1.2
90
+ mplcyberpunk==0.7.5
91
+ mpmath==1.3.0
92
+ multidict==6.1.0
93
+ multiprocess==0.70.16
94
+ munkres==1.1.4
95
+ murmurhash==1.0.12
96
+ narwhals==1.27.1
97
+ nest_asyncio==1.6.0
98
+ networkx==3.4.2
99
+ nltk==3.9.1
100
+ numpy==1.26.4
101
+ nvidia-cublas-cu12==12.4.5.8
102
+ nvidia-cuda-cupti-cu12==12.4.127
103
+ nvidia-cuda-nvrtc-cu12==12.4.127
104
+ nvidia-cuda-runtime-cu12==12.4.127
105
+ nvidia-cudnn-cu12==9.1.0.70
106
+ nvidia-cufft-cu12==11.2.1.3
107
+ nvidia-curand-cu12==10.3.5.147
108
+ nvidia-cusolver-cu12==11.6.1.9
109
+ nvidia-cusparse-cu12==12.3.1.170
110
+ nvidia-cusparselt-cu12==0.6.2
111
+ nvidia-nccl-cu12==2.21.5
112
+ nvidia-nvjitlink-cu12==12.4.127
113
+ nvidia-nvtx-cu12==12.4.127
114
+ opencv-python==4.11.0
115
+ opencv-python-headless==4.11.0
116
+ orjson==3.10.15
117
+ packaging==24.2
118
+ pandas==2.2.3
119
+ parso==0.8.4
120
+ patsy==1.0.1
121
+ peft==0.14.0
122
+ pexpect==4.9.0
123
+ pickleshare==0.7.5
124
+ pillow==11.1.0
125
+ pip==25.0
126
+ platformdirs==4.3.6
127
+ plotly==6.0.0
128
+ preshed==3.0.9
129
+ prompt_toolkit==3.0.50
130
+ propcache==0.3.0
131
+ protobuf==3.20.3
132
+ psutil==6.1.1
133
+ ptyprocess==0.7.0
134
+ pure_eval==0.2.3
135
+ py-cpuinfo==9.0.0
136
+ pyarrow==19.0.1
137
+ pycparser==2.22
138
+ pydantic==2.10.6
139
+ pydantic_core==2.27.2
140
+ pydeck==0.9.1
141
+ Pygments==2.19.1
142
+ pymorphy2==0.9.1
143
+ pymorphy2-dicts-ru==2.4.417127.4579844
144
+ pymorphy3==2.0.3
145
+ pymorphy3-dicts-ru==2.4.417150.4580142
146
+ pyparsing==3.2.1
147
+ PySide6==6.8.2
148
+ PySocks==1.7.1
149
+ python-dateutil==2.9.0.post0
150
+ python-dotenv==1.0.1
151
+ pytz==2024.1
152
+ PyYAML==6.0.2
153
+ pyzmq==26.2.1
154
+ referencing==0.36.2
155
+ regex==2024.11.6
156
+ requests==2.32.3
157
+ requests-toolbelt==1.0.0
158
+ rich==13.9.4
159
+ rpds-py==0.23.1
160
+ ru_core_news_lg==3.8.0
161
+ safetensors==0.5.2
162
+ scikit-learn==1.6.1
163
+ scipy==1.15.1
164
+ seaborn==0.13.2
165
+ sentence-transformers==3.4.1
166
+ sentencepiece==0.2.0
167
+ setuptools==75.8.0
168
+ shellingham==1.5.4
169
+ shiboken6==6.8.2
170
+ shtab==1.7.1
171
+ six==1.17.0
172
+ sklearn-compat==0.1.3
173
+ smart_open==7.1.0
174
+ smmap==5.0.2
175
+ sniffio==1.3.1
176
+ soupsieve==2.6
177
+ spacy==3.8.4
178
+ spacy-legacy==3.0.12
179
+ spacy-loggers==1.0.5
180
+ srsly==2.5.1
181
+ stack_data==0.6.3
182
+ statsmodels==0.14.4
183
+ streamlit==1.42.2
184
+ sympy==1.13.1
185
+ tenacity==9.0.0
186
+ thinc==8.3.4
187
+ threadpoolctl==3.5.0
188
+ tokenizers==0.21.0
189
+ toml==0.10.2
190
+ torch==2.6.0
191
+ torchaudio==2.6.0
192
+ torchmetrics==1.6.1
193
+ torchutils==0.0.4
194
+ torchvision==0.21.0
195
+ tornado==6.4.2
196
+ tqdm==4.67.1
197
+ traitlets==5.14.3
198
+ transformers==4.49.0
199
+ triton==3.2.0
200
+ trl==0.15.1
201
+ typeguard==4.4.2
202
+ typer==0.15.2
203
+ types-requests==2.32.0.20241016
204
+ typing_extensions==4.12.2
205
+ tyro==0.9.16
206
+ tzdata==2025.1
207
+ ultralytics==8.3.74
208
+ ultralytics-thop==2.0.14
209
+ unicodedata2==16.0.0
210
+ unsloth==2025.2.15
211
+ unsloth_zoo==2025.2.7
212
+ urllib3==2.3.0
213
+ wasabi==1.1.3
214
+ watchdog==6.0.0
215
+ wcwidth==0.2.13
216
+ weasel==0.4.1
217
+ wheel==0.45.1
218
+ wrapt==1.17.2
219
+ xformers==0.0.29.post3
220
+ xgboost==2.1.4
221
+ xxhash==3.5.0
222
+ yarl==1.18.3
223
+ zipp==3.21.0
224
+ zstandard==0.23.0
requirements.yml ADDED
@@ -0,0 +1,442 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file may be used to create an environment using:
2
+ # $ conda create --name <env> --file <this file>
3
+ # platform: linux-64
4
+ # created-by: conda 24.11.3
5
+ _libgcc_mutex=0.1=conda_forge
6
+ _openmp_mutex=4.5=2_gnu
7
+ _py-xgboost-mutex=2.0=gpu_0
8
+ accelerate=1.4.0=pypi_0
9
+ adwaita-icon-theme=47.0=unix_0
10
+ aiohappyeyeballs=2.4.6=pypi_0
11
+ aiohttp=3.11.12=pypi_0
12
+ aiosignal=1.3.2=pypi_0
13
+ alsa-lib=1.2.13=hb9d3cd8_0
14
+ altair=5.5.0=pypi_0
15
+ annotated-types=0.7.0=pypi_0
16
+ anyio=4.8.0=pypi_0
17
+ aom=3.9.1=hac33072_0
18
+ asttokens=3.0.0=pyhd8ed1ab_1
19
+ async-timeout=5.0.1=pypi_0
20
+ at-spi2-atk=2.38.0=h0630a04_3
21
+ at-spi2-core=2.40.3=h0630a04_0
22
+ atk-1.0=2.38.0=h04ea711_2
23
+ attr=2.5.1=h166bdaf_1
24
+ attrs=25.1.0=pypi_0
25
+ beautifulsoup4=4.13.3=pypi_0
26
+ bitsandbytes=0.45.2=pypi_0
27
+ blinker=1.9.0=pypi_0
28
+ blis=1.2.0=pypi_0
29
+ brotli=1.1.0=hb9d3cd8_2
30
+ brotli-bin=1.1.0=hb9d3cd8_2
31
+ brotli-python=1.1.0=py310hf71b8c6_2
32
+ bzip2=1.0.8=h4bc722e_7
33
+ c-ares=1.34.4=hb9d3cd8_0
34
+ ca-certificates=2025.1.31=hbcca054_0
35
+ cachetools=5.5.2=pypi_0
36
+ cairo=1.18.2=h3394656_1
37
+ catalogue=2.0.10=pypi_0
38
+ catboost=1.2.7=cuda118_py310h6c6dcf6_1
39
+ certifi=2025.1.31=pyhd8ed1ab_0
40
+ cffi=1.17.1=py310h8deb56e_0
41
+ charset-normalizer=3.4.1=pyhd8ed1ab_0
42
+ click=8.1.8=pyh707e725_0
43
+ cloudpathlib=0.20.0=pypi_0
44
+ colorama=0.4.6=pyhd8ed1ab_1
45
+ comm=0.2.2=pyhd8ed1ab_1
46
+ confection=0.1.5=pypi_0
47
+ contourpy=1.3.1=py310h3788b33_0
48
+ cuda-version=11.8=h70ddcb2_3
49
+ cudatoolkit=11.8.0=h4ba93d1_13
50
+ cut-cross-entropy=25.1.1=pypi_0
51
+ cycler=0.12.1=pyhd8ed1ab_1
52
+ cymem=2.0.11=pypi_0
53
+ cyrus-sasl=2.1.27=h54b06d7_7
54
+ datasets=3.3.2=pypi_0
55
+ dav1d=1.2.1=hd590300_0
56
+ dawg-python=0.7.2=pyhd8ed1ab_0
57
+ dawg2-python=0.9.0=pypi_0
58
+ dbus=1.13.6=h5008d03_3
59
+ debugpy=1.8.12=py310hf71b8c6_0
60
+ decorator=5.1.1=pyhd8ed1ab_1
61
+ diffusers=0.32.2=pypi_0
62
+ dill=0.3.8=pypi_0
63
+ distro=1.9.0=pypi_0
64
+ docopt=0.6.2=pyhd8ed1ab_2
65
+ docstring-parser=0.16=pypi_0
66
+ double-conversion=3.3.0=h59595ed_0
67
+ epoxy=1.5.10=h166bdaf_1
68
+ exceptiongroup=1.2.2=pyhd8ed1ab_1
69
+ executing=2.1.0=pyhd8ed1ab_1
70
+ expat=2.6.4=h5888daf_0
71
+ ffmpeg=7.1.0=gpl_hc48164c_711
72
+ filelock=3.17.0=pypi_0
73
+ filetype=1.2.0=pypi_0
74
+ font-ttf-dejavu-sans-mono=2.37=hab24e00_0
75
+ font-ttf-inconsolata=3.000=h77eed37_0
76
+ font-ttf-source-code-pro=2.038=h77eed37_0
77
+ font-ttf-ubuntu=0.83=h77eed37_3
78
+ fontconfig=2.15.0=h7e30c49_1
79
+ fonts-conda-ecosystem=1=0
80
+ fonts-conda-forge=1=0
81
+ fonttools=4.55.8=py310h89163eb_0
82
+ freeglut=3.2.2=ha6d2627_3
83
+ freetype=2.12.1=h267a509_2
84
+ fribidi=1.0.10=h36c2ea0_0
85
+ frozenlist=1.5.0=pypi_0
86
+ fsspec=2024.12.0=pypi_0
87
+ gdk-pixbuf=2.42.12=hb9ae30d_0
88
+ gensim=4.3.3=py310h27b3328_0
89
+ gettext=0.23.1=h5888daf_0
90
+ gettext-tools=0.23.1=h5888daf_0
91
+ gigachat=0.1.38=pypi_0
92
+ gitdb=4.0.12=pypi_0
93
+ gitpython=3.1.44=pypi_0
94
+ glib-tools=2.82.2=h4833e2c_1
95
+ gmp=6.3.0=hac33072_2
96
+ graphite2=1.3.13=h59595ed_1003
97
+ graphviz=12.2.1=h5ae0cbf_1
98
+ gtk3=3.24.43=h021d004_3
99
+ gts=0.7.6=h977cf35_4
100
+ h11=0.14.0=pypi_0
101
+ h2=4.2.0=pyhd8ed1ab_0
102
+ harfbuzz=10.2.0=h4bba637_0
103
+ hdf5=1.14.3=nompi_h2d575fe_109
104
+ hf-transfer=0.1.9=pypi_0
105
+ hicolor-icon-theme=0.17=ha770c72_2
106
+ hpack=4.1.0=pyhd8ed1ab_0
107
+ httpcore=1.0.7=pypi_0
108
+ httpx=0.27.2=pypi_0
109
+ huggingface-hub=0.29.0=pypi_0
110
+ hyperframe=6.1.0=pyhd8ed1ab_0
111
+ icu=75.1=he02047a_0
112
+ idna=3.10=pyhd8ed1ab_1
113
+ imath=3.1.12=h7955e40_0
114
+ imbalanced-learn=0.13.0=pypi_0
115
+ imblearn=0.0=pypi_0
116
+ importlib-metadata=8.6.1=pyha770c72_0
117
+ ipykernel=6.29.5=pyh3099207_0
118
+ ipython=8.32.0=pyh907856f_0
119
+ jasper=4.2.4=h536e39c_0
120
+ jedi=0.19.2=pyhd8ed1ab_1
121
+ jinja2=3.1.5=pypi_0
122
+ jiter=0.8.2=pypi_0
123
+ joblib=1.4.2=pyhd8ed1ab_1
124
+ jsonpatch=1.33=pypi_0
125
+ jsonpointer=3.0.0=pypi_0
126
+ jsonschema=4.23.0=pypi_0
127
+ jsonschema-specifications=2024.10.1=pypi_0
128
+ jupyter_client=8.6.3=pyhd8ed1ab_1
129
+ jupyter_core=5.7.2=pyh31011fe_1
130
+ kernel-headers_linux-64=3.10.0=he073ed8_18
131
+ keyutils=1.6.1=h166bdaf_0
132
+ kiwisolver=1.4.7=py310h3788b33_0
133
+ krb5=1.21.3=h659f571_0
134
+ lame=3.100=h166bdaf_1003
135
+ langchain-core=0.3.40=pypi_0
136
+ langchain-gigachat=0.3.4=pypi_0
137
+ langcodes=3.5.0=pypi_0
138
+ langsmith=0.3.11=pypi_0
139
+ language-data=1.3.0=pypi_0
140
+ lcms2=2.16=hb7c19ff_0
141
+ ld_impl_linux-64=2.43=h712a8e2_2
142
+ lerc=4.0.0=h27087fc_0
143
+ level-zero=1.20.4=h84d6215_0
144
+ libabseil=20240722.0=cxx17_hbbce691_4
145
+ libaec=1.1.3=h59595ed_0
146
+ libasprintf=0.23.1=h8e693c7_0
147
+ libasprintf-devel=0.23.1=h8e693c7_0
148
+ libass=0.17.3=hba53ac1_1
149
+ libavif16=1.1.1=h1909e37_2
150
+ libblas=3.9.0=28_h59b9bed_openblas
151
+ libbrotlicommon=1.1.0=hb9d3cd8_2
152
+ libbrotlidec=1.1.0=hb9d3cd8_2
153
+ libbrotlienc=1.1.0=hb9d3cd8_2
154
+ libcap=2.71=h39aace5_0
155
+ libcblas=3.9.0=28_he106b2a_openblas
156
+ libclang-cpp19.1=19.1.7=default_hb5137d0_1
157
+ libclang13=19.1.7=default_h9c6a7e4_1
158
+ libcups=2.3.3=h4637d8d_4
159
+ libcurl=8.11.1=h332b0f4_0
160
+ libdeflate=1.23=h4ddbbb0_0
161
+ libdrm=2.4.124=hb9d3cd8_0
162
+ libedit=3.1.20250104=pl5321h7949ede_0
163
+ libegl=1.7.0=ha4b6fd6_2
164
+ libev=4.33=hd590300_2
165
+ libexpat=2.6.4=h5888daf_0
166
+ libffi=3.4.2=h7f98852_5
167
+ libflac=1.4.3=h59595ed_0
168
+ libgcc=14.2.0=h77fa898_1
169
+ libgcc-ng=14.2.0=h69a702a_1
170
+ libgcrypt-lib=1.11.0=hb9d3cd8_2
171
+ libgd=2.3.3=h6f5c62b_11
172
+ libgettextpo=0.23.1=h5888daf_0
173
+ libgettextpo-devel=0.23.1=h5888daf_0
174
+ libgfortran=14.2.0=h69a702a_1
175
+ libgfortran5=14.2.0=hd5240d6_1
176
+ libgl=1.7.0=ha4b6fd6_2
177
+ libglib=2.82.2=h2ff4ddf_1
178
+ libglu=9.0.3=h03adeef_0
179
+ libglvnd=1.7.0=ha4b6fd6_2
180
+ libglx=1.7.0=ha4b6fd6_2
181
+ libgomp=14.2.0=h77fa898_1
182
+ libgpg-error=1.51=hbd13f7d_1
183
+ libhwloc=2.11.2=default_h0d58e46_1001
184
+ libiconv=1.17=hd590300_2
185
+ libjpeg-turbo=3.0.0=hd590300_1
186
+ liblapack=3.9.0=28_h7ac8fdf_openblas
187
+ liblapacke=3.9.0=28_he2f377e_openblas
188
+ libllvm19=19.1.7=ha7bfdaf_1
189
+ liblzma=5.6.4=hb9d3cd8_0
190
+ libnghttp2=1.64.0=h161d5f1_0
191
+ libnsl=2.0.1=hd590300_0
192
+ libntlm=1.8=hb9d3cd8_0
193
+ libogg=1.3.5=h4ab18f5_0
194
+ libopenblas=0.3.28=pthreads_h94d23a6_1
195
+ libopencv=4.11.0=qt6_py310hd7acd64_602
196
+ libopengl=1.7.0=ha4b6fd6_2
197
+ libopenvino=2025.0.0=hdc3f47d_1
198
+ libopenvino-auto-batch-plugin=2025.0.0=h4d9b6c2_1
199
+ libopenvino-auto-plugin=2025.0.0=h4d9b6c2_1
200
+ libopenvino-hetero-plugin=2025.0.0=h981d57b_1
201
+ libopenvino-intel-cpu-plugin=2025.0.0=hdc3f47d_1
202
+ libopenvino-intel-gpu-plugin=2025.0.0=hdc3f47d_1
203
+ libopenvino-intel-npu-plugin=2025.0.0=hdc3f47d_1
204
+ libopenvino-ir-frontend=2025.0.0=h981d57b_1
205
+ libopenvino-onnx-frontend=2025.0.0=h6363af5_1
206
+ libopenvino-paddle-frontend=2025.0.0=h6363af5_1
207
+ libopenvino-pytorch-frontend=2025.0.0=h5888daf_1
208
+ libopenvino-tensorflow-frontend=2025.0.0=h630ec5c_1
209
+ libopenvino-tensorflow-lite-frontend=2025.0.0=h5888daf_1
210
+ libopus=1.3.1=h7f98852_1
211
+ libpciaccess=0.18=hd590300_0
212
+ libpng=1.6.46=h943b412_0
213
+ libpq=17.2=h3b95a9b_1
214
+ libprotobuf=5.28.3=h6128344_1
215
+ librsvg=2.58.4=h49af25d_2
216
+ libsndfile=1.2.2=hc60ed4a_1
217
+ libsodium=1.0.20=h4ab18f5_0
218
+ libsqlite=3.48.0=hee588c1_1
219
+ libssh2=1.11.1=hf672d98_0
220
+ libstdcxx=14.2.0=hc0a3c3a_1
221
+ libstdcxx-ng=14.2.0=h4852527_1
222
+ libsystemd0=257.2=h3dc2cb9_0
223
+ libtiff=4.7.0=hd9ff511_3
224
+ libuuid=2.38.1=h0b41bf4_0
225
+ libva=2.22.0=h8a09558_1
226
+ libvorbis=1.3.7=h9c3ff4c_0
227
+ libvpx=1.14.1=hac33072_0
228
+ libwebp-base=1.5.0=h851e524_0
229
+ libxcb=1.17.0=h8a09558_0
230
+ libxcrypt=4.4.36=hd590300_1
231
+ libxgboost=2.1.4=cuda118_h09a87be_0
232
+ libxkbcommon=1.7.0=h2c5496b_1
233
+ libxml2=2.13.5=h8d12d68_1
234
+ libxslt=1.1.39=h76b75d6_0
235
+ libzlib=1.3.1=hb9d3cd8_2
236
+ lightning-utilities=0.12.0=pypi_0
237
+ lz4-c=1.10.0=h5888daf_1
238
+ marisa-trie=1.2.1=pypi_0
239
+ markdown-it-py=3.0.0=pypi_0
240
+ markupsafe=3.0.2=pypi_0
241
+ matplotlib=3.10.0=py310hff52083_0
242
+ matplotlib-base=3.10.0=py310h68603db_0
243
+ matplotlib-inline=0.1.7=pyhd8ed1ab_1
244
+ mdurl=0.1.2=pypi_0
245
+ mpg123=1.32.9=hc50e24c_0
246
+ mplcyberpunk=0.7.5=pypi_0
247
+ mpmath=1.3.0=pypi_0
248
+ multidict=6.1.0=pypi_0
249
+ multiprocess=0.70.16=pypi_0
250
+ munkres=1.1.4=pyh9f0ad1d_0
251
+ murmurhash=1.0.12=pypi_0
252
+ mysql-common=9.0.1=h266115a_4
253
+ mysql-libs=9.0.1=he0572af_4
254
+ narwhals=1.27.1=pyhd8ed1ab_0
255
+ nccl=2.25.1.1=h03a54cd_0
256
+ ncurses=6.5=h2d0b736_3
257
+ nest-asyncio=1.6.0=pyhd8ed1ab_1
258
+ networkx=3.4.2=pypi_0
259
+ nltk=3.9.1=pyhd8ed1ab_1
260
+ numpy=1.26.4=py310hb13e2d6_0
261
+ nvidia-cublas-cu12=12.4.5.8=pypi_0
262
+ nvidia-cuda-cupti-cu12=12.4.127=pypi_0
263
+ nvidia-cuda-nvrtc-cu12=12.4.127=pypi_0
264
+ nvidia-cuda-runtime-cu12=12.4.127=pypi_0
265
+ nvidia-cudnn-cu12=9.1.0.70=pypi_0
266
+ nvidia-cufft-cu12=11.2.1.3=pypi_0
267
+ nvidia-curand-cu12=10.3.5.147=pypi_0
268
+ nvidia-cusolver-cu12=11.6.1.9=pypi_0
269
+ nvidia-cusparse-cu12=12.3.1.170=pypi_0
270
+ nvidia-cusparselt-cu12=0.6.2=pypi_0
271
+ nvidia-nccl-cu12=2.21.5=pypi_0
272
+ nvidia-nvjitlink-cu12=12.4.127=pypi_0
273
+ nvidia-nvtx-cu12=12.4.127=pypi_0
274
+ ocl-icd=2.3.2=hb9d3cd8_2
275
+ opencl-headers=2024.10.24=h5888daf_0
276
+ opencv=4.11.0=qt6_py310hcfe8da8_602
277
+ openexr=3.3.2=h6326327_1
278
+ openh264=2.5.0=hf92e6e3_0
279
+ openjpeg=2.5.3=h5fbd93e_0
280
+ openldap=2.6.9=he970967_0
281
+ openssl=3.4.1=h7b32b05_0
282
+ orjson=3.10.15=pypi_0
283
+ packaging=24.2=pyhd8ed1ab_2
284
+ pandas=2.2.3=py310h5eaa309_1
285
+ pango=1.56.1=h861ebed_0
286
+ parso=0.8.4=pyhd8ed1ab_1
287
+ patsy=1.0.1=pyhd8ed1ab_1
288
+ pcre2=10.44=hba22ea6_2
289
+ peft=0.14.0=pypi_0
290
+ pexpect=4.9.0=pyhd8ed1ab_1
291
+ pickleshare=0.7.5=pyhd8ed1ab_1004
292
+ pillow=11.1.0=py310h7e6dc6c_0
293
+ pip=25.0=pyh8b19718_0
294
+ pixman=0.44.2=h29eaf8c_0
295
+ platformdirs=4.3.6=pyhd8ed1ab_1
296
+ plotly=6.0.0=pyhd8ed1ab_0
297
+ preshed=3.0.9=pypi_0
298
+ prompt-toolkit=3.0.50=pyha770c72_0
299
+ propcache=0.3.0=pypi_0
300
+ protobuf=3.20.3=pypi_0
301
+ psutil=6.1.1=py310ha75aee5_0
302
+ pthread-stubs=0.4=hb9d3cd8_1002
303
+ ptyprocess=0.7.0=pyhd8ed1ab_1
304
+ pugixml=1.15=h3f63f65_0
305
+ pulseaudio-client=17.0=hb77b528_0
306
+ pure_eval=0.2.3=pyhd8ed1ab_1
307
+ py-cpuinfo=9.0.0=pyhd8ed1ab_1
308
+ py-opencv=4.11.0=qt6_py310h5472680_602
309
+ py-xgboost=2.1.4=cuda118_pyh1b5bf1a_0
310
+ pyarrow=19.0.1=pypi_0
311
+ pycparser=2.22=pyh29332c3_1
312
+ pydantic=2.10.6=pypi_0
313
+ pydantic-core=2.27.2=pypi_0
314
+ pydeck=0.9.1=pypi_0
315
+ pygments=2.19.1=pyhd8ed1ab_0
316
+ pymorphy2=0.9.1=pyhd8ed1ab_0
317
+ pymorphy2-dicts-ru=2.4.417127.4579844=pyhd8ed1ab_0
318
+ pymorphy3=2.0.3=pypi_0
319
+ pymorphy3-dicts-ru=2.4.417150.4580142=pypi_0
320
+ pyparsing=3.2.1=pyhd8ed1ab_0
321
+ pyside6=6.8.2=py310hfd10a26_0
322
+ pysocks=1.7.1=pyha55dd90_7
323
+ python=3.10.16=he725a3c_1_cpython
324
+ python-dateutil=2.9.0.post0=pyhff2d567_1
325
+ python-dotenv=1.0.1=pypi_0
326
+ python-graphviz=0.20.3=pyh91182bf_2
327
+ python-tzdata=2025.1=pyhd8ed1ab_0
328
+ python_abi=3.10=5_cp310
329
+ pytz=2024.1=pyhd8ed1ab_0
330
+ pyyaml=6.0.2=py310h89163eb_2
331
+ pyzmq=26.2.1=py310h71f11fc_0
332
+ qhull=2020.2=h434a139_5
333
+ qt6-main=6.8.2=h588cce1_0
334
+ rav1e=0.6.6=he8a937b_2
335
+ readline=8.2=h8228510_1
336
+ referencing=0.36.2=pypi_0
337
+ regex=2024.11.6=py310ha75aee5_0
338
+ requests=2.32.3=pyhd8ed1ab_1
339
+ requests-toolbelt=1.0.0=pypi_0
340
+ rich=13.9.4=pypi_0
341
+ rpds-py=0.23.1=pypi_0
342
+ ru-core-news-lg=3.8.0=pypi_0
343
+ safetensors=0.5.2=pypi_0
344
+ scikit-learn=1.6.1=py310h27f47ee_0
345
+ scipy=1.15.1=py310hfa6ec8c_0
346
+ sdl2=2.30.10=h63c27ac_0
347
+ seaborn=0.13.2=hd8ed1ab_3
348
+ seaborn-base=0.13.2=pyhd8ed1ab_3
349
+ sentence-transformers=3.4.1=pypi_0
350
+ sentencepiece=0.2.0=pypi_0
351
+ setuptools=75.8.0=pyhff2d567_0
352
+ shellingham=1.5.4=pypi_0
353
+ shtab=1.7.1=pypi_0
354
+ six=1.17.0=pyhd8ed1ab_0
355
+ sklearn-compat=0.1.3=pypi_0
356
+ smart_open=7.1.0=pyhd8ed1ab_0
357
+ smmap=5.0.2=pypi_0
358
+ snappy=1.2.1=h8bd8927_1
359
+ sniffio=1.3.1=pypi_0
360
+ soupsieve=2.6=pypi_0
361
+ spacy=3.8.4=pypi_0
362
+ spacy-legacy=3.0.12=pypi_0
363
+ spacy-loggers=1.0.5=pypi_0
364
+ srsly=2.5.1=pypi_0
365
+ stack_data=0.6.3=pyhd8ed1ab_1
366
+ statsmodels=0.14.4=py310hf462985_0
367
+ streamlit=1.42.2=pypi_0
368
+ svt-av1=2.3.0=h5888daf_0
369
+ sympy=1.13.1=pypi_0
370
+ sysroot_linux-64=2.17=h0157908_18
371
+ tbb=2022.0.0=hceb3a55_0
372
+ tenacity=9.0.0=pypi_0
373
+ thinc=8.3.4=pypi_0
374
+ threadpoolctl=3.5.0=pyhc1e730c_0
375
+ tk=8.6.13=noxft_h4845f30_101
376
+ tokenizers=0.21.0=pypi_0
377
+ toml=0.10.2=pypi_0
378
+ torch=2.6.0=pypi_0
379
+ torchaudio=2.6.0=pypi_0
380
+ torchmetrics=1.6.1=pypi_0
381
+ torchutils=0.0.4=pypi_0
382
+ torchvision=0.21.0=pypi_0
383
+ tornado=6.4.2=py310ha75aee5_0
384
+ tqdm=4.67.1=pyhd8ed1ab_1
385
+ traitlets=5.14.3=pyhd8ed1ab_1
386
+ transformers=4.49.0=pypi_0
387
+ triton=3.2.0=pypi_0
388
+ trl=0.15.1=pypi_0
389
+ typeguard=4.4.2=pypi_0
390
+ typer=0.15.2=pypi_0
391
+ types-requests=2.32.0.20241016=pypi_0
392
+ typing_extensions=4.12.2=pyha770c72_1
393
+ tyro=0.9.16=pypi_0
394
+ tzdata=2025a=h78e105d_0
395
+ ultralytics=8.3.74=pypi_0
396
+ ultralytics-thop=2.0.14=pypi_0
397
+ unicodedata2=16.0.0=py310ha75aee5_0
398
+ unsloth=2025.2.15=pypi_0
399
+ unsloth-zoo=2025.2.7=pypi_0
400
+ urllib3=2.3.0=pyhd8ed1ab_0
401
+ wasabi=1.1.3=pypi_0
402
+ watchdog=6.0.0=pypi_0
403
+ wayland=1.23.1=h3e06ad9_0
404
+ wayland-protocols=1.40=hd8ed1ab_0
405
+ wcwidth=0.2.13=pyhd8ed1ab_1
406
+ weasel=0.4.1=pypi_0
407
+ wheel=0.45.1=pyhd8ed1ab_1
408
+ wrapt=1.17.2=py310ha75aee5_0
409
+ x264=1!164.3095=h166bdaf_2
410
+ x265=3.5=h924138e_3
411
+ xcb-util=0.4.1=hb711507_2
412
+ xcb-util-cursor=0.1.5=hb9d3cd8_0
413
+ xcb-util-image=0.4.0=hb711507_2
414
+ xcb-util-keysyms=0.4.1=hb711507_0
415
+ xcb-util-renderutil=0.3.10=hb711507_0
416
+ xcb-util-wm=0.4.2=hb711507_0
417
+ xformers=0.0.29.post3=pypi_0
418
+ xgboost=2.1.4=cuda118_pyh7984362_0
419
+ xkeyboard-config=2.43=hb9d3cd8_0
420
+ xorg-libice=1.1.2=hb9d3cd8_0
421
+ xorg-libsm=1.2.5=he73a12e_0
422
+ xorg-libx11=1.8.11=h4f16b4b_0
423
+ xorg-libxau=1.0.12=hb9d3cd8_0
424
+ xorg-libxcomposite=0.4.6=hb9d3cd8_2
425
+ xorg-libxcursor=1.2.3=hb9d3cd8_0
426
+ xorg-libxdamage=1.1.6=hb9d3cd8_0
427
+ xorg-libxdmcp=1.1.5=hb9d3cd8_0
428
+ xorg-libxext=1.3.6=hb9d3cd8_0
429
+ xorg-libxfixes=6.0.1=hb9d3cd8_0
430
+ xorg-libxi=1.8.2=hb9d3cd8_0
431
+ xorg-libxinerama=1.1.5=h5888daf_1
432
+ xorg-libxrandr=1.5.4=hb9d3cd8_0
433
+ xorg-libxrender=0.9.12=hb9d3cd8_0
434
+ xorg-libxtst=1.2.5=hb9d3cd8_3
435
+ xorg-libxxf86vm=1.1.6=hb9d3cd8_0
436
+ xxhash=3.5.0=pypi_0
437
+ yaml=0.2.5=h7f98852_2
438
+ yarl=1.18.3=pypi_0
439
+ zeromq=4.3.5=h3b0a872_7
440
+ zipp=3.21.0=pyhd8ed1ab_1
441
+ zstandard=0.23.0=py310ha39cb0e_1
442
+ zstd=1.5.6=ha6fb4c9_0