Spaces:
Running
Running
add all files
Browse files- .gitattributes +2 -0
- README.md +58 -13
- app.py +38 -0
- app_pages/bert.py +39 -0
- app_pages/gpt_generation.py +28 -0
- app_pages/random_selection.py +59 -0
- data/embeddings +3 -0
- data/movie_data.csv +3 -0
- funcs/preproc.py +145 -0
- funcs/try_gpt.py +30 -0
- images/architecture.png +0 -0
- images/mock.png +0 -0
- requirements.txt +224 -0
- requirements.yml +442 -0
.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 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|