Skip to content

Commit a48c079

Browse files
Release version 0.1.10
### Added - Changes in CHANGELOG.md - Changes in README.md - Changes in containers/browser-service/Dockerfile - Changes in containers/llm-orchestrator/api.py - Changes in containers/video-chat/Dockerfile - Changes in containers/video-chat/package.json - Changes in install.sh - Changes in pyproject.toml - Changes in run.sh - Changes in setup.py - Changes in update/version.sh
1 parent a969e05 commit a48c079

24 files changed

Lines changed: 5648 additions & 239 deletions

CHANGELOG.md

Lines changed: 4707 additions & 0 deletions
Large diffs are not rendered by default.

README.md

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,13 @@ coBoarding to kompleksowy, kontenerowy system do automatycznego wypełniania for
2727
```bash
2828
git clone https://github.com/coboarding/coboarding.git
2929
cd coBoarding
30-
bash run.sh # lub ./run.ps1 na Windows
30+
bash install.sh # automatyczna instalacja zależności i Docker Compose v2
31+
bash run.sh # lub ./run.ps1 na Windows
3132
```
3233

33-
Pierwsze uruchomienie automatycznie skonfiguruje środowisko (venv, zależności, kontenery).
34+
Pierwsze uruchomienie automatycznie skonfiguruje środowisko (venv, zależności, kontenery, Docker Compose v2).
35+
36+
> **WAŻNE:** Projekt wymaga Docker Compose v2 (polecenie `docker compose`). Skrypt `install.sh` instaluje go automatycznie jako plugin CLI.
3437
3538
## Instalacja środowiska (Python 3.11+ / 3.12 na Ubuntu 24.10+)
3639

@@ -55,7 +58,12 @@ pip install -r requirements.txt
5558

5659
Możesz także użyć skryptu:
5760
```bash
58-
bash install.sh
61+
bash install.sh # automatyczna instalacja Docker Compose v2 (plugin CLI)
62+
```
63+
64+
Po instalacji Compose v2 dostępne będzie jako polecenie:
65+
```bash
66+
docker compose version
5967
```
6068

6169
> **Uwaga dot. PyAudio i Python 3.12:**
@@ -209,6 +217,17 @@ System można uruchomić w trzech trybach:
209217
3. **Problem:** Model LLM nie jest pobierany automatycznie
210218
**Rozwiązanie:** Pobierz model ręcznie i umieść go w katalogu `models/`
211219

220+
## Szczegółowe logowanie i debugowanie
221+
222+
W plikach Dockerfile, `install.sh` oraz `run.sh` zostały dodane szczegółowe komunikaty [DEBUG] oraz [INFO].
223+
224+
- Każdy kluczowy etap instalacji, budowy obrazu i uruchamiania usług jest logowany.
225+
- Logi pomagają szybko zlokalizować miejsce, gdzie wystąpił problem.
226+
- W terminalu zobaczysz wyraźne komunikaty o postępie i ewentualnych błędach.
227+
228+
**Wskazówka:**
229+
Jeśli coś pójdzie nie tak, sprawdź logi [DEBUG] w konsoli — wskażą, na którym etapie pojawił się problem.
230+
212231
## Jak to działa
213232

214233
1. System analizuje CV użytkownika, parsując kluczowe informacje (doświadczenie, umiejętności, wykształcenie).
Lines changed: 98 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
FROM debian:bullseye-slim
22

3-
# Tymczasowo przekieruj interaktywne dialogi podczas instalacji
3+
# Temporarily redirect interactive dialogs during installation
44
ENV DEBIAN_FRONTEND=noninteractive
55

6-
# Instalacja zależności
6+
# Install dependencies
7+
RUN apt-get update && apt-get install -y xvfb
78
RUN apt-get update && apt-get install -y --no-install-recommends \
89
python3 python3-pip \
910
tigervnc-standalone-server \
@@ -31,70 +32,132 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
3132
unzip \
3233
&& rm -rf /var/lib/apt/lists/*
3334

34-
# Instalacja Chrome (nowy sposób dodania klucza)
35+
# Install Chrome (new way to add the key)
3536
RUN set -eux; \
37+
echo '[DEBUG] Creating directory for Chrome GPG key...'; \
3638
mkdir -p /etc/apt/keyrings; \
37-
wget -qO /etc/apt/keyrings/google-linux-signing-key.gpg https://dl.google.com/linux/linux_signing_key.pub; \
39+
echo '[DEBUG] Downloading Chrome GPG key...'; \
40+
wget -qO- https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor > /etc/apt/keyrings/google-linux-signing-key.gpg; \
41+
echo '[DEBUG] Adding Chrome repository to sources.list...'; \
3842
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google-linux-signing-key.gpg] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list; \
43+
echo '[DEBUG] apt-get update'; \
3944
apt-get update; \
40-
apt-get install -y google-chrome-stable; \
41-
rm -rf /var/lib/apt/lists/*
45+
echo '[DEBUG] Installing google-chrome-stable'; \
46+
apt-get install -y --no-install-recommends google-chrome-stable; \
47+
echo '[DEBUG] apt-get clean'; \
48+
apt-get clean; \
49+
echo '[DEBUG] Cleaning apt cache'; \
50+
rm -rf /var/lib/apt/lists/*; \
51+
echo '[DEBUG] Chrome installation completed.'
4252

43-
# Instalacja Firefox
44-
RUN apt-get update && apt-get install -y --no-install-recommends \
53+
# Install Firefox
54+
RUN echo '[DEBUG] Installing Firefox...'; \
55+
apt-get update && apt-get install -y --no-install-recommends \
4556
firefox-esr \
46-
&& rm -rf /var/lib/apt/lists/*
57+
&& rm -rf /var/lib/apt/lists/*; \
58+
echo '[DEBUG] Firefox installation completed.'
4759

48-
# Instalacja ChromeDriver z fallbackiem na najnowszą wersję
60+
# Install ChromeDriver with better fallback mechanism
61+
# Install ChromeDriver with improved fallback mechanism
4962
RUN set -eux; \
50-
CHROME_VERSION=$(google-chrome --version | awk '{print $3}' | cut -d '.' -f 1); \
51-
CHROMEDRIVER_VERSION=$(curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_VERSION}" || curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE); \
52-
wget -q "https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip"; \
53-
unzip chromedriver_linux64.zip -d /usr/local/bin; \
54-
rm chromedriver_linux64.zip; \
55-
chmod +x /usr/local/bin/chromedriver
63+
echo '[DEBUG] Installing ChromeDriver...'; \
64+
CHROME_VERSION=$(google-chrome --version | awk '{print $3}'); \
65+
CHROME_MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f 1); \
66+
echo "[DEBUG] Detected Chrome version: ${CHROME_VERSION} (Major: ${CHROME_MAJOR_VERSION})"; \
67+
if curl -s -f "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_MAJOR_VERSION}" > /dev/null; then \
68+
CHROMEDRIVER_VERSION=$(curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_MAJOR_VERSION}"); \
69+
echo "[DEBUG] Found matching ChromeDriver version: ${CHROMEDRIVER_VERSION}"; \
70+
else \
71+
echo "[DEBUG] No specific ChromeDriver for Chrome ${CHROME_MAJOR_VERSION}, using latest release"; \
72+
CHROMEDRIVER_VERSION=$(curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE"); \
73+
if [ -z "$CHROMEDRIVER_VERSION" ] || [[ "$CHROMEDRIVER_VERSION" == *"<?xml"* ]]; then \
74+
echo "[DEBUG] Failed to get latest release, using fixed version"; \
75+
CHROMEDRIVER_VERSION="114.0.5735.90"; \
76+
fi; \
77+
fi; \
78+
echo "[DEBUG] Using ChromeDriver version: ${CHROMEDRIVER_VERSION}"; \
79+
# Try downloading from the standard location
80+
if wget -q --spider "https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip"; then \
81+
wget -q "https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip"; \
82+
# Try alternative location (newer Chrome versions)
83+
elif wget -q --spider "https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/${CHROMEDRIVER_VERSION}/linux64/chromedriver-linux64.zip"; then \
84+
wget -q "https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/${CHROMEDRIVER_VERSION}/linux64/chromedriver-linux64.zip" -O chromedriver_linux64.zip; \
85+
# Fall back to known working version
86+
else \
87+
echo "[DEBUG] Falling back to known working version 114.0.5735.90"; \
88+
wget -q "https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip"; \
89+
fi; \
90+
# Handle different archive structures
91+
mkdir -p /tmp/chromedriver; \
92+
unzip -q chromedriver_linux64.zip -d /tmp/chromedriver; \
93+
if [ -f /tmp/chromedriver/chromedriver ]; then \
94+
mv /tmp/chromedriver/chromedriver /usr/local/bin/; \
95+
elif [ -d /tmp/chromedriver/chromedriver-linux64 ]; then \
96+
mv /tmp/chromedriver/chromedriver-linux64/chromedriver /usr/local/bin/; \
97+
else \
98+
find /tmp/chromedriver -name "chromedriver" -type f -exec mv {} /usr/local/bin/ \; ; \
99+
fi; \
100+
rm -rf /tmp/chromedriver chromedriver_linux64.zip; \
101+
chmod +x /usr/local/bin/chromedriver; \
102+
echo '[DEBUG] ChromeDriver installation completed.'
56103

57-
# Instalacja GeckoDriver (Firefox)
104+
# Install GeckoDriver (Firefox)
58105
RUN set -eux; \
59-
GECKO_DRIVER_VERSION=$(curl -s https://api.github.com/repos/mozilla/geckodriver/releases/latest | grep tag_name | cut -d '"' -f 4); \
106+
echo '[DEBUG] Installing jq for parsing JSON...'; \
107+
apt-get update && apt-get install -y jq && rm -rf /var/lib/apt/lists/*; \
108+
echo '[DEBUG] Installing GeckoDriver...'; \
109+
GECKO_DRIVER_VERSION=$(curl -s https://api.github.com/repos/mozilla/geckodriver/releases/latest | jq -r .tag_name); \
110+
echo "[DEBUG] GeckoDriver version: $GECKO_DRIVER_VERSION"; \
60111
wget -q "https://github.com/mozilla/geckodriver/releases/download/${GECKO_DRIVER_VERSION}/geckodriver-${GECKO_DRIVER_VERSION}-linux64.tar.gz"; \
61112
tar -xzf "geckodriver-${GECKO_DRIVER_VERSION}-linux64.tar.gz" -C /usr/local/bin; \
62113
rm "geckodriver-${GECKO_DRIVER_VERSION}-linux64.tar.gz"; \
63-
chmod +x /usr/local/bin/geckodriver
114+
chmod +x /usr/local/bin/geckodriver; \
115+
echo '[DEBUG] GeckoDriver installation completed.'
64116

65-
# Instalacja menedżerów haseł CLI
66-
RUN curl -fsSL https://get.bitwarden.com/sh | bash
117+
# Install CLI password managers
118+
RUN echo '[DEBUG] Installing Bitwarden CLI...'; \
119+
curl -fsSL https://get.bitwarden.com/sh | bash; \
120+
echo '[DEBUG] Bitwarden CLI installation completed.'
67121

68-
# Tworzymy strukturę katalogów
69-
RUN mkdir -p /app/cv /app/config /app/passwords /app/recordings /app/scripts \
122+
# Create directory structure
123+
RUN echo '[DEBUG] Creating application directory structure...'; \
124+
mkdir -p /app/cv /app/config /app/passwords /app/recordings /app/scripts \
70125
&& mkdir -p /opt/scripts \
71126
&& mkdir -p /root/.vnc \
72-
&& mkdir -p /var/log/supervisor
127+
&& mkdir -p /var/log/supervisor; \
128+
echo '[DEBUG] Directory structure created.'
73129

74-
# Kopiowanie skryptów
130+
# Copy scripts
75131
COPY scripts/ /opt/scripts/
76-
RUN chmod +x /opt/scripts/*.sh
132+
RUN echo '[DEBUG] Setting execution permissions for .sh scripts...'; \
133+
chmod +x /opt/scripts/*.sh; \
134+
echo '[DEBUG] .sh scripts have execution permissions.'
77135

78-
# Kopiowanie plików konfiguracyjnych
136+
# Copy configuration files
79137
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
138+
RUN echo '[DEBUG] Copied supervisord.conf configuration file.'
80139

81-
# Instalacja zależności Pythona
140+
# Install Python dependencies
82141
COPY requirements.txt /app/
83-
RUN pip3 install --no-cache-dir -r /app/requirements.txt
142+
RUN echo '[DEBUG] Installing Python dependencies...'; \
143+
pip3 install --no-cache-dir -r /app/requirements.txt; \
144+
echo '[DEBUG] Python dependencies installation completed.'
84145

85-
# Konfiguracja TigerVNC
86-
RUN mkdir -p /root/.vnc && \
146+
# Configure TigerVNC
147+
RUN echo '[DEBUG] Configuring TigerVNC...'; \
148+
mkdir -p /root/.vnc && \
87149
echo "#!/bin/sh" > /root/.vnc/xstartup && \
88150
echo "xrdb $HOME/.Xresources" >> /root/.vnc/xstartup && \
89151
echo "startfluxbox &" >> /root/.vnc/xstartup && \
90-
chmod +x /root/.vnc/xstartup
152+
chmod +x /root/.vnc/xstartup; \
153+
echo '[DEBUG] TigerVNC configuration completed.'
91154

92-
# Ustawienie zmiennych środowiskowych
155+
# Set environment variables
93156
ENV DISPLAY=:99
94157
ENV PYTHONUNBUFFERED=1
95158

96-
# Ekspozycja portu VNC
159+
# Expose VNC port
97160
EXPOSE 5900
98161

99-
# Uruchomienie supervisora
162+
# Run supervisor
100163
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

containers/llm-orchestrator/api.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# Main API entry point for LLM Orchestrator
22
# llm-orchestrator/api.py (fragment)
33

4+
from flask import Flask, request, jsonify
5+
import requests
6+
7+
app = Flask(__name__)
8+
49
@app.route('/fill-form', methods=['POST'])
510
def fill_form():
611
"""Endpoint do wypełniania formularzy (używany przez testy)"""

containers/video-chat/Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ RUN openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
3434
# Budowa aplikacji
3535
RUN npm run build
3636

37+
RUN ls -l /app/src
38+
3739
# Ekspozycja portu HTTPS
3840
EXPOSE 443
3941

containers/video-chat/package.json

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,31 @@
99
"dev": "webpack --mode development --watch"
1010
},
1111
"dependencies": {
12-
"express": "^4.18.2",
13-
"socket.io": "^4.7.2",
14-
"cors": "^2.8.5",
1512
"axios": "^1.4.0",
16-
"ws": "^8.13.0",
17-
"node-fetch": "^2.6.12",
18-
"https": "^1.0.0",
13+
"cors": "^2.8.5",
14+
"dotenv": "^16.3.1",
15+
"express": "^4.18.2",
1916
"fs": "^0.0.1-security",
17+
"google-tts-api": "^2.0.2",
18+
"https": "^1.0.0",
19+
"node-fetch": "^2.6.12",
2020
"path": "^0.12.7",
21+
"socket.io": "^4.7.2",
22+
"socket.io-client": "^4.8.1",
2123
"uuid": "^9.0.0",
22-
"google-tts-api": "^2.0.2",
23-
"dotenv": "^16.3.1"
24+
"ws": "^8.13.0"
2425
},
2526
"devDependencies": {
26-
"webpack": "^5.88.2",
27-
"webpack-cli": "^5.1.4",
28-
"css-loader": "^6.8.1",
29-
"style-loader": "^3.3.3",
30-
"html-webpack-plugin": "^5.5.3",
31-
"clean-webpack-plugin": "^4.0.0",
32-
"file-loader": "^6.2.0",
33-
"babel-loader": "^9.1.3",
3427
"@babel/core": "^7.22.10",
3528
"@babel/preset-env": "^7.22.10",
36-
"@babel/preset-react": "^7.22.5"
29+
"@babel/preset-react": "^7.22.5",
30+
"babel-loader": "^9.1.3",
31+
"clean-webpack-plugin": "^4.0.0",
32+
"css-loader": "^6.8.1",
33+
"file-loader": "^6.2.0",
34+
"html-webpack-plugin": "^5.5.3",
35+
"style-loader": "^3.3.3",
36+
"webpack": "^5.88.2",
37+
"webpack-cli": "^5.1.4"
3738
}
38-
}
39+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg>

dev.sh

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/bin/bash
2+
# dev.sh - Uruchamianie minimalnego stacka i testowanie llm-orchestrator
3+
set -e
4+
5+
COMPOSE_FILE="docker-compose.minimal.yml"
6+
TEST_DIR="test-examples"
7+
8+
# 1. Buduj i uruchom minimalny stack w tle
9+
echo "[INFO] Buduję i uruchamiam stack ($COMPOSE_FILE)..."
10+
docker-compose -f "$COMPOSE_FILE" up --build -d
11+
12+
# 2. Poczekaj aż llm-orchestrator będzie dostępny (port 5000)
13+
echo "[INFO] Czekam na uruchomienie llm-orchestrator na porcie 5000..."
14+
for i in {1..30}; do
15+
if curl -s http://localhost:5000/ > /dev/null; then
16+
echo "[INFO] llm-orchestrator jest dostępny."
17+
break
18+
fi
19+
sleep 2
20+
done
21+
22+
# 3. Uruchom testy przykładowe (jeśli katalog i skrypt istnieją)
23+
if [ -d "$TEST_DIR" ] && [ -f "$TEST_DIR/run_examples.py" ]; then
24+
echo "[INFO] Uruchamiam testy przykładowe..."
25+
docker-compose -f "$COMPOSE_FILE" run --rm test-client
26+
else
27+
echo "[WARN] Brak katalogu $TEST_DIR lub pliku run_examples.py - pomijam testy."
28+
fi
29+
30+
# 4. Wyświetl logi llm-orchestrator po testach
31+
echo "[INFO] Logi llm-orchestrator po testach:"
32+
docker-compose -f "$COMPOSE_FILE" logs llm-orchestrator
33+
34+
# 5. Zatrzymaj stack po zakończeniu
35+
echo "[INFO] Zatrzymuję stack..."
36+
docker-compose -f "$COMPOSE_FILE" down

docker-compose.minimal.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
version: '3.8'
2+
3+
services:
4+
llm-orchestrator:
5+
build:
6+
context: ./containers/llm-orchestrator
7+
container_name: llm-orchestrator
8+
volumes:
9+
- ./volumes/models:/app/models
10+
- ./volumes/config:/app/config
11+
- ./volumes/cv:/app/cv:ro
12+
environment:
13+
- NVIDIA_VISIBLE_DEVICES=all
14+
deploy:
15+
resources:
16+
reservations:
17+
devices:
18+
- driver: nvidia
19+
count: all
20+
capabilities: [gpu]
21+
ports:
22+
- "5000:5000" # API LLM
23+
networks:
24+
- autoformfiller-network
25+
26+
# Dodaj prosty serwis testowy do przykładowych zapytań
27+
test-client:
28+
image: python:3.9-slim
29+
container_name: test-client
30+
volumes:
31+
- ./test-examples:/test-examples
32+
working_dir: /test-examples
33+
command: ["python", "run_examples.py"]
34+
networks:
35+
- autoformfiller-network
36+
depends_on:
37+
- llm-orchestrator
38+
39+
networks:
40+
autoformfiller-network:
41+
driver: bridge

0 commit comments

Comments
 (0)