Github Copilot service realignment & cleanup

This commit is contained in:
Jim Lancaster
2026-08-11 16:02:19 -05:00
parent 0ace10269f
commit 8d5aec4301
22 changed files with 1641 additions and 1344 deletions
+22 -15
View File
@@ -7,13 +7,12 @@ import pytest
from transcription.config import Settings
from transcription.db.models import Document
from transcription.db.models import Job
from transcription.db.models import JobSourceStatus
from transcription.db.models import JobStatus
from transcription.providers.base import TranscriptionResult
from transcription.services import ServiceBundle
from transcription.services.store import create_document_job
from transcription.services.store import create_job_for_document
from transcription.services.store import create_upload_job
from transcription.services.workflows import advance_job
@@ -31,8 +30,8 @@ def _build_services(default_session_factory) -> ServiceBundle:
)
object.__setattr__(
services,
"transcriptions",
services.transcriptions.__class__(session_factory=default_session_factory),
"sources",
services.sources.__class__(session_factory=default_session_factory),
)
return services
@@ -53,7 +52,7 @@ class TestPipelineSuccessFlow:
transcription_temperature=0.2,
transcription_top_p=0.85,
)
upload_result = await create_upload_job(
upload_result = await create_document_job(
filename="pipeline.jpg",
file_bytes=b"pipeline-bytes",
session=async_session,
@@ -109,9 +108,13 @@ class TestPipelineSuccessFlow:
assert job.user_prompt is not None
assert job.temperature == 0.2
assert job.top_p == 0.85
assert any(job_source.ai_metadata == {"finish_reason": "stop", "usage": {"total_tokens": 42}} for job_source in job.job_sources)
assert any(
job_source.raw_api_response == {"id": "resp_123", "choices": [{"message": {"content": "Pipeline transcript"}}]}
job_source.ai_metadata == {"finish_reason": "stop", "usage": {"total_tokens": 42}}
for job_source in job.job_sources
)
assert any(
job_source.raw_api_response
== {"id": "resp_123", "choices": [{"message": {"content": "Pipeline transcript"}}]}
for job_source in job.job_sources
)
assert all(job_source.error_detail is None for job_source in job.job_sources)
@@ -132,7 +135,7 @@ class TestPipelineSuccessFlow:
create_result = await create_job_for_document(
document_id=document.id,
uploads=[
source_files=[
("page-01.jpg", b"one"),
("page-02.jpg", b"two"),
("page-03.jpg", b"three"),
@@ -176,7 +179,9 @@ class TestPipelineSuccessFlow:
assert len(job.job_sources) == 3
assert all(job_source.status == JobSourceStatus.TRANSCRIBED for job_source in job.job_sources)
assert all(job_source.raw_transcription for job_source in job.job_sources)
assert all(job_source.source is not None and job_source.source.raw_transcription for job_source in job.job_sources)
assert all(
job_source.source is not None and job_source.source.raw_transcription for job_source in job.job_sources
)
assert job.prompt_name == "transcribe_document.md"
@pytest.mark.asyncio
@@ -195,7 +200,7 @@ class TestPipelineSuccessFlow:
create_result = await create_job_for_document(
document_id=document.id,
uploads=[
source_files=[
("page-01.jpg", b"one"),
("page-02.jpg", b"two"),
],
@@ -261,7 +266,7 @@ class TestPipelineSuccessFlow:
create_result = await create_job_for_document(
document_id=document.id,
uploads=[
source_files=[
("page-01.jpg", b"one"),
("page-02.jpg", b"two"),
],
@@ -278,8 +283,8 @@ class TestPipelineSuccessFlow:
page_one.raw_transcription = "existing transcript"
page_two.status = JobSourceStatus.PENDING
page_two.raw_transcription = None
await services.transcriptions.update_job_source(job_source=page_one, session=async_session)
await services.transcriptions.update_job_source(job_source=page_two, session=async_session)
await services.sources.update_job_source(job_source=page_one, session=async_session)
await services.sources.update_job_source(job_source=page_two, session=async_session)
await services.jobs.update_job_state(job_id=job.id, status=JobStatus.QUEUED, session=async_session)
await async_session.commit()
@@ -334,7 +339,7 @@ class TestPipelineFailureFlow:
):
"""Upload followed by worker processing persists error detail and failed status on the job."""
settings = Settings(openrouter_api_key="test-key", upload_dir=tmp_path)
upload_result = await create_upload_job(
upload_result = await create_document_job(
filename="pipeline.jpg",
file_bytes=b"pipeline-bytes",
session=async_session,
@@ -371,7 +376,9 @@ class TestPipelineFailureFlow:
assert job.status == JobStatus.FAILED
assert all(job_source.raw_transcription is None for job_source in job.job_sources)
assert any(job_source.error_detail is not None for job_source in job.job_sources)
error_detail = next(job_source.error_detail for job_source in job.job_sources if job_source.error_detail is not None)
error_detail = next(
job_source.error_detail for job_source in job.job_sources if job_source.error_detail is not None
)
assert "pipeline provider failure" in error_detail
assert "[internal_unexpected_error]" in error_detail
assert "error_id=" in error_detail