chore: 迁移服务器前同步本地修改

This commit is contained in:
2026-08-05 21:26:13 +08:00
parent aa47a19e98
commit 1a914a2517
73 changed files with 908 additions and 1961 deletions
+10 -10
View File
@@ -14,7 +14,7 @@ from fastapi.responses import StreamingResponse
from pydantic import BaseModel, Field
from kilostar.utils.access import Accessor, TokenData
from kilostar.utils.ray_hook import ray_actor_hook
from kilostar.utils.actor import get_actor
router = APIRouter(tags=["data_analytics"])
@@ -40,7 +40,7 @@ class JobCreate(BaseModel):
def _get_org():
try:
return ray_actor_hook("org_data_analytics").org_data_analytics
return get_actor("org_data_analytics")
except Exception as e:
raise HTTPException(503, f"data_analytics 插件未就绪:{e}")
@@ -53,7 +53,7 @@ async def list_credentials(
token_data: TokenData = Depends(Accessor.get_current_user),
):
org = _get_org()
rows = await org.cred_list.remote(token_data.username)
rows = await org.cred_list(token_data.username)
return {"credentials": rows}
@@ -63,7 +63,7 @@ async def create_credential(
token_data: TokenData = Depends(Accessor.get_current_user),
):
org = _get_org()
row = await org.cred_create.remote(
row = await org.cred_create(
user_id=token_data.username,
display_name=payload.display_name,
access_key=payload.access_key,
@@ -80,7 +80,7 @@ async def delete_credential(
token_data: TokenData = Depends(Accessor.get_current_user),
):
org = _get_org()
ok = await org.cred_delete.remote(cred_id, token_data.username)
ok = await org.cred_delete(cred_id, token_data.username)
if not ok:
raise HTTPException(404, "凭证不存在或不属于当前用户")
return {"status": "ok"}
@@ -96,7 +96,7 @@ async def create_job(
):
org = _get_org()
try:
return await org.job_create.remote(
return await org.job_create(
user_id=token_data.username,
cred_id=payload.cred_id,
description=payload.description,
@@ -110,7 +110,7 @@ async def list_jobs(
token_data: TokenData = Depends(Accessor.get_current_user),
):
org = _get_org()
rows = await org.job_list.remote(token_data.username)
rows = await org.job_list(token_data.username)
return {"jobs": rows}
@@ -120,7 +120,7 @@ async def get_job(
token_data: TokenData = Depends(Accessor.get_current_user),
):
org = _get_org()
row = await org.job_get.remote(job_id, token_data.username)
row = await org.job_get(job_id, token_data.username)
if row is None:
raise HTTPException(404, "任务不存在")
return row
@@ -135,7 +135,7 @@ async def stream_job(
import json
org = _get_org()
row = await org.job_get.remote(job_id, token_data.username)
row = await org.job_get(job_id, token_data.username)
if row is None:
raise HTTPException(404, "任务不存在")
org_task_id = row.get("org_task_id")
@@ -143,7 +143,7 @@ async def stream_job(
raise HTTPException(409, "任务尚未投递到 organization")
async def _generate():
async for event in await org.stream.remote(org_task_id):
async for event in await org.stream(org_task_id):
payload = event if isinstance(event, str) else json.dumps(event, ensure_ascii=False)
yield f"data: {payload}\n\n"
@@ -1,7 +1,8 @@
"""ray_submit:把分析脚本提交到 Ray(distributed)或 subprocess(standalone)执行。
"""ray_submit:把分析脚本提交到子进程执行。
凭证以 ``AWS_*`` 环境变量注入子进程,让 boto3/pandas-s3 自然读到。
脚本走 ``kilostar.utils.sandbox.validate_python_code`` 的静态屏蔽兜底。
名字沿用历史(原设计走 Ray);当前后端为本地子进程,未来要接远程算力只需替换
执行器,工具签名不变。凭证以 ``AWS_*`` 环境变量注入子进程,让 boto3/pandas-s3
自然读到。脚本走 ``kilostar.utils.sandbox.validate_python_code`` 的静态屏蔽兜底。
"""
from __future__ import annotations
@@ -11,7 +12,6 @@ import os
import sys
import tempfile
from kilostar.utils.ray_compat import _STANDALONE
from kilostar.utils.sandbox import (
CodeViolation,
get_python_timeout,
@@ -33,7 +33,7 @@ def _build_env(creds) -> dict:
async def ray_submit(script: str, timeout: int = 300) -> str:
"""提交 Python 脚本到 Ray(分布式)或子进程(单机)执行。
"""提交 Python 脚本到子进程执行。
脚本中可直接 ``import boto3`` 读 S3(凭证已通过环境变量注入);可用
pandas / polars / numpy 等已安装的依赖。**只读**——不要尝试 put/delete。
@@ -83,8 +83,6 @@ async def ray_submit(script: str, timeout: int = 300) -> str:
if proc.returncode != 0:
result += f"\n[exit code: {proc.returncode}]"
result = result.strip() or "(no output)"
if not _STANDALONE:
result = f"[mode: ray-cluster (subprocess)]\n{result}"
return result
except asyncio.TimeoutError:
return f"[Error] ray_submit 执行超时({timeout}s)"
+4 -4
View File
@@ -1,4 +1,4 @@
from kilostar.utils.ray_hook import ray_actor_hook
from kilostar.utils.actor import get_actor
async def approval(message: str, trace_id: str) -> str:
@@ -11,7 +11,7 @@ async def approval(message: str, trace_id: str) -> str:
Returns:
用户的审批结果
"""
actor_list = ray_actor_hook("global_workflow_manager")
await actor_list.global_workflow_manager.put_pending.remote(trace_id, message)
reply = await actor_list.global_workflow_manager.get_received.remote(trace_id)
gwm = get_actor("global_workflow_manager")
await gwm.put_pending(trace_id, message)
reply = await gwm.get_received(trace_id)
return reply
@@ -9,7 +9,7 @@ regulatory_node 用以回答"我之前那份报告呢""昨天那个查询结果
from typing import Any, Dict, List, Optional
from kilostar.utils.ray_hook import ray_actor_hook
from kilostar.utils.actor import get_actor
async def query_task_list(
@@ -34,8 +34,8 @@ async def query_task_list(
"total": int
}
"""
pg = ray_actor_hook("postgres_database").postgres_database
rows: List[Dict[str, Any]] = await pg.list_tasks_by_user.remote(
pg = get_actor("postgres_database")
rows: List[Dict[str, Any]] = await pg.list_tasks_by_user(
user_id=user_id,
status=status_filter,
limit=limit,
@@ -6,7 +6,7 @@ regulatory_node 在与用户对话时,可以借此工具回答"我那个任务
from typing import Any, Dict, List
from kilostar.utils.ray_hook import ray_actor_hook
from kilostar.utils.actor import get_actor
async def query_workflow_status(trace_id: str, limit: int = 10) -> Dict[str, Any]:
@@ -26,10 +26,10 @@ async def query_workflow_status(trace_id: str, limit: int = 10) -> Dict[str, Any
]
}
"""
pg = ray_actor_hook("postgres_database").postgres_database
pg = get_actor("postgres_database")
workflow = await pg.get_workflow.remote(trace_id)
events = await pg.query_event_logs.remote(trace_id=trace_id, limit=limit)
workflow = await pg.get_workflow(trace_id)
events = await pg.query_event_logs(trace_id=trace_id, limit=limit)
recent: List[Dict[str, Any]] = []
for e in events or []:
+3 -3
View File
@@ -12,7 +12,7 @@ import re
import uuid
from pathlib import Path
from kilostar.utils.ray_hook import ray_actor_hook
from kilostar.utils.actor import get_actor
from kilostar.utils.settings import get_artifact_dir
@@ -56,8 +56,8 @@ async def send_file(filename: str, content: str, trace_id: str = "") -> str:
},
ensure_ascii=False,
)
actor_list = ray_actor_hook("global_workflow_manager")
await actor_list.global_workflow_manager.put_pending.remote(
gwm = get_actor("global_workflow_manager")
await gwm.put_pending(
trace_id, f"__FILE__{payload}"
)
return f"已发送文件: {safe_name}"