|
|
import requests |
|
|
from requests.auth import HTTPBasicAuth |
|
|
|
|
|
from langflow.base.models.openai_constants import OPENAI_MODEL_NAMES |
|
|
from langflow.custom import Component |
|
|
from langflow.inputs import DropdownInput, SecretStrInput, StrInput |
|
|
from langflow.io import MessageTextInput, Output |
|
|
from langflow.schema import Data |
|
|
from langflow.schema.message import Message |
|
|
|
|
|
|
|
|
class CombinatorialReasonerComponent(Component): |
|
|
display_name = "Combinatorial Reasoner" |
|
|
description = "Uses Combinatorial Optimization to construct an optimal prompt with embedded reasons. Sign up here:\nhttps://forms.gle/oWNv2NKjBNaqqvCx6" |
|
|
icon = "Icosa" |
|
|
name = "Combinatorial Reasoner" |
|
|
|
|
|
inputs = [ |
|
|
MessageTextInput(name="prompt", display_name="Prompt"), |
|
|
SecretStrInput( |
|
|
name="openai_api_key", |
|
|
display_name="OpenAI API Key", |
|
|
info="The OpenAI API Key to use for the OpenAI model.", |
|
|
advanced=False, |
|
|
value="OPENAI_API_KEY", |
|
|
), |
|
|
StrInput( |
|
|
name="username", |
|
|
display_name="Username", |
|
|
info="Username to authenticate access to Icosa CR API", |
|
|
advanced=False, |
|
|
), |
|
|
SecretStrInput( |
|
|
name="password", |
|
|
display_name="Password", |
|
|
info="Password to authenticate access to Icosa CR API.", |
|
|
advanced=False, |
|
|
), |
|
|
DropdownInput( |
|
|
name="model_name", |
|
|
display_name="Model Name", |
|
|
advanced=False, |
|
|
options=OPENAI_MODEL_NAMES, |
|
|
value=OPENAI_MODEL_NAMES[0], |
|
|
), |
|
|
] |
|
|
|
|
|
outputs = [ |
|
|
Output( |
|
|
display_name="Optimized Prompt", |
|
|
name="optimized_prompt", |
|
|
method="build_prompt", |
|
|
), |
|
|
Output(display_name="Selected Reasons", name="reasons", method="build_reasons"), |
|
|
] |
|
|
|
|
|
def build_prompt(self) -> Message: |
|
|
params = { |
|
|
"prompt": self.prompt, |
|
|
"apiKey": self.openai_api_key, |
|
|
"model": self.model_name, |
|
|
} |
|
|
|
|
|
creds = HTTPBasicAuth(self.username, password=self.password) |
|
|
response = requests.post( |
|
|
"https://cr-api.icosacomputing.com/cr/langflow", |
|
|
json=params, |
|
|
auth=creds, |
|
|
timeout=100, |
|
|
) |
|
|
response.raise_for_status() |
|
|
|
|
|
prompt = response.json()["prompt"] |
|
|
|
|
|
self.reasons = response.json()["finalReasons"] |
|
|
return prompt |
|
|
|
|
|
def build_reasons(self) -> Data: |
|
|
|
|
|
final_reasons = [reason[0] for reason in self.reasons] |
|
|
return Data(value=final_reasons) |
|
|
|