后台任务
任务 API 用于跟踪资源导入、会话提交、索引维护和快照恢复等异步操作。
API 参考
get_task()
1. API 实现介绍
查询返回 task_id 的后台任务状态,例如 session commit、add_resource 和 admin reindex。
任务状态:
pending: 任务等待执行running: 任务执行中completed: 任务成功完成failed: 任务失败
代码入口:
openviking/server/routers/tasks.py:get_task()- HTTP 路由
任务记录会持久化到 AGFS,服务重启后仍可查询,但仍受任务保留清理策略影响。
2. 接口和参数说明
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| task_id | str | 是 | - | 后台 API 返回的任务 ID |
3. 使用示例
HTTP API
http
GET /api/v1/tasks/{task_id}bash
curl -X GET http://localhost:1933/api/v1/tasks/uuid-xxx \
-H "X-API-Key: your-key"Python SDK
python
from openviking_sdk import AsyncHTTPClient
client = AsyncHTTPClient(url="http://localhost:1933", api_key="your-key")
await client.initialize()
task = await client.get_task("uuid-xxx")
print(f"Status: {task['status']}")
await client.close()TypeScript SDK
typescript
console.log(await client.getTask("task-id"));Go SDK
go
task, err := client.GetTask(ctx, "uuid-xxx")
if err != nil {
return err
}
if task != nil {
fmt.Println(task["status"])
}CLI
bash
ov task status uuid-xxx响应示例(资源导入进行中)
json
{
"status": "ok",
"result": {
"task_id": "uuid-xxx",
"task_type": "add_resource",
"status": "running",
"resource_id": "viking://resources/guide",
"stage": "processing_queue"
}
}stage 可以为 null。Git 仓库资源导入任务可能报告 queued、fetching、parsing、finalizing、processing_queue;其他任务类型可能将其留空。实时队列计数不会出现在任务状态中;需要实时数量时使用 observer queue,任务完成后可读取 result.queue_status。
响应示例(完成)
json
{
"status": "ok",
"result": {
"task_id": "uuid-xxx",
"task_type": "session_commit",
"status": "completed",
"result": {
"session_id": "a1b2c3d4",
"archive_uri": "viking://user/alice/sessions/a1b2c3d4/history/archive_001",
"memory_diff_uri": "viking://user/alice/sessions/a1b2c3d4/history/archive_001/memory_diff.json",
"memories_extracted": {
"profile": 1,
"preferences": 2,
"entities": 1,
"cases": 1
},
"active_count_updated": 2,
"token_usage": {
"llm": {
"prompt_tokens": 5200,
"completion_tokens": 1800,
"total_tokens": 7000
},
"embedding": {
"total_tokens": 1500
},
"total": {
"total_tokens": 8500
}
}
}
}
}list_tasks()
1. API 实现介绍
列出当前调用方可见的后台任务,支持按类型、状态、资源过滤。
代码入口:
openviking/server/routers/tasks.py:list_tasks()- HTTP 路由openviking_cli/client/base.py:BaseClient.list_tasks()- Python SDK
2. 接口和参数说明
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| task_type | str | 否 | None | 按任务类型过滤,例如 session_commit |
| status | str | 否 | None | 按任务状态过滤:pending、running、completed、failed |
| resource_id | str | 否 | None | 按资源 ID 过滤,例如会话 ID |
| limit | int | 否 | 50 | 最多返回的任务条数 |
3. 使用示例
HTTP API
http
GET /api/v1/tasks?task_type=session_commit&status=running&limit=20bash
curl -X GET "http://localhost:1933/api/v1/tasks?task_type=session_commit&status=running&limit=20" \
-H "X-API-Key: your-key"Python SDK
python
from openviking_sdk import AsyncHTTPClient
client = AsyncHTTPClient(url="http://localhost:1933", api_key="your-key")
await client.initialize()
tasks = await client.list_tasks(
task_type="session_commit",
status="running",
limit=20,
)
for task in tasks:
print(task["task_id"], task["status"])
await client.close()TypeScript SDK
typescript
console.log(await client.listTasks());Go SDK
go
tasks, err := client.ListTasks(ctx, &openviking.ListTasksOptions{
TaskType: "session_commit",
Status: "running",
Limit: 20,
})
if err != nil {
return err
}
for _, task := range tasks {
fmt.Println(task)
}CLI
bash
# 列出任务
ov task list
# 按任务类型和状态过滤
ov task list --task-type session_commit --status running响应示例
json
{
"status": "ok",
"result": [
{
"task_id": "uuid-xxx",
"task_type": "session_commit",
"status": "running",
"resource_id": "a1b2c3d4",
"created_at": 1770000000.0,
"updated_at": 1770000005.0,
"result": null,
"error": null,
"stage": null
}
]
}