Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
f9f0c36
revamp setup scripts supporting proxies and added studio cleanup scripts
wanhakim Aug 21, 2025
0fdd86d
update build genaicomp script and fix proxy bugs
wanhakim Aug 27, 2025
14c6b08
enable development env for studio-frontend
wanhakim Aug 28, 2025
8d75898
initial push for finetuning UI
wanhakim Aug 29, 2025
1acf5eb
update docker-compose.dev.yml
wanhakim Aug 29, 2025
044b4c3
update dev env
wanhakim Oct 13, 2025
ba660fb
initial push for finetuning api server
wanhakim Oct 14, 2025
697ee32
updates on the db and ft job view
wanhakim Oct 15, 2025
16f5911
added logs in ft job table and streamlined its format. updated ft job…
wanhakim Oct 17, 2025
0b69512
integrate finetuning server in studio k8 namespace
wanhakim Oct 21, 2025
05e5cf3
update improvements to ft job table and modal
wanhakim Oct 24, 2025
7e5b1ae
initial push for ft job outputs downloading
wanhakim Oct 28, 2025
b0402a3
enable ws connections for ft status and output downloading
wanhakim Oct 29, 2025
66122be
updated the ft configs UI
wanhakim Oct 31, 2025
61df6c2
updated the ft training configs UI
wanhakim Nov 26, 2025
722206d
fixes for depreciated components and hardfix the genaicomp images ver…
wanhakim Nov 27, 2025
c3cf59b
added ws connection for finetuning in studio nginx
wanhakim Nov 27, 2025
df91e7a
add proxy for github workflows
wanhakim Nov 27, 2025
1daf48a
Merge branch 'main' into finetuning
wanhakim Nov 27, 2025
44211dc
udpate studio-frontend image
wanhakim Nov 27, 2025
58da2fb
add kubectl logs when deploy studio fail in e2e wf
wanhakim Nov 28, 2025
900f86b
update otel collector contrib version and remove redundant IconApps
wanhakim Dec 1, 2025
d1b234c
update otel deployment
wanhakim Dec 1, 2025
aeaf0ff
fix e2e test to make sure it exits properly when ansible fails
wanhakim Dec 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/_build-image-to-registry.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,5 @@ jobs:
- name: Build Image and Push Image
run: |
sudo apt install ansible -y
ansible-playbook buildpush-genaistudio-images.yml -e "container_registry=${OPEA_IMAGE_REPO}opea" -e "container_tag=${{ inputs.tag }}"
ansible-playbook buildpush-genaistudio-images.yml -e "container_registry=${OPEA_IMAGE_REPO}opea" -e "container_tag=${{ inputs.tag }}" -e "http_proxy=${http_proxy}"
working-directory: ${{ github.workspace }}/setup-scripts/build-image-to-registry/
36 changes: 15 additions & 21 deletions .github/workflows/_e2e-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,19 @@ jobs:
- name: Deploy GenAI Studio
run: |
sudo apt install ansible -y
ansible-playbook genai-studio.yml -e "container_registry=${OPEA_IMAGE_REPO}opea" -e "container_tag=${{ inputs.tag }}" -e "mysql_host=mysql.mysql.svc.cluster.local"
ansible-playbook genai-studio.yml -e "container_registry=${OPEA_IMAGE_REPO}opea" -e "container_tag=${{ inputs.tag }}" -e "mysql_host=mysql.mysql.svc.cluster.local" -e "http_proxy=${http_proxy}" || {
echo "Ansible playbook failed. Checking pod status..."
echo "=== Pods in studio namespace ==="
kubectl get pods -n studio
echo "=== Logs and events for non-Ready pods in studio namespace ==="
for pod in $(kubectl get pods -n studio --field-selector=status.phase!=Running,status.phase!=Succeeded -o jsonpath='{.items[*].metadata.name}'); do
echo "--- Pod: $pod ---"
kubectl describe pod $pod -n studio
kubectl logs $pod -n studio --all-containers=true --tail=100 || echo "Could not fetch logs for $pod"
done
exit 1
}
sleep 5
kubectl wait --for=condition=ready pod --all --namespace=studio --timeout=300s --field-selector=status.phase!=Succeeded
kubectl wait --for=condition=ready pod --all --namespace=monitoring --timeout=300s --field-selector=status.phase!=Succeeded
working-directory: ${{ github.workspace }}/setup-scripts/setup-genai-studio/

- name: Set up Node.js
Expand Down Expand Up @@ -74,25 +83,10 @@ jobs:
name: playwright-test-results
path: ${{ github.workspace }}/tests/playwright/playwright-report

- name: Cleanup sandbox namespaces
- name: Cleanup GenAI Studio
if: always()
run: |
if kubectl get namespace mysql; then
kubectl delete ns mysql || true
fi
if kubectl get namespace tracing; then
kubectl delete ns tracing || true
fi
for ns in $(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}' | tr ' ' '\n' | grep '^sandbox-'); do
kubectl delete namespace $ns || true
done
if kubectl get namespace studio; then
kubectl delete -f manifests/studio-manifest.yaml || true
kubectl wait --for=delete pod --all --namespace=studio --timeout=300s
fi
if kubectl get namespace monitoring; then
kubectl delete -f manifests/monitoring-manifest.yaml || true
kubectl wait --for=delete pod --all --namespace=monitoring --timeout=300s
fi
echo "Running GenAI Studio cleanup script..."
./cleanup-genai-studio.sh || echo "Cleanup script completed with warnings"
working-directory: ${{ github.workspace }}/setup-scripts/setup-genai-studio/

10 changes: 10 additions & 0 deletions app-backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
FROM python:3.11-slim

# Accept proxy build arguments
ARG http_proxy
ARG https_proxy
ARG no_proxy

# Set proxy environment variables for package managers
ENV http_proxy=${http_proxy}
ENV https_proxy=${https_proxy}
ENV no_proxy=${no_proxy}

RUN apt-get update -y && apt-get install -y --no-install-recommends --fix-missing \
libsqlite3-0 \
libjemalloc-dev \
Expand Down
2 changes: 1 addition & 1 deletion app-backend/megaservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ def add_remote_service(self):
microservice_name = node['name'].split('@')[1]
if "docsum" in microservice_name:
self.is_docsum = True
service_node_ip = node_id.split('@')[1].replace('_','-') if USE_NODE_ID_AS_IP else HOST_IP
service_node_ip = f"opea-{node_id.split('@')[1].replace('_','-')}" if USE_NODE_ID_AS_IP else HOST_IP
microservice = templates[microservice_name].get_service(host_ip=service_node_ip, node_id_as_ip=USE_NODE_ID_AS_IP, port=os.getenv(f"{node_id.split('@')[1]}_port", None))
microservice.name = node_id
self.services[node_id] = microservice
Expand Down
4 changes: 0 additions & 4 deletions app-backend/orchestrator.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,6 @@ async def execute(
url=endpoint,
data=json.dumps(inputs),
headers={"Content-type": "application/json", "Authorization": f"Bearer {access_token}"},
proxies={"http": None},
stream=True,
timeout=2000,
)
Expand All @@ -283,7 +282,6 @@ async def execute(
headers={
"Content-type": "application/json",
},
proxies={"http": None},
stream=True,
timeout=2000,
)
Expand Down Expand Up @@ -316,7 +314,6 @@ def generate():
"Content-type": "application/json",
"Authorization": f"Bearer {access_token}",
},
proxies={"http": None},
timeout=2000,
)
else:
Expand All @@ -326,7 +323,6 @@ def generate():
headers={
"Content-type": "application/json",
},
proxies={"http": None},
timeout=2000,
)
res_json = res.json()
Expand Down
14 changes: 12 additions & 2 deletions app-frontend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,23 @@
# SPDX-License-Identifier: Apache-2.0

# Use node 20.11.1 as the base image
FROM node:20.11.1 as vite-app
FROM node:20.11.1 AS vite-app

# Accept proxy build arguments
ARG http_proxy
ARG https_proxy
ARG no_proxy

# Set proxy environment variables for package managers
ENV http_proxy=${http_proxy}
ENV https_proxy=${https_proxy}
ENV no_proxy=${no_proxy}

COPY ./react /usr/app/react
WORKDIR /usr/app/react


RUN ["npm", "install"]
RUN ["npm", "install", "--legacy-peer-deps"]
RUN ["npm", "run", "build"]


Expand Down
1 change: 0 additions & 1 deletion app-frontend/react/src/components/SideBar/SideBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ export const LinkedMenuItem: React.FC<LinkedMenuItemProps> = ({
to={toWithQuery(to)}
onClick={onClick}
tabIndex={open ? 0 : -1}
aria-hidden={!open}
>
{children}
</Link>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,21 @@
dest: /tmp/GenAIComps
clone: yes
update: no
environment:
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ http_proxy }}"
no_proxy: "{{ no_proxy }}"
when: not genaicomp_dir.stat.exists

- name: Pull latest changes in GenAIComps repo
- name: Checkout specific GenAIComps tag
git:
repo: https://github.com/opea-project/GenAIComps.git
dest: /tmp/GenAIComps
update: yes
version: "{{ genaicomps_tag }}"
environment:
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ http_proxy }}"
no_proxy: "{{ no_proxy }}"
when: genaicomp_dir.stat.exists

- name: Build and push GenAIComps images
Expand All @@ -38,11 +46,25 @@
- { name: 'asr', dockerfile: 'comps/asr/src/Dockerfile' }
block:
- name: Build image
command: docker build -t {{ container_registry }}/{{ item.name }}:{{ container_tag }} -f {{ item.dockerfile }} .
command: >
docker build
--build-arg http_proxy="{{ http_proxy }}"
--build-arg https_proxy="{{ http_proxy }}"
--build-arg no_proxy="{{ no_proxy }}"
-t {{ container_registry }}/{{ item.name }}:{{ container_tag }}
-f {{ item.dockerfile }} .
args:
chdir: /tmp/GenAIComps
environment:
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ http_proxy }}"
no_proxy: "{{ no_proxy }}"
loop: "{{ genaicomp_images }}"

- name: Push image
command: docker push {{ container_registry }}/{{ item.name }}:{{ container_tag }}
environment:
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ http_proxy }}"
no_proxy: "{{ no_proxy }}"
loop: "{{ genaicomp_images }}"
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,18 @@
- vars.yml
tasks:
- name: Build Docker image
command: docker build -t "{{ container_registry }}/{{ item.image_name }}:{{ container_tag }}" .
command: >
docker build
--build-arg http_proxy="{{ http_proxy }}"
--build-arg https_proxy="{{ http_proxy }}"
--build-arg no_proxy="{{ no_proxy }}"
-t "{{ container_registry }}/{{ item.image_name }}:{{ container_tag }}" .
args:
chdir: "{{ item.directory }}"
environment:
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ http_proxy }}"
no_proxy: "{{ no_proxy }}"
loop:
- { directory: '../../studio-frontend/', image_name: 'studio-frontend' }
- { directory: '../../studio-backend/', image_name: 'studio-backend' }
Expand All @@ -17,6 +26,10 @@

- name: Push Docker image
command: docker push "{{ container_registry }}/{{ item.image_name }}:{{ container_tag }}"
environment:
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ http_proxy }}"
no_proxy: "{{ no_proxy }}"
loop:
- { image_name: 'studio-frontend' }
- { image_name: 'studio-backend' }
Expand Down
9 changes: 7 additions & 2 deletions setup-scripts/build-image-to-registry/vars.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
container_registry: 'opea'
container_tag: 'latest'
# Container registry configuration
# Replace {{ ansible_default_ipv4.address }} with your Kubernetes master/API endpoint IP if needed
container_registry: '{{ ansible_default_ipv4.address }}:5000/opea'
container_tag: 'latest'
genaicomps_tag: 'main'
http_proxy: ''
no_proxy: 'localhost,127.0.0.1,.local,.svc.cluster.local,{{ ansible_default_ipv4.address }}'
Loading