mirror of
https://github.com/langgenius/dify.git
synced 2026-04-05 16:59:21 +08:00
refactor: rm some dict api/controllers/console/app/generator.py api/core/llm_generator/llm_generator.py (#31709)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
from collections.abc import Sequence
|
from collections.abc import Sequence
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from flask_restx import Resource
|
from flask_restx import Resource
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
@@ -12,10 +11,12 @@ from controllers.console.app.error import (
|
|||||||
ProviderQuotaExceededError,
|
ProviderQuotaExceededError,
|
||||||
)
|
)
|
||||||
from controllers.console.wraps import account_initialization_required, setup_required
|
from controllers.console.wraps import account_initialization_required, setup_required
|
||||||
|
from core.app.app_config.entities import ModelConfig
|
||||||
from core.errors.error import ModelCurrentlyNotSupportError, ProviderTokenNotInitError, QuotaExceededError
|
from core.errors.error import ModelCurrentlyNotSupportError, ProviderTokenNotInitError, QuotaExceededError
|
||||||
from core.helper.code_executor.code_node_provider import CodeNodeProvider
|
from core.helper.code_executor.code_node_provider import CodeNodeProvider
|
||||||
from core.helper.code_executor.javascript.javascript_code_provider import JavascriptCodeProvider
|
from core.helper.code_executor.javascript.javascript_code_provider import JavascriptCodeProvider
|
||||||
from core.helper.code_executor.python3.python3_code_provider import Python3CodeProvider
|
from core.helper.code_executor.python3.python3_code_provider import Python3CodeProvider
|
||||||
|
from core.llm_generator.entities import RuleCodeGeneratePayload, RuleGeneratePayload, RuleStructuredOutputPayload
|
||||||
from core.llm_generator.llm_generator import LLMGenerator
|
from core.llm_generator.llm_generator import LLMGenerator
|
||||||
from core.model_runtime.errors.invoke import InvokeError
|
from core.model_runtime.errors.invoke import InvokeError
|
||||||
from extensions.ext_database import db
|
from extensions.ext_database import db
|
||||||
@@ -26,28 +27,13 @@ from services.workflow_service import WorkflowService
|
|||||||
DEFAULT_REF_TEMPLATE_SWAGGER_2_0 = "#/definitions/{model}"
|
DEFAULT_REF_TEMPLATE_SWAGGER_2_0 = "#/definitions/{model}"
|
||||||
|
|
||||||
|
|
||||||
class RuleGeneratePayload(BaseModel):
|
|
||||||
instruction: str = Field(..., description="Rule generation instruction")
|
|
||||||
model_config_data: dict[str, Any] = Field(..., alias="model_config", description="Model configuration")
|
|
||||||
no_variable: bool = Field(default=False, description="Whether to exclude variables")
|
|
||||||
|
|
||||||
|
|
||||||
class RuleCodeGeneratePayload(RuleGeneratePayload):
|
|
||||||
code_language: str = Field(default="javascript", description="Programming language for code generation")
|
|
||||||
|
|
||||||
|
|
||||||
class RuleStructuredOutputPayload(BaseModel):
|
|
||||||
instruction: str = Field(..., description="Structured output generation instruction")
|
|
||||||
model_config_data: dict[str, Any] = Field(..., alias="model_config", description="Model configuration")
|
|
||||||
|
|
||||||
|
|
||||||
class InstructionGeneratePayload(BaseModel):
|
class InstructionGeneratePayload(BaseModel):
|
||||||
flow_id: str = Field(..., description="Workflow/Flow ID")
|
flow_id: str = Field(..., description="Workflow/Flow ID")
|
||||||
node_id: str = Field(default="", description="Node ID for workflow context")
|
node_id: str = Field(default="", description="Node ID for workflow context")
|
||||||
current: str = Field(default="", description="Current instruction text")
|
current: str = Field(default="", description="Current instruction text")
|
||||||
language: str = Field(default="javascript", description="Programming language (javascript/python)")
|
language: str = Field(default="javascript", description="Programming language (javascript/python)")
|
||||||
instruction: str = Field(..., description="Instruction for generation")
|
instruction: str = Field(..., description="Instruction for generation")
|
||||||
model_config_data: dict[str, Any] = Field(..., alias="model_config", description="Model configuration")
|
model_config_data: ModelConfig = Field(..., alias="model_config", description="Model configuration")
|
||||||
ideal_output: str = Field(default="", description="Expected ideal output")
|
ideal_output: str = Field(default="", description="Expected ideal output")
|
||||||
|
|
||||||
|
|
||||||
@@ -64,6 +50,7 @@ reg(RuleCodeGeneratePayload)
|
|||||||
reg(RuleStructuredOutputPayload)
|
reg(RuleStructuredOutputPayload)
|
||||||
reg(InstructionGeneratePayload)
|
reg(InstructionGeneratePayload)
|
||||||
reg(InstructionTemplatePayload)
|
reg(InstructionTemplatePayload)
|
||||||
|
reg(ModelConfig)
|
||||||
|
|
||||||
|
|
||||||
@console_ns.route("/rule-generate")
|
@console_ns.route("/rule-generate")
|
||||||
@@ -82,12 +69,7 @@ class RuleGenerateApi(Resource):
|
|||||||
_, current_tenant_id = current_account_with_tenant()
|
_, current_tenant_id = current_account_with_tenant()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
rules = LLMGenerator.generate_rule_config(
|
rules = LLMGenerator.generate_rule_config(tenant_id=current_tenant_id, args=args)
|
||||||
tenant_id=current_tenant_id,
|
|
||||||
instruction=args.instruction,
|
|
||||||
model_config=args.model_config_data,
|
|
||||||
no_variable=args.no_variable,
|
|
||||||
)
|
|
||||||
except ProviderTokenNotInitError as ex:
|
except ProviderTokenNotInitError as ex:
|
||||||
raise ProviderNotInitializeError(ex.description)
|
raise ProviderNotInitializeError(ex.description)
|
||||||
except QuotaExceededError:
|
except QuotaExceededError:
|
||||||
@@ -118,9 +100,7 @@ class RuleCodeGenerateApi(Resource):
|
|||||||
try:
|
try:
|
||||||
code_result = LLMGenerator.generate_code(
|
code_result = LLMGenerator.generate_code(
|
||||||
tenant_id=current_tenant_id,
|
tenant_id=current_tenant_id,
|
||||||
instruction=args.instruction,
|
args=args,
|
||||||
model_config=args.model_config_data,
|
|
||||||
code_language=args.code_language,
|
|
||||||
)
|
)
|
||||||
except ProviderTokenNotInitError as ex:
|
except ProviderTokenNotInitError as ex:
|
||||||
raise ProviderNotInitializeError(ex.description)
|
raise ProviderNotInitializeError(ex.description)
|
||||||
@@ -152,8 +132,7 @@ class RuleStructuredOutputGenerateApi(Resource):
|
|||||||
try:
|
try:
|
||||||
structured_output = LLMGenerator.generate_structured_output(
|
structured_output = LLMGenerator.generate_structured_output(
|
||||||
tenant_id=current_tenant_id,
|
tenant_id=current_tenant_id,
|
||||||
instruction=args.instruction,
|
args=args,
|
||||||
model_config=args.model_config_data,
|
|
||||||
)
|
)
|
||||||
except ProviderTokenNotInitError as ex:
|
except ProviderTokenNotInitError as ex:
|
||||||
raise ProviderNotInitializeError(ex.description)
|
raise ProviderNotInitializeError(ex.description)
|
||||||
@@ -204,23 +183,29 @@ class InstructionGenerateApi(Resource):
|
|||||||
case "llm":
|
case "llm":
|
||||||
return LLMGenerator.generate_rule_config(
|
return LLMGenerator.generate_rule_config(
|
||||||
current_tenant_id,
|
current_tenant_id,
|
||||||
instruction=args.instruction,
|
args=RuleGeneratePayload(
|
||||||
model_config=args.model_config_data,
|
instruction=args.instruction,
|
||||||
no_variable=True,
|
model_config=args.model_config_data,
|
||||||
|
no_variable=True,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
case "agent":
|
case "agent":
|
||||||
return LLMGenerator.generate_rule_config(
|
return LLMGenerator.generate_rule_config(
|
||||||
current_tenant_id,
|
current_tenant_id,
|
||||||
instruction=args.instruction,
|
args=RuleGeneratePayload(
|
||||||
model_config=args.model_config_data,
|
instruction=args.instruction,
|
||||||
no_variable=True,
|
model_config=args.model_config_data,
|
||||||
|
no_variable=True,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
case "code":
|
case "code":
|
||||||
return LLMGenerator.generate_code(
|
return LLMGenerator.generate_code(
|
||||||
tenant_id=current_tenant_id,
|
tenant_id=current_tenant_id,
|
||||||
instruction=args.instruction,
|
args=RuleCodeGeneratePayload(
|
||||||
model_config=args.model_config_data,
|
instruction=args.instruction,
|
||||||
code_language=args.language,
|
model_config=args.model_config_data,
|
||||||
|
code_language=args.language,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
case _:
|
case _:
|
||||||
return {"error": f"invalid node type: {node_type}"}
|
return {"error": f"invalid node type: {node_type}"}
|
||||||
|
|||||||
20
api/core/llm_generator/entities.py
Normal file
20
api/core/llm_generator/entities.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
"""Shared payload models for LLM generator helpers and controllers."""
|
||||||
|
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
|
from core.app.app_config.entities import ModelConfig
|
||||||
|
|
||||||
|
|
||||||
|
class RuleGeneratePayload(BaseModel):
|
||||||
|
instruction: str = Field(..., description="Rule generation instruction")
|
||||||
|
model_config_data: ModelConfig = Field(..., alias="model_config", description="Model configuration")
|
||||||
|
no_variable: bool = Field(default=False, description="Whether to exclude variables")
|
||||||
|
|
||||||
|
|
||||||
|
class RuleCodeGeneratePayload(RuleGeneratePayload):
|
||||||
|
code_language: str = Field(default="javascript", description="Programming language for code generation")
|
||||||
|
|
||||||
|
|
||||||
|
class RuleStructuredOutputPayload(BaseModel):
|
||||||
|
instruction: str = Field(..., description="Structured output generation instruction")
|
||||||
|
model_config_data: ModelConfig = Field(..., alias="model_config", description="Model configuration")
|
||||||
@@ -6,6 +6,8 @@ from typing import Protocol, cast
|
|||||||
|
|
||||||
import json_repair
|
import json_repair
|
||||||
|
|
||||||
|
from core.app.app_config.entities import ModelConfig
|
||||||
|
from core.llm_generator.entities import RuleCodeGeneratePayload, RuleGeneratePayload, RuleStructuredOutputPayload
|
||||||
from core.llm_generator.output_parser.rule_config_generator import RuleConfigGeneratorOutputParser
|
from core.llm_generator.output_parser.rule_config_generator import RuleConfigGeneratorOutputParser
|
||||||
from core.llm_generator.output_parser.suggested_questions_after_answer import SuggestedQuestionsAfterAnswerOutputParser
|
from core.llm_generator.output_parser.suggested_questions_after_answer import SuggestedQuestionsAfterAnswerOutputParser
|
||||||
from core.llm_generator.prompts import (
|
from core.llm_generator.prompts import (
|
||||||
@@ -151,19 +153,19 @@ class LLMGenerator:
|
|||||||
return questions
|
return questions
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def generate_rule_config(cls, tenant_id: str, instruction: str, model_config: dict, no_variable: bool):
|
def generate_rule_config(cls, tenant_id: str, args: RuleGeneratePayload):
|
||||||
output_parser = RuleConfigGeneratorOutputParser()
|
output_parser = RuleConfigGeneratorOutputParser()
|
||||||
|
|
||||||
error = ""
|
error = ""
|
||||||
error_step = ""
|
error_step = ""
|
||||||
rule_config = {"prompt": "", "variables": [], "opening_statement": "", "error": ""}
|
rule_config = {"prompt": "", "variables": [], "opening_statement": "", "error": ""}
|
||||||
model_parameters = model_config.get("completion_params", {})
|
model_parameters = args.model_config_data.completion_params
|
||||||
if no_variable:
|
if args.no_variable:
|
||||||
prompt_template = PromptTemplateParser(WORKFLOW_RULE_CONFIG_PROMPT_GENERATE_TEMPLATE)
|
prompt_template = PromptTemplateParser(WORKFLOW_RULE_CONFIG_PROMPT_GENERATE_TEMPLATE)
|
||||||
|
|
||||||
prompt_generate = prompt_template.format(
|
prompt_generate = prompt_template.format(
|
||||||
inputs={
|
inputs={
|
||||||
"TASK_DESCRIPTION": instruction,
|
"TASK_DESCRIPTION": args.instruction,
|
||||||
},
|
},
|
||||||
remove_template_variables=False,
|
remove_template_variables=False,
|
||||||
)
|
)
|
||||||
@@ -175,8 +177,8 @@ class LLMGenerator:
|
|||||||
model_instance = model_manager.get_model_instance(
|
model_instance = model_manager.get_model_instance(
|
||||||
tenant_id=tenant_id,
|
tenant_id=tenant_id,
|
||||||
model_type=ModelType.LLM,
|
model_type=ModelType.LLM,
|
||||||
provider=model_config.get("provider", ""),
|
provider=args.model_config_data.provider,
|
||||||
model=model_config.get("name", ""),
|
model=args.model_config_data.name,
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -190,7 +192,7 @@ class LLMGenerator:
|
|||||||
error = str(e)
|
error = str(e)
|
||||||
error_step = "generate rule config"
|
error_step = "generate rule config"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception("Failed to generate rule config, model: %s", model_config.get("name"))
|
logger.exception("Failed to generate rule config, model: %s", args.model_config_data.name)
|
||||||
rule_config["error"] = str(e)
|
rule_config["error"] = str(e)
|
||||||
|
|
||||||
rule_config["error"] = f"Failed to {error_step}. Error: {error}" if error else ""
|
rule_config["error"] = f"Failed to {error_step}. Error: {error}" if error else ""
|
||||||
@@ -209,7 +211,7 @@ class LLMGenerator:
|
|||||||
# format the prompt_generate_prompt
|
# format the prompt_generate_prompt
|
||||||
prompt_generate_prompt = prompt_template.format(
|
prompt_generate_prompt = prompt_template.format(
|
||||||
inputs={
|
inputs={
|
||||||
"TASK_DESCRIPTION": instruction,
|
"TASK_DESCRIPTION": args.instruction,
|
||||||
},
|
},
|
||||||
remove_template_variables=False,
|
remove_template_variables=False,
|
||||||
)
|
)
|
||||||
@@ -220,8 +222,8 @@ class LLMGenerator:
|
|||||||
model_instance = model_manager.get_model_instance(
|
model_instance = model_manager.get_model_instance(
|
||||||
tenant_id=tenant_id,
|
tenant_id=tenant_id,
|
||||||
model_type=ModelType.LLM,
|
model_type=ModelType.LLM,
|
||||||
provider=model_config.get("provider", ""),
|
provider=args.model_config_data.provider,
|
||||||
model=model_config.get("name", ""),
|
model=args.model_config_data.name,
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -250,7 +252,7 @@ class LLMGenerator:
|
|||||||
# the second step to generate the task_parameter and task_statement
|
# the second step to generate the task_parameter and task_statement
|
||||||
statement_generate_prompt = statement_template.format(
|
statement_generate_prompt = statement_template.format(
|
||||||
inputs={
|
inputs={
|
||||||
"TASK_DESCRIPTION": instruction,
|
"TASK_DESCRIPTION": args.instruction,
|
||||||
"INPUT_TEXT": prompt_content.message.get_text_content(),
|
"INPUT_TEXT": prompt_content.message.get_text_content(),
|
||||||
},
|
},
|
||||||
remove_template_variables=False,
|
remove_template_variables=False,
|
||||||
@@ -276,7 +278,7 @@ class LLMGenerator:
|
|||||||
error_step = "generate conversation opener"
|
error_step = "generate conversation opener"
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception("Failed to generate rule config, model: %s", model_config.get("name"))
|
logger.exception("Failed to generate rule config, model: %s", args.model_config_data.name)
|
||||||
rule_config["error"] = str(e)
|
rule_config["error"] = str(e)
|
||||||
|
|
||||||
rule_config["error"] = f"Failed to {error_step}. Error: {error}" if error else ""
|
rule_config["error"] = f"Failed to {error_step}. Error: {error}" if error else ""
|
||||||
@@ -284,16 +286,20 @@ class LLMGenerator:
|
|||||||
return rule_config
|
return rule_config
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def generate_code(cls, tenant_id: str, instruction: str, model_config: dict, code_language: str = "javascript"):
|
def generate_code(
|
||||||
if code_language == "python":
|
cls,
|
||||||
|
tenant_id: str,
|
||||||
|
args: RuleCodeGeneratePayload,
|
||||||
|
):
|
||||||
|
if args.code_language == "python":
|
||||||
prompt_template = PromptTemplateParser(PYTHON_CODE_GENERATOR_PROMPT_TEMPLATE)
|
prompt_template = PromptTemplateParser(PYTHON_CODE_GENERATOR_PROMPT_TEMPLATE)
|
||||||
else:
|
else:
|
||||||
prompt_template = PromptTemplateParser(JAVASCRIPT_CODE_GENERATOR_PROMPT_TEMPLATE)
|
prompt_template = PromptTemplateParser(JAVASCRIPT_CODE_GENERATOR_PROMPT_TEMPLATE)
|
||||||
|
|
||||||
prompt = prompt_template.format(
|
prompt = prompt_template.format(
|
||||||
inputs={
|
inputs={
|
||||||
"INSTRUCTION": instruction,
|
"INSTRUCTION": args.instruction,
|
||||||
"CODE_LANGUAGE": code_language,
|
"CODE_LANGUAGE": args.code_language,
|
||||||
},
|
},
|
||||||
remove_template_variables=False,
|
remove_template_variables=False,
|
||||||
)
|
)
|
||||||
@@ -302,28 +308,28 @@ class LLMGenerator:
|
|||||||
model_instance = model_manager.get_model_instance(
|
model_instance = model_manager.get_model_instance(
|
||||||
tenant_id=tenant_id,
|
tenant_id=tenant_id,
|
||||||
model_type=ModelType.LLM,
|
model_type=ModelType.LLM,
|
||||||
provider=model_config.get("provider", ""),
|
provider=args.model_config_data.provider,
|
||||||
model=model_config.get("name", ""),
|
model=args.model_config_data.name,
|
||||||
)
|
)
|
||||||
|
|
||||||
prompt_messages = [UserPromptMessage(content=prompt)]
|
prompt_messages = [UserPromptMessage(content=prompt)]
|
||||||
model_parameters = model_config.get("completion_params", {})
|
model_parameters = args.model_config_data.completion_params
|
||||||
try:
|
try:
|
||||||
response: LLMResult = model_instance.invoke_llm(
|
response: LLMResult = model_instance.invoke_llm(
|
||||||
prompt_messages=list(prompt_messages), model_parameters=model_parameters, stream=False
|
prompt_messages=list(prompt_messages), model_parameters=model_parameters, stream=False
|
||||||
)
|
)
|
||||||
|
|
||||||
generated_code = response.message.get_text_content()
|
generated_code = response.message.get_text_content()
|
||||||
return {"code": generated_code, "language": code_language, "error": ""}
|
return {"code": generated_code, "language": args.code_language, "error": ""}
|
||||||
|
|
||||||
except InvokeError as e:
|
except InvokeError as e:
|
||||||
error = str(e)
|
error = str(e)
|
||||||
return {"code": "", "language": code_language, "error": f"Failed to generate code. Error: {error}"}
|
return {"code": "", "language": args.code_language, "error": f"Failed to generate code. Error: {error}"}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(
|
logger.exception(
|
||||||
"Failed to invoke LLM model, model: %s, language: %s", model_config.get("name"), code_language
|
"Failed to invoke LLM model, model: %s, language: %s", args.model_config_data.name, args.code_language
|
||||||
)
|
)
|
||||||
return {"code": "", "language": code_language, "error": f"An unexpected error occurred: {str(e)}"}
|
return {"code": "", "language": args.code_language, "error": f"An unexpected error occurred: {str(e)}"}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def generate_qa_document(cls, tenant_id: str, query, document_language: str):
|
def generate_qa_document(cls, tenant_id: str, query, document_language: str):
|
||||||
@@ -353,20 +359,20 @@ class LLMGenerator:
|
|||||||
return answer.strip()
|
return answer.strip()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def generate_structured_output(cls, tenant_id: str, instruction: str, model_config: dict):
|
def generate_structured_output(cls, tenant_id: str, args: RuleStructuredOutputPayload):
|
||||||
model_manager = ModelManager()
|
model_manager = ModelManager()
|
||||||
model_instance = model_manager.get_model_instance(
|
model_instance = model_manager.get_model_instance(
|
||||||
tenant_id=tenant_id,
|
tenant_id=tenant_id,
|
||||||
model_type=ModelType.LLM,
|
model_type=ModelType.LLM,
|
||||||
provider=model_config.get("provider", ""),
|
provider=args.model_config_data.provider,
|
||||||
model=model_config.get("name", ""),
|
model=args.model_config_data.name,
|
||||||
)
|
)
|
||||||
|
|
||||||
prompt_messages = [
|
prompt_messages = [
|
||||||
SystemPromptMessage(content=SYSTEM_STRUCTURED_OUTPUT_GENERATE),
|
SystemPromptMessage(content=SYSTEM_STRUCTURED_OUTPUT_GENERATE),
|
||||||
UserPromptMessage(content=instruction),
|
UserPromptMessage(content=args.instruction),
|
||||||
]
|
]
|
||||||
model_parameters = model_config.get("model_parameters", {})
|
model_parameters = args.model_config_data.completion_params
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response: LLMResult = model_instance.invoke_llm(
|
response: LLMResult = model_instance.invoke_llm(
|
||||||
@@ -390,12 +396,17 @@ class LLMGenerator:
|
|||||||
error = str(e)
|
error = str(e)
|
||||||
return {"output": "", "error": f"Failed to generate JSON Schema. Error: {error}"}
|
return {"output": "", "error": f"Failed to generate JSON Schema. Error: {error}"}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception("Failed to invoke LLM model, model: %s", model_config.get("name"))
|
logger.exception("Failed to invoke LLM model, model: %s", args.model_config_data.name)
|
||||||
return {"output": "", "error": f"An unexpected error occurred: {str(e)}"}
|
return {"output": "", "error": f"An unexpected error occurred: {str(e)}"}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def instruction_modify_legacy(
|
def instruction_modify_legacy(
|
||||||
tenant_id: str, flow_id: str, current: str, instruction: str, model_config: dict, ideal_output: str | None
|
tenant_id: str,
|
||||||
|
flow_id: str,
|
||||||
|
current: str,
|
||||||
|
instruction: str,
|
||||||
|
model_config: ModelConfig,
|
||||||
|
ideal_output: str | None,
|
||||||
):
|
):
|
||||||
last_run: Message | None = (
|
last_run: Message | None = (
|
||||||
db.session.query(Message).where(Message.app_id == flow_id).order_by(Message.created_at.desc()).first()
|
db.session.query(Message).where(Message.app_id == flow_id).order_by(Message.created_at.desc()).first()
|
||||||
@@ -434,7 +445,7 @@ class LLMGenerator:
|
|||||||
node_id: str,
|
node_id: str,
|
||||||
current: str,
|
current: str,
|
||||||
instruction: str,
|
instruction: str,
|
||||||
model_config: dict,
|
model_config: ModelConfig,
|
||||||
ideal_output: str | None,
|
ideal_output: str | None,
|
||||||
workflow_service: WorkflowServiceInterface,
|
workflow_service: WorkflowServiceInterface,
|
||||||
):
|
):
|
||||||
@@ -505,7 +516,7 @@ class LLMGenerator:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def __instruction_modify_common(
|
def __instruction_modify_common(
|
||||||
tenant_id: str,
|
tenant_id: str,
|
||||||
model_config: dict,
|
model_config: ModelConfig,
|
||||||
last_run: dict | None,
|
last_run: dict | None,
|
||||||
current: str | None,
|
current: str | None,
|
||||||
error_message: str | None,
|
error_message: str | None,
|
||||||
@@ -526,8 +537,8 @@ class LLMGenerator:
|
|||||||
model_instance = ModelManager().get_model_instance(
|
model_instance = ModelManager().get_model_instance(
|
||||||
tenant_id=tenant_id,
|
tenant_id=tenant_id,
|
||||||
model_type=ModelType.LLM,
|
model_type=ModelType.LLM,
|
||||||
provider=model_config.get("provider", ""),
|
provider=model_config.provider,
|
||||||
model=model_config.get("name", ""),
|
model=model_config.name,
|
||||||
)
|
)
|
||||||
match node_type:
|
match node_type:
|
||||||
case "llm" | "agent":
|
case "llm" | "agent":
|
||||||
@@ -570,7 +581,5 @@ class LLMGenerator:
|
|||||||
error = str(e)
|
error = str(e)
|
||||||
return {"error": f"Failed to generate code. Error: {error}"}
|
return {"error": f"Failed to generate code. Error: {error}"}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(
|
logger.exception("Failed to invoke LLM model, model: %s", json.dumps(model_config.name), exc_info=True)
|
||||||
"Failed to invoke LLM model, model: %s", json.dumps(model_config.get("name")), exc_info=True
|
|
||||||
)
|
|
||||||
return {"error": f"An unexpected error occurred: {str(e)}"}
|
return {"error": f"An unexpected error occurred: {str(e)}"}
|
||||||
|
|||||||
Reference in New Issue
Block a user