a2fd666203
model/schema 的 debug 字段已在 4ee6de2 起头,本次补完整条链路:
- repo upsert 存客户端环境/性能字段;端点同机拉 pricebot llm_calls 落库 + 算 llm次数/重试
- schema 加 platform_results 透传(admin「卡在哪一步」从 raw_payload 读)
- admin 比价记录查询接口(按 user_id/phone 列表分页 + 详情含 llm_calls)
- 迁移 comparison_debug_fields: 给 comparison_record 加环境/性能/llm_calls 列(全 nullable)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
55 lines
2.9 KiB
Python
55 lines
2.9 KiB
Python
"""comparison_record: 客户端环境 / 性能统计 / LLM 明细 debug 字段
|
||
|
||
Revision ID: comparison_debug_fields
|
||
Revises: cps_activity_image
|
||
Create Date: 2026-06-17 22:00:00.000000
|
||
|
||
给 admin 比价记录 debug 页新增采集列,全部 nullable(旧记录 / 未发版客户端为 NULL,向后兼容):
|
||
- 客户端环境: device_*/rom_*/android_*/app_version*/source_app_version/经纬度
|
||
- 过程统计: total_ms/step_count/llm_call_count/retry_count
|
||
- LLM 明细: llm_calls(JSONB,server 按 trace_id 同机拉 pricebot 落库)
|
||
"""
|
||
from typing import Sequence, Union
|
||
|
||
from alembic import op
|
||
import sqlalchemy as sa
|
||
from sqlalchemy.dialects import postgresql
|
||
|
||
|
||
revision: str = "comparison_debug_fields"
|
||
down_revision: Union[str, Sequence[str], None] = "cps_activity_image"
|
||
branch_labels: Union[str, Sequence[str], None] = None
|
||
depends_on: Union[str, Sequence[str], None] = None
|
||
|
||
_JSONB = sa.JSON().with_variant(postgresql.JSONB(), "postgresql")
|
||
|
||
|
||
def upgrade() -> None:
|
||
op.add_column("comparison_record", sa.Column("device_model", sa.String(64), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("device_manufacturer", sa.String(64), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("rom_vendor", sa.String(32), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("rom_name", sa.String(32), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("rom_version", sa.Integer(), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("android_version", sa.String(16), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("android_sdk", sa.Integer(), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("app_version", sa.String(32), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("app_version_code", sa.Integer(), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("source_app_version", sa.String(32), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("longitude", sa.Float(), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("latitude", sa.Float(), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("total_ms", sa.Integer(), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("step_count", sa.Integer(), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("llm_call_count", sa.Integer(), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("retry_count", sa.Integer(), nullable=True))
|
||
op.add_column("comparison_record", sa.Column("llm_calls", _JSONB, nullable=True))
|
||
|
||
|
||
def downgrade() -> None:
|
||
for col in (
|
||
"llm_calls", "retry_count", "llm_call_count", "step_count", "total_ms",
|
||
"latitude", "longitude", "source_app_version", "app_version_code",
|
||
"app_version", "android_sdk", "android_version", "rom_version",
|
||
"rom_name", "rom_vendor", "device_manufacturer", "device_model",
|
||
):
|
||
op.drop_column("comparison_record", col)
|