426e9eeabd
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
ci / test (push) Has been cancelled
ci / lint-and-format (push) Has been cancelled
ci / build (push) Has been cancelled
ci / dev-startup (push) Has been cancelled
gitleaks / gitleaks (push) Has been cancelled
Markdown Links / Relative Markdown Links (push) Has been cancelled
Quality (Extended) / Homepage Build (PR smoke) (push) Has been cancelled
Quality (Extended) / Comment-only diff guard (push) Has been cancelled
Quality (Extended) / Format + Type Safety Ratchet (push) Has been cancelled
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Has been cancelled
Quality (Extended) / Develop Gate (lint) (push) Has been cancelled
Chat shell gestures / Chat shell gesture + parity e2e (push) Has been cancelled
Cloud Gateway Discord / Test (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Has been cancelled
Build Agent Image / build-and-push (push) Has been cancelled
Dev Smoke / bun run dev onboarding chat (push) Has been cancelled
Dev Smoke / Vite HMR dependency-level smoke (push) Has been cancelled
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Has been cancelled
Publish @elizaos/example-code / check_npm (push) Has been cancelled
Publish @elizaos/example-code / publish_npm (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / verify_version (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / publish_npm (push) Has been cancelled
Sandbox Live Smoke / Sandbox live smoke (push) Has been cancelled
Snap Build & Test / Build Snap (amd64) (push) Has been cancelled
Snap Build & Test / Build Snap (arm64) (push) Has been cancelled
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Has been cancelled
Cloud Gateway Webhook / Test (push) Has been cancelled
Cloud Tests / lint-and-types (push) Has been cancelled
Cloud Tests / unit-tests (push) Has been cancelled
Cloud Tests / integration-tests (push) Has been cancelled
Cloud Tests / e2e-tests (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Apps Worker (Product 2) / Determine environment (push) Has been cancelled
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Has been cancelled
Deploy Eliza Provisioning Worker / Determine environment (push) Has been cancelled
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Has been cancelled
Dev Smoke / Classify changed paths (push) Has been cancelled
supply-chain / sbom (push) Has been cancelled
supply-chain / vulnerability-scan (push) Has been cancelled
Build, Push & Deploy to Phala Cloud / build-and-push (push) Has been cancelled
Test Packaging / Validate Packaging Configs (push) Has been cancelled
Test Packaging / Build & Test PyPI Package (push) Has been cancelled
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Has been cancelled
Test Packaging / Pack & Test JS Tarballs (push) Has been cancelled
UI Fixture E2E / ui-fixture-e2e (push) Has been cancelled
UI Fixture E2E / fixture-e2e (push) Has been cancelled
UI Story Gate / story-gate (push) Has been cancelled
vault-ci / test (macos-latest) (push) Has been cancelled
vault-ci / test (ubuntu-latest) (push) Has been cancelled
vault-ci / test (windows-latest) (push) Has been cancelled
vault-ci / app-core wiring tests (push) Has been cancelled
verify-patches / verify patches/CHECKSUMS.sha256 (push) Has been cancelled
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Has been cancelled
Voice Benchmark Smoke / voice bench smoke summary (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Has been cancelled
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Has been cancelled
327 lines
9.5 KiB
Python
327 lines
9.5 KiB
Python
import pytest
|
|
|
|
from format_for_training import format_record
|
|
from privacy_filter_trajectories import PrivacyFilterError
|
|
|
|
|
|
def _attested(row, *, passed: bool = True):
|
|
metadata = row.setdefault("metadata", {})
|
|
metadata["privacy_attestation"] = {
|
|
"schema": "eliza.privacy_filter_attestation.v1",
|
|
"version": 1,
|
|
"source": "unit",
|
|
"redacted": True,
|
|
"reviewed": True,
|
|
"passed": passed,
|
|
}
|
|
return row
|
|
|
|
|
|
def test_format_record_renders_native_text_response():
|
|
row = _attested({
|
|
"format": "eliza_native_v1",
|
|
"boundary": "vercel_ai_sdk.generateText",
|
|
"request": {
|
|
"messages": [
|
|
{"role": "system", "content": "system prompt"},
|
|
{"role": "user", "content": "user prompt"},
|
|
]
|
|
},
|
|
"response": {
|
|
"text": '{"messageHandler":{"action":"RESPOND","contexts":[]}}'
|
|
},
|
|
"metadata": {"task_type": "should_respond"},
|
|
})
|
|
|
|
formatted = format_record(row)
|
|
|
|
assert formatted == {
|
|
"messages": [
|
|
{"role": "system", "content": "system prompt"},
|
|
{"role": "user", "content": "user prompt"},
|
|
{
|
|
"role": "assistant",
|
|
"content": '{"messageHandler":{"action":"RESPOND","contexts":[]}}',
|
|
},
|
|
]
|
|
}
|
|
|
|
|
|
def test_format_record_renders_native_tool_call_response():
|
|
row = _attested({
|
|
"format": "eliza_native_v1",
|
|
"boundary": "vercel_ai_sdk.generateText",
|
|
"request": {
|
|
"messages": [{"role": "user", "content": "send a reply"}],
|
|
"tools": {
|
|
"reply": {
|
|
"description": "Send a reply",
|
|
"parameters": {"type": "object", "properties": {}},
|
|
}
|
|
},
|
|
},
|
|
"response": {
|
|
"text": "",
|
|
"toolCalls": [
|
|
{
|
|
"toolCallId": "tc-1",
|
|
"toolName": "reply",
|
|
"input": {"text": "hi"},
|
|
}
|
|
],
|
|
},
|
|
"metadata": {"task_type": "action_planner"},
|
|
})
|
|
|
|
formatted = format_record(row)
|
|
|
|
assert formatted is not None
|
|
assert formatted["tools"] == row["request"]["tools"]
|
|
assert formatted["messages"][-1] == {
|
|
"role": "assistant",
|
|
"content": "",
|
|
"tool_calls": [
|
|
{
|
|
"id": "tc-1",
|
|
"type": "function",
|
|
"function": {
|
|
"name": "reply",
|
|
"arguments": '{"text": "hi"}',
|
|
},
|
|
}
|
|
],
|
|
}
|
|
|
|
|
|
def test_format_record_prepends_native_request_system():
|
|
row = _attested({
|
|
"format": "eliza_native_v1",
|
|
"boundary": "vercel_ai_sdk.generateText",
|
|
"request": {
|
|
"system": "system prompt",
|
|
"messages": [{"role": "user", "content": "user prompt"}],
|
|
},
|
|
"response": {"text": "assistant response"},
|
|
"metadata": {"task_type": "response"},
|
|
})
|
|
|
|
formatted = format_record(row)
|
|
|
|
assert formatted == {
|
|
"messages": [
|
|
{"role": "system", "content": "system prompt"},
|
|
{"role": "user", "content": "user prompt"},
|
|
{"role": "assistant", "content": "assistant response"},
|
|
]
|
|
}
|
|
|
|
|
|
def test_format_record_renders_native_system_prompt_request():
|
|
row = _attested({
|
|
"format": "eliza_native_v1",
|
|
"boundary": "vercel_ai_sdk.generateText",
|
|
"request": {
|
|
"system": "system prompt",
|
|
"prompt": "user prompt",
|
|
},
|
|
"response": {"text": "assistant response"},
|
|
"metadata": {"task_type": "response"},
|
|
})
|
|
|
|
formatted = format_record(row)
|
|
|
|
assert formatted == {
|
|
"messages": [
|
|
{"role": "system", "content": "system prompt"},
|
|
{"role": "user", "content": "user prompt"},
|
|
{"role": "assistant", "content": "assistant response"},
|
|
]
|
|
}
|
|
|
|
|
|
def test_format_record_rejects_prompt_only_native_rows():
|
|
row = {
|
|
"format": "eliza_native_v1",
|
|
"boundary": "vercel_ai_sdk.generateText",
|
|
"request": {
|
|
"messages": [
|
|
{"role": "system", "content": "system prompt"},
|
|
{"role": "user", "content": "user prompt"},
|
|
]
|
|
},
|
|
"response": {"text": ""},
|
|
"metadata": {"task_type": "response"},
|
|
}
|
|
|
|
assert format_record(row) is None
|
|
|
|
|
|
def test_format_record_rejects_native_rows_without_model_boundary():
|
|
row = {
|
|
"format": "eliza_native_v1",
|
|
"request": {
|
|
"messages": [{"role": "user", "content": "user prompt"}],
|
|
},
|
|
"response": {"text": "assistant response"},
|
|
"metadata": {"task_type": "response"},
|
|
}
|
|
|
|
assert format_record(row) is None
|
|
|
|
|
|
def test_format_record_rejects_unattested_native_rows():
|
|
row = {
|
|
"format": "eliza_native_v1",
|
|
"boundary": "vercel_ai_sdk.generateText",
|
|
"request": {"messages": [{"role": "user", "content": "hello"}]},
|
|
"response": {"text": "hi"},
|
|
"metadata": {"task_type": "response"},
|
|
}
|
|
|
|
with pytest.raises(PrivacyFilterError, match="lacks privacy attestation"):
|
|
format_record(row)
|
|
|
|
|
|
def test_format_record_rejects_failed_native_privacy_attestation():
|
|
row = _attested(
|
|
{
|
|
"format": "eliza_native_v1",
|
|
"boundary": "vercel_ai_sdk.generateText",
|
|
"request": {"messages": [{"role": "user", "content": "hello"}]},
|
|
"response": {"text": "hi"},
|
|
"metadata": {"task_type": "response"},
|
|
},
|
|
passed=False,
|
|
)
|
|
|
|
with pytest.raises(PrivacyFilterError, match="lacks privacy attestation"):
|
|
format_record(row)
|
|
|
|
|
|
def test_format_record_allows_unattested_native_rows_with_operator_override(
|
|
monkeypatch: pytest.MonkeyPatch,
|
|
):
|
|
row = {
|
|
"format": "eliza_native_v1",
|
|
"boundary": "vercel_ai_sdk.generateText",
|
|
"request": {"messages": [{"role": "user", "content": "hello"}]},
|
|
"response": {"text": "hi"},
|
|
"metadata": {"task_type": "response"},
|
|
}
|
|
monkeypatch.setenv("ELIZA_TRAINING_PRIVACY_OVERRIDE_REASON", "unit test raw fixture")
|
|
|
|
formatted = format_record(row)
|
|
|
|
assert formatted == {
|
|
"messages": [
|
|
{"role": "user", "content": "hello"},
|
|
{"role": "assistant", "content": "hi"},
|
|
]
|
|
}
|
|
|
|
|
|
def test_format_record_accepts_eliza1_trajectory_record():
|
|
row = {
|
|
"schema": "eliza.eliza1_trajectory_record.v1",
|
|
"id": "traj-1",
|
|
"split": "train",
|
|
"task": "action_planner",
|
|
"target": {"sftFormat": "messages"},
|
|
"messages": [
|
|
{"role": "user", "content": "send a reply"},
|
|
{
|
|
"role": "assistant",
|
|
"content": "",
|
|
"tool_calls": [
|
|
{
|
|
"id": "call-1",
|
|
"type": "function",
|
|
"function": {
|
|
"name": "reply",
|
|
"arguments": '{"text":"hi"}',
|
|
},
|
|
}
|
|
],
|
|
},
|
|
],
|
|
"tools": [
|
|
{
|
|
"type": "function",
|
|
"function": {
|
|
"name": "reply",
|
|
"description": "Send a reply",
|
|
"parameters": {"type": "object", "properties": {}},
|
|
},
|
|
}
|
|
],
|
|
"actions": [],
|
|
"quality": {"success": True},
|
|
"source": {"dataset": "unit"},
|
|
"metadata": {},
|
|
}
|
|
|
|
formatted = format_record(row)
|
|
|
|
assert formatted is not None
|
|
assert formatted["tools"] == row["tools"]
|
|
assert formatted["messages"][-1]["tool_calls"][0]["function"]["name"] == "reply"
|
|
|
|
|
|
def test_format_record_rejects_repair_eval_trajectory_record():
|
|
row = {
|
|
"schema": "eliza.eliza1_trajectory_record.v1",
|
|
"id": "repair-1",
|
|
"split": "repair_eval",
|
|
"task": "response",
|
|
"target": {"sftFormat": "messages"},
|
|
"messages": [
|
|
{"role": "user", "content": "hello"},
|
|
{"role": "assistant", "content": "failed answer"},
|
|
],
|
|
"tools": [],
|
|
"actions": [],
|
|
"quality": {"success": False},
|
|
"source": {"dataset": "unit"},
|
|
"metadata": {},
|
|
}
|
|
|
|
assert format_record(row) is None
|
|
|
|
|
|
def test_format_record_accepts_plain_chat_messages_row():
|
|
row = {
|
|
"messages": [
|
|
{"role": "system", "content": "system prompt"},
|
|
{"role": "user", "content": "hello"},
|
|
{"role": "assistant", "content": "hi"},
|
|
],
|
|
"metadata": {"source_dataset": "unit"},
|
|
}
|
|
|
|
assert format_record(row) == {"messages": row["messages"]}
|
|
|
|
|
|
def test_format_record_accepts_flat_eliza_record_compatibility():
|
|
row = {
|
|
"roomName": "room",
|
|
"agentId": "Eliza",
|
|
"memoryEntries": [],
|
|
"currentMessage": {
|
|
"role": "user",
|
|
"speaker": "u",
|
|
"content": "hello",
|
|
"channel": "dm",
|
|
},
|
|
"expectedResponse": "hi",
|
|
"availableActions": ["REPLY"],
|
|
"metadata": {"task_type": "reply", "source_dataset": "unit"},
|
|
}
|
|
|
|
formatted = format_record(row)
|
|
|
|
assert formatted is not None
|
|
assert formatted["messages"][0]["role"] == "system"
|
|
assert "Available actions: REPLY" in formatted["messages"][0]["content"]
|
|
assert formatted["messages"][-2] == {"role": "user", "content": "hello"}
|
|
assert formatted["messages"][-1] == {"role": "assistant", "content": "hi"}
|