mirror of
https://github.com/langgenius/dify.git
synced 2026-05-10 22:28:55 +08:00
Resolve the full dependency chain to enable all previously disabled controllers: Enabled routes: - sandbox_files: sandbox file browser API - sandbox_providers: sandbox provider management API - app_asset: app asset management API - skills: skill extraction API - CLI API blueprint: DifyCli callback endpoints (/cli/api/*) Dependencies extracted (64 files, ~8000 lines): - models/sandbox.py, models/app_asset.py: DB models - core/zip_sandbox/: zip-based sandbox execution - core/session/: CLI API session management - core/memory/: base memory + node token buffer - core/helper/creators.py: helper utilities - core/llm_generator/: context models, output models, utils - core/workflow/nodes/command/: command node type - core/workflow/nodes/file_upload/: file upload node type - core/app/entities/: app_asset_entities, app_bundle_entities, llm_generation_entities - services/: asset_content, skill, workflow_collaboration, workflow_comment - controllers/console/app/error.py: AppAsset error classes - core/tools/utils/system_encryption.py Import fixes: - dify_graph.enums -> graphon.enums in skill_service.py - get_signed_file_url_for_plugin -> get_signed_file_url in cli_api.py All 5 controllers verified: import OK, Flask starts successfully. 46 existing tests still pass. Made-with: Cursor
38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
"""
|
|
LLM Generation Detail Service.
|
|
|
|
Provides methods to query and attach generation details to workflow node executions
|
|
and messages, avoiding N+1 query problems.
|
|
"""
|
|
|
|
from sqlalchemy import select
|
|
from sqlalchemy.orm import Session
|
|
|
|
from core.app.entities.llm_generation_entities import LLMGenerationDetailData
|
|
from models import LLMGenerationDetail
|
|
|
|
|
|
class LLMGenerationService:
|
|
"""Service for handling LLM generation details."""
|
|
|
|
def __init__(self, session: Session):
|
|
self._session = session
|
|
|
|
def get_generation_detail_for_message(self, message_id: str) -> LLMGenerationDetailData | None:
|
|
"""Query generation detail for a specific message."""
|
|
stmt = select(LLMGenerationDetail).where(LLMGenerationDetail.message_id == message_id)
|
|
detail = self._session.scalars(stmt).first()
|
|
return detail.to_domain_model() if detail else None
|
|
|
|
def get_generation_details_for_messages(
|
|
self,
|
|
message_ids: list[str],
|
|
) -> dict[str, LLMGenerationDetailData]:
|
|
"""Batch query generation details for multiple messages."""
|
|
if not message_ids:
|
|
return {}
|
|
|
|
stmt = select(LLMGenerationDetail).where(LLMGenerationDetail.message_id.in_(message_ids))
|
|
details = self._session.scalars(stmt).all()
|
|
return {detail.message_id: detail.to_domain_model() for detail in details if detail.message_id}
|