diff --git a/docs/docs/Components/components-tools.md b/docs/docs/Components/components-tools.md
index a838a9b3e..0a6d95a51 100644
--- a/docs/docs/Components/components-tools.md
+++ b/docs/docs/Components/components-tools.md
@@ -44,6 +44,28 @@ This component creates a tool for performing basic arithmetic operations on a gi
This component allows you to evaluate basic arithmetic expressions. It supports addition, subtraction, multiplication, division, and exponentiation. The tool uses a secure evaluation method that prevents the execution of arbitrary Python code.
+## Combinatorial Reasoner
+
+This component runs Icosa's Combinatorial Reasoning (CR) pipeline on an input to create an optimized prompt with embedded reasons. Sign up for access here: https://forms.gle/oWNv2NKjBNaqqvCx6
+
+### Parameters
+
+#### Inputs
+| Name | Display Name | Description |
+|------------------------|--------------|---------------------------------------|
+| prompt | Prompt | Input to run CR on |
+| openai_api_key | OpenAI API Key | OpenAI API key for authentication |
+| username | Username | Username for Icosa API authentication |
+| password | Password | Password for Icosa API authentication |
+| model_name | Model Name | OpenAI LLM to use for reason generation|
+
+#### Outputs
+
+| Name | Display Name | Description |
+|---------|-----------|--------------------------------------|
+| optimized_prompt | Optimized Prompt| A message object containing the optimized prompt |
+| reasons | Selected Reasons| A list of the selected reasons that are embedded in the optimized prompt|
+
## Glean Search API
This component allows you to call the Glean Search API.
diff --git a/pyproject.toml b/pyproject.toml
index e5cb771c0..43b57dcd0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,5 +1,3 @@
-
-
[tool.uv.sources]
langflow-base = { workspace = true }
langflow = { workspace = true }
diff --git a/src/backend/base/langflow/components/icosacomputing/__init__.py b/src/backend/base/langflow/components/icosacomputing/__init__.py
new file mode 100644
index 000000000..c161af652
--- /dev/null
+++ b/src/backend/base/langflow/components/icosacomputing/__init__.py
@@ -0,0 +1,5 @@
+from .combinatorial_reasoner import CombinatorialReasonerComponent
+
+__all__ = [
+ "CombinatorialReasonerComponent",
+]
diff --git a/src/backend/base/langflow/components/icosacomputing/combinatorial_reasoner.py b/src/backend/base/langflow/components/icosacomputing/combinatorial_reasoner.py
new file mode 100644
index 000000000..217bfb318
--- /dev/null
+++ b/src/backend/base/langflow/components/icosacomputing/combinatorial_reasoner.py
@@ -0,0 +1,81 @@
+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:
+ # list of selected reasons
+ final_reasons = [reason[0] for reason in self.reasons]
+ return Data(value=final_reasons)
diff --git a/src/frontend/src/icons/Icosa/Icosa.jsx b/src/frontend/src/icons/Icosa/Icosa.jsx
new file mode 100644
index 000000000..b985fc1f5
--- /dev/null
+++ b/src/frontend/src/icons/Icosa/Icosa.jsx
@@ -0,0 +1,41 @@
+const SvgIcosa = ({ ...props }) => (
+
+);
+export default SvgIcosa;
diff --git a/src/frontend/src/icons/Icosa/Icosa.svg b/src/frontend/src/icons/Icosa/Icosa.svg
new file mode 100644
index 000000000..3d16a1341
--- /dev/null
+++ b/src/frontend/src/icons/Icosa/Icosa.svg
@@ -0,0 +1,45 @@
+
diff --git a/src/frontend/src/icons/Icosa/index.tsx b/src/frontend/src/icons/Icosa/index.tsx
new file mode 100644
index 000000000..4d29d0027
--- /dev/null
+++ b/src/frontend/src/icons/Icosa/index.tsx
@@ -0,0 +1,8 @@
+import React, { forwardRef } from "react";
+import SvgIcosa from "./Icosa";
+
+export const IcosaIcon = forwardRef>(
+ (props, ref) => {
+ return ;
+ },
+);
diff --git a/src/frontend/src/utils/styleUtils.ts b/src/frontend/src/utils/styleUtils.ts
index c0d8b53fa..49fe972ab 100644
--- a/src/frontend/src/utils/styleUtils.ts
+++ b/src/frontend/src/utils/styleUtils.ts
@@ -263,6 +263,7 @@ import { GroqIcon } from "../icons/Groq";
import { HCDIcon } from "../icons/HCD";
import { HuggingFaceIcon } from "../icons/HuggingFace";
import { IFixIcon } from "../icons/IFixIt";
+import { IcosaIcon } from "../icons/Icosa";
import { LMStudioIcon } from "../icons/LMStudio";
import { LangChainIcon } from "../icons/LangChain";
import { MaritalkIcon } from "../icons/Maritalk";
@@ -506,6 +507,7 @@ export const SIDEBAR_BUNDLES = [
{ display_name: "Notion", name: "Notion", icon: "Notion" },
{ display_name: "NVIDIA", name: "nvidia", icon: "NVIDIA" },
{ display_name: "Vectara", name: "vectara", icon: "Vectara" },
+ { display_name: "Icosa Computing", name: "icosacomputing", icon: "Icosa" },
{ display_name: "Google", name: "google", icon: "Google" },
{ display_name: "CrewAI", name: "crewai", icon: "CrewAI" },
{ display_name: "NotDiamond", name: "notdiamond", icon: "NotDiamond" },
@@ -633,6 +635,7 @@ export const nodeIconsLucide: iconsType = {
HuggingFaceHub: HuggingFaceIcon,
HuggingFace: HuggingFaceIcon,
HuggingFaceEmbeddings: HuggingFaceIcon,
+ Icosa: IcosaIcon,
IFixitLoader: IFixIcon,
CrewAI: CrewAiIcon,
NotDiamond: NotDiamondIcon,