Remote inference support for examples in Productivity suite (#1818)
Signed-off-by: Srinarayan Srikanthan <srinarayan.srikanthan@intel.com>
This commit is contained in:
@@ -58,6 +58,7 @@ RERANK_SERVER_PORT = int(os.getenv("RERANK_SERVER_PORT", 80))
|
|||||||
LLM_SERVER_HOST_IP = os.getenv("LLM_SERVER_HOST_IP", "0.0.0.0")
|
LLM_SERVER_HOST_IP = os.getenv("LLM_SERVER_HOST_IP", "0.0.0.0")
|
||||||
LLM_SERVER_PORT = int(os.getenv("LLM_SERVER_PORT", 80))
|
LLM_SERVER_PORT = int(os.getenv("LLM_SERVER_PORT", 80))
|
||||||
LLM_MODEL = os.getenv("LLM_MODEL", "meta-llama/Meta-Llama-3-8B-Instruct")
|
LLM_MODEL = os.getenv("LLM_MODEL", "meta-llama/Meta-Llama-3-8B-Instruct")
|
||||||
|
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", None)
|
||||||
|
|
||||||
|
|
||||||
def align_inputs(self, inputs, cur_node, runtime_graph, llm_parameters_dict, **kwargs):
|
def align_inputs(self, inputs, cur_node, runtime_graph, llm_parameters_dict, **kwargs):
|
||||||
@@ -239,6 +240,7 @@ class ChatQnAService:
|
|||||||
name="llm",
|
name="llm",
|
||||||
host=LLM_SERVER_HOST_IP,
|
host=LLM_SERVER_HOST_IP,
|
||||||
port=LLM_SERVER_PORT,
|
port=LLM_SERVER_PORT,
|
||||||
|
api_key=OPENAI_API_KEY,
|
||||||
endpoint="/v1/chat/completions",
|
endpoint="/v1/chat/completions",
|
||||||
use_remote_service=True,
|
use_remote_service=True,
|
||||||
service_type=ServiceType.LLM,
|
service_type=ServiceType.LLM,
|
||||||
@@ -272,6 +274,7 @@ class ChatQnAService:
|
|||||||
name="llm",
|
name="llm",
|
||||||
host=LLM_SERVER_HOST_IP,
|
host=LLM_SERVER_HOST_IP,
|
||||||
port=LLM_SERVER_PORT,
|
port=LLM_SERVER_PORT,
|
||||||
|
api_key=OPENAI_API_KEY,
|
||||||
endpoint="/v1/chat/completions",
|
endpoint="/v1/chat/completions",
|
||||||
use_remote_service=True,
|
use_remote_service=True,
|
||||||
service_type=ServiceType.LLM,
|
service_type=ServiceType.LLM,
|
||||||
@@ -317,6 +320,7 @@ class ChatQnAService:
|
|||||||
name="llm",
|
name="llm",
|
||||||
host=LLM_SERVER_HOST_IP,
|
host=LLM_SERVER_HOST_IP,
|
||||||
port=LLM_SERVER_PORT,
|
port=LLM_SERVER_PORT,
|
||||||
|
api_key=OPENAI_API_KEY,
|
||||||
endpoint="/v1/chat/completions",
|
endpoint="/v1/chat/completions",
|
||||||
use_remote_service=True,
|
use_remote_service=True,
|
||||||
service_type=ServiceType.LLM,
|
service_type=ServiceType.LLM,
|
||||||
|
|||||||
148
ChatQnA/docker_compose/intel/cpu/xeon/compose_remote.yaml
Normal file
148
ChatQnA/docker_compose/intel/cpu/xeon/compose_remote.yaml
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
# Copyright (C) 2024 Intel Corporation
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
services:
|
||||||
|
redis-vector-db:
|
||||||
|
image: redis/redis-stack:7.2.0-v9
|
||||||
|
container_name: redis-vector-db
|
||||||
|
ports:
|
||||||
|
- "6379:6379"
|
||||||
|
- "8001:8001"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "redis-cli", "ping"]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 3s
|
||||||
|
retries: 10
|
||||||
|
dataprep-redis-service:
|
||||||
|
image: ${REGISTRY:-opea}/dataprep:${TAG:-latest}
|
||||||
|
container_name: dataprep-redis-server
|
||||||
|
depends_on:
|
||||||
|
redis-vector-db:
|
||||||
|
condition: service_healthy
|
||||||
|
tei-embedding-service:
|
||||||
|
condition: service_started
|
||||||
|
ports:
|
||||||
|
- "6007:5000"
|
||||||
|
environment:
|
||||||
|
no_proxy: ${no_proxy}
|
||||||
|
http_proxy: ${http_proxy}
|
||||||
|
https_proxy: ${https_proxy}
|
||||||
|
REDIS_URL: redis://redis-vector-db:6379
|
||||||
|
REDIS_HOST: redis-vector-db
|
||||||
|
INDEX_NAME: ${INDEX_NAME}
|
||||||
|
TEI_ENDPOINT: http://tei-embedding-service:80
|
||||||
|
HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN}
|
||||||
|
tei-embedding-service:
|
||||||
|
image: ghcr.io/huggingface/text-embeddings-inference:cpu-1.6
|
||||||
|
container_name: tei-embedding-server
|
||||||
|
ports:
|
||||||
|
- "6006:80"
|
||||||
|
volumes:
|
||||||
|
- "${MODEL_CACHE:-./data}:/data"
|
||||||
|
shm_size: 1g
|
||||||
|
environment:
|
||||||
|
no_proxy: ${no_proxy}
|
||||||
|
http_proxy: ${http_proxy}
|
||||||
|
https_proxy: ${https_proxy}
|
||||||
|
command: --model-id ${EMBEDDING_MODEL_ID} --auto-truncate
|
||||||
|
retriever:
|
||||||
|
image: ${REGISTRY:-opea}/retriever:${TAG:-latest}
|
||||||
|
container_name: retriever-redis-server
|
||||||
|
depends_on:
|
||||||
|
- redis-vector-db
|
||||||
|
ports:
|
||||||
|
- "7000:7000"
|
||||||
|
ipc: host
|
||||||
|
environment:
|
||||||
|
no_proxy: ${no_proxy}
|
||||||
|
http_proxy: ${http_proxy}
|
||||||
|
https_proxy: ${https_proxy}
|
||||||
|
REDIS_URL: redis://redis-vector-db:6379
|
||||||
|
REDIS_HOST: redis-vector-db
|
||||||
|
INDEX_NAME: ${INDEX_NAME}
|
||||||
|
TEI_EMBEDDING_ENDPOINT: http://tei-embedding-service:80
|
||||||
|
HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN}
|
||||||
|
LOGFLAG: ${LOGFLAG}
|
||||||
|
RETRIEVER_COMPONENT_NAME: "OPEA_RETRIEVER_REDIS"
|
||||||
|
restart: unless-stopped
|
||||||
|
tei-reranking-service:
|
||||||
|
image: ghcr.io/huggingface/text-embeddings-inference:cpu-1.6
|
||||||
|
container_name: tei-reranking-server
|
||||||
|
ports:
|
||||||
|
- "8808:80"
|
||||||
|
volumes:
|
||||||
|
- "${MODEL_CACHE:-./data}:/data"
|
||||||
|
shm_size: 1g
|
||||||
|
environment:
|
||||||
|
no_proxy: ${no_proxy}
|
||||||
|
http_proxy: ${http_proxy}
|
||||||
|
https_proxy: ${https_proxy}
|
||||||
|
HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN}
|
||||||
|
HF_HUB_DISABLE_PROGRESS_BARS: 1
|
||||||
|
HF_HUB_ENABLE_HF_TRANSFER: 0
|
||||||
|
command: --model-id ${RERANK_MODEL_ID} --auto-truncate
|
||||||
|
chatqna-xeon-backend-server:
|
||||||
|
image: ${REGISTRY:-opea}/chatqna:${TAG:-latest}
|
||||||
|
container_name: chatqna-xeon-backend-server
|
||||||
|
depends_on:
|
||||||
|
- redis-vector-db
|
||||||
|
- tei-embedding-service
|
||||||
|
- retriever
|
||||||
|
- tei-reranking-service
|
||||||
|
ports:
|
||||||
|
- "8888:8888"
|
||||||
|
environment:
|
||||||
|
- no_proxy=${no_proxy}
|
||||||
|
- https_proxy=${https_proxy}
|
||||||
|
- http_proxy=${http_proxy}
|
||||||
|
- MEGA_SERVICE_HOST_IP=chatqna-xeon-backend-server
|
||||||
|
- EMBEDDING_SERVER_HOST_IP=tei-embedding-service
|
||||||
|
- EMBEDDING_SERVER_PORT=${EMBEDDING_SERVER_PORT:-80}
|
||||||
|
- RETRIEVER_SERVICE_HOST_IP=retriever
|
||||||
|
- RERANK_SERVER_HOST_IP=tei-reranking-service
|
||||||
|
- RERANK_SERVER_PORT=${RERANK_SERVER_PORT:-80}
|
||||||
|
- LLM_SERVER_HOST_IP=${REMOTE_ENDPOINT}
|
||||||
|
- OPENAI_API_KEY= ${OPENAI_API_KEY}
|
||||||
|
- LLM_SERVER_PORT=80
|
||||||
|
- LLM_MODEL=${LLM_MODEL_ID}
|
||||||
|
- LOGFLAG=${LOGFLAG}
|
||||||
|
ipc: host
|
||||||
|
restart: always
|
||||||
|
chatqna-xeon-ui-server:
|
||||||
|
image: ${REGISTRY:-opea}/chatqna-ui:${TAG:-latest}
|
||||||
|
container_name: chatqna-xeon-ui-server
|
||||||
|
depends_on:
|
||||||
|
- chatqna-xeon-backend-server
|
||||||
|
ports:
|
||||||
|
- "5173:5173"
|
||||||
|
environment:
|
||||||
|
- no_proxy=${no_proxy}
|
||||||
|
- https_proxy=${https_proxy}
|
||||||
|
- http_proxy=${http_proxy}
|
||||||
|
ipc: host
|
||||||
|
restart: always
|
||||||
|
chatqna-xeon-nginx-server:
|
||||||
|
image: ${REGISTRY:-opea}/nginx:${TAG:-latest}
|
||||||
|
container_name: chatqna-xeon-nginx-server
|
||||||
|
depends_on:
|
||||||
|
- chatqna-xeon-backend-server
|
||||||
|
- chatqna-xeon-ui-server
|
||||||
|
ports:
|
||||||
|
- "${NGINX_PORT:-80}:80"
|
||||||
|
environment:
|
||||||
|
- no_proxy=${no_proxy}
|
||||||
|
- https_proxy=${https_proxy}
|
||||||
|
- http_proxy=${http_proxy}
|
||||||
|
- FRONTEND_SERVICE_IP=chatqna-xeon-ui-server
|
||||||
|
- FRONTEND_SERVICE_PORT=5173
|
||||||
|
- BACKEND_SERVICE_NAME=chatqna
|
||||||
|
- BACKEND_SERVICE_IP=chatqna-xeon-backend-server
|
||||||
|
- BACKEND_SERVICE_PORT=8888
|
||||||
|
- DATAPREP_SERVICE_IP=dataprep-redis-service
|
||||||
|
- DATAPREP_SERVICE_PORT=5000
|
||||||
|
ipc: host
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
driver: bridge
|
||||||
@@ -29,6 +29,7 @@ RETRIEVAL_SERVICE_HOST_IP = os.getenv("RETRIEVAL_SERVICE_HOST_IP", "0.0.0.0")
|
|||||||
REDIS_RETRIEVER_PORT = int(os.getenv("REDIS_RETRIEVER_PORT", 7000))
|
REDIS_RETRIEVER_PORT = int(os.getenv("REDIS_RETRIEVER_PORT", 7000))
|
||||||
TEI_EMBEDDING_HOST_IP = os.getenv("TEI_EMBEDDING_HOST_IP", "0.0.0.0")
|
TEI_EMBEDDING_HOST_IP = os.getenv("TEI_EMBEDDING_HOST_IP", "0.0.0.0")
|
||||||
EMBEDDER_PORT = int(os.getenv("EMBEDDER_PORT", 6000))
|
EMBEDDER_PORT = int(os.getenv("EMBEDDER_PORT", 6000))
|
||||||
|
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", None)
|
||||||
|
|
||||||
grader_prompt = """You are a grader assessing relevance of a retrieved document to a user question. \n
|
grader_prompt = """You are a grader assessing relevance of a retrieved document to a user question. \n
|
||||||
Here is the user question: {question} \n
|
Here is the user question: {question} \n
|
||||||
@@ -113,6 +114,7 @@ class CodeGenService:
|
|||||||
name="llm",
|
name="llm",
|
||||||
host=LLM_SERVICE_HOST_IP,
|
host=LLM_SERVICE_HOST_IP,
|
||||||
port=LLM_SERVICE_PORT,
|
port=LLM_SERVICE_PORT,
|
||||||
|
api_key=OPENAI_API_KEY,
|
||||||
endpoint="/v1/chat/completions",
|
endpoint="/v1/chat/completions",
|
||||||
use_remote_service=True,
|
use_remote_service=True,
|
||||||
service_type=ServiceType.LLM,
|
service_type=ServiceType.LLM,
|
||||||
|
|||||||
125
CodeGen/docker_compose/intel/cpu/xeon/compose_remote.yaml
Normal file
125
CodeGen/docker_compose/intel/cpu/xeon/compose_remote.yaml
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
# Copyright (C) 2025 Intel Corporation
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
codegen-xeon-backend-server:
|
||||||
|
image: ${REGISTRY:-opea}/codegen:${TAG:-latest}
|
||||||
|
container_name: codegen-xeon-backend-server
|
||||||
|
ports:
|
||||||
|
- "7778:7778"
|
||||||
|
environment:
|
||||||
|
- no_proxy=${no_proxy}
|
||||||
|
- https_proxy=${https_proxy}
|
||||||
|
- http_proxy=${http_proxy}
|
||||||
|
- MEGA_SERVICE_HOST_IP=${MEGA_SERVICE_HOST_IP}
|
||||||
|
- LLM_SERVICE_HOST_IP=${REMOTE_ENDPOINT}
|
||||||
|
- OPENAI_API_KEY= ${OPENAI_API_KEY}
|
||||||
|
- RETRIEVAL_SERVICE_HOST_IP=${RETRIEVAL_SERVICE_HOST_IP}
|
||||||
|
- REDIS_RETRIEVER_PORT=${REDIS_RETRIEVER_PORT}
|
||||||
|
- TEI_EMBEDDING_HOST_IP=${TEI_EMBEDDING_HOST_IP}
|
||||||
|
- EMBEDDER_PORT=${EMBEDDER_PORT}
|
||||||
|
ipc: host
|
||||||
|
restart: always
|
||||||
|
codegen-xeon-ui-server:
|
||||||
|
image: ${REGISTRY:-opea}/codegen-gradio-ui:${TAG:-latest}
|
||||||
|
container_name: codegen-xeon-ui-server
|
||||||
|
depends_on:
|
||||||
|
- codegen-xeon-backend-server
|
||||||
|
ports:
|
||||||
|
- "5173:5173"
|
||||||
|
environment:
|
||||||
|
- no_proxy=${no_proxy}
|
||||||
|
- https_proxy=${https_proxy}
|
||||||
|
- http_proxy=${http_proxy}
|
||||||
|
- BASIC_URL=${BACKEND_SERVICE_ENDPOINT}
|
||||||
|
- MEGA_SERVICE_PORT=${MEGA_SERVICE_PORT}
|
||||||
|
- host_ip=${host_ip}
|
||||||
|
- DATAPREP_ENDPOINT=${DATAPREP_ENDPOINT}
|
||||||
|
- DATAPREP_REDIS_PORT=${DATAPREP_REDIS_PORT}
|
||||||
|
ipc: host
|
||||||
|
restart: always
|
||||||
|
redis-vector-db:
|
||||||
|
image: redis/redis-stack:7.2.0-v9
|
||||||
|
container_name: redis-vector-db
|
||||||
|
ports:
|
||||||
|
- "${REDIS_DB_PORT}:${REDIS_DB_PORT}"
|
||||||
|
- "${REDIS_INSIGHTS_PORT}:${REDIS_INSIGHTS_PORT}"
|
||||||
|
dataprep-redis-server:
|
||||||
|
image: ${REGISTRY:-opea}/dataprep:${TAG:-latest}
|
||||||
|
container_name: dataprep-redis-server
|
||||||
|
depends_on:
|
||||||
|
- redis-vector-db
|
||||||
|
ports:
|
||||||
|
- "${DATAPREP_REDIS_PORT}:5000"
|
||||||
|
environment:
|
||||||
|
no_proxy: ${no_proxy}
|
||||||
|
http_proxy: ${http_proxy}
|
||||||
|
https_proxy: ${https_proxy}
|
||||||
|
REDIS_URL: ${REDIS_URL}
|
||||||
|
REDIS_HOST: ${host_ip}
|
||||||
|
INDEX_NAME: ${INDEX_NAME}
|
||||||
|
HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN}
|
||||||
|
LOGFLAG: true
|
||||||
|
restart: unless-stopped
|
||||||
|
tei-embedding-serving:
|
||||||
|
image: ghcr.io/huggingface/text-embeddings-inference:cpu-1.5
|
||||||
|
container_name: tei-embedding-serving
|
||||||
|
entrypoint: /bin/sh -c "apt-get update && apt-get install -y curl && text-embeddings-router --json-output --model-id ${EMBEDDING_MODEL_ID} --auto-truncate"
|
||||||
|
ports:
|
||||||
|
- "${TEI_EMBEDDER_PORT:-12000}:80"
|
||||||
|
volumes:
|
||||||
|
- "./data:/data"
|
||||||
|
shm_size: 1g
|
||||||
|
environment:
|
||||||
|
no_proxy: ${no_proxy}
|
||||||
|
http_proxy: ${http_proxy}
|
||||||
|
https_proxy: ${https_proxy}
|
||||||
|
host_ip: ${host_ip}
|
||||||
|
HF_TOKEN: ${HUGGINGFACEHUB_API_TOKEN}
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://${host_ip}:${TEI_EMBEDDER_PORT}/health"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 6s
|
||||||
|
retries: 48
|
||||||
|
tei-embedding-server:
|
||||||
|
image: ${REGISTRY:-opea}/embedding:${TAG:-latest}
|
||||||
|
container_name: tei-embedding-server
|
||||||
|
ports:
|
||||||
|
- "${EMBEDDER_PORT:-10201}:6000"
|
||||||
|
ipc: host
|
||||||
|
environment:
|
||||||
|
no_proxy: ${no_proxy}
|
||||||
|
http_proxy: ${http_proxy}
|
||||||
|
https_proxy: ${https_proxy}
|
||||||
|
TEI_EMBEDDING_ENDPOINT: ${TEI_EMBEDDING_ENDPOINT}
|
||||||
|
EMBEDDING_COMPONENT_NAME: "OPEA_TEI_EMBEDDING"
|
||||||
|
depends_on:
|
||||||
|
tei-embedding-serving:
|
||||||
|
condition: service_healthy
|
||||||
|
restart: unless-stopped
|
||||||
|
retriever-redis:
|
||||||
|
image: ${REGISTRY:-opea}/retriever:${TAG:-latest}
|
||||||
|
container_name: retriever-redis
|
||||||
|
depends_on:
|
||||||
|
- redis-vector-db
|
||||||
|
ports:
|
||||||
|
- "${REDIS_RETRIEVER_PORT}:${REDIS_RETRIEVER_PORT}"
|
||||||
|
ipc: host
|
||||||
|
environment:
|
||||||
|
no_proxy: ${no_proxy}
|
||||||
|
http_proxy: ${http_proxy}
|
||||||
|
https_proxy: ${https_proxy}
|
||||||
|
REDIS_URL: ${REDIS_URL}
|
||||||
|
REDIS_DB_PORT: ${REDIS_DB_PORT}
|
||||||
|
REDIS_INSIGHTS_PORT: ${REDIS_INSIGHTS_PORT}
|
||||||
|
REDIS_RETRIEVER_PORT: ${REDIS_RETRIEVER_PORT}
|
||||||
|
INDEX_NAME: ${INDEX_NAME}
|
||||||
|
TEI_EMBEDDING_ENDPOINT: ${TEI_EMBEDDING_ENDPOINT}
|
||||||
|
HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN}
|
||||||
|
LOGFLAG: ${LOGFLAG}
|
||||||
|
RETRIEVER_COMPONENT_NAME: ${RETRIEVER_COMPONENT_NAME:-OPEA_RETRIEVER_REDIS}
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
driver: bridge
|
||||||
Reference in New Issue
Block a user