diff --git a/src/backend/base/langflow/base/models/model.py b/src/backend/base/langflow/base/models/model.py index 11256734d..2b69a0491 100644 --- a/src/backend/base/langflow/base/models/model.py +++ b/src/backend/base/langflow/base/models/model.py @@ -9,12 +9,37 @@ from langflow.base.models.exceptions import get_message_from_openai_exception from langflow.custom import Component from langflow.field_typing import LanguageModel from langflow.schema.message import Message +from langflow.template.field.base import Output class LCModelComponent(Component): display_name: str = "Model Name" description: str = "Model Description" + outputs = [ + Output(display_name="Text", name="text_output", method="text_response"), + Output(display_name="Language Model", name="model_output", method="build_model"), + ] + + def _validate_outputs(self): + # At least these two outputs must be defined + required_output_methods = ["text_response", "build_model"] + output_names = [output.name for output in self.outputs] + for method_name in required_output_methods: + if method_name not in output_names: + raise ValueError(f"Output with name '{method_name}' must be defined.") + elif not hasattr(self, method_name): + raise ValueError(f"Method '{method_name}' must be defined.") + + def text_response(self) -> Message: + input_value = self.input_value + stream = self.stream + system_message = self.system_message + output = self.build_model() + result = self.get_chat_result(output, stream, input_value, system_message) + self.status = result + return result + def get_result(self, runnable: LLM, stream: bool, input_value: str): """ Retrieves the result from the output of a Runnable object. diff --git a/src/backend/base/langflow/components/models/GroqModel.py b/src/backend/base/langflow/components/models/GroqModel.py index 02176ef09..e7f5330c8 100644 --- a/src/backend/base/langflow/components/models/GroqModel.py +++ b/src/backend/base/langflow/components/models/GroqModel.py @@ -4,8 +4,8 @@ from pydantic.v1 import SecretStr from langflow.base.constants import STREAM_INFO_TEXT from langflow.base.models.groq_constants import MODEL_NAMES from langflow.base.models.model import LCModelComponent -from langflow.field_typing import LanguageModel, Text -from langflow.io import BoolInput, DropdownInput, FloatInput, IntInput, Output, SecretStrInput, TextInput +from langflow.field_typing import LanguageModel +from langflow.io import BoolInput, DropdownInput, FloatInput, IntInput, SecretStrInput, TextInput class GroqModel(LCModelComponent): @@ -68,20 +68,6 @@ class GroqModel(LCModelComponent): ), ] - outputs = [ - Output(display_name="Text", name="text_output", method="text_response"), - Output(display_name="Language Model", name="model_output", method="build_model"), - ] - - def text_response(self) -> Text: - input_value = self.input_value - stream = self.stream - system_message = self.system_message - output = self.build_model() - result = self.get_chat_result(output, stream, input_value, system_message) - self.status = result - return result - def build_model(self) -> LanguageModel: groq_api_key = self.groq_api_key model_name = self.model_name diff --git a/src/backend/base/langflow/components/models/OpenAIModel.py b/src/backend/base/langflow/components/models/OpenAIModel.py index 6ad632fa3..4096f3f30 100644 --- a/src/backend/base/langflow/components/models/OpenAIModel.py +++ b/src/backend/base/langflow/components/models/OpenAIModel.py @@ -18,8 +18,6 @@ from langflow.inputs import ( SecretStrInput, StrInput, ) -from langflow.schema.message import Message -from langflow.template import Output class OpenAIModelComponent(LCModelComponent): @@ -75,19 +73,6 @@ class OpenAIModelComponent(LCModelComponent): value=1, ), ] - outputs = [ - Output(display_name="Text", name="text_output", method="text_response"), - Output(display_name="Language Model", name="model_output", method="build_model"), - ] - - def text_response(self) -> Message: - input_value = self.input_value - stream = self.stream - system_message = self.system_message - output = self.build_model() - result = self.get_chat_result(output, stream, input_value, system_message) - self.status = result - return result def build_model(self) -> LanguageModel: # self.output_schea is a list of dictionaries