* add toggle option + chat interface * backend impl * draft * put info in schema * Revert "backend impl" This reverts commit c534eeb49986424e2c12e2c5642be4e17ba380d1. * chat interface in flow input * cleaning * add logic for running flow + styling * handle historic args * fix frontend changes * add tables * add conv list * add endpoints * adapt frontend * list message logic * save message in db * save response in db * cleaning * better migrations * refresh on new conv * better logic for messages * nit * genere conversation uuid from frontend * store chat mode info in flow status * better ui for chat * collapse chat * ui * infinite scroll on convs * infinite scroll on messages * fix ui * new chat entry on new * cleaning * change setting logic * fix test logic from flow input * move toggle to input * add warning modal when enabling chat mode * add summary and explanation on inline script * add hint for chat mode on user_message desc * show chat message instead of input in graph * add warning for triggers * one logo when not expanded * use infinitelist for conversations * add warning when deployment in progress * full width button * better icon for menu * better input + nits * put toggle in action * use waitjob * cleaning * cleaning * scroll on new + cleaning * use enum * fix logic * full screen * cleaning * exit on updatesqlx error * Update SQLx metadata * fix * cleaning * add for wait result endpoint * add missing drop * delete cascade * fix: use macro version of query_as in flow_conversations.rs Use sqlx::query_as! macro instead of query_as function for compile-time SQL validation and better type safety Co-authored-by: centdix <centdix@users.noreply.github.com> * fix: update comment to clarify conversation message update condition The comment now accurately reflects that the update happens when it's a flow and it's done (flow_is_done) Co-authored-by: centdix <centdix@users.noreply.github.com> * fix: only parse chat_input_enabled if conditions are met Move the parse_chat_input_enabled() call inside the condition check to avoid unnecessary parsing when the flow is not done or unsuccessful Co-authored-by: centdix <centdix@users.noreply.github.com> * fix: use the same transaction for conversation creation Pass transaction to get_or_create_conversation_with_id instead of creating a new one, ensuring all operations are atomic Co-authored-by: centdix <centdix@users.noreply.github.com> * fix: remove update trigger and handle updated_at in application code Remove the database trigger that automatically updates conversation timestamp and instead update it explicitly when creating messages. This gives better control and consistency. Co-authored-by: centdix <centdix@users.noreply.github.com> * Update SQLx metadata * cleaning * feat(aiagent): handle memory (#6719) * implement memory * s3 logic for memory * fix typo * much cleaner * cleaning * cleaning * only if chat * display nit * nit * fix stack overflow * cleaning * use len arg from input * cleaning * change order * delete memory when conv deleted * cleaning * nit * show description in expr mode * opti * opti * updatee ref * store string as simple string * use markdown * do not wait for deletion * add delete loading * fix logic * fix markdown * Update ee-repo-ref.txt * Update SQLx metadata * fix in test interface * nit * nit * fix layout * use memory_id to store memory * shorter description * rls + grant * fix text overflow * extract output from res * cleaning * handle streaming * cleaning * fix tool error * nit * update ref * fix * Update SQLx metadata * nit --------- Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com> Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com> Co-authored-by: centdix <centdix@users.noreply.github.com> Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
57 lines
2.3 KiB
SQL
57 lines
2.3 KiB
SQL
-- Add up migration script here
|
|
|
|
-- Create message_type enum
|
|
CREATE TYPE MESSAGE_TYPE AS ENUM ('user', 'assistant');
|
|
|
|
-- Create flow_conversation table
|
|
CREATE TABLE flow_conversation (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
workspace_id VARCHAR(50) NOT NULL REFERENCES workspace(id),
|
|
flow_path VARCHAR(255) NOT NULL,
|
|
title VARCHAR(255),
|
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
|
created_by VARCHAR(50) NOT NULL
|
|
);
|
|
|
|
-- Create flow_conversation_message table
|
|
CREATE TABLE flow_conversation_message (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
conversation_id UUID NOT NULL REFERENCES flow_conversation(id) ON DELETE CASCADE,
|
|
message_type MESSAGE_TYPE NOT NULL,
|
|
content TEXT NOT NULL,
|
|
job_id UUID REFERENCES v2_job(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- Basic indexes for performance
|
|
CREATE INDEX idx_flow_conversation_workspace_path ON flow_conversation(workspace_id, flow_path, updated_at DESC);
|
|
CREATE INDEX idx_conversation_message_conversation_time ON flow_conversation_message(conversation_id, created_at DESC);
|
|
|
|
-- Grant permissions
|
|
GRANT ALL ON flow_conversation TO windmill_admin;
|
|
GRANT ALL ON flow_conversation TO windmill_user;
|
|
GRANT ALL ON flow_conversation_message TO windmill_admin;
|
|
GRANT ALL ON flow_conversation_message TO windmill_user;
|
|
|
|
-- RLS policies
|
|
ALTER TABLE flow_conversation ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE flow_conversation_message ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Admin policies - admins can access all conversations
|
|
CREATE POLICY admin_policy ON flow_conversation FOR ALL TO windmill_admin USING (true);
|
|
CREATE POLICY admin_policy ON flow_conversation_message FOR ALL TO windmill_admin USING (true);
|
|
|
|
-- User policies - users can only access their own conversations
|
|
CREATE POLICY see_own ON flow_conversation FOR ALL TO windmill_user
|
|
USING (flow_conversation.created_by = current_setting('session.user'));
|
|
|
|
-- Users can see messages of conversations they own
|
|
CREATE POLICY see_own ON flow_conversation_message FOR ALL TO windmill_user
|
|
USING (
|
|
EXISTS (
|
|
SELECT 1 FROM flow_conversation
|
|
WHERE flow_conversation.id = flow_conversation_message.conversation_id
|
|
AND flow_conversation.created_by = current_setting('session.user')
|
|
)
|
|
); |