v1.8.0 #857
ldyrmishiritech
announced in
Announcements
v1.8.0
#857
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
v1.8.0
This release is a major expansion of the platform: enterprise single sign-on with Microsoft Entra ID, an in-app notification system with email delivery, a built-in Help Center backed by Azure DevOps Boards, real-time voice conversations and pluggable audio providers, a visual workflow builder with cron-based scheduling, a versioned prompt editor, local model fine-tuning, GDPR-compliant conversation deletion, and direct-to-S3 file uploads. It also brings significant security hardening (PII masking, safe model loading, refresh-token rotation, OAuth2 for MCP) and a reworked Celery worker topology for safer, more scalable background processing.
Authentication & SSO
entra_oidclaim, and configurable tenant scope (specific tenant orcommon/organizations/consumers)./auth/refreshnow validates the token type and revokes the old refresh token after use.Notifications
EMAIL_ENABLED, configurable sender/host/TLS), so notifications can be dispatched by email.Help Center & Support Tickets
Voice & Audio
Workflows
Prompt Editor
Analytics & Conversations
group_id), plus an analytics backfill task.Local Fine-Tuning (BETA)
File Management
Privacy & Compliance
soft,anonymize, andharddelete modes (admin-gated); deletion also purges associated S3/cloud file objects.Frontend / UX
Chat Widget (plugins)
LiveCallControl,useLiveVoice), audio playback (AudioPlayer), file attachments (useFileAttachments), a customizable chat-bubble icon, and refactored composition hooks (scroll, viewport, thinking animation, theming).BUILD.mdbuild guide, switched to a gitignoredfont.example.csstemplate, and simplified the Vite IIFE bundle workflow.Dependencies & Security
cryptography46.0.5→46.0.7,urllib32.6.3→2.7.0,PyJWT[crypto]2.10.1→2.12.0,lxml5.4.0→6.1.0,pypdf6.6.2→6.10.2,langchain-core1.2.7→1.3.3,langsmith0.5.0→0.8.0, plus newPyOpenSSL>=26.0.0. New libraries:aiosmtplib(email),litellm,google-genai(Gemini Live). Removedlangchain-chroma.vite5→6,react-router-dom6.26→6.30,axios1.15→1.16,genassist-chat-react1.0.37→1.0.39, pluslodash,postcss, anduuidbumps.New Endpoints
Audio Providers (
/audio-providers)GET/audio-providersGET /audio-providersGET/audio-providers/minimalGET /audio-providers/minimalGET/audio-providers/by-capability/{capability}capability(path:tts|stt|both)GET /audio-providers/by-capability/ttsGET/audio-providers/form-schemasGET /audio-providers/form-schemasGET/audio-providers/node-schemasGET /audio-providers/node-schemasGET/audio-providers/{provider_id}provider_id(path, UUID)GET /audio-providers/3fa85f64-…POST/audio-providersAudioProviderCreate(name,type,config)POST /audio-providersPATCH/audio-providers/{provider_id}provider_id(path, UUID); Body:AudioProviderUpdatePATCH /audio-providers/3fa85f64-…DELETE/audio-providers/{provider_id}provider_id(path, UUID)DELETE /audio-providers/3fa85f64-…POST/audio-providers/test-connectionprovider_id(query, UUID, optional); Body:AudioProviderBase(type,capability,connection_data)POST /audio-providers/test-connectionMicrosoft Entra SSO (
/auth/sso/microsoft)GET/auth/sso/microsoft/statusGET /auth/sso/microsoft/statusGET/auth/sso/microsoft/startGET /auth/sso/microsoft/startGET/auth/sso/microsoft/callbackcode(query),state(query)GET /auth/sso/microsoft/callback?code=…&state=…POST/auth/sso/microsoft/completeMicrosoftSsoCompleteRequest(code: str, 8–256)POST /auth/sso/microsoft/completeAzure DevOps Webhook (
/integrations/azure-devops)POST/integrations/azure-devops/webhookX-ADO-Webhook-Secret(optional); Body:AdoWebhookPayload(resource,eventType, …)POST /integrations/azure-devops/webhookLocal Fine-Tuning (
/local-fine-tuning)GET/local-fine-tuning/supported-modelsskip(query, int, default 0),limit(query, int, default 10)GET /local-fine-tuning/supported-modelsGET/local-fine-tuning/system/gpusGET /local-fine-tuning/system/gpusGET/local-fine-tuning/jobsGET /local-fine-tuning/jobsGET/local-fine-tuning/jobs/{job_id}job_id(path)GET /local-fine-tuning/jobs/abc123GET/local-fine-tuning/jobs/{job_id}/eventsjob_id(path)GET /local-fine-tuning/jobs/abc123/eventsPOST/local-fine-tuning/jobsCreateLocalFineTuneJobRequestPOST /local-fine-tuning/jobsPOST/local-fine-tuning/jobs/{job_id}/canceljob_id(path)POST /local-fine-tuning/jobs/abc123/cancelDELETE/local-fine-tuning/jobs/{job_id}/filesjob_id(path);delete_data_files(query, bool, default true),delete_checkpoints(query, bool, default true),delete_model(query, bool, default false)DELETE /local-fine-tuning/jobs/abc123/filesGET/local-fine-tuning/deploymentsGET /local-fine-tuning/deploymentsGET/local-fine-tuning/deployments/{deployment_id}deployment_id(path)GET /local-fine-tuning/deployments/dep123POST/local-fine-tuning/deploymentsCreateDeploymentRequestPOST /local-fine-tuning/deploymentsDELETE/local-fine-tuning/deployments/{deployment_id}deployment_id(path)DELETE /local-fine-tuning/deployments/dep123GET/local-fine-tuning/deployments/{deployment_id}/healthdeployment_id(path)GET /local-fine-tuning/deployments/dep123/healthPOST/local-fine-tuning/deployments/{deployment_id}/test-inferencedeployment_id(path); Body:TestInferenceRequest(message: str)POST /local-fine-tuning/deployments/dep123/test-inferenceNotifications (
/notifications)GET/notificationsGET /notificationsPATCH/notificationsNotificationUserSettingsUpdatePATCH /notificationsGET/notifications/admin/targetingGET /notifications/admin/targetingPUT/notifications/admin/targeting/{type_key}type_key(path); Body:NotificationTypeTargetingUpdatePUT /notifications/admin/targeting/conversation_startedGET/notifications/state/countersGET /notifications/state/countersPATCH/notifications/state/readNotificationStateUpdate(notification_ids: UUID[],is_read: bool, optional)PATCH /notifications/state/readPrompt Editor (
/genagent/prompt-editor)GET/genagent/prompt-editor/versions/{workflow_id}/{node_id}/{prompt_field}POST/genagent/prompt-editor/versions/{workflow_id}/{node_id}/{prompt_field}PromptVersionCreatePOST/genagent/prompt-editor/versions/{version_id}/restoreversion_id(path, UUID)DELETE/genagent/prompt-editor/versions/{version_id}version_id(path, UUID)DELETE/genagent/prompt-editor/versions/{version_id}/hardversion_id(path, UUID)GET/genagent/prompt-editor/config/{workflow_id}/{node_id}/{prompt_field}PUT/genagent/prompt-editor/config/{workflow_id}/{node_id}/{prompt_field}/gold-suiteGoldSuiteLinkRequest(suite_id: UUID,name: str)POST/genagent/prompt-editor/evaluate/{workflow_id}/{node_id}/{prompt_field}PromptEvalRequest(prompt_content,techniques,provider_id)POST/genagent/prompt-editor/optimize/{workflow_id}/{node_id}/{prompt_field}PromptOptimizeRequest(current_prompt,provider_id,instructions,failed_cases)Support Tickets (
/help-center/tickets)GET/help-center/tickets/duplicatestitle(query, min 3),ticket_type(query, defaultbug)GET /help-center/tickets/duplicates?title=…GET/help-center/ticketsstatus,ticket_type,skip(default 0),limit(default 50, max 100),mine_only(default false) — all queryGET /help-center/ticketsPOST/help-center/ticketsSupportTicketCreatePOST /help-center/ticketsGET/help-center/tickets/{ticket_id}ticket_id(path, UUID)GET /help-center/tickets/3fa85f64-…GET/help-center/tickets/{ticket_id}/commentsticket_id(path, UUID)POST/help-center/tickets/{ticket_id}/commentsticket_id(path, UUID); Body:SupportTicketCommentCreateVoice Live (
/voice)/voice/live/{agent_id}agent_id(path),thread_id(query, required). Client sends binary audio frames; server returns binary audio + JSON transcript/error events.WS /voice/live/3fa85f64-…?thread_id=…Workflow Builder (
/workflow-builder)POST/workflow-builder/config/from-builderworkflow_name(str, required),workflow_json(str, required — serialized builder spec),workflow_description(str, optional)POST /workflow-builder/config/from-builderWorkflow Schedules (
/genagent/workflow-schedules)GET/genagent/workflow-schedulesis_active(query, bool, optional)GET /genagent/workflow-schedulesPOST/genagent/workflow-schedulesWorkflowScheduleCreate(workflow_id,cron_expression,is_active, …)POST /genagent/workflow-schedulesGET/genagent/workflow-schedules/{schedule_id}schedule_id(path, UUID)GET /genagent/workflow-schedules/3fa85f64-…PUT/genagent/workflow-schedules/{schedule_id}schedule_id(path, UUID); Body:WorkflowScheduleUpdatePUT /genagent/workflow-schedules/3fa85f64-…DELETE/genagent/workflow-schedules/{schedule_id}schedule_id(path, UUID)GET/genagent/workflow-schedules/{schedule_id}/runsschedule_id(path);run_status(query, enum, optional),limit(default 50),offset(default 0)POST/genagent/workflow-schedules/{schedule_id}/run-nowschedule_id(path, UUID)Updated Endpoints
Analytics (
/analytics)POST/analytics/backfillfrom_date,to_datequery, optional)GET/analytics/groups/{group_id}/agentsGET/analytics/*(daily-stats, summary, agent-stats, node-stats, audio metrics, custom-attribute keys/breakdown, exports)group_id(query, UUID) for group-scoped filteringAPI Keys (
/api-keys)POST/api-keys/{api_key_id}/revealApiKey.DECRYPT)Conversations (
/conversations)GET/conversations/issuesskip,limit,status)GET/conversations/{conversation_id}/messages/{message_id}/audioPATCH/conversations/issues/{message_feedback_id}/statusDELETE/conversations/{conversation_id}/gdprmode(query:soft|anonymize|hard); admin +Conversation.DELETE_GDPRPUT/conversations/in-progress/{conversation_id}multipart/form-datawithmodel(JSON), optionalaudio_file, andaudio_format(defaultwebm)File Manager (
/file-manager)POST/file-manager/uploadPOST/file-manager/upload-sessionPOST/file-manager/upload-session/{session_id}/chunkchunk_index)POST/file-manager/upload-session/{session_id}/completeGET/file-manager/upload-session/{session_id}GET/file-manager/{file_id},/file-manager/source/{file_id}force_proxy(query, bool, default false) — S3-backed files redirect to a presigned URL unlessforce_proxy=trueAgent Knowledge (
/genagent/knowledge)POST/genagent/knowledge/upload-session(+/chunk,/complete,GET .../{session_id})POST/genagent/knowledge/uploadKNOWLEDGE_MAX_UPLOAD_BYTES; supports S3 storage providerOther
POST/genagent/workflow/{workflow_id}/execute,/genagent/workflow/testfileReaderNode,externalAgentNode,ttsNode,sttNode,voiceAgentNode,createWorkflowScheduleNodePOST/auth/refreshtyp=refresh(access tokens rejected) and is rotated (old token revoked)GET/dashboard/notificationsPOST/internal/ws-token/verifyEnvironment Variable Changes
Backend (
backend/.env.example+settings.py) — AddedThe Required? column indicates what you must set for a fresh production deployment. "Yes (prod)" = the app fails fast without it; "If <feature>" = only required when that feature is turned on; "No" = has a safe default.
Required for production
SEED_ADMIN_PASSWORDchange-me(dev only)SEED_APIUSER_PASSWORDchange-me(dev only)SEED_SUPERVISOR_PASSWORDchange-me(dev only)SEED_OPERATOR_PASSWORDchange-me(dev only)SEED_TRANSCRIBE_OPERATOR_PASSWORDchange-me(dev only)SEED_ADMIN_USERNAMEadminSEED_SUPERVISOR_USERNAMEsupervisor1SEED_OPERATOR_USERNAMEoperator1SEED_APIUSER_USERNAMEapiuser1SEED_TRANSCRIBE_OPERATOR_USERNAMEtranscribeoperator1Microsoft Entra ID SSO — required only when
SSO_MICROSOFT_ENABLED=trueSSO_MICROSOFT_ENABLEDfalseSSO_MICROSOFT_ENTRA_TENANT_IDSSO_MICROSOFT_CLIENT_ID/SSO_MICROSOFT_CLIENT_SECRETSSO_MICROSOFT_REDIRECT_URI/api)SSO_MICROSOFT_POST_LOGIN_FRONTEND_URLSSO_MICROSOFT_POST_LOGIN_ORIGINS_ALLOWLISTSSO_MICROSOFT_AUTO_PROVISIONfalseSSO_MICROSOFT_DEFAULT_USER_TYPE_ID/SSO_MICROSOFT_DEFAULT_ROLE_IDSOther feature-gated / optional
AZURE_DEVOPS_ORGANIZATION_URLhttps://dev.azure.com/your-orgAZURE_DEVOPS_PROJECTAZURE_DEVOPS_PATAZURE_DEVOPS_WORK_ITEM_TYPEBugAZURE_DEVOPS_FEATURE_WORK_ITEM_TYPE/AZURE_DEVOPS_TASK_WORK_ITEM_TYPEAZURE_DEVOPS_DEFAULT_AREA_PATHAZURE_DEVOPS_WEBHOOK_SECRETHELP_CENTER_PUBLIC_BASE_URLEMAIL_ENABLEDtrueSMTP_HOST/SMTP_PORT587SMTP_USER/SMTP_PASSWORDSMTP_FROM_EMAIL/SMTP_FROM_NAMEGenAssistSMTP_USE_TLS/SMTP_TIMEOUTtrue/15FILES_DIRECT_S3_UPLOAD_ENABLEDfalseFILE_MANAGER_PROVIDER=s3)FILES_DIRECT_S3_PRESIGN_EXPIRES_SECONDS600MAX_CONTENT_LENGTH200MBKNOWLEDGE_MAX_UPLOAD_BYTES/KNOWLEDGE_UPLOAD_MAX_CHUNK_BYTES200MB/20MBFILES_MAX_UPLOAD_BYTES/FILES_UPLOAD_MAX_CHUNK_BYTES100MB/20MBLOCAL_FINE_TUNE_API_URLLOCAL_FINE_TUNE_JWT_SECRETchange-meLOCAL_FINE_TUNING_CALL_ORIGINdevoriginclaim sent to the fine-tune serviceGDPR_DEFAULT_DELETE_MODEsoftCELERY_INCLUDE_ML_TASKStrueCELERY_WORKER_CONCURRENCYCELERY_ENABLE_CHECK_SCHEDULED_WORKFLOW_RUNS_TASKtrueCELERY_ENABLE_RECONCILE_STUCK_WORKFLOW_RUNS_TASKtrueCELERY_ENABLE_CLEANUP_STALE_DIRECT_UPLOADS_TASKtrueWORKFLOW_SCHEDULE_PENDING_MAX_AGE_SECONDS900WORKFLOW_SCHEDULE_RUNNING_MAX_AGE_SECONDS7800Frontend (
frontend/.env.template)VITE_FILES_UPLOAD_SESSION_THRESHOLD_BYTESVITE_SSO_MICROSOFT_ENABLEDVITE_LOCAL_FINE_TUNE_API_URLLOCAL_FINE_TUNE_API_URL)Infrastructure Changes
Celery worker topology (queue split)
The single Celery worker was split into two queues to make background processing both safe and scalable:
defaultqueue — I/O-bound tasks on the prefork pool (real concurrency). Safe becauseCELERY_INCLUDE_ML_TASKS=falsekeeps ML libraries (torch / sklearn / faiss) out of the master process, avoiding the OpenMP/MKL forked-mutexSIGSEGV.mlqueue — ML pipeline / evaluation / local fine-tuning tasks on the solo pool (fork-unsafe libraries never fork); scale by adding replicas/pods.task_routes;docker-compose.dev.ymlruns splitcelery_worker_default(prefork,-Q default) andcelery_worker_ml(solo,-Q ml) services. CI/CD and the owned build compose run a single solo worker consuming-Q default,ml.Kubernetes
backend/deploy/k8s/celery-workers.yaml— separate default (prefork) and ML (solo) worker Deployments for EKS.Containers & health
image: genassist-ws-imageindocker-compose.yml/docker-compose.dev.yml.start_period40s → 180s,retries3 → 5 (accommodates longer startup, e.g. migrations).Full Changelog: v1.7.1...v1.8.0
This discussion was created from the release v1.8.0.
Beta Was this translation helpful? Give feedback.
All reactions