Merge branch 'master' into develop

This commit is contained in:
zcr
2026-06-04 11:42:46 +08:00
11 changed files with 2043 additions and 2254 deletions

View File

@@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
REMOTE_DEPLOY_PATH: /workspace/Trinity/Fastapi_AiDA_Trinity_Dev REMOTE_DEPLOY_PATH: /workspace/AiDA_Workspace/Python_Server_Workspace/Dev
steps: steps:
- name: 1.检出代码 - name: 1.检出代码
@@ -35,6 +35,4 @@ jobs:
cd ${{ env.REMOTE_DEPLOY_PATH }} cd ${{ env.REMOTE_DEPLOY_PATH }}
docker-compose down 2>&1 docker-compose down 2>&1
docker-compose up -d --build --remove-orphans 2>&1 docker-compose up -d 2>&1
docker image prune -f 2>&1

View File

@@ -1,15 +1,15 @@
name: 定时 AiDA python develop 分支构建部署 name: 定时 AiDA python develop 分支构建部署
on: on:
# 使用 schedule 触发器,遵循标准的 Cron 格式 (分钟 小时-8 日期 月份 星期) # 使用 schedule 触发器,遵循标准的 Cron 格式 (分钟 小时-8 日期 月份 星期)
schedule: # schedule:
- cron: '30 9 * * *' # - cron: '30 9 * * *'
jobs: jobs:
scheduled_deploy: scheduled_deploy:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
REMOTE_DEPLOY_PATH: /workspace/Trinity/Fastapi_AiDA_Trinity_Dev REMOTE_DEPLOY_PATH: /workspace/AiDA_Workspace/Python_Server_Workspace/Dev
steps: steps:
- name: 1.检出代码 - name: 1.检出代码

View File

@@ -1,23 +1,19 @@
name: git commit AiDA python develop 分支构建部署 name: 手动 AiDA python develop 分支构建部署
on: on:
workflow_dispatch: workflow_dispatch:
push:
branches:
- develop
jobs: jobs:
scheduled_deploy: scheduled_deploy:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: "contains(github.event.head_commit.message, '[run build]')"
env: env:
REMOTE_DEPLOY_PATH: /workspace/Trinity/Fastapi_AiDA_Trinity_Dev REMOTE_DEPLOY_PATH: /workspace/AiDA_Workspace/Python_Server_Workspace/Dev
steps: steps:
- name: 1.检出代码 - name: 1.检出代码
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: 'develop' ref: 'dev-ltx'
- name: 2.复制文件到服务器 - name: 2.复制文件到服务器
uses: appleboy/scp-action@v0.1.7 uses: appleboy/scp-action@v0.1.7
@@ -28,7 +24,7 @@ jobs:
source: "." source: "."
target: ${{ env.REMOTE_DEPLOY_PATH }} target: ${{ env.REMOTE_DEPLOY_PATH }}
- name: Restart Docker containers - name: 3.重启docker-compose
uses: appleboy/ssh-action@v0.1.10 uses: appleboy/ssh-action@v0.1.10
with: with:
host: ${{ secrets.SERVER_HOST }} host: ${{ secrets.SERVER_HOST }}

View File

@@ -0,0 +1,40 @@
name: 定时 AiDA python prod 分支构建部署
on:
workflow_dispatch:
jobs:
scheduled_deploy:
runs-on: ubuntu-latest
env:
REMOTE_DEPLOY_PATH: /workspace/AiDA_Workspace/Python_Server_Workspace/Prod
steps:
- name: 1.检出代码
uses: actions/checkout@v4
with:
ref: 'master'
- name: 2.复制文件到服务器
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
password: ${{ secrets.SERVER_PASSWORD }}
source: "."
target: ${{ env.REMOTE_DEPLOY_PATH }}
- name: Restart Docker containers
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
password: ${{ secrets.SERVER_PASSWORD }}
script: |
# 进入项目目录
cd ${{ env.REMOTE_DEPLOY_PATH }}
docker-compose down 2>&1
docker-compose up -d 2>&1
docker image prune -f 2>&1

View File

@@ -0,0 +1,42 @@
name: 定时 AiDA python prod 分支构建部署
on:
# 使用 schedule 触发器,遵循标准的 Cron 格式 (分钟 小时-8 日期 月份 星期)
schedule:
- cron: '07 13 23 1 *'
jobs:
scheduled_deploy:
runs-on: ubuntu-latest
env:
REMOTE_DEPLOY_PATH: /workspace/AiDA_Workspace/Python_Server_Workspace/Prod
steps:
- name: 1.检出代码
uses: actions/checkout@v4
with:
ref: 'master'
- name: 2.复制文件到服务器
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
password: ${{ secrets.SERVER_PASSWORD }}
source: "."
target: ${{ env.REMOTE_DEPLOY_PATH }}
- name: Restart Docker containers
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
password: ${{ secrets.SERVER_PASSWORD }}
script: |
# 进入项目目录
cd ${{ env.REMOTE_DEPLOY_PATH }}
docker-compose down 2>&1
docker-compose up -d 2>&1
docker image prune -f 2>&1

1
.gitignore vendored
View File

@@ -151,3 +151,4 @@ app/logs/*
*.json *.json
*.env* *.env*
config.backup.py config.backup.py
*.pckl

View File

@@ -22,70 +22,67 @@ class Settings(BaseSettings):
""" """
应用配置类。Pydantic Settings 会自动从环境变量和 .env 文件中加载这些值。 应用配置类。Pydantic Settings 会自动从环境变量和 .env 文件中加载这些值。
""" """
model_config = SettingsConfigDict(
env_file='.env', model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore") # 忽略环境变量中多余的键
env_file_encoding='utf-8',
# extra='ignore' # 忽略环境变量中多余的键
)
# --- 服务端口配置信息 --- # --- 服务端口配置信息 ---
PORT: int = Field(default=8001, description="") PORT: int = Field(default=8001, description="")
# --- 服务环境 配置信息 --- # --- 服务环境 配置信息 ---
SERVE_ENV: str = Field(default='', description="") SERVE_ENV: str = Field(default="", description="")
# --- 开发状态 配置信息 --- # --- 开发状态 配置信息 ---
DEBUG: bool = Field(default=False, description="") DEBUG: bool = Field(default=False, description="")
# --- 千问api 配置信息 --- # --- 千问api 配置信息 ---
QWEN_API_KEY: str = Field(default="", description="") QWEN_API_KEY: str = Field(default="", description="")
# --- ComfyUI 配置信息 --- # --- ComfyUI 配置信息 ---
COMFYUI_SERVER_ADDRESS: str = Field(default='', description="") COMFYUI_SERVER_ADDRESS: str = Field(default="", description="")
# --- minio 配置信息 --- # --- minio 配置信息 ---
MINIO_URL: str = Field(default='', description="") MINIO_URL: str = Field(default="", description="")
MINIO_ACCESS: str = Field(default='', description="") MINIO_ACCESS: str = Field(default="", description="")
MINIO_SECRET: str = Field(default='', description="") MINIO_SECRET: str = Field(default="", description="")
MINIO_SECURE: bool = Field(default=True, description="") MINIO_SECURE: bool = Field(default=True, description="")
# --- redis 配置信息 --- # --- redis 配置信息 ---
REDIS_HOST: str = Field(default='', description="") REDIS_HOST: str = Field(default="", description="")
REDIS_PORT: str = Field(default='', description="") REDIS_PORT: str = Field(default="", description="")
REDIS_DB: int = Field(default=0, description="") REDIS_DB: int = Field(default=0, description="")
# --- mysql 配置信息 --- # --- mysql 配置信息 ---
MYSQL_HOST: str = Field(default='', description="") MYSQL_HOST: str = Field(default="", description="")
MYSQL_PORT: int = Field(default=3306, description="") MYSQL_PORT: int = Field(default=3306, description="")
MYSQL_USER: str = Field(default='', description="") MYSQL_USER: str = Field(default="", description="")
MYSQL_PASSWORD: str = Field(default='', description="") MYSQL_PASSWORD: str = Field(default="", description="")
MYSQL_DB: str = Field(default='', description="") MYSQL_DB: str = Field(default="", description="")
MYSQL_CHARSET: str = Field(default='utf8mb4', description="") MYSQL_CHARSET: str = Field(default="utf8mb4", description="")
# --- rabbit-mq 配置信息 --- # --- rabbit-mq 配置信息 ---
MQ_HOST: str = Field(default='', description="") MQ_HOST: str = Field(default="", description="")
MQ_PORT: str = Field(default='', description="") MQ_PORT: str = Field(default="", description="")
MQ_USERNAME: str = Field(default='', description="") MQ_USERNAME: str = Field(default="", description="")
MQ_PASSWORD: str = Field(default='', description="") MQ_PASSWORD: str = Field(default="", description="")
MQ_VIRTUAL_HOST: str = Field(default='/', description="") MQ_VIRTUAL_HOST: str = Field(default="/", description="")
MQ_ENV: str = Field(default='', description="") MQ_ENV: str = Field(default="", description="")
# --- milvus 配置信息 --- # --- milvus 配置信息 ---
MILVUS_URL: str = Field(default='', description="") MILVUS_URL: str = Field(default="", description="")
MILVUS_TOKEN: str = Field(default='', description="") MILVUS_TOKEN: str = Field(default="", description="")
MILVUS_ALIAS: str = Field(default='', description="") MILVUS_ALIAS: str = Field(default="", description="")
# --- ollama 配置信息 --- # --- ollama 配置信息 ---
CHROMADB_PATH: str = Field(default='', description="") CHROMADB_PATH: str = Field(default="", description="")
# --- ollama 配置信息 --- # --- ollama 配置信息 ---
OLLAMA_URL: str = Field(default='', description="") OLLAMA_URL: str = Field(default="", description="")
# --- Design Callback Java 接口 --- # --- Design Callback Java 接口 ---
JAVA_STREAM_API_URL: str = Field(default='', description="") JAVA_STREAM_API_URL: str = Field(default="", description="")
# --- flux2 klein model url --- # --- flux2 klein model url ---
FLUX2_GEN_IMG_MODEL_URL: str = Field(default='', description="") FLUX2_GEN_IMG_MODEL_URL: str = Field(default="", description="")
# --- 服务器IP --- # --- 服务器IP ---
A6000_SERVICE_HOST: str = Field(default='', description="") A6000_SERVICE_HOST: str = Field(default="", description="")
B_4_X_4090_SERVICE_HOST: str = Field(default='', description="") B_4_X_4090_SERVICE_HOST: str = Field(default="", description="")
# --- sketch to garment 模型url --- # --- sketch to garment 模型url ---
SKETCH_TO_GARMENT_URL: str = Field(default='', description="") SKETCH_TO_GARMENT_URL: str = Field(default='', description="")
@@ -96,6 +93,7 @@ class Settings(BaseSettings):
SEG_CACHE_PATH: str = Field(default="/seg_cache/", description="") SEG_CACHE_PATH: str = Field(default="/seg_cache/", description="")
RECOMMEND_PATH_PREFIX: str = Field(default="/app/service/recommend/", description="") RECOMMEND_PATH_PREFIX: str = Field(default="/app/service/recommend/", description="")
SERVE_PORT: int = Field(default=2010, description="") SERVE_PORT: int = Field(default=2010, description="")
sketch_to_garment_url: str = Field(default="", description="")
settings = Settings() settings = Settings()
@@ -110,36 +108,49 @@ TABLE_CATEGORIES = {
"female_blouse": "female/blouse", "female_blouse": "female/blouse",
"male_tops": "male/tops", "male_tops": "male/tops",
"male_bottoms": "male/bottoms", "male_bottoms": "male/bottoms",
"male_outwear": "male/outwear" "male_outwear": "male/outwear",
} }
# Design前后排优先级 # Design前后排优先级
PRIORITY_DICT = { PRIORITY_DICT = {
'earring_front': 99, "earring_front": 99,
'bag_front': 98, "bag_front": 98,
'hairstyle_front': 97, "hairstyle_front": 97,
'outwear_front': 20, "outwear_front": 20,
'tops_front': 19, "tops_front": 19,
'dress_front': 18, "dress_front": 18,
'blouse_front': 17, "blouse_front": 17,
'skirt_front': 16, "skirt_front": 16,
'trousers_front': 15, "trousers_front": 15,
'bottoms_front': 14, "bottoms_front": 14,
'shoes_right': 1, "shoes_right": 1,
'shoes_left': 1, "shoes_left": 1,
'body': 0, "body": 0,
'bottoms_back': -14, "bottoms_back": -14,
'trousers_back': -15, "trousers_back": -15,
'skirt_back': -16, "skirt_back": -16,
'blouse_back': -17, "blouse_back": -17,
'dress_back': -18, "dress_back": -18,
'tops_back': -19, "tops_back": -19,
'outwear_back': -20, "outwear_back": -20,
'hairstyle_back': -97, "hairstyle_back": -97,
'bag_back': -98, "bag_back": -98,
'earring_back': -99, "earring_back": -99,
} }
# Design 关键点字段 # Design 关键点字段
KEYPOINT_RESULT_TABLE_FIELD_SET = ('neckline_left', 'neckline_right', 'shoulder_left', 'shoulder_right', 'armpit_left', 'armpit_right', 'cuff_left_in', 'cuff_left_out', 'cuff_right_in', 'cuff_right_out', 'waistband_left', 'waistband_right') KEYPOINT_RESULT_TABLE_FIELD_SET = (
"neckline_left",
"neckline_right",
"shoulder_left",
"shoulder_right",
"armpit_left",
"armpit_right",
"cuff_left_in",
"cuff_left_out",
"cuff_right_in",
"cuff_right_out",
"waistband_left",
"waistband_right",
)
# milvus配置信息 # milvus配置信息
MILVUS_TABLE_KEYPOINT = "keypoint_cache_2" MILVUS_TABLE_KEYPOINT = "keypoint_cache_2"
@@ -148,37 +159,37 @@ OLLAMA_URL = f"http://{settings.A6000_SERVICE_HOST}:11434/api/embeddings"
"""Triton Server Config""" """Triton Server Config"""
# Design # Design
DESIGN_MODEL_URL = f'{settings.A6000_SERVICE_HOST}:10000' DESIGN_MODEL_URL = f"{settings.A6000_SERVICE_HOST}:10000"
DESIGN_MODEL_NAME = 'seg_knet' DESIGN_MODEL_NAME = "seg_knet"
# Seg Product # Seg Product
SEG_PRODUCT_MODEL_URL = f'{settings.B_4_X_4090_SERVICE_HOST}:30000' SEG_PRODUCT_MODEL_URL = f"{settings.B_4_X_4090_SERVICE_HOST}:30000"
# Generate Image # Generate Image
GI_MODEL_URL = f'{settings.A6000_SERVICE_HOST}:10061' GI_MODEL_URL = f"{settings.A6000_SERVICE_HOST}:10061"
GI_MODEL_NAME = 'flux' GI_MODEL_NAME = "flux"
# Generate Single Logo # Generate Single Logo
GSL_MODEL_URL = f'{settings.B_4_X_4090_SERVICE_HOST}:10041' GSL_MODEL_URL = f"{settings.B_4_X_4090_SERVICE_HOST}:10041"
GSL_MODEL_NAME = 'stable_diffusion_xl_transparent' GSL_MODEL_NAME = "stable_diffusion_xl_transparent"
# Generate Product (整套和单品) # Generate Product (整套和单品)
GPI_MODEL_URL = f'{settings.B_4_X_4090_SERVICE_HOST}:10051' GPI_MODEL_URL = f"{settings.B_4_X_4090_SERVICE_HOST}:10051"
GPI_MODEL_NAME_OVERALL = 'diffusion_ensemble_all' GPI_MODEL_NAME_OVERALL = "diffusion_ensemble_all"
GPI_MODEL_NAME_SINGLE = 'stable_diffusion_1_5_cnet' GPI_MODEL_NAME_SINGLE = "stable_diffusion_1_5_cnet"
# 以下停用中...************* # 以下停用中...*************
# 多视角生成 # 多视角生成
GMV_MODEL_URL = f'{settings.B_4_X_4090_SERVICE_HOST}:10081' GMV_MODEL_URL = f"{settings.B_4_X_4090_SERVICE_HOST}:10081"
GMV_MODEL_NAME = 'multi_view' GMV_MODEL_NAME = "multi_view"
# 超分 # 超分
SR_MODEL_NAME = "super_resolution" SR_MODEL_NAME = "super_resolution"
SR_TRITON_URL = f"{settings.A6000_SERVICE_HOST}:10031" SR_TRITON_URL = f"{settings.A6000_SERVICE_HOST}:10031"
# 打光 # 打光
GRI_MODEL_URL = f'{settings.A6000_SERVICE_HOST}:10051' GRI_MODEL_URL = f"{settings.A6000_SERVICE_HOST}:10051"
GRI_MODEL_NAME_OVERALL = 'diffusion_relight_ensemble' GRI_MODEL_NAME_OVERALL = "diffusion_relight_ensemble"
GRI_MODEL_NAME_SINGLE = 'stable_diffusion_1_5_relight' GRI_MODEL_NAME_SINGLE = "stable_diffusion_1_5_relight"
# agent 图片生成 # agent 图片生成
FAST_GI_MODEL_URL = f'{settings.B_4_X_4090_SERVICE_HOST}:10011' FAST_GI_MODEL_URL = f"{settings.B_4_X_4090_SERVICE_HOST}:10011"
FAST_GI_MODEL_NAME = 'stable_diffusion_xl' FAST_GI_MODEL_NAME = "stable_diffusion_xl"
# 图转视频 triton版 # 图转视频 triton版
PT_MODEL_URL = f'{settings.B_4_X_4090_SERVICE_HOST}:10061' PT_MODEL_URL = f"{settings.B_4_X_4090_SERVICE_HOST}:10061"
# ************* # *************

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,12 @@ from minio import Minio
from app.core.config import settings from app.core.config import settings
from app.service.utils.decorator import RunTime from app.service.utils.decorator import RunTime
minio_client = Minio(settings.MINIO_URL, access_key=settings.MINIO_ACCESS, secret_key=settings.MINIO_SECRET, secure=settings.MINIO_SECURE) minio_client = Minio(
settings.MINIO_URL,
access_key=settings.MINIO_ACCESS,
secret_key=settings.MINIO_SECRET,
secure=settings.MINIO_SECURE,
)
# 自定义 Retry 类 # 自定义 Retry 类
@@ -30,7 +35,7 @@ http_client = urllib3.PoolManager(
num_pools=10, # 设置连接池大小 num_pools=10, # 设置连接池大小
maxsize=10, maxsize=10,
timeout=timeout, timeout=timeout,
cert_reqs='CERT_REQUIRED', # 需要证书验证 cert_reqs="CERT_REQUIRED", # 需要证书验证
retries=CustomRetry( retries=CustomRetry(
total=5, total=5,
backoff_factor=0.2, backoff_factor=0.2,
@@ -51,7 +56,7 @@ def oss_get_image(oss_client, bucket, object_name, data_type):
image_array = np.frombuffer(image_bytes, np.uint8) # 转成8位无符号整型 image_array = np.frombuffer(image_bytes, np.uint8) # 转成8位无符号整型
image_object = cv2.imdecode(image_array, cv2.IMREAD_UNCHANGED) image_object = cv2.imdecode(image_array, cv2.IMREAD_UNCHANGED)
if image_object.dtype == np.uint16: if image_object.dtype == np.uint16:
image_object = (image_object / 256).astype('uint8') image_object = (image_object / 256).astype("uint8")
else: else:
data_bytes = BytesIO(image_data.read()) data_bytes = BytesIO(image_data.read())
image_object = Image.open(data_bytes) image_object = Image.open(data_bytes)
@@ -63,13 +68,19 @@ def oss_get_image(oss_client, bucket, object_name, data_type):
def oss_upload_image(oss_client, bucket, object_name, image_bytes): def oss_upload_image(oss_client, bucket, object_name, image_bytes):
req = None req = None
try: try:
req = oss_client.put_object(bucket_name=bucket, object_name=object_name, data=io.BytesIO(image_bytes), length=len(image_bytes), content_type='image/png') req = oss_client.put_object(
bucket_name=bucket,
object_name=object_name,
data=io.BytesIO(image_bytes),
length=len(image_bytes),
content_type="image/png",
)
except Exception as e: except Exception as e:
logger.warning(f" | 上传图片出现异常 ######: {e}") logger.warning(f" | 上传图片出现异常 ######: {e}")
return req return req
if __name__ == '__main__': if __name__ == "__main__":
# url = "aida-results/result_0002186a-e631-11ee-86a6-b48351119060.png" # url = "aida-results/result_0002186a-e631-11ee-86a6-b48351119060.png"
# url = "aida-collection-element/11523/Moodboard/f60af0d2-94c2-48f9-90ff-74b8e8a481b5.jpg" # url = "aida-collection-element/11523/Moodboard/f60af0d2-94c2-48f9-90ff-74b8e8a481b5.jpg"
# url = "aida-sys-image/images/female/outwear/0628000054.jpg" # url = "aida-sys-image/images/female/outwear/0628000054.jpg"
@@ -81,16 +92,26 @@ if __name__ == '__main__':
# url = "aida-users/89/sketchboard/female/Dress/e6724ab7-8d3f-4677-abe0-c3e42ab7af85.jpeg" # url = "aida-users/89/sketchboard/female/Dress/e6724ab7-8d3f-4677-abe0-c3e42ab7af85.jpeg"
# url = "aida-users/87/print/956614a2-7e75-4fbe-9ed0-c1831e37a2c9-4-87.png" # url = "aida-users/87/print/956614a2-7e75-4fbe-9ed0-c1831e37a2c9-4-87.png"
# url = "aida-users/89/single_logo/123-89.png" # url = "aida-users/89/single_logo/123-89.png"
url = "aida-results/result_a7adcbd8-ef8d-11f0-8c92-0966ede33ab5.png" url = "aida-collection-element/26293/Sketchboard/b503d482-3334-46e7-9dee-44e380fb4294.png"
# url = "aida-collection-element/12148/Sketchboard/95ea577b-305b-4a62-b30a-39c0dd3ddb3f.png" # url = "aida-collection-element/12148/Sketchboard/95ea577b-305b-4a62-b30a-39c0dd3ddb3f.png"
read_type = "2" read_type = "2"
if read_type == "cv2": if read_type == "cv2":
img = oss_get_image(oss_client=minio_client, bucket=url.split('/')[0], object_name=url[url.find('/') + 1:], data_type=read_type) img = oss_get_image(
oss_client=minio_client,
bucket=url.split("/")[0],
object_name=url[url.find("/") + 1 :],
data_type=read_type,
)
cv2.imshow("", img) cv2.imshow("", img)
cv2.waitKey(0) cv2.waitKey(0)
else: else:
img = oss_get_image(oss_client=minio_client, bucket=url.split('/')[0], object_name=url[url.find('/') + 1:], data_type=read_type) img = oss_get_image(
oss_client=minio_client,
bucket=url.split("/")[0],
object_name=url[url.find("/") + 1 :],
data_type=read_type,
)
draw = ImageDraw.Draw(img) draw = ImageDraw.Draw(img)
# 获取图片尺寸 # 获取图片尺寸
width, height = img.size width, height = img.size
@@ -103,7 +124,7 @@ if __name__ == '__main__':
draw.line( draw.line(
[(center_x, 0), (center_x, height)], # 从顶部到底部的垂直线 [(center_x, 0), (center_x, height)], # 从顶部到底部的垂直线
fill=(255, 0, 0), # 红色 (R, G, B) fill=(255, 0, 0), # 红色 (R, G, B)
width=2 # 线宽 width=2, # 线宽
) )
img.show() img.show()

View File

@@ -13,12 +13,16 @@ dependencies = [
"celery-types>=0.23.0", "celery-types>=0.23.0",
"chromadb>=1.3.7", "chromadb>=1.3.7",
"dashscope>=1.25.5", "dashscope>=1.25.5",
"deepagents>=0.6.7",
"dominate>=2.9.1", "dominate>=2.9.1",
"dotenv>=0.9.9", "dotenv>=0.9.9",
"fastapi[standard]>=0.125.0", "fastapi[standard]>=0.125.0",
"image>=1.5.33", "image>=1.5.33",
"langchain>=1.2.0", "langchain>=1.2.0",
"langchain-community>=0.4.1", "langchain-community>=0.4.1",
"langchain-qwq>=0.3.5",
"langgraph>=1.0.5",
"langgraph-cli[inmem,redis]<=0.4.26",
"load>=1.0.14", "load>=1.0.14",
"load-dotenv>=0.1.0", "load-dotenv>=0.1.0",
"loguru>=0.7.3", "loguru>=0.7.3",
@@ -50,6 +54,6 @@ dependencies = [
"tool>=0.8.0", "tool>=0.8.0",
"torch>=2.9.1", "torch>=2.9.1",
"torchvision>=0.24.1", "torchvision>=0.24.1",
"tritonclient[all]>=2.63.0", "tritonclient[all]>=2.69.0",
"uvicorn>=0.38.0", "uvicorn>=0.38.0",
] ]

2425
uv.lock generated

File diff suppressed because it is too large Load Diff