|
|
|
|
@ -7,6 +7,8 @@ from datetime import UTC, datetime
|
|
|
|
|
from typing import TYPE_CHECKING, Any, Optional, cast
|
|
|
|
|
|
|
|
|
|
import json_repair
|
|
|
|
|
from sqlalchemy import select, update
|
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
|
|
|
|
|
from configs import dify_config
|
|
|
|
|
from core.app.entities.app_invoke_entities import ModelConfigWithCredentialsEntity
|
|
|
|
|
@ -303,8 +305,6 @@ class LLMNode(BaseNode[LLMNodeData]):
|
|
|
|
|
prompt_messages: Sequence[PromptMessage],
|
|
|
|
|
stop: Optional[Sequence[str]] = None,
|
|
|
|
|
) -> Generator[NodeEvent, None, None]:
|
|
|
|
|
db.session.close()
|
|
|
|
|
|
|
|
|
|
invoke_result = model_instance.invoke_llm(
|
|
|
|
|
prompt_messages=list(prompt_messages),
|
|
|
|
|
model_parameters=node_data_model.completion_params,
|
|
|
|
|
@ -603,15 +603,11 @@ class LLMNode(BaseNode[LLMNodeData]):
|
|
|
|
|
return None
|
|
|
|
|
conversation_id = conversation_id_variable.value
|
|
|
|
|
|
|
|
|
|
# get conversation
|
|
|
|
|
conversation = (
|
|
|
|
|
db.session.query(Conversation)
|
|
|
|
|
.filter(Conversation.app_id == self.app_id, Conversation.id == conversation_id)
|
|
|
|
|
.first()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if not conversation:
|
|
|
|
|
return None
|
|
|
|
|
with Session(db.engine, expire_on_commit=False) as session:
|
|
|
|
|
stmt = select(Conversation).where(Conversation.app_id == self.app_id, Conversation.id == conversation_id)
|
|
|
|
|
conversation = session.scalar(stmt)
|
|
|
|
|
if not conversation:
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
memory = TokenBufferMemory(conversation=conversation, model_instance=model_instance)
|
|
|
|
|
|
|
|
|
|
@ -847,20 +843,24 @@ class LLMNode(BaseNode[LLMNodeData]):
|
|
|
|
|
used_quota = 1
|
|
|
|
|
|
|
|
|
|
if used_quota is not None and system_configuration.current_quota_type is not None:
|
|
|
|
|
db.session.query(Provider).filter(
|
|
|
|
|
Provider.tenant_id == tenant_id,
|
|
|
|
|
# TODO: Use provider name with prefix after the data migration.
|
|
|
|
|
Provider.provider_name == ModelProviderID(model_instance.provider).provider_name,
|
|
|
|
|
Provider.provider_type == ProviderType.SYSTEM.value,
|
|
|
|
|
Provider.quota_type == system_configuration.current_quota_type.value,
|
|
|
|
|
Provider.quota_limit > Provider.quota_used,
|
|
|
|
|
).update(
|
|
|
|
|
{
|
|
|
|
|
"quota_used": Provider.quota_used + used_quota,
|
|
|
|
|
"last_used": datetime.now(tz=UTC).replace(tzinfo=None),
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
db.session.commit()
|
|
|
|
|
with Session(db.engine) as session:
|
|
|
|
|
stmt = (
|
|
|
|
|
update(Provider)
|
|
|
|
|
.where(
|
|
|
|
|
Provider.tenant_id == tenant_id,
|
|
|
|
|
# TODO: Use provider name with prefix after the data migration.
|
|
|
|
|
Provider.provider_name == ModelProviderID(model_instance.provider).provider_name,
|
|
|
|
|
Provider.provider_type == ProviderType.SYSTEM.value,
|
|
|
|
|
Provider.quota_type == system_configuration.current_quota_type.value,
|
|
|
|
|
Provider.quota_limit > Provider.quota_used,
|
|
|
|
|
)
|
|
|
|
|
.values(
|
|
|
|
|
quota_used=Provider.quota_used + used_quota,
|
|
|
|
|
last_used=datetime.now(tz=UTC).replace(tzinfo=None),
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
session.execute(stmt)
|
|
|
|
|
session.commit()
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
def _extract_variable_selector_to_variable_mapping(
|
|
|
|
|
|