fix: resolve mypy type check.

This commit is contained in:
FFXN
2026-01-28 14:03:28 +08:00
parent 5f611ad2ba
commit d39591018c
6 changed files with 34 additions and 18 deletions

View File

@ -327,7 +327,7 @@ class DatasetDocumentListApi(Resource):
document_ids_need_summary = [str(doc.id) for doc in documents_need_summary]
# Calculate summary_index_status for documents that need summary (only if dataset summary index is enabled)
summary_status_map = {}
summary_status_map: dict[str, str | None] = {}
if has_summary_index and document_ids_need_summary:
# Get all segments for these documents (excluding qa_model and re_segment)
segments = (
@ -341,7 +341,7 @@ class DatasetDocumentListApi(Resource):
)
# Group segments by document_id
document_segments_map = {}
document_segments_map: dict[str, list[str]] = {}
for segment in segments:
doc_id = str(segment.document_id)
if doc_id not in document_segments_map:
@ -393,10 +393,10 @@ class DatasetDocumentListApi(Resource):
for document in documents:
if has_summary_index and document.need_summary is True:
# Get status from map, default to None (not queued yet)
document.summary_index_status = summary_status_map.get(str(document.id))
document.summary_index_status = summary_status_map.get(str(document.id)) # type: ignore[assignment]
else:
# Return null if summary index is not enabled or document doesn't need summary
document.summary_index_status = None
document.summary_index_status = None # type: ignore[assignment]
if fetch:
for document in documents:

View File

@ -516,7 +516,7 @@ class DocumentListApi(DatasetApiResource):
document_ids_need_summary = [str(doc.id) for doc in documents_need_summary]
# Calculate summary_index_status for documents that need summary (only if dataset summary index is enabled)
summary_status_map = {}
summary_status_map: dict[str, str | None] = {}
if has_summary_index and document_ids_need_summary:
# Get all segments for these documents (excluding qa_model and re_segment)
segments = (
@ -530,7 +530,7 @@ class DocumentListApi(DatasetApiResource):
)
# Group segments by document_id
document_segments_map = {}
document_segments_map: dict[str, list[str]] = {}
for segment in segments:
doc_id = str(segment.document_id)
if doc_id not in document_segments_map:
@ -559,7 +559,7 @@ class DocumentListApi(DatasetApiResource):
segment_ids = document_segments_map.get(doc_id, [])
if not segment_ids:
# No segments, status is None (not started)
summary_status_map[doc_id] = None
summary_status_map[doc_id] = None # type: ignore[assignment]
continue
# Check if there are any "not_started" or "generating" status summaries
@ -578,16 +578,16 @@ class DocumentListApi(DatasetApiResource):
else:
# All enabled=True summaries are "completed" or "error", task finished
# Or no enabled=True summaries exist (all disabled)
summary_status_map[doc_id] = None
summary_status_map[doc_id] = None # type: ignore[assignment]
# Add summary_index_status to each document
for document in documents:
if has_summary_index and document.need_summary is True:
# Get status from map, default to None (not queued yet)
document.summary_index_status = summary_status_map.get(str(document.id))
document.summary_index_status = summary_status_map.get(str(document.id)) # type: ignore[assignment]
else:
# Return null if summary index is not enabled or document doesn't need summary
document.summary_index_status = None
document.summary_index_status = None # type: ignore[assignment]
response = {
"data": marshal(documents, document_fields),

View File

@ -558,8 +558,11 @@ class RetrievalService:
if child_chunks or attachment_infos:
child_chunk_details = []
for child_chunk in child_chunks:
document = doc_to_document_map.get(child_chunk.index_node_id)
child_score = document.metadata.get("score", 0.0) if document else 0.0
child_document: Document | None = doc_to_document_map.get(child_chunk.index_node_id)
if child_document:
child_score = child_document.metadata.get("score", 0.0)
else:
child_score = 0.0
child_chunk_detail = {
"id": child_chunk.id,
"content": child_chunk.content,

View File

@ -4,7 +4,7 @@ import logging
import re
import uuid
from collections.abc import Mapping
from typing import Any
from typing import Any, cast
logger = logging.getLogger(__name__)
@ -12,9 +12,10 @@ from core.entities.knowledge_entities import PreviewDetail
from core.file import File, FileTransferMethod, FileType, file_manager
from core.llm_generator.prompts import DEFAULT_GENERATOR_SUMMARY_PROMPT
from core.model_manager import ModelInstance
from core.model_runtime.entities.llm_entities import LLMUsage
from core.model_runtime.entities.llm_entities import LLMResult, LLMUsage
from core.model_runtime.entities.message_entities import (
ImagePromptMessageContent,
PromptMessage,
PromptMessageContentUnionTypes,
TextPromptMessageContent,
UserPromptMessage,
@ -375,6 +376,9 @@ class ParagraphIndexProcessor(BaseIndexProcessor):
model_provider_name = summary_index_setting.get("model_provider_name")
summary_prompt = summary_index_setting.get("summary_prompt")
if not model_name or not model_provider_name:
raise ValueError("model_name and model_provider_name are required in summary_index_setting")
# Import default summary prompt
if not summary_prompt:
summary_prompt = DEFAULT_GENERATOR_SUMMARY_PROMPT
@ -431,7 +435,13 @@ class ParagraphIndexProcessor(BaseIndexProcessor):
prompt = f"{summary_prompt}\n{text}"
prompt_messages.append(UserPromptMessage(content=prompt))
result = model_instance.invoke_llm(prompt_messages=prompt_messages, model_parameters={}, stream=False)
result = model_instance.invoke_llm(
prompt_messages=cast(list[PromptMessage], prompt_messages), model_parameters={}, stream=False
)
# Type assertion: when stream=False, invoke_llm returns LLMResult, not Generator
if not isinstance(result, LLMResult):
raise ValueError("Expected LLMResult when stream=False")
summary_content = getattr(result.message, "content", "")
usage = result.usage

View File

@ -24,6 +24,7 @@ from core.rag.index_processor.index_processor_base import BaseIndexProcessor
from core.rag.models.document import AttachmentDocument, Document, QAStructureChunk
from core.rag.retrieval.retrieval_methods import RetrievalMethod
from core.tools.utils.text_processing_utils import remove_leading_symbols
from extensions.ext_database import db
from libs import helper
from models.account import Account
from models.dataset import Dataset, DocumentSegment

View File

@ -87,7 +87,7 @@ class SummaryIndexService:
# Update existing record
existing_summary.summary_content = summary_content
existing_summary.status = status
existing_summary.error = None # Clear any previous errors
existing_summary.error = None # type: ignore[assignment] # Clear any previous errors
# Re-enable if it was disabled
if not existing_summary.enabled:
existing_summary.enabled = True
@ -300,7 +300,7 @@ class SummaryIndexService:
if existing_summary:
# Update existing record
existing_summary.status = status
existing_summary.error = None # Clear any previous errors
existing_summary.error = None # type: ignore[assignment] # Clear any previous errors
if not existing_summary.enabled:
existing_summary.enabled = True
existing_summary.disabled_at = None
@ -384,11 +384,13 @@ class SummaryIndexService:
summary_record = SummaryIndexService.create_summary_record(
segment, dataset, summary_content="", status="generating"
)
if summary_record:
summary_record.error = None # type: ignore[assignment]
try:
# Update status to "generating"
summary_record.status = "generating"
summary_record.error = None
summary_record.error = None # type: ignore[assignment]
db.session.add(summary_record)
db.session.flush()