models: align translation column naming + add token counts
Three recently-added tables (strategic_log_translations, indicator_summary_translations, csv_format_templates) drifted from the codebase's existing naming convention: - llm_model -> model - llm_cost_usd -> cost_usd - content_md -> content (on the two translation tables; csv_format doesn't have a content field) Also added prompt_tokens and completion_tokens to the three tables; they were silently dropped at write time despite LogResult exposing them. All writer call sites (ai_log_job, indicator_summary_job, llm_csv_parser) and reader call sites (api.py localized helpers) updated to match. Tests realigned. Migration 0025 uses batch_alter_table for SQLite compatibility. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
e4dc6d0071
commit
a6d686324c
8 changed files with 125 additions and 32 deletions
|
|
@ -74,10 +74,12 @@ async def translate_log_for_active_languages(session, log_id: int) -> None:
|
|||
translated_md, llm_result = result
|
||||
session.add(StrategicLogTranslation(
|
||||
log_id=log_id, lang=lang,
|
||||
content_md=translated_md,
|
||||
content=translated_md,
|
||||
generated_at=utcnow(),
|
||||
llm_model=llm_result.model,
|
||||
llm_cost_usd=llm_result.cost_usd,
|
||||
model=llm_result.model,
|
||||
prompt_tokens=llm_result.prompt_tokens,
|
||||
completion_tokens=llm_result.completion_tokens,
|
||||
cost_usd=llm_result.cost_usd,
|
||||
))
|
||||
await session.commit()
|
||||
|
||||
|
|
|
|||
|
|
@ -77,10 +77,12 @@ async def translate_summary_for_active_languages(session, summary_id: int) -> No
|
|||
translated_md, llm_result = result
|
||||
session.add(IndicatorSummaryTranslation(
|
||||
summary_id=summary_id, lang=lang,
|
||||
content_md=translated_md,
|
||||
content=translated_md,
|
||||
generated_at=utcnow(),
|
||||
llm_model=llm_result.model,
|
||||
llm_cost_usd=llm_result.cost_usd,
|
||||
model=llm_result.model,
|
||||
prompt_tokens=llm_result.prompt_tokens,
|
||||
completion_tokens=llm_result.completion_tokens,
|
||||
cost_usd=llm_result.cost_usd,
|
||||
))
|
||||
await session.commit()
|
||||
|
||||
|
|
|
|||
|
|
@ -141,12 +141,14 @@ class StrategicLogTranslation(Base):
|
|||
nullable=False,
|
||||
)
|
||||
lang: Mapped[str] = mapped_column(String(8), nullable=False)
|
||||
content_md: Mapped[str] = mapped_column(Text, nullable=False)
|
||||
content: Mapped[str] = mapped_column(Text, nullable=False)
|
||||
generated_at: Mapped[datetime] = mapped_column(
|
||||
DateTime(timezone=True), nullable=False, default=utcnow,
|
||||
)
|
||||
llm_model: Mapped[str | None] = mapped_column(String(64))
|
||||
llm_cost_usd: Mapped[float | None] = mapped_column(Float)
|
||||
model: Mapped[str | None] = mapped_column(String(64))
|
||||
prompt_tokens: Mapped[int | None] = mapped_column(Integer)
|
||||
completion_tokens: Mapped[int | None] = mapped_column(Integer)
|
||||
cost_usd: Mapped[float | None] = mapped_column(Float)
|
||||
|
||||
__table_args__ = (
|
||||
UniqueConstraint("log_id", "lang", name="uq_slt_log_lang"),
|
||||
|
|
@ -191,12 +193,14 @@ class IndicatorSummaryTranslation(Base):
|
|||
nullable=False,
|
||||
)
|
||||
lang: Mapped[str] = mapped_column(String(8), nullable=False)
|
||||
content_md: Mapped[str] = mapped_column(Text, nullable=False)
|
||||
content: Mapped[str] = mapped_column(Text, nullable=False)
|
||||
generated_at: Mapped[datetime] = mapped_column(
|
||||
DateTime(timezone=True), nullable=False, default=utcnow,
|
||||
)
|
||||
llm_model: Mapped[str | None] = mapped_column(String(64))
|
||||
llm_cost_usd: Mapped[float | None] = mapped_column(Float)
|
||||
model: Mapped[str | None] = mapped_column(String(64))
|
||||
prompt_tokens: Mapped[int | None] = mapped_column(Integer)
|
||||
completion_tokens: Mapped[int | None] = mapped_column(Integer)
|
||||
cost_usd: Mapped[float | None] = mapped_column(Float)
|
||||
|
||||
__table_args__ = (
|
||||
UniqueConstraint("summary_id", "lang", name="uq_ist_summary_lang"),
|
||||
|
|
@ -535,5 +539,7 @@ class CsvFormatTemplate(Base):
|
|||
last_used_at: Mapped[datetime] = mapped_column(
|
||||
DateTime(timezone=True), nullable=False, default=utcnow,
|
||||
)
|
||||
llm_model: Mapped[str | None] = mapped_column(String(64))
|
||||
llm_cost_usd: Mapped[float | None] = mapped_column(Float)
|
||||
model: Mapped[str | None] = mapped_column(String(64))
|
||||
prompt_tokens: Mapped[int | None] = mapped_column(Integer)
|
||||
completion_tokens: Mapped[int | None] = mapped_column(Integer)
|
||||
cost_usd: Mapped[float | None] = mapped_column(Float)
|
||||
|
|
|
|||
|
|
@ -326,7 +326,7 @@ async def _localized_content(
|
|||
row: StrategicLog | None,
|
||||
principal: CurrentUser | None,
|
||||
) -> str | None:
|
||||
"""Return the translated content_md for ``row`` when the principal has
|
||||
"""Return the translated content for ``row`` when the principal has
|
||||
a non-English lang preference and a matching translation row exists.
|
||||
Returns None to signal 'use row.content as-is' (the default English
|
||||
path)."""
|
||||
|
|
@ -340,7 +340,7 @@ async def _localized_content(
|
|||
.where(StrategicLogTranslation.log_id == row.id)
|
||||
.where(StrategicLogTranslation.lang == lang)
|
||||
)).scalar_one_or_none()
|
||||
return t.content_md if t is not None else None
|
||||
return t.content if t is not None else None
|
||||
|
||||
|
||||
async def _apply_localized_summary(
|
||||
|
|
@ -364,7 +364,7 @@ async def _apply_localized_summary(
|
|||
.where(IndicatorSummaryTranslation.lang == lang)
|
||||
)).scalar_one_or_none()
|
||||
if t is not None:
|
||||
row.content = t.content_md
|
||||
row.content = t.content
|
||||
|
||||
|
||||
def _resolve_tone_param(tone: str | None) -> str:
|
||||
|
|
|
|||
|
|
@ -424,8 +424,10 @@ async def parse_with_llm(raw: bytes, session: AsyncSession) -> ParsedPie:
|
|||
first_seen_at=now,
|
||||
last_used_at=now,
|
||||
use_count=1,
|
||||
llm_model=llm_log.model,
|
||||
llm_cost_usd=llm_log.cost_usd,
|
||||
model=llm_log.model,
|
||||
prompt_tokens=llm_log.prompt_tokens,
|
||||
completion_tokens=llm_log.completion_tokens,
|
||||
cost_usd=llm_log.cost_usd,
|
||||
))
|
||||
await session.commit()
|
||||
return pie
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue