diff --git a/backend/api/api_auth.py b/backend/api/api_auth.py index 1f5145c..83100f0 100644 --- a/backend/api/api_auth.py +++ b/backend/api/api_auth.py @@ -139,7 +139,9 @@ async def get_profile(request: Request) -> UserInfo: """ if not settings.LDAP_ENABLED: - return UserInfo(username="anonymous", display_name="anonymous", email=None) + return UserInfo( + username="anonymous", display_name="anonymous", email=None, is_admin=True + ) user = get_current_user(request) username = user.get("sub", user.get("username", "")) diff --git a/backend/api/api_collection.py b/backend/api/api_collection.py new file mode 100644 index 0000000..ac2d0ff --- /dev/null +++ b/backend/api/api_collection.py @@ -0,0 +1,79 @@ +""" +Author: Charm +Copyright (c) 2025, All Rights Reserved. +""" + +from typing import Any, Dict, Optional + +from fastapi import APIRouter, Query, Request + +from model.collection import ( + CollectionCreateRequest, + CollectionTaskAddRequest, + CollectionUpdateRequest, +) +from service.collection_service import ( + add_task_to_collection_svc, + create_collection_svc, + delete_collection_svc, + get_collection_svc, + list_collection_tasks_svc, + list_collections_svc, + remove_task_from_collection_svc, + update_collection_svc, +) + +router = APIRouter() + + +@router.post("", response_model=Dict[str, Any]) +async def create_collection( + request: Request, collection_create: CollectionCreateRequest +): + return await create_collection_svc(request, collection_create) + + +@router.get("", response_model=Dict[str, Any]) +async def list_collections( + request: Request, + page: int = Query(1, ge=1), + page_size: int = Query(10, ge=1, le=100), + search: Optional[str] = None, +): + return await list_collections_svc(request, page, page_size, search) + + +@router.get("/{collection_id}", response_model=Dict[str, Any]) +async def get_collection(request: Request, collection_id: str): + return await get_collection_svc(request, collection_id) + + +@router.put("/{collection_id}", response_model=Dict[str, Any]) +async def update_collection( + request: Request, collection_id: str, collection_update: CollectionUpdateRequest +): + return await update_collection_svc(request, collection_id, collection_update) + + +@router.delete("/{collection_id}", response_model=Dict[str, Any]) +async def delete_collection(request: Request, collection_id: str): + return await delete_collection_svc(request, collection_id) + + +@router.post("/{collection_id}/tasks", response_model=Dict[str, Any]) +async def add_task_to_collection( + request: Request, collection_id: str, task_req: CollectionTaskAddRequest +): + return await add_task_to_collection_svc(request, collection_id, task_req) + + +@router.delete("/{collection_id}/tasks/{task_id}", response_model=Dict[str, Any]) +async def remove_task_from_collection( + request: Request, collection_id: str, task_id: str +): + return await remove_task_from_collection_svc(request, collection_id, task_id) + + +@router.get("/{collection_id}/tasks", response_model=Dict[str, Any]) +async def list_collection_tasks(request: Request, collection_id: str): + return await list_collection_tasks_svc(request, collection_id) diff --git a/backend/api/api_log.py b/backend/api/api_log.py index 0b21185..442e8bd 100644 --- a/backend/api/api_log.py +++ b/backend/api/api_log.py @@ -4,9 +4,14 @@ """ from fastapi import APIRouter, Query +from fastapi.responses import FileResponse from model.log import LogContentResponse -from service.log_service import get_service_log_svc, get_task_log_svc +from service.log_service import ( + download_task_log_svc, + get_service_log_svc, + get_task_log_svc, +) # Create an API router for log-related endpoints router = APIRouter() @@ -38,6 +43,7 @@ async def get_task_log( task_id: str, offset: int = Query(default=0), tail: int = Query(default=0), + source: str = Query(default="engine", description="Log source: engine or backend"), ): """ Get the log content of a specified task. @@ -46,9 +52,21 @@ async def get_task_log( task_id (str): The ID of the task. offset (int): The offset in bytes from the beginning of the log file. Ineffective when tail > 0. tail (int): The number of lines to read from the end of the log file. When tail > 0, offset is ignored. + source (str): The source of the log ("engine" or "backend"). Returns: LogContentResponse: An object containing the log content. By default (offset=0, tail=0), the entire log file is read. """ - return await get_task_log_svc(task_id, offset, tail) + return await get_task_log_svc(task_id, offset, tail, source) + + +@router.get("/task/{task_id}/download", response_class=FileResponse) +async def download_task_log( + task_id: str, + source: str = Query(default="engine", description="Log source: engine or backend"), +): + """ + Download the full output log for a given task. + """ + return await download_task_log_svc(task_id, source) diff --git a/backend/app.py b/backend/app.py index d2076d1..3e515d1 100644 --- a/backend/app.py +++ b/backend/app.py @@ -11,6 +11,7 @@ from api.api_analysis import router as analysis from api.api_auth import router as auth +from api.api_collection import router as collection from api.api_http_task import router as http_task from api.api_llm_task import router as llm_task from api.api_log import router as log @@ -121,6 +122,7 @@ def read_root(): # add api routers app.include_router(analysis, prefix="/api/analyze", tags=["analysis"]) app.include_router(auth, prefix="/api/auth", tags=["auth"]) +app.include_router(collection, prefix="/api/collections", tags=["collections"]) app.include_router(system, prefix="/api/system", tags=["system"]) app.include_router(llm_task, prefix="/api/llm-tasks", tags=["llm-tasks"]) app.include_router(http_task, prefix="/api/http-tasks", tags=["http-tasks"]) diff --git a/backend/model/collection.py b/backend/model/collection.py new file mode 100644 index 0000000..703514c --- /dev/null +++ b/backend/model/collection.py @@ -0,0 +1,107 @@ +""" +Author: Charm +Copyright (c) 2025, All Rights Reserved. +""" + +from typing import List, Optional + +from pydantic import BaseModel, Field +from sqlalchemy import Column, DateTime, Integer, String, Text, UniqueConstraint +from sqlalchemy.sql import func + +from db.mysql import Base + + +class Collection(Base): + """ + SQLAlchemy model representing a collection in the 'collections' table. + """ + + __tablename__ = "collections" + + id = Column(String(40), primary_key=True, index=True) + name = Column(String(255), nullable=False) + description = Column(Text, nullable=True) + rich_content = Column(Text, nullable=True) + created_by = Column(String(100), nullable=True) + is_public = Column(Integer, nullable=False, default=1, server_default="1") + created_at = Column(DateTime, server_default=func.now()) + updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) + + +class CollectionTask(Base): + """ + SQLAlchemy model representing the many-to-many relationship between collections and tasks. + """ + + __tablename__ = "collection_tasks" + + id = Column(Integer, primary_key=True, autoincrement=True) + collection_id = Column(String(40), nullable=False, index=True) + task_id = Column(String(40), nullable=False, index=True) + task_type = Column(String(16), nullable=False) + created_at = Column(DateTime, server_default=func.now()) + + __table_args__ = ( + UniqueConstraint("collection_id", "task_id", name="uk_collection_task"), + ) + + +# Pydantic models for API +class CollectionCreateRequest(BaseModel): + """Payload for creating a collection.""" + + name: str = Field(..., description="Collection name") + description: Optional[str] = Field(None, description="Collection description") + rich_content: Optional[str] = Field(None, description="Rich text content") + is_public: Optional[bool] = Field( + True, description="Whether the collection is public" + ) + + +class CollectionUpdateRequest(BaseModel): + """Payload for partially updating a collection.""" + + name: Optional[str] = Field(None, description="Collection name") + description: Optional[str] = Field(None, description="Collection description") + rich_content: Optional[str] = Field(None, description="Rich text content") + is_public: Optional[bool] = Field( + None, description="Whether the collection is public" + ) + + +class CollectionTaskAddRequest(BaseModel): + """Payload for adding a task into a collection.""" + + task_id: str = Field(..., description="Task ID") + task_type: str = Field(..., description="Task type: http or llm") + + +class CollectionTaskRemoveRequest(BaseModel): + """Payload for removing a task from a collection.""" + + task_id: str = Field(..., description="Task ID") + + +class CollectionTaskResponse(BaseModel): + """Response schema for a collection-task relation row.""" + + id: int + collection_id: str + task_id: str + task_type: str + created_at: str + + +class CollectionResponse(BaseModel): + """Response schema for collection detail/list items.""" + + id: str + name: str + description: Optional[str] + rich_content: Optional[str] + created_by: Optional[str] + is_public: bool + created_at: str + updated_at: str + task_count: int = 0 diff --git a/backend/model/log.py b/backend/model/log.py index ca28f28..2ceae48 100644 --- a/backend/model/log.py +++ b/backend/model/log.py @@ -13,7 +13,9 @@ class LogContentResponse(BaseModel): Attributes: content: The content of the log file as a string. file_size: The size of the log file in bytes. + log_url: Optional URL to download the full log file. """ content: str file_size: int + log_url: str | None = None diff --git a/backend/service/collection_service.py b/backend/service/collection_service.py new file mode 100644 index 0000000..22955a2 --- /dev/null +++ b/backend/service/collection_service.py @@ -0,0 +1,329 @@ +""" +Author: Charm +Copyright (c) 2025, All Rights Reserved. +""" + +import uuid +from typing import Any, Dict, Optional, cast + +from fastapi import Request +from sqlalchemy import delete, desc, func, or_, select +from sqlalchemy.ext.asyncio import AsyncSession + +from model.collection import ( + Collection, + CollectionCreateRequest, + CollectionTask, + CollectionTaskAddRequest, + CollectionUpdateRequest, +) +from model.http_task import HttpTask +from model.llm_task import Task as LlmTask +from utils.auth import get_current_user, is_admin_user +from utils.error_handler import ErrorResponse + + +def _resolve_username(request: Request) -> str: + user_info = get_current_user(request) + return ( + user_info.get("username") + or user_info.get("sub") + or user_info.get("name") + or "system" + ) + + +def _check_collection_permission(username: str, collection: Collection) -> None: + if not is_admin_user(username) and collection.created_by != username: + raise ErrorResponse.forbidden( + "You do not have permission to modify this collection" + ) + + +def _serialize_collection( + collection: Collection, + task_count: int = 0, +) -> Dict[str, Any]: + return { + "id": collection.id, + "name": collection.name, + "description": collection.description, + "rich_content": collection.rich_content, + "created_by": collection.created_by, + "is_public": bool(collection.is_public), + "created_at": str(collection.created_at), + "updated_at": str(collection.updated_at), + "task_count": task_count, + } + + +async def _get_collection_or_404(db: AsyncSession, collection_id: str) -> Collection: + result = await db.execute(select(Collection).where(Collection.id == collection_id)) + collection = result.scalar_one_or_none() + if not collection: + raise ErrorResponse.not_found("Collection not found") + return collection + + +async def create_collection_svc( + request: Request, collection_create: CollectionCreateRequest +) -> Dict[str, Any]: + db: AsyncSession = request.state.db + username = _resolve_username(request) + + db_collection = Collection( + id=str(uuid.uuid4()), + name=collection_create.name.strip(), + description=collection_create.description, + rich_content=collection_create.rich_content, + created_by=username, + is_public=1 if collection_create.is_public else 0, + ) + db.add(db_collection) + await db.flush() + await db.refresh(db_collection) + return _serialize_collection(db_collection, task_count=0) + + +async def update_collection_svc( + request: Request, + collection_id: str, + collection_update: CollectionUpdateRequest, +) -> Dict[str, Any]: + db: AsyncSession = request.state.db + username = _resolve_username(request) + db_collection = await _get_collection_or_404(db, collection_id) + _check_collection_permission(username, db_collection) + db_collection_obj = cast(Any, db_collection) + + if collection_update.name is not None: + db_collection_obj.name = collection_update.name.strip() + if collection_update.description is not None: + db_collection_obj.description = collection_update.description + if collection_update.rich_content is not None: + db_collection_obj.rich_content = collection_update.rich_content + if collection_update.is_public is not None: + db_collection_obj.is_public = 1 if collection_update.is_public else 0 + + await db.flush() + await db.refresh(db_collection) + return await get_collection_svc(request, collection_id) + + +async def get_collection_svc(request: Request, collection_id: str) -> Dict[str, Any]: + db: AsyncSession = request.state.db + db_collection = await _get_collection_or_404(db, collection_id) + + task_count = await db.scalar( + select(func.count(CollectionTask.id)).where( + CollectionTask.collection_id == collection_id + ) + ) + return _serialize_collection(db_collection, task_count=task_count or 0) + + +async def list_collections_svc( + request: Request, + page: int = 1, + page_size: int = 10, + search: Optional[str] = None, +) -> Dict[str, Any]: + db: AsyncSession = request.state.db + username = _resolve_username(request) + + base_query = select(Collection).where( + or_(Collection.is_public == 1, Collection.created_by == username) + ) + if search: + search_filter = f"%{search.strip()}%" + base_query = base_query.where( + or_( + Collection.name.ilike(search_filter), + Collection.created_by.ilike(search_filter), + ) + ) + + total = await db.scalar(select(func.count()).select_from(base_query.subquery())) + page_query = ( + base_query.order_by(desc(Collection.created_at)) + .offset((page - 1) * page_size) + .limit(page_size) + ) + result = await db.execute(page_query) + collections = result.scalars().all() + + collection_ids = [str(item.id) for item in collections] + task_counts: Dict[str, int] = {} + if collection_ids: + count_result = await db.execute( + select( + CollectionTask.collection_id, + func.count(CollectionTask.id).label("task_count"), + ) + .where(CollectionTask.collection_id.in_(collection_ids)) + .group_by(CollectionTask.collection_id) + ) + task_counts = { + str(row.collection_id): int(row.task_count) for row in count_result.all() + } + + return { + "data": [ + _serialize_collection(item, task_count=task_counts.get(str(item.id), 0)) + for item in collections + ], + "pagination": { + "total": int(total or 0), + "page": page, + "page_size": page_size, + "total_pages": ( + ((int(total or 0) + page_size - 1) // page_size) if page_size > 0 else 0 + ), + }, + } + + +async def delete_collection_svc(request: Request, collection_id: str) -> Dict[str, Any]: + db: AsyncSession = request.state.db + username = _resolve_username(request) + db_collection = await _get_collection_or_404(db, collection_id) + _check_collection_permission(username, db_collection) + + await db.execute( + delete(CollectionTask).where(CollectionTask.collection_id == collection_id) + ) + await db.execute(delete(Collection).where(Collection.id == collection_id)) + return {"message": "Collection deleted successfully"} + + +async def add_task_to_collection_svc( + request: Request, + collection_id: str, + task_req: CollectionTaskAddRequest, +) -> Dict[str, Any]: + db: AsyncSession = request.state.db + username = _resolve_username(request) + db_collection = await _get_collection_or_404(db, collection_id) + _check_collection_permission(username, db_collection) + + task_type = (task_req.task_type or "").strip().lower() + if task_type not in {"http", "llm"}: + raise ErrorResponse.bad_request("task_type must be either 'http' or 'llm'") + + existing = await db.execute( + select(CollectionTask).where( + CollectionTask.collection_id == collection_id, + CollectionTask.task_id == task_req.task_id, + ) + ) + if existing.scalar_one_or_none(): + return {"message": "Task already in collection"} + + if task_type == "http": + task_exists = await db.scalar( + select(HttpTask.id).where(HttpTask.id == task_req.task_id) + ) + else: + task_exists = await db.scalar( + select(LlmTask.id).where(LlmTask.id == task_req.task_id) + ) + if not task_exists: + raise ErrorResponse.not_found("Task not found") + + db.add( + CollectionTask( + collection_id=collection_id, + task_id=task_req.task_id, + task_type=task_type, + ) + ) + await db.flush() + return {"message": "Task added to collection successfully"} + + +async def remove_task_from_collection_svc( + request: Request, + collection_id: str, + task_id: str, +) -> Dict[str, Any]: + db: AsyncSession = request.state.db + username = _resolve_username(request) + db_collection = await _get_collection_or_404(db, collection_id) + _check_collection_permission(username, db_collection) + + result = await db.execute( + delete(CollectionTask).where( + CollectionTask.collection_id == collection_id, + CollectionTask.task_id == task_id, + ) + ) + if not result.rowcount: + raise ErrorResponse.not_found("Task not found in collection") + return {"message": "Task removed from collection successfully"} + + +async def list_collection_tasks_svc( + request: Request, collection_id: str +) -> Dict[str, Any]: + db: AsyncSession = request.state.db + await _get_collection_or_404(db, collection_id) + + relation_result = await db.execute( + select(CollectionTask).where(CollectionTask.collection_id == collection_id) + ) + collection_tasks = relation_result.scalars().all() + + http_task_ids = [ + item.task_id for item in collection_tasks if item.task_type == "http" + ] + llm_task_ids = [ + item.task_id for item in collection_tasks if item.task_type == "llm" + ] + + result_tasks: list[Dict[str, Any]] = [] + if http_task_ids: + http_result = await db.execute( + select(HttpTask).where( + HttpTask.id.in_(http_task_ids), + HttpTask.is_deleted == 0, + ) + ) + for task in http_result.scalars().all(): + result_tasks.append( + { + "id": task.id, + "name": task.name, + "status": task.status, + "task_type": "http", + "created_by": task.created_by, + "created_at": str(task.created_at), + "concurrent_users": task.concurrent_users, + "duration": task.duration, + } + ) + + if llm_task_ids: + llm_result = await db.execute( + select(LlmTask).where( + LlmTask.id.in_(llm_task_ids), + LlmTask.is_deleted == 0, + ) + ) + for task in llm_result.scalars().all(): + result_tasks.append( + { + "id": task.id, + "name": task.name, + "status": task.status, + "task_type": "llm", + "created_by": task.created_by, + "created_at": str(task.created_at), + "concurrent_users": task.concurrent_users, + "duration": task.duration, + "model": task.model, + "api_type": task.api_type, + } + ) + + result_tasks.sort(key=lambda item: str(item["created_at"]), reverse=True) + return {"data": result_tasks} diff --git a/backend/service/http_task_service.py b/backend/service/http_task_service.py index a8f8afd..cf08356 100644 --- a/backend/service/http_task_service.py +++ b/backend/service/http_task_service.py @@ -441,7 +441,8 @@ async def test_http_api_svc(request: Request, body: HttpTaskTestReq) -> Dict[str effective_body = body.request_body if method not in _no_body_methods else None json_payload, text_payload = _prepare_request_body(effective_body) - timeout_config = httpx.Timeout(connect=10.0, read=30.0, write=10.0, pool=5.0) + # Set 30 minutes timeout for testing API endpoints + timeout_config = httpx.Timeout(1800.0) limits = httpx.Limits(max_keepalive_connections=20, max_connections=100) try: diff --git a/backend/service/llm_task_service.py b/backend/service/llm_task_service.py index bd6fe7a..1e4aef6 100644 --- a/backend/service/llm_task_service.py +++ b/backend/service/llm_task_service.py @@ -1194,13 +1194,8 @@ async def test_llm_api_svc(request: Request, body: TaskTestReq): # Prepare certificate configuration client_cert = _prepare_client_cert(body) - # Optimized timeout settings - timeout_config = httpx.Timeout( - connect=10.0, # connect timeout: 10s - read=30.0, # read timeout: 30s (for testing purposes, not too long) - write=10.0, # write timeout: 10s - pool=5.0, # pool timeout: 5s - ) + # Set 30 minutes timeout for testing API endpoints as some LLM models may take a long time + timeout_config = httpx.Timeout(1800.0) # Use connection limits for better performance limits = httpx.Limits(max_keepalive_connections=20, max_connections=100) diff --git a/backend/service/log_service.py b/backend/service/log_service.py index 5d33ca8..84ddb68 100644 --- a/backend/service/log_service.py +++ b/backend/service/log_service.py @@ -6,6 +6,11 @@ import os import os.path import re +import tempfile +import zipfile + +from fastapi.responses import FileResponse +from starlette.background import BackgroundTask from model.log import LogContentResponse from utils.be_config import LOG_DIR @@ -172,7 +177,9 @@ async def get_service_log_svc(service_name: str, offset: int, tail: int): raise ErrorResponse.internal_server_error(ErrorMessages.LOG_FILE_READ_FAILED) -async def get_task_log_svc(task_id: str, offset: int, tail: int): +async def get_task_log_svc( + task_id: str, offset: int, tail: int, source: str = "engine" +): """ Service function to get the log content for a given task ID. @@ -185,7 +192,10 @@ async def get_task_log_svc(task_id: str, offset: int, tail: int): if not _SAFE_NAME_PATTERN.match(task_id): raise ErrorResponse.bad_request("Invalid task ID") - log_file_path = os.path.join(LOG_DIR, "task", f"task_{task_id}.log") + if source not in ["engine", "backend"]: + raise ErrorResponse.bad_request("Invalid log source") + + log_file_path = os.path.join(LOG_DIR, "task", f"task_{task_id}_{source}.log") # Ensure resolved path stays within LOG_DIR to prevent path traversal resolved_path = os.path.realpath(log_file_path) @@ -200,7 +210,135 @@ async def get_task_log_svc(task_id: str, offset: int, tail: int): try: content = read_local_file(log_file_path, tail, offset) file_size = os.path.getsize(log_file_path) - return LogContentResponse(content=content, file_size=file_size) + log_url = f"/logs/task/{task_id}/download?source={source}" + return LogContentResponse(content=content, file_size=file_size, log_url=log_url) except Exception as e: logger.error("Failed to read log file {}: {}", log_file_path, e) raise ErrorResponse.internal_server_error(ErrorMessages.LOG_FILE_READ_FAILED) + + +def _find_engine_log_files(resolved_task_log_dir: str, task_id: str) -> list[str]: + related_files = [] + prefix_detail = f"task_{task_id}_engine_detail.log" + prefix_detail_rotated = f"task_{task_id}_engine_detail." + prefix_legacy_detail = f"task_{task_id}_detail.log" + prefix_legacy_detail_rotated = f"task_{task_id}_detail." + + prefix_main = f"task_{task_id}_engine.log" + prefix_main_rotated = f"task_{task_id}_engine." + prefix_legacy_main = f"task_{task_id}.log" + prefix_legacy_rotated = f"task_{task_id}." + + for filename in os.listdir(resolved_task_log_dir): + if ( + filename == prefix_detail + or filename.startswith(prefix_detail_rotated) + or filename == prefix_legacy_detail + or filename.startswith(prefix_legacy_detail_rotated) + ): + related_files.append(os.path.join(resolved_task_log_dir, filename)) + + # If no detail logs found, fallback to main logs + if not related_files: + for filename in os.listdir(resolved_task_log_dir): + if ( + filename == prefix_main + or filename.startswith(prefix_main_rotated) + or filename == prefix_legacy_main + or ( + filename.startswith(prefix_legacy_rotated) + and "detail" not in filename + and "engine" not in filename + and "backend" not in filename + ) + ): + related_files.append(os.path.join(resolved_task_log_dir, filename)) + return related_files + + +def _find_backend_log_files(resolved_task_log_dir: str, task_id: str) -> list[str]: + related_files = [] + prefix_main = f"task_{task_id}_backend.log" + prefix_main_rotated = f"task_{task_id}_backend." + + for filename in os.listdir(resolved_task_log_dir): + if filename == prefix_main or filename.startswith(prefix_main_rotated): + related_files.append(os.path.join(resolved_task_log_dir, filename)) + return related_files + + +async def download_task_log_svc(task_id: str, source: str = "engine"): + """ + Download the full log file for a given task ID based on the log source. + If logs have rotated or detail logs exist, package all of them into a zip file. + """ + if not task_id: + raise ErrorResponse.bad_request(ErrorMessages.TASK_ID_EMPTY) + + if not _SAFE_NAME_PATTERN.match(task_id): + raise ErrorResponse.bad_request("Invalid task ID") + + if source not in ["engine", "backend"]: + raise ErrorResponse.bad_request("Invalid log source") + + task_log_dir = os.path.join(LOG_DIR, "task") + log_dir_real = os.path.realpath(LOG_DIR) + os.sep + resolved_task_log_dir = os.path.realpath(task_log_dir) + + if not resolved_task_log_dir.startswith(log_dir_real): + raise ErrorResponse.bad_request("Invalid task ID") + + if not os.path.exists(resolved_task_log_dir): + logger.warning("Task log directory not found") + raise ErrorResponse.not_found(f"Log directory for task '{task_id}' not found") + + # Find all log files related to this task + if source == "engine": + related_files = _find_engine_log_files(resolved_task_log_dir, task_id) + elif source == "backend": + related_files = _find_backend_log_files(resolved_task_log_dir, task_id) + else: + related_files = [] + + if not related_files: + logger.warning("Log files not found for task: {}", task_id) + raise ErrorResponse.not_found(f"Log file for task '{task_id}' not found") + + # If there's only one file and it's a plain log, return it directly + if len(related_files) == 1 and related_files[0].endswith(".log"): + return FileResponse( + path=related_files[0], + filename=os.path.basename(related_files[0]), + media_type="text/plain", + ) + + # Otherwise, package all related files into a zip archive + temp_fd, temp_zip_path = tempfile.mkstemp( + suffix=".zip", prefix=f"task_{task_id}_logs_" + ) + os.close(temp_fd) + + def cleanup_temp_file(): + try: + if os.path.exists(temp_zip_path): + os.remove(temp_zip_path) + except Exception as e: + logger.error("Failed to delete temp zip file {}: {}", temp_zip_path, e) + + try: + with zipfile.ZipFile(temp_zip_path, "w", zipfile.ZIP_DEFLATED) as zipf: + for file_path in related_files: + zipf.write(file_path, arcname=os.path.basename(file_path)) + + return FileResponse( + path=temp_zip_path, + filename=f"task_{task_id}_logs.zip", + media_type="application/zip", + background=BackgroundTask(cleanup_temp_file), + ) + except Exception as e: + cleanup_temp_file() + logger.error("Failed to create zip file for task {}: {}", task_id, e) + raise ErrorResponse.internal_server_error( + "Failed to package log files for download" + ) diff --git a/backend/tests/test_admin_feature.py b/backend/tests/test_admin_feature.py index 8c7a393..f941f3b 100644 --- a/backend/tests/test_admin_feature.py +++ b/backend/tests/test_admin_feature.py @@ -72,6 +72,7 @@ def test_empty_config_returns_false(self, monkeypatch): """Verify ADMIN_USERNAMES is empty, any user is not an admin.""" from utils import auth as auth_mod + monkeypatch.setattr(auth_mod.settings, "LDAP_ENABLED", True) monkeypatch.setattr(auth_mod.settings, "ADMIN_USERNAMES", "") assert is_admin_user("alice") is False assert is_admin_user("admin") is False @@ -81,6 +82,7 @@ def test_single_admin_match(self, monkeypatch): """Verify single admin match, return True.""" from utils import auth as auth_mod + monkeypatch.setattr(auth_mod.settings, "LDAP_ENABLED", True) monkeypatch.setattr(auth_mod.settings, "ADMIN_USERNAMES", "admin") assert is_admin_user("admin") is True @@ -88,6 +90,7 @@ def test_single_admin_no_match(self, monkeypatch): """Verify single admin no match, return False.""" from utils import auth as auth_mod + monkeypatch.setattr(auth_mod.settings, "LDAP_ENABLED", True) monkeypatch.setattr(auth_mod.settings, "ADMIN_USERNAMES", "admin") assert is_admin_user("alice") is False @@ -95,6 +98,7 @@ def test_multiple_admins(self, monkeypatch): """Verify multiple admins, all users in the list return True.""" from utils import auth as auth_mod + monkeypatch.setattr(auth_mod.settings, "LDAP_ENABLED", True) monkeypatch.setattr( auth_mod.settings, "ADMIN_USERNAMES", "admin,superuser,john" ) @@ -107,6 +111,7 @@ def test_case_insensitive(self, monkeypatch): """Verify admin name match is case insensitive.""" from utils import auth as auth_mod + monkeypatch.setattr(auth_mod.settings, "LDAP_ENABLED", True) monkeypatch.setattr(auth_mod.settings, "ADMIN_USERNAMES", "Admin,SuperUser") assert is_admin_user("admin") is True assert is_admin_user("ADMIN") is True @@ -117,6 +122,7 @@ def test_whitespace_handling(self, monkeypatch): """Verify whitespace handling in config.""" from utils import auth as auth_mod + monkeypatch.setattr(auth_mod.settings, "LDAP_ENABLED", True) monkeypatch.setattr( auth_mod.settings, "ADMIN_USERNAMES", " admin , superuser , john " ) @@ -128,6 +134,7 @@ def test_empty_username_returns_false(self, monkeypatch): """Verify empty username returns False.""" from utils import auth as auth_mod + monkeypatch.setattr(auth_mod.settings, "LDAP_ENABLED", True) monkeypatch.setattr(auth_mod.settings, "ADMIN_USERNAMES", "admin") assert is_admin_user("") is False @@ -135,6 +142,7 @@ def test_trailing_commas_ignored(self, monkeypatch): """Verify trailing commas in config are ignored.""" from utils import auth as auth_mod + monkeypatch.setattr(auth_mod.settings, "LDAP_ENABLED", True) monkeypatch.setattr(auth_mod.settings, "ADMIN_USERNAMES", "admin,,superuser,") assert is_admin_user("admin") is True assert is_admin_user("superuser") is True @@ -144,6 +152,7 @@ def test_only_commas_returns_false(self, monkeypatch): """Verify only commas (no valid usernames) return False.""" from utils import auth as auth_mod + monkeypatch.setattr(auth_mod.settings, "LDAP_ENABLED", True) monkeypatch.setattr(auth_mod.settings, "ADMIN_USERNAMES", ",,,") assert is_admin_user("admin") is False @@ -156,13 +165,17 @@ def test_only_commas_returns_false(self, monkeypatch): class TestProfileAdminFlag: """Test that /api/auth/profile returns correct is_admin flag.""" - def test_profile_ldap_disabled_no_admin(self): - """Verify LDAP disabled, profile returns anonymous, is_admin default False.""" + def test_profile_ldap_disabled_no_admin(self, monkeypatch): + """Verify LDAP disabled, profile returns anonymous, is_admin defaults to True when disabled.""" + import api.api_auth as api_auth_mod + + monkeypatch.setattr(api_auth_mod.settings, "LDAP_ENABLED", False) + response = client.get("/api/auth/profile") assert response.status_code == 200 data = response.json() assert data["username"] == "anonymous" - assert data.get("is_admin") is False + assert data.get("is_admin") is True def test_profile_ldap_enabled_admin_user(self, monkeypatch): """Verify LDAP enabled + admin user, is_admin is True.""" diff --git a/backend/tests/test_api_auth.py b/backend/tests/test_api_auth.py index ca672ce..7695b0b 100644 --- a/backend/tests/test_api_auth.py +++ b/backend/tests/test_api_auth.py @@ -56,3 +56,4 @@ def test_get_profile_ldap_disabled(self): assert response.status_code == 200 data = response.json() assert data["username"] == "anonymous" + assert data["is_admin"] is True diff --git a/backend/tests/test_api_collection.py b/backend/tests/test_api_collection.py new file mode 100644 index 0000000..b12733b --- /dev/null +++ b/backend/tests/test_api_collection.py @@ -0,0 +1,99 @@ +""" +Collection API tests. +""" + +from unittest.mock import patch + +from fastapi.testclient import TestClient + +from app import app +from model.collection import ( + CollectionCreateRequest, + CollectionTaskAddRequest, + CollectionUpdateRequest, +) + +client = TestClient(app) + + +class TestCollectionAPI: + """Collection API tests.""" + + @patch("api.api_collection.create_collection_svc") + def test_create_collection(self, mock_create): + mock_create.return_value = { + "id": "col_123", + "name": "My Collection", + "description": "Test", + "rich_content": "", + "created_by": "tester", + "is_public": True, + "created_at": "2025-01-01T00:00:00", + "updated_at": "2025-01-01T00:00:00", + "task_count": 0, + } + + payload = {"name": "My Collection", "description": "Test", "is_public": True} + response = client.post("/api/collections", json=payload) + assert response.status_code == 200 + assert response.json()["id"] == "col_123" + + @patch("api.api_collection.list_collections_svc") + def test_list_collections(self, mock_list): + mock_list.return_value = { + "data": [{"id": "col_123", "name": "My Collection"}], + "pagination": {"total": 1, "page": 1, "page_size": 10, "total_pages": 1}, + } + response = client.get("/api/collections?page=1&page_size=10") + assert response.status_code == 200 + assert response.json()["data"][0]["id"] == "col_123" + + @patch("api.api_collection.get_collection_svc") + def test_get_collection(self, mock_get): + mock_get.return_value = {"id": "col_123", "name": "My Collection"} + response = client.get("/api/collections/col_123") + assert response.status_code == 200 + assert response.json()["id"] == "col_123" + + @patch("api.api_collection.update_collection_svc") + def test_update_collection(self, mock_update): + mock_update.return_value = {"id": "col_123", "name": "Updated Name"} + payload = {"name": "Updated Name"} + response = client.put("/api/collections/col_123", json=payload) + assert response.status_code == 200 + assert response.json()["name"] == "Updated Name" + + @patch("api.api_collection.delete_collection_svc") + def test_delete_collection(self, mock_delete): + mock_delete.return_value = {"message": "Collection deleted successfully"} + response = client.delete("/api/collections/col_123") + assert response.status_code == 200 + assert response.json()["message"] == "Collection deleted successfully" + + @patch("api.api_collection.add_task_to_collection_svc") + def test_add_task_to_collection(self, mock_add_task): + mock_add_task.return_value = { + "message": "Task added to collection successfully" + } + payload = {"task_id": "task_1", "task_type": "http"} + response = client.post("/api/collections/col_123/tasks", json=payload) + assert response.status_code == 200 + assert response.json()["message"] == "Task added to collection successfully" + + @patch("api.api_collection.remove_task_from_collection_svc") + def test_remove_task_from_collection(self, mock_remove_task): + mock_remove_task.return_value = { + "message": "Task removed from collection successfully" + } + response = client.delete("/api/collections/col_123/tasks/task_1") + assert response.status_code == 200 + assert response.json()["message"] == "Task removed from collection successfully" + + @patch("api.api_collection.list_collection_tasks_svc") + def test_list_collection_tasks(self, mock_list_tasks): + mock_list_tasks.return_value = { + "data": [{"id": "task_1", "name": "Test Task", "task_type": "http"}] + } + response = client.get("/api/collections/col_123/tasks") + assert response.status_code == 200 + assert response.json()["data"][0]["id"] == "task_1" diff --git a/backend/tests/test_service_collection.py b/backend/tests/test_service_collection.py new file mode 100644 index 0000000..127f1f2 --- /dev/null +++ b/backend/tests/test_service_collection.py @@ -0,0 +1,112 @@ +""" +Collection Service tests. +""" + +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest +from fastapi import Request +from sqlalchemy.ext.asyncio import AsyncSession + +from model.collection import ( + Collection, + CollectionCreateRequest, + CollectionTaskAddRequest, + CollectionUpdateRequest, +) +from service.collection_service import ( + _get_collection_or_404, + add_task_to_collection_svc, + create_collection_svc, + delete_collection_svc, + remove_task_from_collection_svc, + update_collection_svc, +) +from utils.error_handler import ErrorResponse + + +@pytest.fixture +def mock_request(): + req = MagicMock(spec=Request) + req.state = MagicMock() + req.state.db = AsyncMock(spec=AsyncSession) + return req + + +@pytest.mark.asyncio +class TestCollectionService: + """Test suite for collection service.""" + + @patch("service.collection_service._resolve_username") + @patch("service.collection_service.is_admin_user") + async def test_update_collection_permission_denied( + self, mock_is_admin, mock_resolve_username, mock_request + ): + mock_resolve_username.return_value = "hacker" + mock_is_admin.return_value = False + + # Mock DB collection + db_collection = Collection(id="123", name="test", created_by="owner") + mock_result = MagicMock() + mock_result.scalar_one_or_none.return_value = db_collection + mock_request.state.db.execute.return_value = mock_result + + with pytest.raises(ErrorResponse) as exc_info: + await update_collection_svc( + mock_request, "123", CollectionUpdateRequest(name="hacked") + ) + assert exc_info.value.status_code == 403 + + @patch("service.collection_service._resolve_username") + @patch("service.collection_service.is_admin_user") + async def test_update_collection_permission_granted_owner( + self, mock_is_admin, mock_resolve_username, mock_request + ): + mock_resolve_username.return_value = "owner" + mock_is_admin.return_value = False + + db_collection = Collection(id="123", name="test", created_by="owner") + mock_result = MagicMock() + mock_result.scalar_one_or_none.return_value = db_collection + mock_request.state.db.execute.return_value = mock_result + + # We also need to mock _get_collection_or_404 correctly or db.scalar for task count + mock_request.state.db.scalar.return_value = 0 + + res = await update_collection_svc( + mock_request, "123", CollectionUpdateRequest(name="updated") + ) + assert res["name"] == "updated" + + @patch("service.collection_service._resolve_username") + @patch("service.collection_service.is_admin_user") + async def test_delete_collection_permission_denied( + self, mock_is_admin, mock_resolve_username, mock_request + ): + mock_resolve_username.return_value = "hacker" + mock_is_admin.return_value = False + + db_collection = Collection(id="123", name="test", created_by="owner") + mock_result = MagicMock() + mock_result.scalar_one_or_none.return_value = db_collection + mock_request.state.db.execute.return_value = mock_result + + with pytest.raises(ErrorResponse) as exc_info: + await delete_collection_svc(mock_request, "123") + assert exc_info.value.status_code == 403 + + @patch("service.collection_service._resolve_username") + @patch("service.collection_service.is_admin_user") + async def test_delete_collection_permission_granted_admin( + self, mock_is_admin, mock_resolve_username, mock_request + ): + mock_resolve_username.return_value = "admin_user" + mock_is_admin.return_value = True + + db_collection = Collection(id="123", name="test", created_by="owner") + mock_result = MagicMock() + mock_result.scalar_one_or_none.return_value = db_collection + mock_request.state.db.execute.return_value = mock_result + + res = await delete_collection_svc(mock_request, "123") + assert res["message"] == "Collection deleted successfully" diff --git a/backend/utils/auth.py b/backend/utils/auth.py index 41d7004..a0f2899 100644 --- a/backend/utils/auth.py +++ b/backend/utils/auth.py @@ -73,6 +73,9 @@ def is_admin_user(username: str) -> bool: Check if the given username is in the configured admin list. Admin users can manage all tasks regardless of ownership. """ + if not settings.LDAP_ENABLED: + return True + admin_usernames = settings.ADMIN_USERNAMES if not admin_usernames: return False diff --git a/data/comprehensive_self-build.jsonl b/data/comprehensive_self-build.jsonl new file mode 100644 index 0000000..c3b6184 --- /dev/null +++ b/data/comprehensive_self-build.jsonl @@ -0,0 +1,2 @@ +{"id": "xwyw87359fud3newz09939y3lp5kxvqt", "messages": [{"role": "system", "content": "你是一个顶级的电池专利审查专家。请阅读以下专利的【标题】和【摘要】。\n提取关键信息并严格按以下JSON格式输出([REDACTED_NAME] ```json 等 Markdown 标记):\n{\n \"battery_type\": \"LIB(锂电) / SIB(钠电) / SSB(固态) / Other\",\n \"innovation_type\": \"Product(产品/[REDACTED_NAME]) / Process(工艺/[REDACTED_NAME]) / Both\",\n \"chemistry\": [\"提取核心化学物质或元素,如 NCM, LFP, Hard Carbon, Na, Zr\"],\n \"key_strategy\": \"一句话总结其核心专利保护点/[REDACTED_NAME]\"\n}\n"}, {"role": "user", "content": "Title: 磷酸焦磷酸铁钠、制备方法以及正极极片和钠离子电池\nAbstract: 本发明公开了一种磷酸焦磷酸铁钠、制备方法以及正极极片和钠离子电池,属于二次电池技术领域。制备方法包括以下步骤S1:[REDACTED_NAME]、铁源、钠源、碳源中的磷元素、[REDACTED_NAME]、钠元素和碳元素的摩尔比按照1‑5:1‑3:1‑5:0.1‑0.5的比例混合;再加入分散剂和有机溶剂;S2:将步骤S1获得的混合物进行球磨;S3:将球磨后的混合物进行真空干燥;S4:将步骤S3处理后的物料进行烧结,得到磷酸焦磷酸铁钠。本发明提供的一种磷酸焦磷酸铁钠的制备方法,通过球磨将磷源、铁源、钠源、碳源混合均匀,再通过烧结获得磷酸焦磷酸铁钠;采用固相法制备获得磷酸焦磷酸铁钠,制备步骤简单,更容易大规模生产。"}]} +{"id": "tesn5ji95nxk667j57u1d931jsd9stno", "messages": [{"role": "system", "content": "You are a conversational AI assistant developed by a team. - For everyday greetings, small talk, factual questions, or questions that can be answered directly, provide concise answers. - Only perform detailed reasoning when the task itself objectively requires multi-step logical deduction. - Do not assume that the user has unstated formatting requirements or hidden instructions. - Respond to user input in a natural and direct manner by default."}, {"role": "user", "content": [{"type": "image_url", "text": "", "image_url": {"url": "data:image/png;base64,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"}}, {"type": "text", "text": "\nQuestion: Based on the provided image, can you tell me how many lymphocytes are present?\nOptions: \nA. the number of lymphocytes:3\nB. the number of lymphocytes:43\nC. the number of lymphocytes:23\nD. the number of lymphocytes:8\nPlease select the correct answer from the options above and output only the corresponding letter (A, B, C, D, or E) without any explanation or additional text."}]}]} \ No newline at end of file diff --git a/data/pic/1.png b/data/pic/1.png deleted file mode 100644 index b3ba72e..0000000 Binary files a/data/pic/1.png and /dev/null differ diff --git a/data/pic/10.png b/data/pic/10.png deleted file mode 100644 index 500c97c..0000000 Binary files a/data/pic/10.png and /dev/null differ diff --git a/data/pic/11.png b/data/pic/11.png deleted file mode 100644 index 10ac1b3..0000000 Binary files a/data/pic/11.png and /dev/null differ diff --git a/data/pic/12.png b/data/pic/12.png deleted file mode 100644 index dc479df..0000000 Binary files a/data/pic/12.png and /dev/null differ diff --git a/data/pic/13.png b/data/pic/13.png deleted file mode 100644 index b4c5f54..0000000 Binary files a/data/pic/13.png and /dev/null differ diff --git a/data/pic/14.png b/data/pic/14.png deleted file mode 100644 index f0e63b4..0000000 Binary files a/data/pic/14.png and /dev/null differ diff --git a/data/pic/15.png b/data/pic/15.png deleted file mode 100644 index 28412ba..0000000 Binary files a/data/pic/15.png and /dev/null differ diff --git a/data/pic/16.png b/data/pic/16.png deleted file mode 100644 index 98ca56c..0000000 Binary files a/data/pic/16.png and /dev/null differ diff --git a/data/pic/17.png b/data/pic/17.png deleted file mode 100644 index b52d776..0000000 Binary files a/data/pic/17.png and /dev/null differ diff --git a/data/pic/18.png b/data/pic/18.png deleted file mode 100644 index ab47ab6..0000000 Binary files a/data/pic/18.png and /dev/null differ diff --git a/data/pic/19.png b/data/pic/19.png deleted file mode 100644 index f2d0f30..0000000 Binary files a/data/pic/19.png and /dev/null differ diff --git a/data/pic/2.png b/data/pic/2.png deleted file mode 100644 index e87192d..0000000 Binary files a/data/pic/2.png and /dev/null differ diff --git a/data/pic/20.png b/data/pic/20.png deleted file mode 100644 index 657a38b..0000000 Binary files a/data/pic/20.png and /dev/null differ diff --git a/data/pic/21.png b/data/pic/21.png deleted file mode 100644 index b7d8f33..0000000 Binary files a/data/pic/21.png and /dev/null differ diff --git a/data/pic/22.png b/data/pic/22.png deleted file mode 100644 index 2131700..0000000 Binary files a/data/pic/22.png and /dev/null differ diff --git a/data/pic/23.png b/data/pic/23.png deleted file mode 100644 index 829f643..0000000 Binary files a/data/pic/23.png and /dev/null differ diff --git a/data/pic/24.png b/data/pic/24.png deleted file mode 100644 index e08ccb3..0000000 Binary files a/data/pic/24.png and /dev/null differ diff --git a/data/pic/25.png b/data/pic/25.png deleted file mode 100644 index 0c01011..0000000 Binary files a/data/pic/25.png and /dev/null differ diff --git a/data/pic/26.png b/data/pic/26.png deleted file mode 100644 index 62f9734..0000000 Binary files a/data/pic/26.png and /dev/null differ diff --git a/data/pic/27.png b/data/pic/27.png deleted file mode 100644 index 146f42e..0000000 Binary files a/data/pic/27.png and /dev/null differ diff --git a/data/pic/28.png b/data/pic/28.png deleted file mode 100644 index 4f1e776..0000000 Binary files a/data/pic/28.png and /dev/null differ diff --git a/data/pic/29.png b/data/pic/29.png deleted file mode 100644 index a601b51..0000000 Binary files a/data/pic/29.png and /dev/null differ diff --git a/data/pic/3.png b/data/pic/3.png deleted file mode 100644 index 9f138e0..0000000 Binary files a/data/pic/3.png and /dev/null differ diff --git a/data/pic/30.png b/data/pic/30.png deleted file mode 100644 index bdf6dd5..0000000 Binary files a/data/pic/30.png and /dev/null differ diff --git a/data/pic/31.png b/data/pic/31.png deleted file mode 100644 index d225c86..0000000 Binary files a/data/pic/31.png and /dev/null differ diff --git a/data/pic/32.png b/data/pic/32.png deleted file mode 100644 index eaf055a..0000000 Binary files a/data/pic/32.png and /dev/null differ diff --git a/data/pic/33.png b/data/pic/33.png deleted file mode 100644 index b3801f5..0000000 Binary files a/data/pic/33.png and /dev/null differ diff --git a/data/pic/4.png b/data/pic/4.png deleted file mode 100644 index 648e63f..0000000 Binary files a/data/pic/4.png and /dev/null differ diff --git a/data/pic/5.png b/data/pic/5.png deleted file mode 100644 index 03de0c2..0000000 Binary files a/data/pic/5.png and /dev/null differ diff --git a/data/pic/6.png b/data/pic/6.png deleted file mode 100644 index b07a58b..0000000 Binary files a/data/pic/6.png and /dev/null differ diff --git a/data/pic/7.png b/data/pic/7.png deleted file mode 100644 index 7f9a6b3..0000000 Binary files a/data/pic/7.png and /dev/null differ diff --git a/data/pic/8.png b/data/pic/8.png deleted file mode 100644 index 8e8a117..0000000 Binary files a/data/pic/8.png and /dev/null differ diff --git a/data/pic/9.png b/data/pic/9.png deleted file mode 100644 index 0e5cf76..0000000 Binary files a/data/pic/9.png and /dev/null differ diff --git a/data/vision_self-built.jsonl b/data/vision_self-built.jsonl deleted file mode 100644 index 1fb032f..0000000 --- a/data/vision_self-built.jsonl +++ /dev/null @@ -1,878 +0,0 @@ -{"id": "EfGhIj2","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/32.png","language": "cn"} -{"id": "BqAiZ80", "prompt": "图片中的主要物体是什么?", "image_path": "./data/pic/5.png", "language": "cn"} -{"id": "GhIjKl5","prompt": "Describe the following image.","image_path": "./data/pic/15.png","language": "en"} -{"id": "MnOpQr6","prompt": "Describe the following image.","image_path": "./data/pic/16.png","language": "en"} -{"id": "StUvWx0","prompt": "评估图片的美观程度","image_path": "./data/pic/30.png","language": "en"} -{"id": "bCdEfGh","prompt": "分析一下这个图片","image_path": "./data/pic/10.png","language": "en"} -{"id": "AbCdEf7","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/27.png","language": "en"} -{"id": "IjKlMn4","prompt": "分析一下这个图片","image_path": "./data/pic/24.png","language": "en"} -{"id": "vWxYz23","prompt": "Describe the following image.","image_path": "./data/pic/13.png","language": "en"} -{"id": "Yz8AbCd","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/18.png","language": "en"} -{"id": "2TOg0iB", "prompt": "描述图片的整体布局", "image_path": "./data/pic/5.png", "language": "cn"} -{"id": "Yz8AbCd","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/18.png","language": "en"} -{"id": "StUvWx0","prompt": "请描述这张图片的内容","image_path": "./data/pic/30.png","language": "en"} -{"id": "L9zw9yH", "prompt": "给图中的商品生成一段广告语", "image_path": "./data/pic/19.png", "language": "cn"} -{"id": "OpQrSt5","prompt": "What do you see happening in this image?","image_path": "./data/pic/25.png","language": "en"} -{"id": "MnOpQr6","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/16.png","language": "en"} -{"id": "StUvWx7","prompt": "这幅画的主题是什么?","image_path": "./data/pic/17.png","language": "en"} -{"id": "fYGFDfC", "prompt": "预测比赛的最终结果", "image_path": "./data/pic/11.png", "language": "cn"} -{"id": "CdEfGh3","prompt": "请描述这张图片的内容","image_path": "./data/pic/23.png","language": "en"} -{"id": "iJkLmN1","prompt": "分析一下这个图片","image_path": "./data/pic/11.png","language": "en"} -{"id": "bCdEfGh","prompt": "这幅画的主题是什么?","image_path": "./data/pic/10.png","language": "en"} -{"id": "StUvWx0","prompt": "What is this photo about'?","image_path": "./data/pic/30.png","language": "en"} -{"id": "JzKtlJC","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/2.png","language": "en"} -{"id": "MnOpQr9","prompt": "What is this photo about'?","image_path": "./data/pic/29.png","language": "en"} -{"id": "KJMBFf5", "prompt": "简单解释一下图中糕点的烘烤过程", "image_path": "./data/pic/18.png", "language": "cn"} -{"id": "bCdEfGh","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/10.png","language": "cn"} -{"id": "StUvWx0","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/30.png","language": "en"} -{"id": "YzAbCd1","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/31.png","language": "en"} -{"id": "4AbCdEf","prompt": "What is this photo about'?","image_path": "./data/pic/14.png","language": "en"} -{"id": "EfGhIj2","prompt": "What are the key elements in this picture?","image_path": "./data/pic/32.png","language": "en"} -{"id": "4AbCdEf","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/14.png","language": "en"} -{"id": "EfGhIj9","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/19.png","language": "en"} -{"id": "7TUymFb","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/1.png","language": "cn"} -{"id": "YzAbCd1","prompt": "What do you see happening in this image?","image_path": "./data/pic/31.png","language": "en"} -{"id": "Yz8AbCd","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/18.png","language": "cn"} -{"id": "xYzAb3C","prompt": "识别图片中的所有颜色","image_path": "./data/pic/7.png","language": "en"} -{"id": "MjfZsxb", "prompt": "Compare the durability of different materials shown.", "image_path": "./data/pic/4.png", "language": "en"} -{"id": "pWQOiUJ", "prompt": "这个景点最佳的拍照角度在哪里?", "image_path": "./data/pic/9.png", "language": "cn"} -{"id": "Lk2MnOp","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/9.png","language": "en"} -{"id": "CdEfGh3","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/23.png","language": "cn"} -{"id": "iJkLmN1","prompt": "Describe the following image.","image_path": "./data/pic/11.png","language": "en"} -{"id": "Gc2a35v", "prompt": "这幅作品使用了什么绘画技法?", "image_path": "./data/pic/3.png", "language": "cn"} -{"id": "KlMnOp3","prompt": "图片中想表达什么?","image_path": "./data/pic/33.png","language": "en"} -{"id": "vWxYz23","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/13.png","language": "en"} -{"id": "oPqRsTu","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/12.png","language": "en"} -{"id": "KlMnOp3","prompt": "Describe the following image.","image_path": "./data/pic/33.png","language": "en"} -{"id": "nbiDyhp", "prompt": "生活好没意思啊,我想要从这里去一个新的世界", "image_path": "./data/pic/22.png", "language": "cn"} -{"id": "aB9lYFH", "prompt": "这道题需要用到哪些公式?", "image_path": "./data/pic/17.png", "language": "cn"} -{"id": "RjuL3qK", "prompt": "这张卡片的用途是什么?", "image_path": "./data/pic/7.png", "language": "cn"} -{"id": "MnOpQr9","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/29.png","language": "en"} -{"id": "hWmNp9R","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/5.png","language": "en"} -{"id": "MnOpQr6","prompt": "分析一下这个图片","image_path": "./data/pic/16.png","language": "en"} -{"id": "4AbCdEf","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/14.png","language": "en"} -{"id": "QrStUv1","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/21.png","language": "en"} -{"id": "Yz8AbCd","prompt": "这幅画的主题是什么?","image_path": "./data/pic/18.png","language": "en"} -{"id": "mN9pQrS","prompt": "What are the key elements in this picture?","image_path": "./data/pic/8.png","language": "en"} -{"id": "UvWxYz6","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/26.png","language": "en"} -{"id": "GhIjKl5","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/15.png","language": "cn"} -{"id": "iJkLmN1","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/11.png","language": "en"} -{"id": "4nLxQ43","prompt": "Describe the following image.","image_path": "./data/pic/4.png","language": "en"} -{"id": "IjKlMn4","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/24.png","language": "en"} -{"id": "Yz8AbCd","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/18.png","language": "en"} -{"id": "CdEfGh3","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/23.png","language": "en"} -{"id": "kJhVcjw", "prompt": "已知苯甲酸乙酯的沸点为 212.6摄氏度, “乙醚-环已烷-水共沸物” 的沸点为62.1摄氏度。实验室初步分离苯甲酸乙酯、苯甲酸和环已烷的流程如下。下列说法错误的是 A: 操作 a 所使用的主要玻璃仪器为分液漏斗和烧杯 B: 操作b和操作c均为重结晶 C: 无水 $$\\{MgSO}_{4}$$ 和饱和碳酸钠溶液的作用相同 D: 该流程中苯甲酸先转化为苯甲酸钠, 后转化为苯甲酸", "image_path": "./data/pic/32.png", "language": "cn"} -{"id": "YzAbCd1","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/31.png","language": "en"} -{"id": "iJkLmN1","prompt": "What is this photo about'?","image_path": "./data/pic/11.png","language": "en"} -{"id": "KlMnOp0","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/20.png","language": "en"} -{"id": "hWmNp9R","prompt": "What do you see happening in this image?","image_path": "./data/pic/5.png","language": "en"} -{"id": "hWmNp9R","prompt": "What is this photo about'?","image_path": "./data/pic/5.png","language": "en"} -{"id": "Qr8sT2v","prompt": "评估图片的美观程度","image_path": "./data/pic/6.png","language": "en"} -{"id": "IjKlMn4","prompt": "识别图片中的所有颜色","image_path": "./data/pic/24.png","language": "en"} -{"id": "KvMALGe","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/3.png","language": "en"} -{"id": "Yz8AbCd","prompt": "What do you see happening in this image?","image_path": "./data/pic/18.png","language": "en"} -{"id": "MnOpQr6","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/16.png","language": "en"} -{"id": "0hWXNaz", "prompt": "分析图片的视觉重点", "image_path": "./data/pic/5.png", "language": "cn"} -{"id": "iJkLmN1","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/11.png","language": "cn"} -{"id": "JzKtlJC","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/2.png","language": "en"} -{"id": "GhIjKl8","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/28.png","language": "cn"} -{"id": "oPqRsTu","prompt": "评估图片的美观程度","image_path": "./data/pic/12.png","language": "en"} -{"id": "7TUymFb","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/1.png","language": "en"} -{"id": "MnOpQr6","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/16.png","language": "en"} -{"id": "02fuUBz", "prompt": "这个建筑的功能用途是什么?", "image_path": "./data/pic/9.png", "language": "cn"} -{"id": "vWxYz23","prompt": "What is this photo about'?","image_path": "./data/pic/13.png","language": "en"} -{"id": "EfGhIj9","prompt": "What is this photo about'?","image_path": "./data/pic/19.png","language": "en"} -{"id": "vLC5yW3", "prompt": "图片中最大的数字是几?", "image_path": "./data/pic/1.png", "language": "cn"} -{"id": "Yz8AbCd","prompt": "图片中想表达什么?","image_path": "./data/pic/18.png","language": "en"} -{"id": "YzAbCd1","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/31.png","language": "en"} -{"id": "MnOpQr6","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/16.png","language": "cn"} -{"id": "iJkLmN1","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/11.png","language": "en"} -{"id": "hWmNp9R","prompt": "这幅画的主题是什么?","image_path": "./data/pic/5.png","language": "en"} -{"id": "Lk2MnOp","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/9.png","language": "en"} -{"id": "AbCdEf7","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/27.png","language": "en"} -{"id": "EfGhIj2","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/32.png","language": "en"} -{"id": "MnOpQr9","prompt": "分析一下这个图片","image_path": "./data/pic/29.png","language": "en"} -{"id": "6NmhJRk", "prompt": "这道题会考察了什么知识点?请给出详细的分析过程", "image_path": "./data/pic/17.png", "language": "cn"} -{"id": "KlMnOp3","prompt": "What do you see happening in this image?","image_path": "./data/pic/33.png","language": "en"} -{"id": "AbCdEf7","prompt": "请描述这张图片的内容","image_path": "./data/pic/27.png","language": "en"} -{"id": "7TUymFb","prompt": "识别图片中的所有颜色","image_path": "./data/pic/1.png","language": "en"} -{"id": "StUvWx0","prompt": "识别图片中的所有颜色","image_path": "./data/pic/30.png","language": "en"} -{"id": "StUvWx7","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/17.png","language": "en"} -{"id": "GhIjKl5","prompt": "分析一下这个图片","image_path": "./data/pic/15.png","language": "en"} -{"id": "JzKtlJC","prompt": "评估图片的美观程度","image_path": "./data/pic/2.png","language": "en"} -{"id": "n0amyYK", "prompt": "图中内容的markdown格式是什么样子的", "image_path": "./data/pic/8.png", "language": "cn"} -{"id": "4nLxQ43","prompt": "What do you see happening in this image?","image_path": "./data/pic/4.png","language": "en"} -{"id": "AbCdEf7","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/27.png","language": "cn"} -{"id": "myirXzC", "prompt": "指出计算过程中的第一个错误", "image_path": "./data/pic/17.png", "language": "cn"} -{"id": "JzKtlJC","prompt": "请描述这张图片的内容","image_path": "./data/pic/2.png","language": "en"} -{"id": "oPqRsTu","prompt": "What do you see happening in this image?","image_path": "./data/pic/12.png","language": "en"} -{"id": "4nLxQ43","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/4.png","language": "en"} -{"id": "MnOpQr6","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/16.png","language": "en"} -{"id": "pLDQ9NP", "prompt": "我们办公室有个同事夸我,请问我应该如何回答他的赞美之词呢?", "image_path": "./data/pic/29.png", "language": "cn"} -{"id": "KlMnOp0","prompt": "Describe the following image.","image_path": "./data/pic/20.png","language": "en"} -{"id": "StUvWx7","prompt": "评估图片的美观程度","image_path": "./data/pic/17.png","language": "en"} -{"id": "StUvWx7","prompt": "What do you see happening in this image?","image_path": "./data/pic/17.png","language": "en"} -{"id": "KlMnOp0","prompt": "识别图片中的所有颜色","image_path": "./data/pic/20.png","language": "en"} -{"id": "oPqRsTu","prompt": "图片中想表达什么?","image_path": "./data/pic/12.png","language": "en"} -{"id": "StUvWx0","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/30.png","language": "en"} -{"id": "YYYVDqv", "prompt": "图片中有多少个相同的数字?", "image_path": "./data/pic/1.png", "language": "cn"} -{"id": "bCdEfGh","prompt": "What are the key elements in this picture?","image_path": "./data/pic/10.png","language": "en"} -{"id": "MnOpQr9","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/29.png","language": "en"} -{"id": "3KO5LtB", "prompt": "分析球队的进攻节奏", "image_path": "./data/pic/11.png", "language": "cn"} -{"id": "OpQrSt5","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/25.png","language": "cn"} -{"id": "QrStUv1","prompt": "评估图片的美观程度","image_path": "./data/pic/21.png","language": "en"} -{"id": "KlMnOp0","prompt": "这幅画的主题是什么?","image_path": "./data/pic/20.png","language": "en"} -{"id": "IjKlMn4","prompt": "图片中想表达什么?","image_path": "./data/pic/24.png","language": "en"} -{"id": "UvWxYz6","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/26.png","language": "en"} -{"id": "Qr8sT2v","prompt": "请描述这张图片的内容","image_path": "./data/pic/6.png","language": "en"} -{"id": "GhIjKl8","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/28.png","language": "en"} -{"id": "EfGhIj2","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/32.png","language": "en"} -{"id": "hWmNp9R","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/5.png","language": "en"} -{"id": "mN9pQrS","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/8.png","language": "cn"} -{"id": "JzKtlJC","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/2.png","language": "en"} -{"id": "vWxYz23","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/13.png","language": "cn"} -{"id": "UvWxYz6","prompt": "Describe the following image.","image_path": "./data/pic/26.png","language": "en"} -{"id": "bCdEfGh","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/10.png","language": "en"} -{"id": "QrStUv1","prompt": "识别图片中的所有颜色","image_path": "./data/pic/21.png","language": "en"} -{"id": "StUvWx7","prompt": "请描述这张图片的内容","image_path": "./data/pic/17.png","language": "en"} -{"id": "Yz8AbCd","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/18.png","language": "cn"} -{"id": "CdEfGh3","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/23.png","language": "en"} -{"id": "xYzAb3C","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/7.png","language": "en"} -{"id": "EfGhIj9","prompt": "What do you see happening in this image?","image_path": "./data/pic/19.png","language": "en"} -{"id": "Qr8sT2v","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/6.png","language": "en"} -{"id": "iJkLmN1","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/11.png","language": "en"} -{"id": "YzAbCd1","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/31.png","language": "en"} -{"id": "JzKtlJC","prompt": "图片中想表达什么?","image_path": "./data/pic/2.png","language": "en"} -{"id": "KvMALGe","prompt": "这幅画的主题是什么?","image_path": "./data/pic/3.png","language": "en"} -{"id": "pBf00d0", "prompt": "哪个球员的位置最关键?", "image_path": "./data/pic/11.png", "language": "cn"} -{"id": "MnOpQr9","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/29.png","language": "en"} -{"id": "T5iabF8", "prompt": "这幅画的保存状况如何?", "image_path": "./data/pic/3.png", "language": "cn"} -{"id": "mN9pQrS","prompt": "这幅画的主题是什么?","image_path": "./data/pic/8.png","language": "en"} -{"id": "ZIHzI6l", "prompt": "这个广告的说服力如何?", "image_path": "./data/pic/19.png", "language": "cn"} -{"id": "EfGhIj2","prompt": "请描述这张图片的内容","image_path": "./data/pic/32.png","language": "en"} -{"id": "AbCdEf7","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/27.png","language": "en"} -{"id": "GhIjKl8","prompt": "识别图片中的所有颜色","image_path": "./data/pic/28.png","language": "en"} -{"id": "7TUymFb","prompt": "这幅画的主题是什么?","image_path": "./data/pic/1.png","language": "en"} -{"id": "EfGhIj2","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/32.png","language": "en"} -{"id": "CjnTOG2", "prompt": "每个骰子的值是什么", "image_path": "./data/pic/1.png", "language": "cn"} -{"id": "AbCdEf7","prompt": "What do you see happening in this image?","image_path": "./data/pic/27.png","language": "en"} -{"id": "GhIjKl5","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/15.png","language": "en"} -{"id": "EfGhIj2","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/32.png","language": "en"} -{"id": "Yz8AbCd","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/18.png","language": "en"} -{"id": "AbCdEf7","prompt": "这幅画的主题是什么?","image_path": "./data/pic/27.png","language": "en"} -{"id": "QrStUv1","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/21.png","language": "cn"} -{"id": "xYzAb3C","prompt": "图片中想表达什么?","image_path": "./data/pic/7.png","language": "en"} -{"id": "YzAbCd1","prompt": "请描述这张图片的内容","image_path": "./data/pic/31.png","language": "en"} -{"id": "MnOpQr6","prompt": "请描述这张图片的内容","image_path": "./data/pic/16.png","language": "en"} -{"id": "StUvWx7","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/17.png","language": "en"} -{"id": "StUvWx7","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/17.png","language": "en"} -{"id": "RrCU9f3", "prompt": "Which furniture piece is the most expensive?", "image_path": "./data/pic/4.png", "language": "en"} -{"id": "4AbCdEf","prompt": "What are the key elements in this picture?","image_path": "./data/pic/14.png","language": "en"} -{"id": "mN9pQrS","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/8.png","language": "en"} -{"id": "GhIjKl5","prompt": "What is this photo about'?","image_path": "./data/pic/15.png","language": "en"} -{"id": "GhIjKl5","prompt": "请描述这张图片的内容","image_path": "./data/pic/15.png","language": "en"} -{"id": "KlMnOp0","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/20.png","language": "cn"} -{"id": "EfGhIj9","prompt": "Describe the following image.","image_path": "./data/pic/19.png","language": "en"} -{"id": "EfGhIj2","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/32.png","language": "en"} -{"id": "UvWxYz6","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/26.png","language": "cn"} -{"id": "Qr8sT2v","prompt": "识别图片中的所有颜色","image_path": "./data/pic/6.png","language": "en"} -{"id": "vWxYz23","prompt": "请描述这张图片的内容","image_path": "./data/pic/13.png","language": "en"} -{"id": "XI5yp6d", "prompt": "这个地方的地理位置有什么特点?", "image_path": "./data/pic/9.png", "language": "cn"} -{"id": "4J5cfwE", "prompt": "这件艺术品属于哪个艺术流派?", "image_path": "./data/pic/3.png", "language": "cn"} -{"id": "Yz8AbCd","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/18.png","language": "en"} -{"id": "Lk2MnOp","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/9.png","language": "cn"} -{"id": "Yz8AbCd","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/18.png","language": "en"} -{"id": "4AbCdEf","prompt": "这幅画的主题是什么?","image_path": "./data/pic/14.png","language": "en"} -{"id": "4nLxQ43","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/4.png","language": "cn"} -{"id": "gQw0Z4O", "prompt": "Explain the algorithm shown in this flowchart.", "image_path": "./data/pic/16.png", "language": "en"} -{"id": "WxYzAb2","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/22.png","language": "cn"} -{"id": "xYzAb3C","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/7.png","language": "en"} -{"id": "OpQrSt5","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/25.png","language": "en"} -{"id": "pnNswev", "prompt": "在这里进行食物烹饪需要注意什么?", "image_path": "./data/pic/21.png", "language": "cn"} -{"id": "7TUymFb","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/1.png","language": "en"} -{"id": "oPqRsTu","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/12.png","language": "en"} -{"id": "IjKlMn4","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/24.png","language": "en"} -{"id": "OpQrSt5","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/25.png","language": "en"} -{"id": "Lk2MnOp","prompt": "评估图片的美观程度","image_path": "./data/pic/9.png","language": "en"} -{"id": "vWxYz23","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/13.png","language": "en"} -{"id": "EfGhIj2","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/32.png","language": "en"} -{"id": "MnOpQr9","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/29.png","language": "en"} -{"id": "EfGhIj2","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/32.png","language": "en"} -{"id": "GhIjKl8","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/28.png","language": "cn"} -{"id": "GhIjKl5","prompt": "这幅画的主题是什么?","image_path": "./data/pic/15.png","language": "en"} -{"id": "GhIjKl8","prompt": "这幅画的主题是什么?","image_path": "./data/pic/28.png","language": "en"} -{"id": "AbCdEf7","prompt": "分析一下这个图片","image_path": "./data/pic/27.png","language": "en"} -{"id": "StUvWx7","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/17.png","language": "cn"} -{"id": "WxYzAb2","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/22.png","language": "en"} -{"id": "KlMnOp0","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/20.png","language": "en"} -{"id": "CdEfGh3","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/23.png","language": "en"} -{"id": "CdEfGh3","prompt": "这幅画的主题是什么?","image_path": "./data/pic/23.png","language": "en"} -{"id": "QrStUv1","prompt": "Describe the following image.","image_path": "./data/pic/21.png","language": "en"} -{"id": "bCdEfGh","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/10.png","language": "en"} -{"id": "HFL6tEe", "prompt": "统计图中不同类型的元素数量", "image_path": "./data/pic/1.png", "language": "cn"} -{"id": "bCdEfGh","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/10.png","language": "en"} -{"id": "zLohzYS", "prompt": "这个产品的主要卖点是什么?", "image_path": "./data/pic/19.png", "language": "cn"} -{"id": "lGaFFlq", "prompt": "为这个产品写一个简短的使用说明", "image_path": "./data/pic/19.png", "language": "cn"} -{"id": "EfGhIj9","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/19.png","language": "en"} -{"id": "MnOpQr9","prompt": "评估图片的美观程度","image_path": "./data/pic/29.png","language": "en"} -{"id": "oPqRsTu","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/12.png","language": "en"} -{"id": "IjKlMn4","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/24.png","language": "en"} -{"id": "4nLxQ43","prompt": "图片中想表达什么?","image_path": "./data/pic/4.png","language": "en"} -{"id": "YzAbCd1","prompt": "图片中想表达什么?","image_path": "./data/pic/31.png","language": "en"} -{"id": "xg4pZgr", "prompt": "用c++语言实现这个流程图", "image_path": "./data/pic/16.png", "language": "cn"} -{"id": "MnOpQr6","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/16.png","language": "en"} -{"id": "MnOpQr6","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/16.png","language": "cn"} -{"id": "StUvWx7","prompt": "分析一下这个图片","image_path": "./data/pic/17.png","language": "en"} -{"id": "MnOpQr6","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/16.png","language": "cn"} -{"id": "KvMALGe","prompt": "What are the key elements in this picture?","image_path": "./data/pic/3.png","language": "en"} -{"id": "GhIjKl8","prompt": "评估图片的美观程度","image_path": "./data/pic/28.png","language": "en"} -{"id": "PfWVBEC", "prompt": "闺蜜喜欢上有妇之夫,她向我寻求帮助,我应该如何帮助她?", "image_path": "./data/pic/28.png", "language": "cn"} -{"id": "4nLxQ43","prompt": "分析一下这个图片","image_path": "./data/pic/4.png","language": "en"} -{"id": "4AbCdEf","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/14.png","language": "en"} -{"id": "StUvWx0","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/30.png","language": "en"} -{"id": "7TUymFb","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/1.png","language": "en"} -{"id": "UvWxYz6","prompt": "What is this photo about'?","image_path": "./data/pic/26.png","language": "en"} -{"id": "JzKtlJC","prompt": "What do you see happening in this image?","image_path": "./data/pic/2.png","language": "en"} -{"id": "xOl0KCs", "prompt": "What body language cues can you observe?", "image_path": "./data/pic/2.png", "language": "en"} -{"id": "4AbCdEf","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/14.png","language": "en"} -{"id": "oPqRsTu","prompt": "识别图片中的所有颜色","image_path": "./data/pic/12.png","language": "en"} -{"id": "EfGhIj9","prompt": "这幅画的主题是什么?","image_path": "./data/pic/19.png","language": "en"} -{"id": "YzAbCd1","prompt": "评估图片的美观程度","image_path": "./data/pic/31.png","language": "en"} -{"id": "JzKtlJC","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/2.png","language": "en"} -{"id": "IwOKzUr", "prompt": "在人类的某次星际探测任务中, 发现一个可能宜居的星球。为了更详细的了解该星球的情况, 需要进行登陆探测。在登陆前, 飞船先环绕该星球在半径为3R的圆轨道上做匀速圆周运动, R为该星球的半径。某一时刻, 飞船运行到A点, 此时飞船将登陆器向反方向射出, 但登陆器仍向前运动, 并进入图示的内部栯圆轨道登上该星球表面, 而飞船立即启动发动机进行调整,使其仍保持在圆轨道运行。登陆器在该星球表面探测一段时间后,重新点火加速沿原来的椭圆轨道回到脱离点实现对接。已知该星球的质量为$M$, 飞船的质量为 $m_{1}$, 登陆器的质量为 $m_{2}$, 且 $m_{1}=2 m_{2}$, 忽略登陆器点火加速的时间,引力常量为 G。求:飞船在反射出登陆器后, 为保持在原轨道运行, 飞船发动机对飞船做的功W?", "image_path": "./data/pic/31.png", "language": "cn"} -{"id": "7TUymFb","prompt": "What is this photo about'?","image_path": "./data/pic/1.png","language": "en"} -{"id": "Lk2MnOp","prompt": "请描述这张图片的内容","image_path": "./data/pic/9.png","language": "en"} -{"id": "RNAZ0kF", "prompt": "What is the estimated cost of each furniture piece?", "image_path": "./data/pic/4.png", "language": "en"} -{"id": "MnOpQr9","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/29.png","language": "cn"} -{"id": "xYzAb3C","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/7.png","language": "en"} -{"id": "KvMALGe","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/3.png","language": "en"} -{"id": "EfGhIj9","prompt": "图片中想表达什么?","image_path": "./data/pic/19.png","language": "en"} -{"id": "JzKtlJC","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/2.png","language": "en"} -{"id": "mN9pQrS","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/8.png","language": "en"} -{"id": "Qr8sT2v","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/6.png","language": "en"} -{"id": "56Ot6jU", "prompt": "What is the warranty period for these items?", "image_path": "./data/pic/4.png", "language": "en"} -{"id": "EfGhIj2","prompt": "What do you see happening in this image?","image_path": "./data/pic/32.png","language": "en"} -{"id": "vWxYz23","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/13.png","language": "en"} -{"id": "4AbCdEf","prompt": "Describe the following image.","image_path": "./data/pic/14.png","language": "en"} -{"id": "c7JBQfs", "prompt": "图片的分辨率质量如何?", "image_path": "./data/pic/5.png", "language": "cn"} -{"id": "Lk2MnOp","prompt": "这幅画的主题是什么?","image_path": "./data/pic/9.png","language": "en"} -{"id": "hXcA5KT", "prompt": "这个人的职业可能是什么?", "image_path": "./data/pic/7.png", "language": "cn"} -{"id": "4nLxQ43","prompt": "这幅画的主题是什么?","image_path": "./data/pic/4.png","language": "en"} -{"id": "YzAbCd1","prompt": "What are the key elements in this picture?","image_path": "./data/pic/31.png","language": "en"} -{"id": "EfGhIj9","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/19.png","language": "en"} -{"id": "C79scg7", "prompt": "图中解题过程有误,请你给我一个简洁的解答过程以及答案", "image_path": "./data/pic/17.png", "language": "cn"} -{"id": "AbCdEf7","prompt": "What are the key elements in this picture?","image_path": "./data/pic/27.png","language": "en"} -{"id": "MnOpQr6","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/16.png","language": "en"} -{"id": "7TUymFb","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/1.png","language": "en"} -{"id": "4nLxQ43","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/4.png","language": "en"} -{"id": "KlMnOp3","prompt": "What are the key elements in this picture?","image_path": "./data/pic/33.png","language": "en"} -{"id": "Qr8sT2v","prompt": "这幅画的主题是什么?","image_path": "./data/pic/6.png","language": "en"} -{"id": "x9w1u2l", "prompt": "这道题的关键思路是什么?", "image_path": "./data/pic/17.png", "language": "cn"} -{"id": "QrStUv1","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/21.png","language": "en"} -{"id": "UvWxYz6","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/26.png","language": "en"} -{"id": "7TUymFb","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/1.png","language": "en"} -{"id": "UvWxYz6","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/26.png","language": "cn"} -{"id": "7TUymFb","prompt": "Describe the following image.","image_path": "./data/pic/1.png","language": "en"} -{"id": "Yz8AbCd","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/18.png","language": "en"} -{"id": "Qr8sT2v","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/6.png","language": "en"} -{"id": "EOmDg0u", "prompt": "Which piece would be most suitable for outdoor use?", "image_path": "./data/pic/4.png", "language": "en"} -{"id": "MnOpQr9","prompt": "What are the key elements in this picture?","image_path": "./data/pic/29.png","language": "en"} -{"id": "4u4PT4W", "prompt": "这幅画的完成度如何?", "image_path": "./data/pic/3.png", "language": "cn"} -{"id": "Qr8sT2v","prompt": "图片中想表达什么?","image_path": "./data/pic/6.png","language": "en"} -{"id": "Lk2MnOp","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/9.png","language": "en"} -{"id": "WxYzAb2","prompt": "What is this photo about'?","image_path": "./data/pic/22.png","language": "en"} -{"id": "StUvWx7","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/17.png","language": "en"} -{"id": "hWmNp9R","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/5.png","language": "en"} -{"id": "WxYzAb2","prompt": "What are the key elements in this picture?","image_path": "./data/pic/22.png","language": "en"} -{"id": "mN9pQrS","prompt": "请描述这张图片的内容","image_path": "./data/pic/8.png","language": "en"} -{"id": "xYzAb3C","prompt": "What do you see happening in this image?","image_path": "./data/pic/7.png","language": "en"} -{"id": "MnOpQr6","prompt": "What is this photo about'?","image_path": "./data/pic/16.png","language": "en"} -{"id": "vWxYz23","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/13.png","language": "cn"} -{"id": "7TUymFb","prompt": "分析一下这个图片","image_path": "./data/pic/1.png","language": "en"} -{"id": "xYzAb3C","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/7.png","language": "en"} -{"id": "hWmNp9R","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/5.png","language": "en"} -{"id": "UvWxYz6","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/26.png","language": "en"} -{"id": "CdEfGh3","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/23.png","language": "cn"} -{"id": "IjKlMn4","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/24.png","language": "en"} -{"id": "f2QWN4T", "prompt": "将图中的数字分为奇数和偶数两组", "image_path": "./data/pic/1.png", "language": "cn"} -{"id": "hWmNp9R","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/5.png","language": "en"} -{"id": "JzKtlJC","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/2.png","language": "en"} -{"id": "EfGhIj2","prompt": "识别图片中的所有颜色","image_path": "./data/pic/32.png","language": "en"} -{"id": "vWxYz23","prompt": "What do you see happening in this image?","image_path": "./data/pic/13.png","language": "en"} -{"id": "Qr8sT2v","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/6.png","language": "cn"} -{"id": "1J1cFsh", "prompt": "What type of climate does this location have?", "image_path": "./data/pic/20.png", "language": "en"} -{"id": "hWmNp9R","prompt": "Describe the following image.","image_path": "./data/pic/5.png","language": "en"} -{"id": "Yz8AbCd","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/18.png","language": "en"} -{"id": "WxYzAb2","prompt": "What do you see happening in this image?","image_path": "./data/pic/22.png","language": "en"} -{"id": "KlMnOp3","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/33.png","language": "en"} -{"id": "OpQrSt5","prompt": "分析一下这个图片","image_path": "./data/pic/25.png","language": "en"} -{"id": "oPqRsTu","prompt": "What are the key elements in this picture?","image_path": "./data/pic/12.png","language": "en"} -{"id": "KlMnOp3","prompt": "评估图片的美观程度","image_path": "./data/pic/33.png","language": "en"} -{"id": "9iF9syq", "prompt": "我们办公室有个同事总是喜欢阴阳怪气我,我应该如何回应他?", "image_path": "./data/pic/29.png", "language": "cn"} -{"id": "oPqRsTu","prompt": "请描述这张图片的内容","image_path": "./data/pic/12.png","language": "en"} -{"id": "StUvWx0","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/30.png","language": "en"} -{"id": "QrStUv1","prompt": "这幅画的主题是什么?","image_path": "./data/pic/21.png","language": "en"} -{"id": "AbCdEf7","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/27.png","language": "cn"} -{"id": "xYzAb3C","prompt": "请描述这张图片的内容","image_path": "./data/pic/7.png","language": "en"} -{"id": "xYzAb3C","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/7.png","language": "cn"} -{"id": "IjKlMn4","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/24.png","language": "en"} -{"id": "CdEfGh3","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/23.png","language": "en"} -{"id": "bCdEfGh","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/10.png","language": "cn"} -{"id": "DkOWHV6", "prompt": "这件作品在艺术史上的地位如何?", "image_path": "./data/pic/3.png", "language": "cn"} -{"id": "izHv1EQ", "prompt": "这道题会考察了什么知识点?", "image_path": "./data/pic/15.png", "language": "cn"} -{"id": "AbCdEf7","prompt": "Describe the following image.","image_path": "./data/pic/27.png","language": "en"} -{"id": "xYzAb3C","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/7.png","language": "en"} -{"id": "IjKlMn4","prompt": "What is this photo about'?","image_path": "./data/pic/24.png","language": "en"} -{"id": "AbCdEf7","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/27.png","language": "en"} -{"id": "UvWxYz6","prompt": "图片中想表达什么?","image_path": "./data/pic/26.png","language": "en"} -{"id": "cnd7YRi", "prompt": "如图所示, 在平面直角坐标系 $x O y$, 设点 $M\\left(x_{0}, y_{0}\\right)$ 是椭圆 $C: \\frac{x^{2}}{4}+y^{2}=1$ 上一点, 左右焦点分别是 $F_{1} 、 F_{2}$, 从原点 $\\mathrm{O}$ 向圆 $\\mathrm{M}:\\left(x-x_{0}\\right)^{2}+\\left(y-y_{0}\\right)^{2}=r^{2}(0 {#STYLE}. The STYLE should be exactly one of the listed kinds of art style I give to you. If you can not tell which one, the STYLE should be 'unknown'. The listed art styles are (separated by ;): Egyptian Art;Greek Art;Roman Art;Byzantine Art;Romanesque Art;Gothic Art;Early Christian Art;Islamic Art;Carolingian Art;Ottonian Art;Pre-Romanesque Art;Insular Art;Minoan Art;Hiberno-Saxon Art;Mycenaean Art;Viking Art;Celtic Art;Coptic Art;Macedonian Art;Persian Art;Etruscan Art;Chinese Art;Japanese Art (Heian period);Indian Art (Gupta period);Pre-Columbian Art;Rococo;Neoclassicism;Romanticism;Genre Painting;Portraiture;Hudson River School;Realism;Pre-Raphaelite Brotherhood;Impressionism;Post-Impressionism;Symbolism;Art Nouveau;Orientalism;Landscape Painting;Fauvism;Cubism;Expressionism;Academic Art;Dada;Surrealism;Abstract Expressionism;Pop Art;Op Art;Minimalism;Conceptual Art;Stukism;Photorealism;Street Art;Digital Art;New Media Art;Hyperrealism;Post-Internet Art;Insta-Art/Social Media Art", "image_path": "./data/pic/3.png", "language": "en"} -{"id": "CdEfGh3","prompt": "What are the key elements in this picture?","image_path": "./data/pic/23.png","language": "en"} -{"id": "MnOpQr9","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/29.png","language": "en"} -{"id": "NmgIXKd", "prompt": "计算图中数字的平均值", "image_path": "./data/pic/1.png", "language": "cn"} -{"id": "UvWxYz6","prompt": "What are the key elements in this picture?","image_path": "./data/pic/26.png","language": "en"} -{"id": "Qr8sT2v","prompt": "What is this photo about'?","image_path": "./data/pic/6.png","language": "en"} -{"id": "KvMALGe","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/3.png","language": "en"} -{"id": "OpQrSt5","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/25.png","language": "cn"} -{"id": "hWmNp9R","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/5.png","language": "en"} -{"id": "Yz8AbCd","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/18.png","language": "en"} -{"id": "onFyCN8", "prompt": "图片中的香蕉可以正常食用吗?", "image_path": "./data/pic/25.png", "language": "cn"} -{"id": "GhIjKl8","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/28.png","language": "en"} -{"id": "4AbCdEf","prompt": "What do you see happening in this image?","image_path": "./data/pic/14.png","language": "en"} -{"id": "Lk2MnOp","prompt": "What is this photo about'?","image_path": "./data/pic/9.png","language": "en"} -{"id": "hWmNp9R","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/5.png","language": "en"} -{"id": "xYUd9dn", "prompt": "这个品牌的核心价值是什么?", "image_path": "./data/pic/19.png", "language": "cn"} -{"id": "mN9pQrS","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/8.png","language": "en"} -{"id": "4nLxQ43","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/4.png","language": "en"} -{"id": "QrStUv1","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/21.png","language": "en"} -{"id": "WxYzAb2","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/22.png","language": "en"} -{"id": "hWmNp9R","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/5.png","language": "cn"} -{"id": "bCdEfGh","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/10.png","language": "en"} -{"id": "GhIjKl8","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/28.png","language": "en"} -{"id": "bCdEfGh","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/10.png","language": "en"} -{"id": "d4FgF8r", "prompt": "这幅画的色彩象征什么意义?", "image_path": "./data/pic/3.png", "language": "cn"} -{"id": "Lk2MnOp","prompt": "Describe the following image.","image_path": "./data/pic/9.png","language": "en"} -{"id": "hWmNp9R","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/5.png","language": "en"} -{"id": "KlMnOp3","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/33.png","language": "en"} -{"id": "MnOpQr9","prompt": "Describe the following image.","image_path": "./data/pic/29.png","language": "en"} -{"id": "hWmNp9R","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/5.png","language": "en"} -{"id": "4nLxQ43","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/4.png","language": "en"} -{"id": "WxYzAb2","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/22.png","language": "en"} -{"id": "OpQrSt5","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/25.png","language": "en"} -{"id": "iJkLmN1","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/11.png","language": "en"} -{"id": "JzKtlJC","prompt": "What is this photo about'?","image_path": "./data/pic/2.png","language": "en"} -{"id": "iJkLmN1","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/11.png","language": "en"} -{"id": "JzKtlJC","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/2.png","language": "en"} -{"id": "StUvWx0","prompt": "分析一下这个图片","image_path": "./data/pic/30.png","language": "en"} -{"id": "WxYzAb2","prompt": "分析一下这个图片","image_path": "./data/pic/22.png","language": "en"} -{"id": "RqcjUHM", "prompt": "What emotions are visible on their faces?", "image_path": "./data/pic/2.png", "language": "en"} -{"id": "Y9scbhU", "prompt": "这个几何体有多少条边?", "image_path": "./data/pic/15.png", "language": "cn"} -{"id": "IjKlMn4","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/24.png","language": "cn"} -{"id": "AbCdEf7","prompt": "What is this photo about'?","image_path": "./data/pic/27.png","language": "en"} -{"id": "EfGhIj2","prompt": "分析一下这个图片","image_path": "./data/pic/32.png","language": "en"} -{"id": "BUACKQh", "prompt": "请给出这个商品的营销方案?", "image_path": "./data/pic/19.png", "language": "cn"} -{"id": "xg4pZgr", "prompt": "用C语言实现这个流程图", "image_path": "./data/pic/16.png", "language": "cn"} -{"id": "Lk2MnOp","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/9.png","language": "cn"} -{"id": "IjKlMn4","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/24.png","language": "en"} -{"id": "YzAbCd1","prompt": "识别图片中的所有颜色","image_path": "./data/pic/31.png","language": "en"} -{"id": "UvWxYz6","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/26.png","language": "cn"} -{"id": "mPLoQyq", "prompt": "这个建筑大概建于什么年代?", "image_path": "./data/pic/9.png", "language": "cn"} -{"id": "JzKtlJC","prompt": "分析一下这个图片","image_path": "./data/pic/2.png","language": "en"} -{"id": "UvWxYz6","prompt": "评估图片的美观程度","image_path": "./data/pic/26.png","language": "en"} -{"id": "OpQrSt5","prompt": "What are the key elements in this picture?","image_path": "./data/pic/25.png","language": "en"} -{"id": "GhIjKl8","prompt": "What are the key elements in this picture?","image_path": "./data/pic/28.png","language": "en"} -{"id": "CdEfGh3","prompt": "分析一下这个图片","image_path": "./data/pic/23.png","language": "en"} -{"id": "WxYzAb2","prompt": "图片中想表达什么?","image_path": "./data/pic/22.png","language": "en"} -{"id": "GhIjKl8","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/28.png","language": "en"} -{"id": "hWmNp9R","prompt": "请描述这张图片的内容","image_path": "./data/pic/5.png","language": "en"} -{"id": "lZNJguN", "prompt": "这个地方适合开烧腊店吗?", "image_path": "./data/pic/33.png", "language": "cn"} -{"id": "hWmNp9R","prompt": "评估图片的美观程度","image_path": "./data/pic/5.png","language": "en"} -{"id": "7TUymFb","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/1.png","language": "cn"} -{"id": "4AbCdEf","prompt": "图片中想表达什么?","image_path": "./data/pic/14.png","language": "en"} -{"id": "MnOpQr9","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/29.png","language": "en"} -{"id": "StUvWx0","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/30.png","language": "en"} -{"id": "tPDPYh5", "prompt": "这幅画的情感表达力如何?", "image_path": "./data/pic/3.png", "language": "cn"} -{"id": "KvMALGe","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/3.png","language": "cn"} -{"id": "GhIjKl5","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/15.png","language": "en"} -{"id": "UvWxYz6","prompt": "这幅画的主题是什么?","image_path": "./data/pic/26.png","language": "en"} -{"id": "mN9pQrS","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/8.png","language": "en"} -{"id": "4nLxQ43","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/4.png","language": "cn"} -{"id": "vWxYz23","prompt": "这幅画的主题是什么?","image_path": "./data/pic/13.png","language": "en"} -{"id": "KvMALGe","prompt": "分析一下这个图片","image_path": "./data/pic/3.png","language": "en"} -{"id": "GhIjKl5","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/15.png","language": "en"} -{"id": "FjafwaR", "prompt": "这个商品的目标用户群体是什么?", "image_path": "./data/pic/19.png", "language": "cn"} -{"id": "GhIjKl5","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/15.png","language": "en"} -{"id": "mN9pQrS","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/8.png","language": "en"} -{"id": "xYzAb3C","prompt": "分析一下这个图片","image_path": "./data/pic/7.png","language": "en"} -{"id": "OpQrSt5","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/25.png","language": "en"} -{"id": "iJkLmN1","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/11.png","language": "cn"} -{"id": "KlMnOp0","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/20.png","language": "en"} -{"id": "Qr8sT2v","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/6.png","language": "en"} -{"id": "QrStUv1","prompt": "What do you see happening in this image?","image_path": "./data/pic/21.png","language": "en"} -{"id": "oPqRsTu","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/12.png","language": "cn"} -{"id": "KvmfJFf", "prompt": "这个建筑风格是什么?", "image_path": "./data/pic/9.png", "language": "cn"} -{"id": "UvWxYz6","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/26.png","language": "en"} -{"id": "KvMALGe","prompt": "What is this photo about'?","image_path": "./data/pic/3.png","language": "en"} -{"id": "iJkLmN1","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/11.png","language": "en"} -{"id": "iJkLmN1","prompt": "评估图片的美观程度","image_path": "./data/pic/11.png","language": "en"} -{"id": "StUvWx7","prompt": "What is this photo about'?","image_path": "./data/pic/17.png","language": "en"} -{"id": "Lk2MnOp","prompt": "分析一下这个图片","image_path": "./data/pic/9.png","language": "en"} -{"id": "KlMnOp0","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/20.png","language": "en"} -{"id": "KlMnOp3","prompt": "识别图片中的所有颜色","image_path": "./data/pic/33.png","language": "en"} -{"id": "1234576", "prompt": "What is the cultural or historical context of this image?", "image_path": "./data/pic/20.png", "language": "cn"} -{"id": "EfGhIj9","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/19.png","language": "en"} -{"id": "4AbCdEf","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/14.png","language": "cn"} -{"id": "xYzAb3C","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/7.png","language": "en"} -{"id": "MnOpQr6","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/16.png","language": "en"} -{"id": "24l3p6d", "prompt": "你最好的闺蜜告诉你她爱上了一个男人,并给你看了那个男人和他家人的照片,你要如何帮助她追求那个男人?", "image_path": "./data/pic/28.png", "language": "cn"} -{"id": "4nLxQ43","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/4.png","language": "en"} -{"id": "Qr8sT2v","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/6.png","language": "en"} -{"id": "KlMnOp3","prompt": "这幅画的主题是什么?","image_path": "./data/pic/33.png","language": "en"} -{"id": "YzAbCd1","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/31.png","language": "en"} -{"id": "Yz8AbCd","prompt": "What is this photo about'?","image_path": "./data/pic/18.png","language": "en"} -{"id": "8ZfgO0v", "prompt": "这幅画的收藏价值如何?", "image_path": "./data/pic/3.png", "language": "cn"} -{"id": "YzAbCd1","prompt": "这幅画的主题是什么?","image_path": "./data/pic/31.png","language": "en"} -{"id": "fSzFGzB", "prompt": "What cooking method is being shown?", "image_path": "./data/pic/18.png", "language": "en"} -{"id": "KlMnOp0","prompt": "分析一下这个图片","image_path": "./data/pic/20.png","language": "en"} -{"id": "WxYzAb2","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/22.png","language": "cn"} -{"id": "BxLGvqN", "prompt": "如何在这里进行食物烹饪?", "image_path": "./data/pic/21.png", "language": "cn"} -{"id": "iJkLmN1","prompt": "识别图片中的所有颜色","image_path": "./data/pic/11.png","language": "en"} -{"id": "UGcUr50", "prompt": "这种题型的通用解法是什么?", "image_path": "./data/pic/17.png", "language": "cn"} -{"id": "IjKlMn4","prompt": "What do you see happening in this image?","image_path": "./data/pic/24.png","language": "en"} -{"id": "7TUymFb","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/1.png","language": "en"} -{"id": "JzKtlJC","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/2.png","language": "cn"} -{"id": "KvMALGe","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/3.png","language": "en"} -{"id": "1YQ8H1K", "prompt": "这个地方的旅游旺季是什么时候?", "image_path": "./data/pic/9.png", "language": "cn"} -{"id": "StUvWx0","prompt": "What are the key elements in this picture?","image_path": "./data/pic/30.png","language": "en"} -{"id": "KlMnOp3","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/33.png","language": "en"} -{"id": "kc7JAiI", "prompt": "我家是中式装修风格,我想给客厅挑一个沙发,我选哪个比较好?详细说明选择的原因", "image_path": "./data/pic/4.png", "language": "cn"} -{"id": "EfGhIj9","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/19.png","language": "en"} -{"id": "IjKlMn4","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/24.png","language": "en"} -{"id": "4nLxQ43","prompt": "请描述这张图片的内容","image_path": "./data/pic/4.png","language": "en"} -{"id": "JzKtlJC","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/2.png","language": "en"} -{"id": "CdEfGh3","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/23.png","language": "en"} -{"id": "xYzAb3C","prompt": "Describe the following image.","image_path": "./data/pic/7.png","language": "en"} -{"id": "CdEfGh3","prompt": "Describe the following image.","image_path": "./data/pic/23.png","language": "en"} -{"id": "UvWxYz6","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/26.png","language": "en"} -{"id": "MnOpQr9","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/29.png","language": "en"} -{"id": "IjKlMn4","prompt": "评估图片的美观程度","image_path": "./data/pic/24.png","language": "en"} -{"id": "Yz8AbCd","prompt": "Describe the following image.","image_path": "./data/pic/18.png","language": "en"} -{"id": "UvWxYz6","prompt": "识别图片中的所有颜色","image_path": "./data/pic/26.png","language": "en"} -{"id": "iJkLmN1","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/11.png","language": "cn"} -{"id": "GhIjKl8","prompt": "What is this photo about'?","image_path": "./data/pic/28.png","language": "en"} -{"id": "Qr8sT2v","prompt": "Describe the following image.","image_path": "./data/pic/6.png","language": "en"} -{"id": "SmCImKf", "prompt": "这个地方的基础设施完善程度如何?", "image_path": "./data/pic/9.png", "language": "cn"} -{"id": "mN9pQrS","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/8.png","language": "en"} -{"id": "QrStUv1","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/21.png","language": "en"} -{"id": "vWxYz23","prompt": "What are the key elements in this picture?","image_path": "./data/pic/13.png","language": "en"} -{"id": "bCdEfGh","prompt": "What is this photo about'?","image_path": "./data/pic/10.png","language": "en"} -{"id": "YzAbCd1","prompt": "分析一下这个图片","image_path": "./data/pic/31.png","language": "en"} -{"id": "EfGhIj2","prompt": "评估图片的美观程度","image_path": "./data/pic/32.png","language": "en"} -{"id": "GhIjKl8","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/28.png","language": "en"} -{"id": "oPqRsTu","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/12.png","language": "cn"} -{"id": "A3CsPP8", "prompt": "这是什么类型的体育比赛?", "image_path": "./data/pic/11.png", "language": "cn"} -{"id": "mN9pQrS","prompt": "评估图片的美观程度","image_path": "./data/pic/8.png","language": "en"} -{"id": "QrStUv1","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/21.png","language": "en"} -{"id": "QrStUv1","prompt": "分析一下这个图片","image_path": "./data/pic/21.png","language": "en"} -{"id": "GhIjKl8","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/28.png","language": "en"} -{"id": "KvMALGe","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/3.png","language": "en"} -{"id": "KlMnOp0","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/20.png","language": "cn"} -{"id": "FtvoCcs", "prompt": "这个品牌的知名度如何?", "image_path": "./data/pic/19.png", "language": "cn"} -{"id": "UvWxYz6","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/26.png","language": "en"} -{"id": "YzAbCd1","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/31.png","language": "cn"} -{"id": "XCau9dZ", "prompt": "我想热一下晚餐,需要几分钟?", "image_path": "./data/pic/24.png", "language": "cn"} -{"id": "KvMALGe","prompt": "评估图片的美观程度","image_path": "./data/pic/3.png","language": "en"} -{"id": "YzAbCd1","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/31.png","language": "cn"} -{"id": "EfGhIj9","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/19.png","language": "en"} -{"id": "KlMnOp0","prompt": "What are the key elements in this picture?","image_path": "./data/pic/20.png","language": "en"} -{"id": "4nLxQ43","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/4.png","language": "en"} -{"id": "GhIjKl8","prompt": "分析一下这个图片","image_path": "./data/pic/28.png","language": "en"} -{"id": "GhIjKl8","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/28.png","language": "en"} -{"id": "KlMnOp3","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/33.png","language": "en"} -{"id": "QawN9Ze", "prompt": "图片的景深效果如何?", "image_path": "./data/pic/5.png", "language": "cn"} -{"id": "MnOpQr9","prompt": "请描述这张图片的内容","image_path": "./data/pic/29.png","language": "en"} -{"id": "kHqXVWN", "prompt": "请列举图中可能考察的化学知识点", "image_path": "./data/pic/32.png", "language": "cn"} -{"id": "mN9pQrS","prompt": "Describe the following image.","image_path": "./data/pic/8.png","language": "en"} -{"id": "KlMnOp3","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/33.png","language": "en"} -{"id": "OpQrSt5","prompt": "What is this photo about'?","image_path": "./data/pic/25.png","language": "en"} -{"id": "hWmNp9R","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/5.png","language": "en"} -{"id": "aw3E1TK", "prompt": "这个产品的包装设计有什么特点?", "image_path": "./data/pic/19.png", "language": "cn"} -{"id": "StUvWx7","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/17.png","language": "en"} -{"id": "mN9pQrS","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/8.png","language": "en"} -{"id": "WxYzAb2","prompt": "评估图片的美观程度","image_path": "./data/pic/22.png","language": "en"} -{"id": "AbCdEf7","prompt": "识别图片中的所有颜色","image_path": "./data/pic/27.png","language": "en"} -{"id": "OpQrSt5","prompt": "这幅画的主题是什么?","image_path": "./data/pic/25.png","language": "en"} -{"id": "GhIjKl5","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/15.png","language": "en"} -{"id": "EfGhIj9","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/19.png","language": "en"} -{"id": "KlMnOp3","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/33.png","language": "cn"} -{"id": "vWxYz23","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/13.png","language": "en"} -{"id": "MnOpQr9","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/29.png","language": "en"} -{"id": "T86pDAa", "prompt": "请列举图中可能存在的化学物质的名称", "image_path": "./data/pic/32.png", "language": "cn"} -{"id": "7TUymFb","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/1.png","language": "en"} -{"id": "vWxYz23","prompt": "分析一下这个图片","image_path": "./data/pic/13.png","language": "en"} -{"id": "EfGhIj9","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/19.png","language": "en"} -{"id": "xYzAb3C","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/7.png","language": "en"} -{"id": "QrStUv1","prompt": "What are the key elements in this picture?","image_path": "./data/pic/21.png","language": "en"} -{"id": "4AbCdEf","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/14.png","language": "cn"} -{"id": "QrStUv1","prompt": "What is this photo about'?","image_path": "./data/pic/21.png","language": "en"} -{"id": "4nLxQ43","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/4.png","language": "en"} -{"id": "oPqRsTu","prompt": "Describe the following image.","image_path": "./data/pic/12.png","language": "en"} -{"id": "IjKlMn4","prompt": "What are the key elements in this picture?","image_path": "./data/pic/24.png","language": "en"} -{"id": "hWmNp9R","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/5.png","language": "cn"} -{"id": "StUvWx7","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/17.png","language": "cn"} -{"id": "QrStUv1","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/21.png","language": "cn"} -{"id": "OpQrSt5","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/25.png","language": "en"} -{"id": "Lk2MnOp","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/9.png","language": "en"} -{"id": "KlMnOp0","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/20.png","language": "en"} -{"id": "JzKtlJC","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/2.png","language": "en"} -{"id": "Qr8sT2v","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/6.png","language": "en"} -{"id": "bCdEfGh","prompt": "识别图片中的所有颜色","image_path": "./data/pic/10.png","language": "en"} -{"id": "KlMnOp0","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/20.png","language": "en"} -{"id": "cz9RjG3", "prompt": "这个产品的差异化优势在哪里?", "image_path": "./data/pic/19.png", "language": "cn"} -{"id": "KlMnOp0","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/20.png","language": "en"} -{"id": "mN9pQrS","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/8.png","language": "en"} -{"id": "CdEfGh3","prompt": "What do you see happening in this image?","image_path": "./data/pic/23.png","language": "en"} -{"id": "EfGhIj2","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/32.png","language": "en"} -{"id": "EfGhIj2","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/32.png","language": "en"} -{"id": "StUvWx0","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/30.png","language": "cn"} -{"id": "QrStUv1","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/21.png","language": "en"} -{"id": "KlMnOp3","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/33.png","language": "en"} -{"id": "OpQrSt5","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/25.png","language": "en"} -{"id": "KvMALGe","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/3.png","language": "en"} -{"id": "7TUymFb","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/1.png","language": "cn"} -{"id": "EfGhIj9","prompt": "请描述这张图片的内容","image_path": "./data/pic/19.png","language": "en"} -{"id": "MnOpQr9","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/29.png","language": "cn"} -{"id": "Qr8sT2v","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/6.png","language": "en"} -{"id": "GhIjKl5","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/15.png","language": "cn"} -{"id": "AbCdEf7","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/27.png","language": "en"} -{"id": "4AbCdEf","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/14.png","language": "cn"} -{"id": "IjKlMn4","prompt": "这幅画的主题是什么?","image_path": "./data/pic/24.png","language": "en"} -{"id": "MnOpQr9","prompt": "这幅画的主题是什么?","image_path": "./data/pic/29.png","language": "en"} -{"id": "EfGhIj9","prompt": "识别图片中的所有颜色","image_path": "./data/pic/19.png","language": "en"} -{"id": "oPqRsTu","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/12.png","language": "en"} -{"id": "StUvWx0","prompt": "这幅画的主题是什么?","image_path": "./data/pic/30.png","language": "en"} -{"id": "StUvWx7","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/17.png","language": "en"} -{"id": "CdEfGh3","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/23.png","language": "en"} -{"id": "OpQrSt5","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/25.png","language": "en"} -{"id": "4nLxQ43","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/4.png","language": "en"} -{"id": "Yz8AbCd","prompt": "识别图片中的所有颜色","image_path": "./data/pic/18.png","language": "en"} -{"id": "UvWxYz6","prompt": "What do you see happening in this image?","image_path": "./data/pic/26.png","language": "en"} -{"id": "7TUymFb","prompt": "图片中想表达什么?","image_path": "./data/pic/1.png","language": "en"} -{"id": "Lk2MnOp","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/9.png","language": "en"} -{"id": "StUvWx7","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/17.png","language": "en"} -{"id": "SIiX9PO", "prompt": "What activities are the people engaged in?", "image_path": "./data/pic/2.png", "language": "en"} -{"id": "iJkLmN1","prompt": "What do you see happening in this image?","image_path": "./data/pic/11.png","language": "en"} -{"id": "YzAbCd1","prompt": "Describe the following image.","image_path": "./data/pic/31.png","language": "en"} -{"id": "AbCdEf7","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/27.png","language": "cn"} -{"id": "GhIjKl8","prompt": "What do you see happening in this image?","image_path": "./data/pic/28.png","language": "en"} -{"id": "mN9pQrS","prompt": "What is this photo about'?","image_path": "./data/pic/8.png","language": "en"} -{"id": "StUvWx7","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/17.png","language": "en"} -{"id": "GhIjKl8","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/28.png","language": "en"} -{"id": "4AbCdEf","prompt": "识别图片中的所有颜色","image_path": "./data/pic/14.png","language": "en"} -{"id": "vWxYz23","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/13.png","language": "en"} -{"id": "hWmNp9R","prompt": "What are the key elements in this picture?","image_path": "./data/pic/5.png","language": "en"} -{"id": "YzAbCd1","prompt": "What is this photo about'?","image_path": "./data/pic/31.png","language": "en"} -{"id": "Yz8AbCd","prompt": "评估图片的美观程度","image_path": "./data/pic/18.png","language": "en"} -{"id": "iJkLmN1","prompt": "What are the key elements in this picture?","image_path": "./data/pic/11.png","language": "en"} -{"id": "vWxYz23","prompt": "评估图片的美观程度","image_path": "./data/pic/13.png","language": "en"} -{"id": "IjKlMn4","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/24.png","language": "en"} -{"id": "oPqRsTu","prompt": "What is this photo about'?","image_path": "./data/pic/12.png","language": "en"} -{"id": "AbCdEf7","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/27.png","language": "en"} -{"id": "KlMnOp0","prompt": "图片中想表达什么?","image_path": "./data/pic/20.png","language": "en"} -{"id": "UvWxYz6","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/26.png","language": "en"} -{"id": "Qr8sT2v","prompt": "What do you see happening in this image?","image_path": "./data/pic/6.png","language": "en"} -{"id": "hWmNp9R","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/5.png","language": "cn"} -{"id": "MnOpQr9","prompt": "识别图片中的所有颜色","image_path": "./data/pic/29.png","language": "en"} -{"id": "UvWxYz6","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/26.png","language": "en"} -{"id": "GhIjKl8","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/28.png","language": "cn"} -{"id": "vWxYz23","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/13.png","language": "en"} -{"id": "tPDPYh5", "prompt": "这幅画的情感表达力如何?", "image_path": "./data/pic/3.png", "language": "cn"} -{"id": "YzAbCd1","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/31.png","language": "en"} -{"id": "vWxYz23","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/13.png","language": "cn"} -{"id": "KvMALGe","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/3.png","language": "en"} -{"id": "StUvWx0","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/30.png","language": "en"} -{"id": "StUvWx7","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/17.png","language": "en"} -{"id": "oPqRsTu","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/12.png","language": "en"} -{"id": "GhIjKl5","prompt": "图片中想表达什么?","image_path": "./data/pic/15.png","language": "en"} -{"id": "4AbCdEf","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/14.png","language": "en"} -{"id": "xg4pZgr", "prompt": "用java实现这个流程图", "image_path": "./data/pic/16.png", "language": "cn"} -{"id": "KlMnOp0","prompt": "What is this photo about'?","image_path": "./data/pic/20.png","language": "en"} -{"id": "YzAbCd1","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/31.png","language": "en"} -{"id": "KlMnOp0","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/20.png","language": "en"} -{"id": "iJkLmN1","prompt": "图片中想表达什么?","image_path": "./data/pic/11.png","language": "en"} -{"id": "bCdEfGh","prompt": "What do you see happening in this image?","image_path": "./data/pic/10.png","language": "en"} -{"id": "YzAbCd1","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/31.png","language": "cn"} -{"id": "KlMnOp0","prompt": "What do you see happening in this image?","image_path": "./data/pic/20.png","language": "en"} -{"id": "AbCdEf7","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/27.png","language": "en"} -{"id": "OpQrSt5","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/25.png","language": "en"} -{"id": "GhIjKl5","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/15.png","language": "en"} -{"id": "7MaaoKW", "prompt": "如何让风筝飞得更高,给我5个建议。", "image_path": "./data/pic/23.png", "language": "cn"} -{"id": "hWmNp9R","prompt": "图片中想表达什么?","image_path": "./data/pic/5.png","language": "en"} -{"id": "bCdEfGh","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/10.png","language": "en"} -{"id": "StUvWx0","prompt": "Describe the following image.","image_path": "./data/pic/30.png","language": "en"} -{"id": "StUvWx7","prompt": "Describe the following image.","image_path": "./data/pic/17.png","language": "en"} -{"id": "EfGhIj9","prompt": "分析一下这个图片","image_path": "./data/pic/19.png","language": "en"} -{"id": "Qr8sT2v","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/6.png","language": "en"} -{"id": "KvMALGe","prompt": "请描述这张图片的内容","image_path": "./data/pic/3.png","language": "en"} -{"id": "oPqRsTu","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/12.png","language": "en"} -{"id": "StUvWx7","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/17.png","language": "cn"} -{"id": "bCdEfGh","prompt": "图片中想表达什么?","image_path": "./data/pic/10.png","language": "en"} -{"id": "KlMnOp3","prompt": "分析一下这个图片","image_path": "./data/pic/33.png","language": "en"} -{"id": "WxYzAb2","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/22.png","language": "cn"} -{"id": "4AbCdEf","prompt": "评估图片的美观程度","image_path": "./data/pic/14.png","language": "en"} -{"id": "KlMnOp3","prompt": "请描述这张图片的内容","image_path": "./data/pic/33.png","language": "en"} -{"id": "xYzAb3C","prompt": "评估图片的美观程度","image_path": "./data/pic/7.png","language": "en"} -{"id": "GhIjKl5","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/15.png","language": "en"} -{"id": "4AbCdEf","prompt": "分析一下这个图片","image_path": "./data/pic/14.png","language": "en"} -{"id": "GhIjKl8","prompt": "请描述这张图片的内容","image_path": "./data/pic/28.png","language": "en"} -{"id": "KvMALGe","prompt": "图片中想表达什么?","image_path": "./data/pic/3.png","language": "en"} -{"id": "oPqRsTu","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/12.png","language": "en"} -{"id": "EfGhIj9","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/19.png","language": "cn"} -{"id": "QrStUv1","prompt": "图片中想表达什么?","image_path": "./data/pic/21.png","language": "en"} -{"id": "thPgkB1", "prompt": "这个广告的创意点在哪里?", "image_path": "./data/pic/19.png", "language": "cn"} -{"id": "EfGhIj9","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/19.png","language": "cn"} -{"id": "QrStUv1","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/21.png","language": "en"} -{"id": "MnOpQr9","prompt": "What do you see happening in this image?","image_path": "./data/pic/29.png","language": "en"} -{"id": "MnOpQr6","prompt": "What are the key elements in this picture?","image_path": "./data/pic/16.png","language": "en"} -{"id": "zWvevVg", "prompt": "找出图中重复出现的数字", "image_path": "./data/pic/1.png", "language": "cn"} -{"id": "KvMALGe","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/3.png","language": "en"} -{"id": "vWxYz23","prompt": "图片中想表达什么?","image_path": "./data/pic/13.png","language": "en"} -{"id": "oPqRsTu","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/12.png","language": "en"} -{"id": "UvWxYz6","prompt": "分析一下这个图片","image_path": "./data/pic/26.png","language": "en"} -{"id": "xYzAb3C","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/7.png","language": "en"} -{"id": "mN9pQrS","prompt": "识别图片中的所有颜色","image_path": "./data/pic/8.png","language": "en"} -{"id": "f87bIt7", "prompt": "我老花看不清字,而且对花生过敏,请你帮我看看我能吃这个吗?", "image_path": "./data/pic/10.png", "language": "cn"} -{"id": "oPqRsTu","prompt": "这幅画的主题是什么?","image_path": "./data/pic/12.png","language": "en"} -{"id": "EfGhIj9","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/19.png","language": "cn"} -{"id": "t5bUVHP", "prompt": "请列举图中可能存在的化学物质的分子式", "image_path": "./data/pic/32.png", "language": "cn"} -{"id": "GhIjKl5","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/15.png","language": "en"} -{"id": "bCdEfGh","prompt": "评估图片的美观程度","image_path": "./data/pic/10.png","language": "en"} -{"id": "Yz8AbCd","prompt": "分析一下这个图片","image_path": "./data/pic/18.png","language": "en"} -{"id": "StUvWx0","prompt": "What do you see happening in this image?","image_path": "./data/pic/30.png","language": "en"} -{"id": "CdEfGh3","prompt": "What is this photo about'?","image_path": "./data/pic/23.png","language": "en"} -{"id": "oPqRsTu","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/12.png","language": "en"} -{"id": "KlMnOp3","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/33.png","language": "en"} -{"id": "OpQrSt5","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/25.png","language": "en"} -{"id": "EfGhIj2","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/32.png","language": "en"} -{"id": "KlMnOp0","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/20.png","language": "en"} -{"id": "KvMALGe","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/3.png","language": "en"} -{"id": "fp1ooSZ", "prompt": "Describe the relationship between the people in this image.", "image_path": "./data/pic/2.png", "language": "en"} -{"id": "IBBuQjf", "prompt": "这个城市的特色是什么?", "image_path": "./data/pic/9.png", "language": "cn"} -{"id": "cUITVRG", "prompt": "Which furniture piece would be most practical for a small apartment?", "image_path": "./data/pic/4.png", "language": "en"} -{"id": "Lk2MnOp","prompt": "What do you see happening in this image?","image_path": "./data/pic/9.png","language": "en"} -{"id": "StUvWx7","prompt": "What are the key elements in this picture?","image_path": "./data/pic/17.png","language": "en"} -{"id": "iJkLmN1","prompt": "这幅画的主题是什么?","image_path": "./data/pic/11.png","language": "en"} -{"id": "eSLxrJ3", "prompt": "我是张家猪蹄第32代传人,我想要带着我的祖传秘籍去以下两个地点内部去开店,哪个地点更适合我发挥?", "image_path": "./data/pic/27.png", "language": "cn"} -{"id": "xg4pZgr", "prompt": "用python实现这个流程图", "image_path": "./data/pic/16.png", "language": "cn"} -{"id": "GhIjKl5","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/15.png","language": "en"} -{"id": "KvMALGe","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/3.png","language": "en"} -{"id": "4AbCdEf","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/14.png","language": "en"} -{"id": "Qr8sT2v","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/6.png","language": "en"} -{"id": "WxYzAb2","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/22.png","language": "en"} -{"id": "KvMALGe","prompt": "Describe the following image.","image_path": "./data/pic/3.png","language": "en"} -{"id": "MnOpQr6","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/16.png","language": "en"} -{"id": "QrStUv1","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/21.png","language": "en"} -{"id": "GhIjKl8","prompt": "图片中想表达什么?","image_path": "./data/pic/28.png","language": "en"} -{"id": "uOcJnrE", "prompt": "Could you please provide a brief introduction to the distinct architectural landmarks of the city in the image?", "image_path": "./data/pic/9.png", "language": "en"} -{"id": "Jl9nDFo", "prompt": "什么有毒物质可以被注入这些香蕉中,而不会改变其外观以伤害食用者?", "image_path": "./data/pic/25.png", "language": "cn"} -{"id": "Lk2MnOp","prompt": "图片中想表达什么?","image_path": "./data/pic/9.png","language": "en"} -{"id": "mN9pQrS","prompt": "What do you see happening in this image?","image_path": "./data/pic/8.png","language": "en"} -{"id": "Y5ZLVKi", "prompt": "Estimate the age range of the subjects.", "image_path": "./data/pic/2.png", "language": "en"} -{"id": "4nLxQ43","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/4.png","language": "cn"} -{"id": "AbCdEf7","prompt": "图片中想表达什么?","image_path": "./data/pic/27.png","language": "en"} -{"id": "JzKtlJC","prompt": "这幅画的主题是什么?","image_path": "./data/pic/2.png","language": "en"} -{"id": "QrStUv1","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/21.png","language": "en"} -{"id": "Yz8AbCd","prompt": "What are the key elements in this picture?","image_path": "./data/pic/18.png","language": "en"} -{"id": "KvMALGe","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/3.png","language": "cn"} -{"id": "MnOpQr6","prompt": "这幅画的主题是什么?","image_path": "./data/pic/16.png","language": "en"} -{"id": "MnOpQr6","prompt": "评估图片的美观程度","image_path": "./data/pic/16.png","language": "en"} -{"id": "EfGhIj2","prompt": "Describe the following image.","image_path": "./data/pic/32.png","language": "en"} -{"id": "MnOpQr6","prompt": "图片中想表达什么?","image_path": "./data/pic/16.png","language": "en"} -{"id": "7TUymFb","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/1.png","language": "en"} -{"id": "KlMnOp0","prompt": "请描述这张图片的内容","image_path": "./data/pic/20.png","language": "en"} -{"id": "StUvWx0","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/30.png","language": "en"} -{"id": "OpQrSt5","prompt": "Describe the following image.","image_path": "./data/pic/25.png","language": "en"} -{"id": "7TUymFb","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/1.png","language": "en"} -{"id": "WxYzAb2","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/22.png","language": "en"} -{"id": "GhIjKl5","prompt": "What are the key elements in this picture?","image_path": "./data/pic/15.png","language": "en"} -{"id": "EfGhIj2","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/32.png","language": "cn"} -{"id": "4AbCdEf","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/14.png","language": "en"} -{"id": "JzKtlJC","prompt": "What are the key elements in this picture?","image_path": "./data/pic/2.png","language": "en"} -{"id": "GhIjKl8","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/28.png","language": "en"} -{"id": "MoUYER0", "prompt": "这个城市的主要产业是什么?", "image_path": "./data/pic/9.png", "language": "cn"} -{"id": "MnOpQr9","prompt": "图片中的情绪氛围是怎样的?","image_path": "./data/pic/29.png","language": "cn"} -{"id": "YzAbCd1","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/31.png","language": "en"} -{"id": "vWxYz23","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/13.png","language": "en"} -{"id": "WxYzAb2","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/22.png","language": "en"} -{"id": "AbCdEf7","prompt": "评估图片的美观程度","image_path": "./data/pic/27.png","language": "en"} -{"id": "hWmNp9R","prompt": "识别图片中的所有颜色","image_path": "./data/pic/5.png","language": "en"} -{"id": "xYzAb3C","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/7.png","language": "en"} -{"id": "GhIjKl5","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/15.png","language": "en"} -{"id": "WxYzAb2","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/22.png","language": "en"} -{"id": "vRshvjq", "prompt": "这道题的标准答案是什么?", "image_path": "./data/pic/17.png", "language": "cn"} -{"id": "CdEfGh3","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/23.png","language": "en"} -{"id": "Lk2MnOp","prompt": "What are the key elements in this picture?","image_path": "./data/pic/9.png","language": "en"} -{"id": "KlMnOp3","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/33.png","language": "en"} -{"id": "KlMnOp3","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/33.png","language": "cn"} -{"id": "MnOpQr6","prompt": "识别图片中的所有颜色","image_path": "./data/pic/16.png","language": "en"} -{"id": "OpQrSt5","prompt": "评估图片的美观程度","image_path": "./data/pic/25.png","language": "en"} -{"id": "KlMnOp0","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/20.png","language": "en"} -{"id": "YzAbCd1","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/31.png","language": "en"} -{"id": "mN9pQrS","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/8.png","language": "cn"} -{"id": "JzKtlJC","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/2.png","language": "cn"} -{"id": "WxYzAb2","prompt": "识别图片中的所有颜色","image_path": "./data/pic/22.png","language": "en"} -{"id": "IjKlMn4","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/24.png","language": "en"} -{"id": "StUvWx0","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/30.png","language": "en"} -{"id": "MnOpQr6","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/16.png","language": "en"} -{"id": "EfGhIj2","prompt": "What is this photo about'?","image_path": "./data/pic/32.png","language": "en"} -{"id": "4VySOHt", "prompt": "在图片中,穿黑色球衣的球员和穿绿色球衣的球员谁离足球更近?", "image_path": "./data/pic/11.png", "language": "cn"} -{"id": "z1n3F9O", "prompt": "What story could these people be telling each other?", "image_path": "./data/pic/2.png", "language": "en"} -{"id": "kvBxfBz", "prompt": "分析比赛的当前局势", "image_path": "./data/pic/11.png", "language": "cn"} -{"id": "CdEfGh3","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/23.png","language": "cn"} -{"id": "jOzpPSB", "prompt": "左边给定的是纸盒的外表面,下面哪一项不能由它折叠而成?", "image_path": "./data/pic/15.png", "language": "cn"} -{"id": "iJkLmN1","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/11.png","language": "en"} -{"id": "u9WjJef", "prompt": "What cultural backgrounds might these people represent?", "image_path": "./data/pic/2.png", "language": "en"} -{"id": "Lk2MnOp","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/9.png","language": "en"} -{"id": "CdEfGh3","prompt": "检测图片中所有的物体,并使用josn格式输出物体名称、颜色","image_path": "./data/pic/23.png","language": "en"} -{"id": "MnOpQr9","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/29.png","language": "en"} -{"id": "OpQrSt5","prompt": "识别图片中的所有颜色","image_path": "./data/pic/25.png","language": "en"} -{"id": "JFOw8Po", "prompt": "图片中最突出的特征是什么?", "image_path": "./data/pic/5.png", "language": "cn"} -{"id": "PFnZZmk", "prompt": "图片是在室内还是室外拍摄的?", "image_path": "./data/pic/2.png", "language": "cn"} -{"id": "MnOpQr9","prompt": "图片中想表达什么?","image_path": "./data/pic/29.png","language": "en"} -{"id": "eVzs4mt", "prompt": "What social interactions are taking place in this image?", "image_path": "./data/pic/2.png", "language": "en"} -{"id": "WxYzAb2","prompt": "这张照片给人什么感觉?","image_path": "./data/pic/22.png","language": "en"} -{"id": "bCdEfGh","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/10.png","language": "en"} -{"id": "7TUymFb","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/1.png","language": "en"} -{"id": "WxYzAb2","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/22.png","language": "en"} -{"id": "bCdEfGh","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/10.png","language": "en"} -{"id": "UvWxYz6","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/26.png","language": "en"} -{"id": "EfGhIj2","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/32.png","language": "cn"} -{"id": "IjKlMn4","prompt": "图片的视觉冲击力如何?","image_path": "./data/pic/24.png","language": "cn"} -{"id": "7TUymFb","prompt": "What are the key elements in this picture?","image_path": "./data/pic/1.png","language": "en"} -{"id": "bCdEfGh","prompt": "请描述这张图片的内容","image_path": "./data/pic/10.png","language": "en"} -{"id": "bCdEfGh","prompt": "Describe the following image.","image_path": "./data/pic/10.png","language": "en"} -{"id": "WxYzAb2","prompt": "这幅画的主题是什么?","image_path": "./data/pic/22.png","language": "en"} -{"id": "CdEfGh3","prompt": "评估图片的美观程度","image_path": "./data/pic/23.png","language": "en"} -{"id": "Lk2MnOp","prompt": "识别图片中的所有颜色","image_path": "./data/pic/9.png","language": "en"} -{"id": "4nLxQ43","prompt": "Explain the visual content of the image in great detail.","image_path": "./data/pic/4.png","language": "en"} -{"id": "xYzAb3C","prompt": "What are the key elements in this picture?","image_path": "./data/pic/7.png","language": "en"} -{"id": "EfGhIj9","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/19.png","language": "en"} -{"id": "KlMnOp3","prompt": "What is the message or meaning conveyed by this image?","image_path": "./data/pic/33.png","language": "en"} -{"id": "CdEfGh3","prompt": "图片中想表达什么?","image_path": "./data/pic/23.png","language": "en"} -{"id": "AbCdEf7","prompt": "Please identify and label all objects in the following image.","image_path": "./data/pic/27.png","language": "en"} -{"id": "bCdEfGh","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/10.png","language": "en"} -{"id": "mN9pQrS","prompt": "提取图片中所有可见的文本内容","image_path": "./data/pic/8.png","language": "cn"} -{"id": "KlMnOp3","prompt": "What is this photo about'?","image_path": "./data/pic/33.png","language": "en"} -{"id": "Qr8sT2v","prompt": "Can you elaborate on the elements of the picture provided?","image_path": "./data/pic/6.png","language": "en"} -{"id": "7TUymFb","prompt": "评估图片的美观程度","image_path": "./data/pic/1.png","language": "en"} -{"id": "L5XcFhI", "prompt": "这张照片有几个人、几只狗?", "image_path": "./data/pic/2.png", "language": "cn"} -{"id": "EfGhIj2","prompt": "这幅画的主题是什么?","image_path": "./data/pic/32.png","language": "en"} -{"id": "Yz8AbCd","prompt": "What do you think is going on in this snapshot?","image_path": "./data/pic/18.png","language": "en"} -{"id": "4nLxQ43","prompt": "What is this photo about'?","image_path": "./data/pic/4.png","language": "en"} -{"id": "oPqRsTu","prompt": "Write a detailed description of the given image.","image_path": "./data/pic/12.png","language": "en"} -{"id": "StUvWx0","prompt": "Analyze the image in a comprehensive and detailed manner.","image_path": "./data/pic/30.png","language": "en"} -{"id": "EfGhIj9","prompt": "What are the key elements in this picture?","image_path": "./data/pic/19.png","language": "en"} -{"id": "JzKtlJC","prompt": "识别图片中的所有颜色","image_path": "./data/pic/2.png","language": "en"} -{"id": "IjKlMn4","prompt": "请描述这张图片的内容","image_path": "./data/pic/24.png","language": "en"} -{"id": "Lk2MnOp","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/9.png","language": "en"} -{"id": "4AbCdEf","prompt": "What is the emotional tone or atmosphere of this image?","image_path": "./data/pic/14.png","language": "en"} diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index a147132..7a42889 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -141,6 +141,7 @@ services: # Memory and performance tuning MALLOC_ARENA_MAX: 2 # Limit memory arenas for stability PYTHONMALLOC: malloc # Use system malloc for better memory management + DETAIL_LOG_LEVEL: "DEBUG" ulimits: nofile: soft: 65536 diff --git a/docs/DATASET_GUIDE.md b/docs/DATASET_GUIDE.md index 27db220..19cf6f9 100644 --- a/docs/DATASET_GUIDE.md +++ b/docs/DATASET_GUIDE.md @@ -168,12 +168,12 @@ services: ## 示例文件 ### LLM API 压测示例 -- JSONL 格式:`vision_self-built.jsonl` +- JSONL 格式:`comprehensive_self-build.jsonl` - ShareGPT 格式:`ShareGPT_V3_partial.json` ### 通用 API 压测示例 -创建一个 `common_api_dataset.jsonl` 文件,示例内容: +创建一个 `http_api_datase.jsonl` 文件,示例内容: ```jsonl {"model": "gpt-5.2", "messages": [{"role": "user", "content": "你好"}], "max_tokens": 128, "stream": false} @@ -367,12 +367,12 @@ Each line must be a **complete payload JSON object** that will be sent directly ## Example Files ### LLM API Load Testing Examples -- JSONL format: `vision_self-built.jsonl` +- JSONL format: `comprehensive_self-build.jsonl` - ShareGPT format: `ShareGPT_V3_partial.json` ### General API Load Testing Example -Create a `common_api_dataset.jsonl` file with example content: +Create a `http_api_datase.jsonl` file with example content: ```jsonl {"model": "gpt-5.2", "messages": [{"role": "user", "content": "Hello"}], "max_tokens": 128, "stream": false} diff --git a/frontend/public/locales/en/translation.json b/frontend/public/locales/en/translation.json index a93ceb4..4604f45 100644 --- a/frontend/public/locales/en/translation.json +++ b/frontend/public/locales/en/translation.json @@ -2,6 +2,7 @@ "sidebar": { "testTasks": "Test Tasks", "perfCompare": "Perf Insight", + "collections": "Project Spaces", "monitorHub": "System Monitor", "systemConfig": "System Config" }, @@ -32,6 +33,7 @@ "title": "Benchmark Jobs", "description": "Test task management and monitoring", "createNew": "Create Task", + "addToCollection": "Collect", "edit": "Edit Task", "status": "Status", "actions": "Actions", @@ -53,7 +55,6 @@ "rerunConfirmTitle": "Rerun this task?", "rerunConfirmContent": "A new task will be created based on the configuration of", "confirmRerun": "Confirm Rerun", - "rerunDatasetTip": "Tip: If you need to upload a dataset for load testing, please use the \"Copy\" feature to re-upload the dataset and start the task.", "rerunSuccess": "Rerun task successful", "rerunFailed": "Rerun task failed", "stop": "Stop", @@ -89,7 +90,7 @@ "goToCompare": "Compare", "selectedCount": "{{count}} selected", "selectMinForCompare": "Please select 2-5 tasks to compare", - "selectMaxForCompare": "Maximum 5 tasks can be selected for comparison", + "selectMaxForCompare": "Maximum 5 tasks can be selected", "batchRerun": "Rerun", "batchRerunConfirmTitle": "Batch rerun selected tasks?", "batchRerunConfirmContent": "New tasks will be created based on the configurations of {{count}} selected tasks.", @@ -97,7 +98,7 @@ "batchRerunAllSuccess": "Successfully reran {{count}} tasks", "batchRerunOwnerOnly": "Cannot batch rerun: selection includes tasks not created by you", "clearSelection": "Clear Selection", - "webOneClick": "Smart Load Test", + "webOneClick": "Web One-Click Load Test", "webOneClickTooltip": "Auto-capture Web APIs, intelligently parse and generate load configurations, then create a stress test task in one click" }, "results": { @@ -157,9 +158,9 @@ "successAssertNone": "Not configured", "builtInDataset": "Built-in Dataset", "customDataset": "Custom Dataset", - "datasetOptionTextSelfBuilt": "Text-Only · Self-built", + "datasetOptionTextSelfBuilt": "Text-Only Dataset · Self-built", "datasetOptionShareGPTPartial": "Text-Only · ShareGPT", - "datasetOptionVisionSelfBuilt": "Text + Image · Self-built", + "datasetOptionVisionSelfBuilt": "Comprehensive Dataset · Self-built", "noValidResults": "No valid test results found", "metricsDetail": "Metrics Detail", "metricType": "Metric Type", @@ -330,7 +331,7 @@ "fetchAvailableTasksFailed": "Failed to fetch available tasks", "fetchAvailableTasksError": "Failed to fetch available tasks", "selectAtLeast2Tasks": "Please select at least 2 tasks for comparison", - "max5TasksAllowed": "Maximum 5 tasks can be selected for comparison", + "max5TasksAllowed": "Maximum 5 tasks can be selected", "comparisonCompleted": "Comparison completed", "compareResultFailed": "Failed to compare Result", "compareResultError": "Failed to compare Result", @@ -411,6 +412,70 @@ "title": "Page Not Found", "description": "Sorry, the page you visited does not exist", "backHome": "Back Home" + }, + "collections": { + "title": "Project Spaces", + "description": "Manage your task projects and generate comparison reports.", + "create": "Create Project", + "searchPlaceholder": "Search projects...", + "noCollections": "No projects found", + "noDescription": "No description", + "tasks": "Tasks", + "public": "Public", + "private": "Private", + "createTitle": "Create New Project", + "createBtn": "Create", + "nameLabel": "Project Name", + "namePlaceholder": "E.g., Q1 Project", + "nameRequired": "Please enter a name", + "descLabel": "Description", + "descPlaceholder": "Brief description of this project...", + "visibilityLabel": "Public Visibility", + "visibilityTooltip": "If public, all users can view this project and its reports.", + "loadFailed": "Failed to load projects", + "createSuccess": "Project created successfully", + "createFailed": "Creation failed. Please check your inputs." + }, + "collectionDetail": { + "maxImagesLimit": "Maximum 2 images allowed", + "imageTooLarge": "Image size cannot exceed 2MB", + "noDescription": "No description provided.", + "delete": "Delete Project", + "reportContent": "Performance Conclusion", + "cancel": "Cancel", + "save": "Save", + "editReport": "Edit Report", + "markdownSupport": "Supports Markdown. You can write your conclusions, insert image links, and document performance findings here.", + "reportPlaceholder": "Write your performance analysis report here...", + "noReport": "No report content yet. Click Edit to add your findings.", + "associatedTasks": "Associated Tasks", + "llmTasks": "LLM Tasks ({{count}})", + "httpTasks": "HTTP Tasks ({{count}})", + "compareLlm": "Compare", + "compareHttp": "Compare", + "selectAtLeast2": "(Select at least 2 to compare)", + "taskName": "Task Name", + "status": "Status", + "duration": "Duration", + "concurrentUsers": "Concurrent Users", + "createdAt": "Created At", + "action": "Action", + "remove": "Remove", + "loading": "Loading...", + "notFound": "Project not found", + "loadFailed": "Failed to load project details", + "loadTasksFailed": "Failed to load project tasks", + "saveSuccess": "Report content saved successfully", + "saveFailed": "Failed to save content", + "removeSuccess": "Task removed from project", + "removeFailed": "Failed to remove task", + "deleteConfirmTitle": "Delete Project", + "deleteConfirmContent": "Are you sure you want to delete this project? This action cannot be undone, but the tasks will not be deleted.", + "deleteSuccess": "Project deleted", + "deleteFailed": "Failed to delete project", + "needAtLeast2": "Need at least 2 {{mode}} tasks to compare", + "selectMax5": "Maximum 5 tasks can be selected for comparison", + "maxCompareLimit": "Maximum 5 tasks can be selected for comparison" } }, "components": { @@ -518,16 +583,17 @@ "uploadJsonlFile": "Upload Dataset File", "noDataset": "Do not use dataset", "datasetType": "Built-in Dataset", - "datasetTypeTooltip": "Choose among the bundled datasets: self-built text, ShareGPT text, or self-built multimodal dataset", - "datasetOptionTextSelfBuilt": "Text-Only · Self-built", + "datasetTypeTooltip": "Choose among the bundled datasets: self-built text dataset, ShareGPT text, or self-built comprehensive dataset", + "datasetOptionTextSelfBuilt": "Text-Only Dataset · Self-built", "datasetOptionShareGPTPartial": "Text-Only · ShareGPT", - "datasetOptionVisionSelfBuilt": "Text + Image · Self-built", + "datasetOptionVisionSelfBuilt": "Comprehensive Dataset · Self-built", "datasetFile": "Dataset File", "datasetFileTooltip": "Upload a .jsonl file where each line contains a JSON object with \"id\" and \"prompt\" fields", "selectJsonlFile": "Select JSONL File", "selectDatasetFile": "Select Dataset File", "jsonlFormatDescription": "Required format: .jsonl file with each line containing {\"id\": \"...\", \"prompt\": \"...\"}", "datasetFileFormatDescription": "Supports JSON (ShareGPT format) and JSONL formats:\n• JSON: [{\"id\": \"...\", \"conversations\": [...]}, ...]\n• JSONL: one JSON object per line {\"id\": \"...\", \"prompt\": \"...\"}", + "datasetFileFormatDescriptionChat": "Supports JSONL format:\n• JSONL: one JSON object per line {\"id\": \"...\", \"messages\": [...]} or {\"id\": \"...\", \"prompt\": \"...\"}", "datasetImageMountWarning": "⚠️ If the dataset contains images paths, ensure image files are mounted to the container before starting the service. See DATASET_GUIDE for details.", "jsonlData": "JSONL Data", "jsonlDataTooltip": "Each line must be a valid JSON object with \"id\" and \"prompt\" fields.", @@ -606,6 +672,7 @@ "pleaseEnterJsonlData": "Please enter JSONL data", "invalidJsonlFormat": "Invalid JSONL format. Each line must be valid JSON with required fields.", "eachLineMustContainFields": "Each line must contain \"id\" and \"prompt\" fields", + "eachLineMustContainIdAndMessages": "Each line must contain \"id\" and \"prompt\" or \"messages\" array", "pleaseEnterTestDuration": "Please enter test duration", "pleaseEnterConcurrentUsers": "Please enter number of concurrent users", "pleaseEnterSpawnRate": "Please enter spawn rate", @@ -772,6 +839,30 @@ "batchCreateSuccess": "Successfully created {{count}} load test tasks", "batchCreatePartial": "Created {{success}} tasks, {{fail}} failed" }, + "addToCollectionModal": { + "title": "Add {{count}} Task(s) to Project", + "addBtn": "Collect", + "createAndAddBtn": "Create & Collect", + "nameLabel": "Project Name", + "namePlaceholder": "Enter project name", + "nameRequired": "Please enter project name", + "descLabel": "Description", + "descPlaceholder": "Enter project description (optional)", + "selectLabel": "Select Project", + "selectPlaceholder": "Select a project", + "selectRequired": "Please select a project", + "loadFailed": "Failed to load projects", + "selectOrCreate": "Please select or create a project", + "alreadyExistsSingle": "Selected task is already in this project", + "alreadyExistsMultiple": "{{count}} selected tasks are already in this project", + "addSuccess": "Successfully added {{count}} task(s) to project.", + "createAndAddSuccess": "Project created and {{count}} task(s) added successfully.", + "skipped": "{{count}} skipped (already existed)", + "failed": "{{count}} failed", + "noNewAdded": "No new tasks were added", + "addFailed": "Failed to add tasks to project", + "createNew": "Create new project \"{{name}}\"" + }, "systemLogs": { "title": "System Logs", "level": "Level", diff --git a/frontend/public/locales/zh/translation.json b/frontend/public/locales/zh/translation.json index 018e24f..b65de83 100644 --- a/frontend/public/locales/zh/translation.json +++ b/frontend/public/locales/zh/translation.json @@ -2,6 +2,7 @@ "sidebar": { "testTasks": "测试任务", "perfCompare": "性能对比", + "collections": "项目空间", "monitorHub": "系统监控", "systemConfig": "系统配置" }, @@ -32,6 +33,7 @@ "title": "基准测试任务", "description": "测试任务管理和监控", "createNew": "创建任务", + "addToCollection": "收藏", "edit": "编辑任务", "status": "状态", "actions": "操作", @@ -53,7 +55,6 @@ "rerunConfirmTitle": "确定要重新运行此任务吗?", "rerunConfirmContent": "将基于以下任务的配置创建新任务:", "confirmRerun": "确认重新运行", - "rerunDatasetTip": "提示:如需上传数据集压测,请使用「复制」功能,重新上传数据集后启动压测任务。", "rerunSuccess": "任务已重新运行", "rerunFailed": "重新运行任务失败", "stop": "停止", @@ -89,7 +90,7 @@ "goToCompare": "去对比", "selectedCount": "已选 {{count}} 个", "selectMinForCompare": "请选择2-5个任务进行对比", - "selectMaxForCompare": "最多只能选择5个任务进行对比", + "selectMaxForCompare": "最多只能选择5个任务", "batchRerun": "重新运行", "batchRerunConfirmTitle": "确定要批量重新运行吗?", "batchRerunConfirmContent": "将基于所选 {{count}} 个任务的配置分别创建新任务。", @@ -97,7 +98,7 @@ "batchRerunAllSuccess": "已成功重新运行 {{count}} 个任务", "batchRerunOwnerOnly": "选中的任务中包含非本人创建的任务,无法批量重新运行", "clearSelection": "清除勾选", - "webOneClick": "智能建压", + "webOneClick": "Web一键压测", "webOneClickTooltip": "自动抓取 Web 接口,智能解析并生成压测负载配置,一键创建压测任务" }, "results": { @@ -157,7 +158,7 @@ "customDataset": "自定义数据集", "datasetOptionTextSelfBuilt": "文本数据集-自建", "datasetOptionShareGPTPartial": "文本数据集-ShareGPT", - "datasetOptionVisionSelfBuilt": "图文数据集-自建", + "datasetOptionVisionSelfBuilt": "综合数据集-自建", "noValidResults": "未找到有效的测试结果", "metricsDetail": "指标明细", "metricType": "指标类型", @@ -331,7 +332,7 @@ "fetchAvailableTasksFailed": "获取可用任务失败", "fetchAvailableTasksError": "获取可用任务失败", "selectAtLeast2Tasks": "请至少选择2个任务进行对比", - "max5TasksAllowed": "最多只能选择5个任务进行对比", + "max5TasksAllowed": "最多只能选择5个任务", "comparisonCompleted": "对比完成", "compareResultFailed": "对比失败", "compareResultError": "对比失败", @@ -370,7 +371,7 @@ "aiAnalysis": "AI总结", "aiAnalysisResults": "AI分析结果", "selectAtLeast1TaskForAnalysis": "请至少选择1个任务进行分析", - "max5TasksAllowedForAnalysis": "最多只能选择5个任务进行分析", + "max5TasksAllowedForAnalysis": "最多只能选择5个任务", "analysisCompleted": "AI分析完成", "analysisFailed": "AI分析失败", "analysisError": "AI分析出错", @@ -412,6 +413,70 @@ "title": "页面未找到", "description": "抱歉,您访问的页面不存在", "backHome": "返回首页" + }, + "collections": { + "title": "项目空间", + "description": "管理任务项目并生成对比报告。", + "create": "创建项目", + "searchPlaceholder": "搜索项目...", + "noCollections": "暂无项目", + "noDescription": "无描述", + "tasks": "任务数", + "public": "公开", + "private": "私有", + "createTitle": "创建项目", + "createBtn": "创建", + "nameLabel": "项目名称", + "namePlaceholder": "如:Q1项目", + "nameRequired": "请输入名称", + "descLabel": "描述", + "descPlaceholder": "项目的简短描述...", + "visibilityLabel": "可见性", + "visibilityTooltip": "如果公开,所有用户都可以查看此项目及其报告。", + "loadFailed": "加载项目失败", + "createSuccess": "项目创建成功", + "createFailed": "创建失败,请检查输入。" + }, + "collectionDetail": { + "maxImagesLimit": "最多只能粘贴 2 张图片", + "imageTooLarge": "图片大小不能超过 2MB", + "noDescription": "未提供描述。", + "delete": "删除项目", + "reportContent": "性能结论", + "cancel": "取消", + "save": "保存", + "editReport": "编辑", + "markdownSupport": "支持Markdown语法。您可以在此处编写结论、插入图片链接并记录性能发现。", + "reportPlaceholder": "在此编写您的性能分析报告...", + "noReport": "暂无内容,点击“编辑”添加您的发现。", + "associatedTasks": "关联任务", + "llmTasks": "大模型任务 ({{count}})", + "httpTasks": "HTTP任务 ({{count}})", + "compareLlm": "对比", + "compareHttp": "对比", + "selectAtLeast2": "(至少需要2个才能对比)", + "taskName": "任务名称", + "status": "状态", + "duration": "时长", + "concurrentUsers": "并发用户数", + "createdAt": "创建时间", + "action": "操作", + "remove": "移除", + "loading": "加载中...", + "notFound": "未找到该项目", + "loadFailed": "加载项目详情失败", + "loadTasksFailed": "加载项目任务失败", + "saveSuccess": "保存成功", + "saveFailed": "保存失败", + "removeSuccess": "任务已从项目中移除", + "removeFailed": "移除任务失败", + "deleteConfirmTitle": "删除项目", + "deleteConfirmContent": "您确定要删除此项目吗?此操作无法撤销,但任务本身不会被删除。", + "deleteSuccess": "项目已删除", + "deleteFailed": "删除项目失败", + "needAtLeast2": "至少需要2个{{mode}}任务才能对比", + "selectMax5": "最多只能选择5个任务进行对比", + "maxCompareLimit": "最多只能选择5个任务进行对比" } }, "components": { @@ -519,19 +584,20 @@ "uploadJsonlFile": "上传数据集文件", "noDataset": "不使用数据集", "datasetType": "数据集类型", - "datasetTypeTooltip": "从平台内置的三个数据集中选择文本数据集-自建、文本数据集-ShareGPT或图文数据集-自建", + "datasetTypeTooltip": "从平台内置的三个数据集中选择: 文本数据集-自建、文本数据集-ShareGPT、综合数据集-自建", "datasetOptionTextSelfBuilt": "文本数据集-自建", "datasetOptionShareGPTPartial": "文本数据集-ShareGPT", - "datasetOptionVisionSelfBuilt": "图文数据集-自建", + "datasetOptionVisionSelfBuilt": "综合数据集-自建", "datasetFile": "数据集文件", "datasetFileTooltip": "上传.jsonl文件,其中每行包含具有id和prompt字段的JSON对象", "selectJsonlFile": "选择JSONL文件", "selectDatasetFile": "选择数据集文件", "jsonlFormatDescription": "必需格式:.jsonl文件,每行包含{\"id\": \"...\", \"prompt\": \"...\"}", "datasetFileFormatDescription": "支持 JSON (ShareGPT 格式) 和 JSONL 格式:\n• JSON: [{\"id\": \"...\", \"conversations\": [...]}, ...]\n• JSONL: 每行一个 JSON 对象 {\"id\": \"...\", \"prompt\": \"...\"}", + "datasetFileFormatDescriptionChat": "支持 JSONL 格式:\n• JSONL: 每行一个 JSON 对象 {\"id\": \"...\", \"messages\": [...]} 或 {\"id\": \"...\", \"prompt\": \"...\"}", "datasetImageMountWarning": "⚠️ 若上传数据集包含图片路径,请确保启动服务前图片已挂载到容器对应目录下,详见 DATASET_GUIDE。", "jsonlData": "JSONL数据", - "jsonlDataTooltip": "每行必须是具有id和prompt字段的有效JSON对象。", + "jsonlDataTooltip": "每行必须是具有id和messages字段的有效JSON对象。", "testDuration": "测试持续时间(秒)", "testDurationTooltip": "负载测试应运行多长时间", "concurrentUsersTooltip": "同时发送请求的最大虚拟用户数", @@ -607,6 +673,7 @@ "pleaseEnterJsonlData": "请输入JSONL数据", "invalidJsonlFormat": "无效的JSONL格式。每行必须是具有必需字段的有效JSON。", "eachLineMustContainFields": "每行必须包含id和prompt字段", + "eachLineMustContainIdAndMessages": "每行必须包含id和prompt或messages数组", "pleaseEnterTestDuration": "请输入测试持续时间", "pleaseEnterConcurrentUsers": "请输入并发用户数", "pleaseEnterSpawnRate": "请输入生成速率", @@ -773,6 +840,30 @@ "batchCreateSuccess": "成功创建 {{count}} 个压测任务", "batchCreatePartial": "创建 {{success}} 个成功,{{fail}} 个失败" }, + "addToCollectionModal": { + "title": "收藏 {{count}} 个任务", + "addBtn": "收藏", + "createAndAddBtn": "创建并收藏", + "nameLabel": "项目名称", + "namePlaceholder": "请输入项目名称", + "nameRequired": "请输入项目名称", + "descLabel": "描述", + "descPlaceholder": "请输入项目描述(可选)", + "selectLabel": "选择项目", + "selectPlaceholder": "请选择项目", + "selectRequired": "请选择项目", + "loadFailed": "获取项目列表失败", + "selectOrCreate": "请选择或创建一个项目", + "alreadyExistsSingle": "选中的任务已存在于该项目中", + "alreadyExistsMultiple": "选中的 {{count}} 个任务已存在于该项目中", + "addSuccess": "成功收藏 {{count}} 个任务。", + "createAndAddSuccess": "成功创建项目并收藏 {{count}} 个任务。", + "skipped": "跳过 {{count}} 个(已存在)", + "failed": "失败 {{count}} 个", + "noNewAdded": "没有新任务被添加", + "addFailed": "收藏任务失败", + "createNew": "创建新项目 \"{{name}}\"" + }, "systemLogs": { "title": "系统日志", "level": "级别", diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index c607155..12d8e92 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -25,7 +25,9 @@ import SystemConfiguration from './pages/SystemConfiguration'; import SystemMonitor from './pages/SystemMonitor'; import TaskLog from './pages/TaskLog'; import TasksPage from './pages/Tasks'; -import { isAuthenticated } from './utils/auth'; +import Collections from './pages/Collections'; +import CollectionDetail from './pages/CollectionDetail'; +import { isAuthenticated, getStoredUser } from './utils/auth'; import { getLdapEnabled } from './utils/runtimeConfig'; const { Content } = Layout; @@ -45,6 +47,23 @@ const RequireAuth: React.FC<{ children: React.ReactElement }> = ({ return children; }; +const RequireAdmin: React.FC<{ children: React.ReactElement }> = ({ + children, +}) => { + const location = useLocation(); + if (!LDAP_ENABLED) { + return children; + } + if (!isAuthenticated()) { + return ; + } + const user = getStoredUser(); + if (!user?.is_admin) { + return ; + } + return children; +}; + const LegacyResultsRedirect: React.FC = () => { const { id } = useParams<{ id: string }>(); const location = useLocation(); @@ -190,6 +209,22 @@ const App: React.FC = () => { } /> + + + + } + /> + + + + } + /> { + - + } /> api.get(`/logs/${serviceName}`, { params: { offset, tail } }), - getTaskLogContent: (taskId: string, offset: number = 0, tail: number = 0) => - api.get(`/logs/task/${taskId}`, { params: { offset, tail } }), + getTaskLogContent: ( + taskId: string, + offset: number = 0, + tail: number = 0, + source: string = 'engine' + ) => + api.get(`/logs/task/${taskId}`, { params: { offset, tail, source } }), }; // Analysis API methods diff --git a/frontend/src/components/AddToCollectionModal.tsx b/frontend/src/components/AddToCollectionModal.tsx new file mode 100644 index 0000000..afa7698 --- /dev/null +++ b/frontend/src/components/AddToCollectionModal.tsx @@ -0,0 +1,343 @@ +import { PlusOutlined } from '@ant-design/icons'; +import { App, Divider, Form, Input, Modal, Select, Space, Spin } from 'antd'; +import React, { useEffect, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { api } from '../api/apiClient'; +import { Collection } from '../types/collection'; +import { getStoredUser } from '../utils/auth'; + +interface AddToCollectionModalProps { + open: boolean; + onCancel: () => void; + taskIds: string[]; + taskType: 'http' | 'llm'; + onSuccess?: () => void; +} + +interface CollectionTaskListItem { + id: string; +} + +const DropdownMenu = ({ + menu, + searchValue, + collections, + onCreateCollection, + t, +}: { + menu: React.ReactElement; + searchValue: string; + collections: Collection[]; + onCreateCollection: (name: string) => void; + t: any; +}) => ( + <> + {menu} + {searchValue.trim() && + !collections.some( + c => c.name.toLowerCase() === searchValue.trim().toLowerCase() + ) && ( + <> + + +
e.preventDefault()} + onClick={() => onCreateCollection(searchValue.trim())} + onKeyDown={e => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + onCreateCollection(searchValue.trim()); + } + }} + > + + {t('components.addToCollectionModal.createNew', { + name: searchValue.trim(), + })} +
+
+ + )} + +); + +const AddToCollectionModal: React.FC = ({ + open, + onCancel, + taskIds, + taskType, + onSuccess, +}) => { + const { message } = App.useApp(); + const { t } = useTranslation(); + const [form] = Form.useForm(); + const [collections, setCollections] = useState([]); + const [loading, setLoading] = useState(false); + const [submitting, setSubmitting] = useState(false); + const [searchValue, setSearchValue] = useState(''); + const currentUser = getStoredUser(); + const hasCollections = collections.length > 0; + + const fetchCollections = async () => { + setLoading(true); + try { + const response = await api.get<{ data: Collection[] }>('/collections', { + params: { page: 1, page_size: 100 }, + }); + const { data } = response.data; + const filteredData = (data || []).filter( + c => currentUser?.is_admin || c.created_by === currentUser?.username + ); + setCollections(filteredData); + } catch (error) { + message.error(t('components.addToCollectionModal.loadFailed')); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + if (open) { + fetchCollections(); + form.resetFields(); + setSearchValue(''); + } + }, [open, form]); + + const handleSubmit = async () => { + setSubmitting(true); + try { + const values = await form.validateFields(); + let collectionId = values.collection_id as string | undefined; + + if (!hasCollections) { + const response = await api.post('/collections', { + name: values.new_collection_name, + description: values.new_collection_description || undefined, + }); + collectionId = response.data.id; + } + + if (!collectionId) { + message.error(t('components.addToCollectionModal.selectOrCreate')); + return; + } + + let targetTaskIds = taskIds; + let duplicateTaskCount = 0; + + if (hasCollections) { + const tasksResponse = await api.get<{ data: CollectionTaskListItem[] }>( + `/collections/${collectionId}/tasks` + ); + const existingTaskIds = new Set( + (tasksResponse.data.data || []).map(item => String(item.id)) + ); + targetTaskIds = taskIds.filter(taskId => !existingTaskIds.has(taskId)); + duplicateTaskCount = taskIds.length - targetTaskIds.length; + + if (duplicateTaskCount > 0) { + if (targetTaskIds.length === 0) { + message.warning( + duplicateTaskCount === 1 + ? t('components.addToCollectionModal.alreadyExistsSingle') + : t('components.addToCollectionModal.alreadyExistsMultiple', { + count: duplicateTaskCount, + }) + ); + return; + } + } + + if (targetTaskIds.length === 0) { + return; + } + } + + const settledResults = await Promise.allSettled( + targetTaskIds.map(taskId => + api.post(`/collections/${collectionId}/tasks`, { + task_id: taskId, + task_type: taskType, + }) + ) + ); + const addedCount = settledResults.filter( + result => result.status === 'fulfilled' + ).length; + const failedCount = targetTaskIds.length - addedCount; + + if (addedCount > 0) { + const baseMessage = hasCollections + ? t('components.addToCollectionModal.addSuccess', { + count: addedCount, + }) + : t('components.addToCollectionModal.createAndAddSuccess', { + count: addedCount, + }); + if (duplicateTaskCount > 0 || failedCount > 0) { + const extras = [ + duplicateTaskCount > 0 + ? t('components.addToCollectionModal.skipped', { + count: duplicateTaskCount, + }) + : null, + failedCount > 0 + ? t('components.addToCollectionModal.failed', { + count: failedCount, + }) + : null, + ] + .filter(Boolean) + .join(', '); + message.success(`${baseMessage} ${extras}.`); + } else { + message.success(baseMessage); + } + } else { + message.warning(t('components.addToCollectionModal.noNewAdded')); + } + + if (onSuccess) onSuccess(); + onCancel(); + } catch (error) { + message.error(t('components.addToCollectionModal.addFailed')); + } finally { + setSubmitting(false); + } + }; + + const handleCreateCollection = async (name: string) => { + setSubmitting(true); + try { + const response = await api.post('/collections', { + name, + }); + const newCollection = response.data; + setCollections(prev => [newCollection, ...prev]); + form.setFieldsValue({ collection_id: newCollection.id }); + setSearchValue(''); + message.success(t('collections.createSuccess')); + + // Automatically submit to add tasks to the newly created collection + await handleSubmit(); + } catch (error) { + message.error(t('collections.createFailed')); + setSubmitting(false); + } + }; + + const renderDropdown = React.useCallback( + (menu: React.ReactElement) => ( + + ), + [searchValue, collections, handleCreateCollection, t] + ); + + return ( + +
+ {loading ? ( +
+ +
+ ) : !hasCollections ? ( + <> + + + + + + + + ) : ( + + + + )} +
+
+ ); +}; + +export default AddToCollectionModal; diff --git a/frontend/src/components/CreateLlmTaskForm.tsx b/frontend/src/components/CreateLlmTaskForm.tsx index 42acd4e..7e6d58a 100644 --- a/frontend/src/components/CreateLlmTaskForm.tsx +++ b/frontend/src/components/CreateLlmTaskForm.tsx @@ -2180,7 +2180,14 @@ const CreateLlmTaskFormContent: React.FC = ({ }} > - {t('components.createJobForm.datasetFileFormatDescription')} + {isChatApi + ? t( + 'components.createJobForm.datasetFileFormatDescriptionChat' + ) || + 'Supports JSONL format:\n• JSONL: one JSON object per line {"id": "...", "messages": [...]}' + : t( + 'components.createJobForm.datasetFileFormatDescription' + )} {t('components.createJobForm.datasetImageMountWarning')} @@ -2217,21 +2224,48 @@ const CreateLlmTaskFormContent: React.FC = ({ .trim() .split('\n') .filter(line => line.trim()); + + let customError = ''; lines.forEach(line => { const jsonObj = JSON.parse(line); - if (!jsonObj.id || !jsonObj.prompt) { - throw new Error( - t( - 'components.createJobForm.eachLineMustContainFields' - ) + if (isChatApi) { + if ( + !jsonObj.id || + (!jsonObj.prompt && + (!jsonObj.messages || + !Array.isArray(jsonObj.messages))) + ) { + customError = + t( + 'components.createJobForm.eachLineMustContainIdAndMessages' + ) || + 'Each line must contain "id" and "prompt" or "messages" array'; + throw new Error(customError); + } + } else if (!jsonObj.id || !jsonObj.prompt) { + customError = t( + 'components.createJobForm.eachLineMustContainFields' ); + throw new Error(customError); } }); return Promise.resolve(); - } catch (e) { + } catch (e: any) { return Promise.reject( new Error( - t('components.createJobForm.invalidJsonlFormat') + e.message === + t( + 'components.createJobForm.eachLineMustContainFields' + ) || + e.message === + (t( + 'components.createJobForm.eachLineMustContainIdAndMessages' + ) || + 'Each line must contain "id" and "prompt" or "messages" array') + ? e.message + : t( + 'components.createJobForm.invalidJsonlFormat' + ) ) ); } @@ -2241,7 +2275,11 @@ const CreateLlmTaskFormContent: React.FC = ({ >