Merge branch 'main' into release

This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-08-08 15:08:11 -03:00 • committed by GitHub
commit 4dea0f6690
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 83 additions and 113 deletions

View file

@ -155,7 +155,7 @@ async def stream_build(flow_id: str):
) )
else: else:
input_keys_response = { input_keys_response = {
"input_keys": None, "input_keys": {},
"memory_keys": [], "memory_keys": [],
"handle_keys": [], "handle_keys": [],
} }

View file

@ -117,7 +117,7 @@ class ChatManager:
self, client_id: str, payload: Dict, langchain_object: Any self, client_id: str, payload: Dict, langchain_object: Any
): ):
# Process the graph data and chat message # Process the graph data and chat message
chat_inputs = payload.pop("inputs", {}) chat_inputs = payload.pop("inputs", "")
chat_inputs = ChatMessage(message=chat_inputs) chat_inputs = ChatMessage(message=chat_inputs)
self.chat_history.add_message(client_id, chat_inputs) self.chat_history.add_message(client_id, chat_inputs)

View file

@ -21,9 +21,9 @@ async def process_graph(
# Generate result and thought # Generate result and thought
try: try:
if chat_inputs.message is None: if not chat_inputs.message:
logger.debug("No message provided") logger.debug("No message provided")
chat_inputs.message = {} raise ValueError("No message provided")
logger.debug("Generating result and thought") logger.debug("Generating result and thought")
result, intermediate_steps = await get_result_and_steps( result, intermediate_steps = await get_result_and_steps(

View file

@ -171,7 +171,11 @@ def initialize_pinecone(class_object: Type[Pinecone], params: dict):
def initialize_chroma(class_object: Type[Chroma], params: dict): def initialize_chroma(class_object: Type[Chroma], params: dict):
"""Initialize a ChromaDB object from the params""" """Initialize a ChromaDB object from the params"""
if ( # type: ignore if ( # type: ignore
"chroma_server_host" in params or "chroma_server_http_port" in params "chroma_server_host" in params
or "chroma_server_http_port" in params
or "chroma_server_ssl_enabled" in params
or "chroma_server_grpc_port" in params
or "chroma_server_cors_allow_origins" in params
): ):
import chromadb # type: ignore import chromadb # type: ignore
@ -182,14 +186,6 @@ def initialize_chroma(class_object: Type[Chroma], params: dict):
} }
chroma_settings = chromadb.config.Settings(**settings_params) chroma_settings = chromadb.config.Settings(**settings_params)
params["client_settings"] = chroma_settings params["client_settings"] = chroma_settings
else:
# remove all chroma_server_ keys from params
params = {
key: value
for key, value in params.items()
if not key.startswith("chroma_server_")
}
persist = params.pop("persist", False) persist = params.pop("persist", False)
if not docs_in_params(params): if not docs_in_params(params):
params.pop("documents", None) params.pop("documents", None)

View file

@ -82,15 +82,13 @@ export default function BuildTrigger({
const parsedData = JSON.parse(event.data); const parsedData = JSON.parse(event.data);
// if the event is the end of the stream, close the connection // if the event is the end of the stream, close the connection
if (parsedData.end_of_stream) { if (parsedData.end_of_stream) {
// Close the connection and finish
finished = true;
eventSource.close(); eventSource.close();
return; return;
} else if (parsedData.log) { } else if (parsedData.log) {
// If the event is a log, log it // If the event is a log, log it
setSuccessData({ title: parsedData.log }); setSuccessData({ title: parsedData.log });
} else if (parsedData.input_keys !== undefined) { } else if (parsedData.input_keys) {
setTabsState((old) => { setTabsState((old) => {
return { return {
...old, ...old,

View file

@ -62,7 +62,8 @@ export default function Chat({ flow }: ChatType) {
tabsState && tabsState &&
tabsState[flow.id] && tabsState[flow.id] &&
tabsState[flow.id].formKeysData && tabsState[flow.id].formKeysData &&
tabsState[flow.id].formKeysData.input_keys !== null tabsState[flow.id].formKeysData.input_keys &&
Object.keys(tabsState[flow.id].formKeysData.input_keys).length > 0
) { ) {
setCanOpen(true); setCanOpen(true);
} else { } else {

View file

@ -67,17 +67,14 @@ export default function FormModal({
const id = useRef(flow.id); const id = useRef(flow.id);
const tabsStateFlowId = tabsState[flow.id]; const tabsStateFlowId = tabsState[flow.id];
const tabsStateFlowIdFormKeysData = tabsStateFlowId.formKeysData; const tabsStateFlowIdFormKeysData = tabsStateFlowId.formKeysData;
const [chatKey, setChatKey] = useState(() => { const [chatKey, setChatKey] = useState(
if (tabsState[flow.id]?.formKeysData?.input_keys) { Object.keys(tabsState[flow.id].formKeysData.input_keys).find(
return Object.keys(tabsState[flow.id].formKeysData.input_keys).find(
(k) => (k) =>
!tabsState[flow.id].formKeysData.handle_keys.some((j) => j === k) && !tabsState[flow.id].formKeysData.handle_keys.some((j) => j === k) &&
tabsState[flow.id].formKeysData.input_keys[k] === "" tabsState[flow.id].formKeysData.input_keys[k] === ""
)
); );
}
// TODO: return a sensible default
return "";
});
useEffect(() => { useEffect(() => {
if (messagesRef.current) { if (messagesRef.current) {
messagesRef.current.scrollTop = messagesRef.current.scrollHeight; messagesRef.current.scrollTop = messagesRef.current.scrollHeight;
@ -422,10 +419,8 @@ export default function FormModal({
</div> </div>
</div> </div>
{tabsState[id.current]?.formKeysData?.input_keys {Object.keys(tabsState[id.current].formKeysData.input_keys).map(
? Object.keys( (i, k) => (
tabsState[id.current].formKeysData.input_keys
).map((i, k) => (
<div className="file-component-accordion-div" key={k}> <div className="file-component-accordion-div" key={k}>
<AccordionComponent <AccordionComponent
trigger={ trigger={
@ -472,9 +467,9 @@ export default function FormModal({
onChange={(e) => { onChange={(e) => {
setTabsState((old) => { setTabsState((old) => {
let newTabsState = _.cloneDeep(old); let newTabsState = _.cloneDeep(old);
newTabsState[ newTabsState[id.current].formKeysData.input_keys[
id.current i
].formKeysData.input_keys[i] = e.target.value; ] = e.target.value;
return newTabsState; return newTabsState;
}); });
}} }}
@ -484,8 +479,8 @@ export default function FormModal({
</div> </div>
</AccordionComponent> </AccordionComponent>
</div> </div>
)) )
: null} )}
{tabsState[id.current].formKeysData.memory_keys.map((i, k) => ( {tabsState[id.current].formKeysData.memory_keys.map((i, k) => (
<div className="file-component-accordion-div" key={k}> <div className="file-component-accordion-div" key={k}>
<AccordionComponent <AccordionComponent

View file

@ -248,27 +248,6 @@ export function buildTweakObject(tweak) {
return tweakString; return tweakString;
} }
/**
* Function to get Chat Input Field
* @param {FlowType} flow - The current flow.
* @param {TabsState} tabsState - The current tabs state.
* @returns {string} - The chat input field
*/
export function getChatInputField(flow: FlowType, tabsState?: TabsState) {
let chat_input_field = "text";
if (
tabsState[flow.id] &&
tabsState[flow.id].formKeysData &&
tabsState[flow.id].formKeysData.input_keys
) {
chat_input_field = Object.keys(
tabsState[flow.id].formKeysData.input_keys
)[0];
}
return chat_input_field;
}
/** /**
* Function to get the python code for the API * Function to get the python code for the API
* @param {string} flowId - The id of the flow * @param {string} flowId - The id of the flow
@ -386,7 +365,6 @@ export function getWidgetCode(flow: FlowType, tabsState?: TabsState): string {
const flowId = flow.id; const flowId = flow.id;
const flowName = flow.name; const flowName = flow.name;
const inputs = buildInputs(tabsState, flow.id); const inputs = buildInputs(tabsState, flow.id);
let chat_input_field = getChatInputField(flow, tabsState);
return `<script src="https://cdn.jsdelivr.net/gh/logspace-ai/langflow-embedded-chat@main/dist/build/static/js/bundle.min.js"></script> return `<script src="https://cdn.jsdelivr.net/gh/logspace-ai/langflow-embedded-chat@main/dist/build/static/js/bundle.min.js"></script>
@ -399,7 +377,9 @@ chat_input_field: Input key that you want the chat to send the user message with
${ ${
tabsState[flow.id] && tabsState[flow.id].formKeysData tabsState[flow.id] && tabsState[flow.id].formKeysData
? `chat_inputs='${inputs}' ? `chat_inputs='${inputs}'
chat_input_field="${chat_input_field}" chat_input_field="${
Object.keys(tabsState[flow.id].formKeysData.input_keys)[0]
}"
` `
: "" : ""
}host_url="http://localhost:7860" }host_url="http://localhost:7860"