Максим
и адреса подключения, естественно
Димитри
from langchain_ollama import OllamaEmbeddings
from langchain_postgres.vectorstores import PGVector
from dotenv import load_dotenv
import os
class Database:
def __init__(self) -> None:
load_dotenv(".env")
name = os.getenv("POSTGRES_NAME")
pwd = os.getenv("POSTGRES_PASSWORD")
connection = f"postgresql+psycopg://{name}:{pwd}@postgresql-pgvector:5432/feedconveyor"
embeddings = OllamaEmbeddings(model="llama3")
self.vector_database = PGVector(
collection_name="store",
connection=connection,
embeddings=embeddings,
)
self.vector_database.create_vector_extension()
self.vector_database.create_tables_if_not_exists()
def store_data(self, data):
self.vector_database.add_documents(data, ids=[doc.metadata["id"] for doc in data])
Димитри
"Containers": {
"41c557618ab77fc09bd10416a309d42ffd616f395d0ed5fc77169abf242183ed": {
"Name": "postgresql-pgvector",
"EndpointID": "237284f16067764f72fcae4ba7d8145fbf6b8ce58fa2a78eb03a7fd3abe618ce",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"91dc2d5c7e3af914166a6200561c8e568c7a971878d1b98f9e229e61b591041d": {
"Name": "telegram-bot",
"EndpointID": "5dcc719dde60da919686940fd950181c1efe3295c3925e81e481dff2beba9a0c",
"MacAddress": "02:42:ac:12:00:04",
"IPv4Address": "172.18.0.4/16",
"IPv6Address": ""
},
"f8ac8a7f6baa9adf3b19d901791e5499f9ceb3138917ce3f1f53c9bef68f8da2": {
"Name": "pgadmin",
"EndpointID": "f7504ccb284eda7dc7cc9412ec7a1622a93bac25007d43ae5d2fc6641395892f",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "local-network",
"com.docker.compose.project": "feed-conveyor",
"com.docker.compose.version": "2.29.2"
}
}
Максим
"Containers": {
"41c557618ab77fc09bd10416a309d42ffd616f395d0ed5fc77169abf242183ed": {
"Name": "postgresql-pgvector",
"EndpointID": "237284f16067764f72fcae4ba7d8145fbf6b8ce58fa2a78eb03a7fd3abe618ce",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"91dc2d5c7e3af914166a6200561c8e568c7a971878d1b98f9e229e61b591041d": {
"Name": "telegram-bot",
"EndpointID": "5dcc719dde60da919686940fd950181c1efe3295c3925e81e481dff2beba9a0c",
"MacAddress": "02:42:ac:12:00:04",
"IPv4Address": "172.18.0.4/16",
"IPv6Address": ""
},
"f8ac8a7f6baa9adf3b19d901791e5499f9ceb3138917ce3f1f53c9bef68f8da2": {
"Name": "pgadmin",
"EndpointID": "f7504ccb284eda7dc7cc9412ec7a1622a93bac25007d43ae5d2fc6641395892f",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "local-network",
"com.docker.compose.project": "feed-conveyor",
"com.docker.compose.version": "2.29.2"
}
}
контейнер postgres-pgvector вообще запущен?
Димитри
Да
Димитри
2024-11-05 13:39:08
2024-11-05 13:39:08 PostgreSQL Database directory appears to contain a database; Skipping initialization
2024-11-05 13:39:08
2024-11-05 13:39:08 2024-11-05 10:39:08.496 UTC [1] LOG: starting PostgreSQL 16.3 (Debian 16.3-1.pgdg120+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2024-11-05 13:39:08 2024-11-05 10:39:08.496 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2024-11-05 13:39:08 2024-11-05 10:39:08.497 UTC [1] LOG: listening on IPv6 address "::", port 5432
2024-11-05 13:39:08 2024-11-05 10:39:08.512 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2024-11-05 13:39:08 2024-11-05 10:39:08.521 UTC [30] LOG: database system was shut down at 2024-11-05 10:39:02 UTC
2024-11-05 13:39:08 2024-11-05 10:39:08.526 UTC [1] LOG: database system is ready to accept connections
2024-11-05 13:44:08 2024-11-05 10:44:08.620 UTC [28] LOG: checkpoint starting: time
2024-11-05 13:44:08 2024-11-05 10:44:08.636 UTC [28] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.003 s, sync=0.001 s, total=0.017 s; sync files=2, longest=0.001 s, average=0.001 s; distance=0 kB, estimate=0 kB; lsn=0/1A71FA0, redo lsn=0/1A71F68
Максим
а bot подключается к БД уже после того, как она запустилась, или до?
Димитри
После
Максим
Димитри
Я сам нажимаю на кнопку после того как контейнер полностью запустился
Димитри
# AI AGENT BUTTON
@dp.callback_query(F.data == "agent")
async def post_handler(call: CallbackQuery) -> None:
try:
db = Database()
docs = [
Document(
page_content="test",
metadata={"id": 1}
)
]
db.store_data(docs)
await call.message.answer(f"done")
except Exception as e:
await call.message.answer(f"❌ Произошла ошибка: {str(e)}")
Димитри
Вот обработчик
Димитри
У меня была однажды проблема пробрасывания портов в одном проекте и я думал что может здесь она актуальна, но в хабе нет документации по образу pgvector
Димитри
Но по идее здесь используются стандартные от postgres
Димитри
Димитри
покажи полный trace ошибки. может проблема с подключением не к БД
INFO:aiogram.event:Update id=397192978 is not handled. Duration 83 ms by bot id=5379688409
telegram-bot | ERROR:aiogram.event:Cause exception while process update id=397192978 by bot id=5379688409
telegram-bot | ConnectError: [Errno 111] Connection refused
telegram-bot | Traceback (most recent call last):
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpx/_transports/default.py", line 72, in map_httpcore_exceptions
telegram-bot | yield
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpx/_transports/default.py", line 236, in handle_request
telegram-bot | resp = self._pool.handle_request(req)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/connection_pool.py", line 216, in handle_request
telegram-bot | raise exc from None
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/connection_pool.py", line 196, in handle_request
telegram-bot | response = connection.handle_request(
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/connection.py", line 99, in handle_request
telegram-bot | raise exc
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/connection.py", line 76, in handle_request
telegram-bot | stream = self._connect(request)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/connection.py", line 122, in _connect
telegram-bot | stream = self._network_backend.connect_tcp(**kwargs)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpcore/_backends/sync.py", line 205, in connect_tcp
telegram-bot | with map_exceptions(exc_map):
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
telegram-bot | self.gen.throw(value)
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
telegram-bot | raise to_exc(exc) from exc
telegram-bot | httpcore.ConnectError: [Errno 111] Connection refused
telegram-bot |
telegram-bot | The above exception was the direct cause of the following exception:
telegram-bot |
telegram-bot | Traceback (most recent call last):
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/dispatcher.py", line 309, in _process_update
telegram-bot | response = await self.feed_update(bot, update, **kwargs)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/dispatcher.py", line 158, in feed_update
telegram-bot | response = await self.update.wrap_outer_middleware(
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/middlewares/error.py", line 25, in __call__
telegram-bot | return await handler(event, data)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/middlewares/user_context.py", line 56, in __call__
telegram-bot | return await handler(event, data)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/fsm/middleware.py", line 42, in __call__
telegram-bot | return await handler(event, data)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^
Димитри
покажи полный trace ошибки. может проблема с подключением не к БД
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/event/telegram.py", line 121, in trigger
telegram-bot | return await wrapped_inner(event, kwargs)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/event/handler.py", line 43, in call
telegram-bot | return await wrapped()
telegram-bot | ^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/dispatcher.py", line 276, in _listen_update
telegram-bot | return await self.propagate_event(update_type=update_type, event=event, **kwargs)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/router.py", line 146, in propagate_event
telegram-bot | return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/router.py", line 141, in _wrapped
telegram-bot | return await self._propagate_event(
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/router.py", line 166, in _propagate_event
telegram-bot | response = await observer.trigger(event, **kwargs)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/event/telegram.py", line 121, in trigger
telegram-bot | return await wrapped_inner(event, kwargs)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/aiogram/dispatcher/event/handler.py", line 43, in call
telegram-bot | return await wrapped()
telegram-bot | ^^^^^^^^^^^^^^^
telegram-bot | File "//./src/bot.py", line 100, in post_handler
telegram-bot | db.store_data(docs)
telegram-bot | File "/src/database/db.py", line 25, in store_data
telegram-bot | self.vector_database.add_documents(data, ids=[doc.metadata["id"] for doc in data])
telegram-bot | File "/usr/local/lib/python3.12/site-packages/langchain_core/vectorstores/base.py", line 287, in add_documents
telegram-bot | return self.add_texts(texts, metadatas, **kwargs)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/langchain_postgres/vectorstores.py", line 885, in add_texts
telegram-bot | embeddings = self.embedding_function.embed_documents(texts_)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/langchain_ollama/embeddings.py", line 159, in embed_documents
telegram-bot | embedded_docs = self._client.embed(self.model, texts)["embeddings"]
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/ollama/_client.py", line 262, in embed
telegram-bot | return self._request(
telegram-bot | ^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/ollama/_client.py", line 70, in _request
telegram-bot | response = self._client.request(method, url, **kwargs)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpx/_client.py", line 837, in request
Димитри
покажи полный trace ошибки. может проблема с подключением не к БД
telegram-bot | return self.send(request, auth=auth, follow_redirects=follow_redirects)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpx/_client.py", line 926, in send
telegram-bot | response = self._send_handling_auth(
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpx/_client.py", line 954, in _send_handling_auth
telegram-bot | response = self._send_handling_redirects(
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpx/_client.py", line 991, in _send_handling_redirects
telegram-bot | response = self._send_single_request(request)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpx/_client.py", line 1027, in _send_single_request
telegram-bot | response = transport.handle_request(request)
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpx/_transports/default.py", line 235, in handle_request
telegram-bot | with map_httpcore_exceptions():
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
telegram-bot | self.gen.throw(value)
telegram-bot | File "/usr/local/lib/python3.12/site-packages/httpx/_transports/default.py", line 89, in map_httpcore_exceptions
telegram-bot | raise mapped_exc(message) from exc
telegram-bot | httpx.ConnectError: [Errno 111] Connection refused
Максим
видимо он к ollama не может подключиться, а не к БД
Димитри
А он тут разве должен подключаться к ollama?
Максим
А он тут разве должен подключаться к ollama?
в душе не знаю, должно или не должно. но в логах запросы отправляются:
telegram-bot | File "/usr/local/lib/python3.12/site-packages/langchain_ollama/embeddings.py", line 159, in embed_documents
telegram-bot | embedded_docs = self._client.embed(self.model, texts)["embeddings"]
telegram-bot | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/ollama/_client.py", line 262, in embed
telegram-bot | return self._request(
telegram-bot | ^^^^^^^^^^^^^^
telegram-bot | File "/usr/local/lib/python3.12/site-packages/ollama/_client.py", line 70, in _request
telegram-bot | response = self._client.request(method, url, **kwargs)
Димитри
Вообще здесь система должна переводить то что я ей отправил в вектора и загружать на постгрес
Димитри
А конвертация происходит как раз за счет модуля под ollama
Максим
у меня нет ответа на вопрос, почему эта штука стучится в интернет. для этого надо задать вопрос в профильный чат
Димитри
Понял, спасибо, буду разбираться
Димитри
Ответ сюда пришлю как разберусь, может кому интересно будет
R2D2
Список айтишных чатов и каналов телеграма:
https://github.com/goq/telegram-list
√Григорий
как почистить диск, чтобы сохранить остановленные и упавшие контейнеры? то есть docker system prune -a, но очистить всё, кроме контейнеров?
√Григорий
Shutov_Nikolay
в том, что их не получится рестартануть
В этом и странность, контейнер не виртуалка, его надо запустить что бы он выполнял пока нужно 1 процесс. Зачем его рестартить? Если вы его тормозите и потом запускаете ради данных, так вынесети данные из контейнера и не рестартите а запускайте когда нужен данный процесс.
Evgeny
Всем привет. Парни, выручайте. Кто сталкивался с такой проблемой что APScheduler отлично работает локально но в докер контейнере отказывается работать вообще?
Максим
Evgeny
Максим
ну блин, как проявляется это "не работает", что в логах, как выглядит docker-compose.yml ...
Serge
Evgeny
понял
Evgeny
сейчас наковыряю логов
Evgeny
Evgeny
докерфаил если что выглядит весьма просто
Rose
Привет, Ника! Добро пожаловать в RU.Docker — Официальное Русское Сообщество! Если ты не 🤖 ты знаешь что делать :)
Ника
+
Vadim
Constantine
Помогите пожалуйста
Почему-то при сборке докер-компоус выдает такую ошибку. При этом при сборке и запуске приложения без докера все работает
Constantine
Максим
Vadim
dimage
services:
container:
container_name: NAME
privileged: true
build:
context: .
dockerfile: .nvidia.Dockerfile
volumes:
- /db:/db
- /storage:/storage
- /public:/public
- /logging:/logging
devices:
- driver: nvidia
count: 3
capabilities: [gpu]
security_opt:
- label=disable
ports:
- '8080:8080'
dimage
приветствую, где ошибка?
Максим
dimage
deploy:
resources:
reservations:
devices:
Также должно быть?
Максим
Максим
В правильно сформулированном вопросе и предоставленном контексте проблемы содержится 90% ответа
dimage
надо в контейнер cuda пробросить GPU
Максим
Тут нет ничего - ни описания, что запускается, ни как оно должно работать, ни с какой ошибкой падает. Ни Dockerfile, ни логов. Что ты ожидаешь услышать от чата, гадание на кофейной гуще?
dimage
dimage
и пример
dimage
Dan
Удивительно, что ты именно сюда и именно с таким вопросом пришёл. Ответ тихо и мирно лежит в доках
Dan
dimage
Ну всё просто: я ленивая жопка и хочу пендаль
Интригуешь,
То-ли у меня гифку не грузит или она статичная, то-ли мне где-то слышится: "дибилы, блядь..."
Max
Всем привет, кто подскажет как передать переменные из .env файл в Swarm при запуске docker stack deploy -c docker-compose.yml test stack
Iozhiggg
Max
dimage
есть механизм пересоздать ~/.config/docker/daemon.json
Mihail
Подскажите, пожалуйста, как настроить фаервол таким образом, чтобы запросы из всех контейнеров на порт хоста проходили через ip 172.17.0.1, а через домен, который указывает на хост до этих все портов достучаться нельзя было?
Я примерно вот так вот настроил фаервол https://t.me/pro_ansible/317543, но оказалось, что это работает только для контейнеров с network: host. А для bridge, похоже, что все внешние запросы и идут сразу на 172.17.0.1 и фаервол не отклоняет запросы для них.
Kenya-West
Всем привет! Хочу расшарить серты из Caddy. Создал named volume caddy-certs, просунул их в контейнер с Prometheus. Серты прокидываются.
Только вот беда: контейнер с Caddy поставил root:root с 400 на файлы и 500 на папки, соответственно и в volume такие же права. А Prometheus работает на nobody:nogroup, и доступа к содержимому прокинутого volume не имеет.
Как быть? Оба контейнера готовые, внутрь залезть и вручную что-то поправлять неприемлемо, ибо полная автоматизация с Ansible.
UPD: Я тут подумал... А зачем мне серты вручную прокидывать от Caddy? Зачем мне учить этот ваш девопс ебаный? Зачем мне вообще в айти быть? Устроюсь настоятелем монастыря в Краснознамёнске, и буду счастлив! Ведь Caddy сам их генерит и принимает запросы по SSL и затем проксирует куда надо уже по HTTP по внутренней сетке, так что пусть Prometheus без TLS работает на localhost:9090. В общем, я фигнёй маялся, проблема решена!
Интригуешь,
Всем привет! Хочу расшарить серты из Caddy. Создал named volume caddy-certs, просунул их в контейнер с Prometheus. Серты прокидываются.
Только вот беда: контейнер с Caddy поставил root:root с 400 на файлы и 500 на папки, соответственно и в volume такие же права. А Prometheus работает на nobody:nogroup, и доступа к содержимому прокинутого volume не имеет.
Как быть? Оба контейнера готовые, внутрь залезть и вручную что-то поправлять неприемлемо, ибо полная автоматизация с Ansible.
UPD: Я тут подумал... А зачем мне серты вручную прокидывать от Caddy? Зачем мне учить этот ваш девопс ебаный? Зачем мне вообще в айти быть? Устроюсь настоятелем монастыря в Краснознамёнске, и буду счастлив! Ведь Caddy сам их генерит и принимает запросы по SSL и затем проксирует куда надо уже по HTTP по внутренней сетке, так что пусть Prometheus без TLS работает на localhost:9090. В общем, я фигнёй маялся, проблема решена!
Ну, как возможность, почему и нет)
Max
Всем привет. У меня такой вопрос. Скажите с чем это может быть связано. Локально запускаю скрипт который обращается к базе данных mongo созданная в docker compose на виртуалке VB, с сетевым драйвером bridge, все работает отлично и все данные в базу загружаются. Создал Swarm из docker compose, все поднимаются 3 контейнера стартуют и без ошибок. Все контейнеры находятся в одной сети, сетевой драйвер overlay, когда запускается скрипт не все данные вставляются в базу данных, большая часть потеряна.
Интригуешь,
Интригуешь,
Ой, ёмаё, я уже читать разучился, голова забита, вообще не о том думаю, сорян
Max