diff --git a/Dockerfile b/Dockerfile index 08cc86f725..6310b4be84 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,6 +17,7 @@ ENV GO111MODULE=on \ WORKDIR /build ADD go.mod go.sum ./ +RUN go env -w GOPROXY=https://goproxy.cn,direct RUN go mod download COPY . . diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000000..9c05c4e36e --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,82 @@ +# New-API Docker Compose Configuration +# +# Quick Start: +# 1. docker-compose up -d +# 2. Access at http://localhost:3000 +# +# Using MySQL instead of PostgreSQL: +# 1. Comment out the postgres service and SQL_DSN line 15 +# 2. Uncomment the mysql service and SQL_DSN line 16 +# 3. Uncomment mysql in depends_on (line 28) +# 4. Uncomment mysql_data in volumes section (line 64) +# +# ⚠️ IMPORTANT: Change all default passwords before deploying to production! + +version: '3.4' # For compatibility with older Docker versions + +services: + new-api: + image: lyonapi:latest + container_name: lyonapi + restart: always + command: --log-dir /app/logs + ports: + - "3000:3000" + volumes: + - ./data:/data + - ./logs:/app/logs + environment: + # - SQL_DSN=postgresql://root:123456@postgres:5432/new-api # ⚠️ IMPORTANT: Change the password in production! + - SQL_DSN=root:123456@tcp(mysql:3306)/new-api # Point to the mysql service, uncomment if using MySQL + - REDIS_CONN_STRING=redis://redis + - TZ=Asia/Shanghai + - ERROR_LOG_ENABLED=true # 是否启用错误日志记录 + - BATCH_UPDATE_ENABLED=true # 是否启用批量更新 batch update enabled +# - STREAMING_TIMEOUT=300 # 流模式无响应超时时间,单位秒,默认120秒,如果出现空补全可以尝试改为更大值 Streaming timeout in seconds, default is 120s. Increase if experiencing empty completions +# - SESSION_SECRET=random_string # 多机部署时设置,必须修改这个随机字符串!! multi-node deployment, set this to a random string!!!!!!! +# - SYNC_FREQUENCY=60 # Uncomment if regular database syncing is needed + + depends_on: + - redis + - mysql + # - postgres + + healthcheck: + test: ["CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + + redis: + image: redis:latest + container_name: lyonapi-redis + restart: always + + # postgres: + # image: postgres:15 + # container_name: lyonapi-postgres + # restart: always + # environment: + # POSTGRES_USER: root + # POSTGRES_PASSWORD: 123456 # ⚠️ IMPORTANT: Change this password in production! + # POSTGRES_DB: new-api + # volumes: + # - /data/new-api/pg:/var/lib/postgresql/data + # ports: + # - "5432:5432" # Uncomment if you need to access PostgreSQL from outside Docker + + mysql: + image: mysql:8.2 + container_name: lyonapi-mysql + restart: always + environment: + MYSQL_ROOT_PASSWORD: 123456 # ⚠️ IMPORTANT: Change this password in production! + MYSQL_DATABASE: new-api + volumes: + - /data/new-api/mysql:/var/lib/mysql + # ports: + # - "3306:3306" # Uncomment if you need to access MySQL from outside Docker + +# volumes: + # pg_data: + # mysql_data: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000000..c901edf75a --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,81 @@ +# New-API Docker Compose Configuration +# +# Quick Start: +# 1. docker-compose up -d +# 2. Access at http://localhost:3000 +# +# Using MySQL instead of PostgreSQL: +# 1. Comment out the postgres service and SQL_DSN line 15 +# 2. Uncomment the mysql service and SQL_DSN line 16 +# 3. Uncomment mysql in depends_on (line 28) +# 4. Uncomment mysql_data in volumes section (line 64) +# +# ⚠️ IMPORTANT: Change all default passwords before deploying to production! + +version: '3.4' # For compatibility with older Docker versions + +services: + new-api: + image: lyonapi:latest + container_name: lyonapi + restart: always + command: --log-dir /app/logs + ports: + - "3030:3000" + volumes: + - ./data:/data + - ./logs:/app/logs + environment: + # - SQL_DSN=postgresql://root:123456@postgres:5432/new-api # ⚠️ IMPORTANT: Change the password in production! + - SQL_DSN=root:123456@tcp(mysql:3306)/new-api # Point to the mysql service, uncomment if using MySQL + - REDIS_CONN_STRING=redis://redis + - TZ=Asia/Shanghai + - ERROR_LOG_ENABLED=true # 是否启用错误日志记录 + - BATCH_UPDATE_ENABLED=true # 是否启用批量更新 batch update enabled +# - STREAMING_TIMEOUT=300 # 流模式无响应超时时间,单位秒,默认120秒,如果出现空补全可以尝试改为更大值 Streaming timeout in seconds, default is 120s. Increase if experiencing empty completions +# - SESSION_SECRET=random_string # 多机部署时设置,必须修改这个随机字符串!! multi-node deployment, set this to a random string!!!!!!! +# - SYNC_FREQUENCY=60 # Uncomment if regular database syncing is needed + + depends_on: + - redis + # - postgres + - mysql # Uncomment if using MySQL + healthcheck: + test: ["CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + + redis: + image: redis:latest + container_name: lyonapi-redis + restart: always + + # postgres: + # image: postgres:15 + # container_name: lyonapi-postgres + # restart: always + # environment: + # POSTGRES_USER: root + # POSTGRES_PASSWORD: 123456 # ⚠️ IMPORTANT: Change this password in production! + # POSTGRES_DB: new-api + # volumes: + # - /data/new-api/pg:/var/lib/postgresql/data +# ports: +# - "5432:5432" # Uncomment if you need to access PostgreSQL from outside Docker + + mysql: + image: mysql:8.2 + container_name: mysql + restart: always + environment: + MYSQL_ROOT_PASSWORD: 123456 # ⚠️ IMPORTANT: Change this password in production! + MYSQL_DATABASE: new-api + volumes: + - /data/new-api/mysql:/var/lib/mysql + # ports: + # - "3306:3306" # Uncomment if you need to access MySQL from outside Docker + +# volumes: +# pg_data: +# mysql_data: diff --git a/docker-compose.yml b/docker-compose.yml index e657390a7e..90e1dc9155 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,7 +16,7 @@ version: '3.4' # For compatibility with older Docker versions services: new-api: - image: calciumion/new-api:latest + image: lyonapi:latest container_name: new-api restart: always command: --log-dir /app/logs diff --git a/relay/channel/openai/adaptor.go b/relay/channel/openai/adaptor.go index 1d8286a43e..0cf99728c7 100644 --- a/relay/channel/openai/adaptor.go +++ b/relay/channel/openai/adaptor.go @@ -157,7 +157,12 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) { // https://github.com/songquanpeng/one-api/issues/67 requestURL = fmt.Sprintf("/openai/deployments/%s/%s", model_, task) if info.RelayMode == relayconstant.RelayModeRealtime { - requestURL = fmt.Sprintf("/openai/realtime?deployment=%s&api-version=%s", model_, apiVersion) + // https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/real-time-speech-transcription-with-gpt-4o-transcribe-and-gpt-4o-mini-transcribe/4410353 + if strings.Contains(requestURL, "transcribe") { + requestURL = fmt.Sprintf("/openai/realtime?intent=transcription&api-version=%s", apiVersion) + } else { + requestURL = fmt.Sprintf("/openai/realtime?deployment=%s&api-version=%s", model_, apiVersion) + } } return relaycommon.GetFullRequestURL(info.ChannelBaseUrl, requestURL, info.ChannelType), nil case constant.ChannelTypeMiniMax: