Skip to content

Commit 1b4de7d

Browse files
authored
Collection: adding an error message column (#328)
* altering the table and routes code to add error column
1 parent c0161f8 commit 1b4de7d

4 files changed

Lines changed: 68 additions & 5 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
"""add error message column in collections table
2+
3+
Revision ID: 5a59c6c29a82
4+
Revises: e9dd35eff62c
5+
Create Date: 2025-08-11 15:40:40.127161
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
import sqlmodel.sql.sqltypes
11+
12+
13+
# revision identifiers, used by Alembic.
14+
revision = "5a59c6c29a82"
15+
down_revision = "e9dd35eff62c"
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
op.add_column(
22+
"collection",
23+
sa.Column("error_message", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
24+
)
25+
26+
27+
def downgrade():
28+
op.drop_column("collection", "error_message")

backend/app/api/routes/collections.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import inspect
22
import logging
33
import time
4+
import json
5+
import ast
6+
import re
47
from uuid import UUID, uuid4
58
from typing import Any, List, Optional
69
from dataclasses import dataclass, field, fields, asdict, replace
@@ -13,6 +16,7 @@
1316

1417
from app.api.deps import CurrentUser, SessionDep, CurrentUserOrgProject
1518
from app.core.cloud import AmazonCloudStorage
19+
from app.api.routes.responses import handle_openai_error
1620
from app.core.util import now, post_callback
1721
from app.crud import (
1822
DocumentCrud,
@@ -28,6 +32,32 @@
2832
router = APIRouter(prefix="/collections", tags=["collections"])
2933

3034

35+
def extract_error_message(err: Exception) -> str:
36+
err_str = str(err).strip()
37+
38+
body = re.sub(r"^Error code:\s*\d+\s*-\s*", "", err_str)
39+
message = None
40+
try:
41+
payload = json.loads(body)
42+
if isinstance(payload, dict):
43+
message = payload.get("error", {}).get("message")
44+
except Exception:
45+
pass
46+
47+
if message is None:
48+
try:
49+
payload = ast.literal_eval(body)
50+
if isinstance(payload, dict):
51+
message = payload.get("error", {}).get("message")
52+
except Exception:
53+
pass
54+
55+
if not message:
56+
message = body
57+
58+
return message.strip()[:1000]
59+
60+
3161
@dataclass
3262
class ResponsePayload:
3363
status: str
@@ -246,6 +276,9 @@ def do_create_collection(
246276
collection = collection_crud.read_one(UUID(payload.key))
247277
collection.status = CollectionStatus.failed
248278
collection.updated_at = now()
279+
message = extract_error_message(err)
280+
collection.error_message = message
281+
249282
collection_crud._update(collection)
250283
except Exception as suberr:
251284
logger.warning(
@@ -283,7 +316,6 @@ def create_collection(
283316
collection_crud = CollectionCrud(session, current_user.id)
284317
collection_crud.create(collection)
285318

286-
# 2. Launch background task
287319
background_tasks.add_task(
288320
do_create_collection, session, current_user, request, payload, client
289321
)

backend/app/crud/document.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,15 @@ def read_each(self, doc_ids: List[UUID]):
8181
)
8282
results = self.session.exec(statement).all()
8383

84-
(m, n) = map(len, (results, doc_ids))
85-
if m != n:
84+
(retrieved_count, requested_count) = map(len, (results, doc_ids))
85+
if retrieved_count != requested_count:
8686
try:
87-
raise ValueError(f"Requested {n} retrieved {m}")
87+
raise ValueError(
88+
f"Requested atleast {requested_count} document retrieved {retrieved_count}"
89+
)
8890
except ValueError as err:
8991
logger.error(
90-
f"[DocumentCrud.read_each] Mismatch in retrieved documents | {{'owner_id': {self.owner_id}, 'requested_count': {n}, 'retrieved_count': {m}}}",
92+
f"[DocumentCrud.read_each] Mismatch in retrieved documents | {{'owner_id': {self.owner_id}, 'requested_count': {requested_count}, 'retrieved_count': {retrieved_count}}}",
9193
exc_info=True,
9294
)
9395
raise

backend/app/models/collection.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class Collection(SQLModel, table=True):
4343
llm_service_name: Optional[str] = Field(default=None, nullable=True)
4444

4545
status: CollectionStatus = Field(default=CollectionStatus.processing)
46+
error_message: Optional[str] = Field(default=None, nullable=True)
4647

4748
created_at: datetime = Field(default_factory=now)
4849
updated_at: datetime = Field(default_factory=now)

0 commit comments

Comments
 (0)