refactor: Update LCModelComponent to include text_response method and outputs for text and language model

This commit is contained in:
Gabriel Luiz Freitas Almeida 2024-06-20 15:51:18 -03:00
commit 8d4b9fd470
3 changed files with 27 additions and 31 deletions

View file

@ -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.

View file

@ -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

View file

@ -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