├── src
└── parlant
│ ├── py.typed
│ ├── api
│ ├── chat
│ │ ├── src
│ │ │ ├── components
│ │ │ │ ├── session-view
│ │ │ │ │ ├── session-view.module.scss
│ │ │ │ │ └── date-header
│ │ │ │ │ │ └── date-header.tsx
│ │ │ │ ├── agents-list
│ │ │ │ │ └── agent-list.module.scss
│ │ │ │ ├── ui
│ │ │ │ │ ├── custom
│ │ │ │ │ │ ├── spacer.tsx
│ │ │ │ │ │ ├── tooltip.tsx
│ │ │ │ │ │ └── copy-text.tsx
│ │ │ │ │ ├── skeleton.tsx
│ │ │ │ │ ├── input.tsx
│ │ │ │ │ ├── textarea.tsx
│ │ │ │ │ ├── sonner.tsx
│ │ │ │ │ ├── checkbox.tsx
│ │ │ │ │ ├── switch.tsx
│ │ │ │ │ ├── tooltip.tsx
│ │ │ │ │ └── radio-group.tsx
│ │ │ │ ├── session-list
│ │ │ │ │ └── session-list-item
│ │ │ │ │ │ └── session-list-item.module.scss
│ │ │ │ ├── header-wrapper
│ │ │ │ │ └── header-wrapper.tsx
│ │ │ │ ├── gradient-button
│ │ │ │ │ ├── gradient-button.module.scss
│ │ │ │ │ └── gradient-button.tsx
│ │ │ │ ├── markdown
│ │ │ │ │ └── markdown.tsx
│ │ │ │ ├── message-details
│ │ │ │ │ ├── empty-state.tsx
│ │ │ │ │ ├── message-logs.tsx
│ │ │ │ │ └── indexeddb-data.tsx
│ │ │ │ ├── message
│ │ │ │ │ ├── message.module.scss
│ │ │ │ │ └── draft-bubble.tsx
│ │ │ │ ├── dark-mode-toggle
│ │ │ │ │ └── dark-mode-toggle.tsx
│ │ │ │ └── error-boundary
│ │ │ │ │ └── error-boundary.tsx
│ │ │ ├── vite-env.d.ts
│ │ │ ├── utils
│ │ │ │ ├── obj.tsx
│ │ │ │ ├── methods.tsx
│ │ │ │ ├── date.tsx
│ │ │ │ ├── api.ts
│ │ │ │ └── interfaces.tsx
│ │ │ ├── main.tsx
│ │ │ ├── App.tsx
│ │ │ ├── lib
│ │ │ │ └── broadcast-channel.ts
│ │ │ ├── hooks
│ │ │ │ └── useLocalStorage.ts
│ │ │ └── store.ts
│ │ ├── setupTests.ts
│ │ ├── .vite
│ │ │ └── deps_temp_0491001f
│ │ │ │ └── package.json
│ │ ├── tsconfig.node.tsbuildinfo
│ │ ├── dist
│ │ │ ├── mp4
│ │ │ │ └── loading.mp4
│ │ │ ├── fonts
│ │ │ │ ├── Inter
│ │ │ │ │ └── static
│ │ │ │ │ │ ├── Inter_28pt-Bold.ttf
│ │ │ │ │ │ ├── Inter_28pt-Light.ttf
│ │ │ │ │ │ ├── Inter_28pt-Thin.ttf
│ │ │ │ │ │ ├── Inter_28pt-Italic.ttf
│ │ │ │ │ │ ├── Inter_28pt-Medium.ttf
│ │ │ │ │ │ ├── Inter_28pt-Regular.ttf
│ │ │ │ │ │ ├── Inter_28pt-ExtraBold.ttf
│ │ │ │ │ │ ├── Inter_28pt-ExtraLight.ttf
│ │ │ │ │ │ └── Inter_28pt-SemiBold.ttf
│ │ │ │ ├── ubuntu-mono
│ │ │ │ │ └── static
│ │ │ │ │ │ ├── UbuntuMono-Bold.ttf
│ │ │ │ │ │ ├── UbuntuMono-Italic.ttf
│ │ │ │ │ │ ├── UbuntuMono-Regular.ttf
│ │ │ │ │ │ └── UbuntuMono-BoldItalic.ttf
│ │ │ │ ├── ubuntu-sans
│ │ │ │ │ ├── static
│ │ │ │ │ │ ├── UbuntuSans-Bold.ttf
│ │ │ │ │ │ ├── UbuntuSans-Thin.ttf
│ │ │ │ │ │ ├── UbuntuSans-Italic.ttf
│ │ │ │ │ │ ├── UbuntuSans-Light.ttf
│ │ │ │ │ │ ├── UbuntuSans-Medium.ttf
│ │ │ │ │ │ ├── UbuntuSans-ExtraBold.ttf
│ │ │ │ │ │ ├── UbuntuSans-Regular.ttf
│ │ │ │ │ │ ├── UbuntuSans-SemiBold.ttf
│ │ │ │ │ │ ├── UbuntuSans-BoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans-ExtraLight.ttf
│ │ │ │ │ │ ├── UbuntuSans-LightItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans-ThinItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans-MediumItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans-SemiBoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Bold.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Thin.ttf
│ │ │ │ │ │ ├── UbuntuSans-ExtraBoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans-ExtraLightItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Italic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Light.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Medium.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-ExtraBold.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Regular.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-SemiBold.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Bold.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Light.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Thin.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-BoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-ExtraLight.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-LightItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-ThinItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Italic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Medium.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Regular.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-MediumItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-SemiBoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-BoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-ExtraBold.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-ExtraLight.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-SemiBold.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-ThinItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-ExtraBoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-ExtraLightItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-LightItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-MediumItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-ExtraBoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-SemiBoldItalic.ttf
│ │ │ │ │ │ └── UbuntuSans_SemiCondensed-ExtraLightItalic.ttf
│ │ │ │ │ ├── UbuntuSans-VariableFont_wdth,wght.ttf
│ │ │ │ │ └── UbuntuSans-Italic-VariableFont_wdth,wght.ttf
│ │ │ │ └── ibm-plex-mono
│ │ │ │ │ └── static
│ │ │ │ │ ├── IBMPlexMono-Bold.ttf
│ │ │ │ │ ├── IBMPlexMono-Italic.ttf
│ │ │ │ │ ├── IBMPlexMono-Light.ttf
│ │ │ │ │ ├── IBMPlexMono-Medium.ttf
│ │ │ │ │ ├── IBMPlexMono-Thin.ttf
│ │ │ │ │ ├── IBMPlexMono-Regular.ttf
│ │ │ │ │ ├── IBMPlexMono-SemiBold.ttf
│ │ │ │ │ ├── IBMPlexMono-BoldItalic.ttf
│ │ │ │ │ ├── IBMPlexMono-ExtraLight.ttf
│ │ │ │ │ ├── IBMPlexMono-LightItalic.ttf
│ │ │ │ │ ├── IBMPlexMono-ThinItalic.ttf
│ │ │ │ │ ├── IBMPlexMono-MediumItalic.ttf
│ │ │ │ │ ├── IBMPlexMono-ExtraLightItalic.ttf
│ │ │ │ │ └── IBMPlexMono-SemiBoldItalic.ttf
│ │ │ ├── icons
│ │ │ │ ├── dot-saparetor.svg
│ │ │ │ ├── more.svg
│ │ │ │ ├── save.svg
│ │ │ │ ├── send.svg
│ │ │ │ ├── v.svg
│ │ │ │ ├── green-v.svg
│ │ │ │ ├── cancel.svg
│ │ │ │ ├── close-white.svg
│ │ │ │ ├── close.svg
│ │ │ │ ├── close-logs.svg
│ │ │ │ ├── search.svg
│ │ │ │ ├── close-logs-hover.svg
│ │ │ │ ├── arrow-down.svg
│ │ │ │ ├── export.svg
│ │ │ │ ├── funnel.svg
│ │ │ │ ├── add-filled.svg
│ │ │ │ ├── filters
│ │ │ │ │ ├── tool-caller.svg
│ │ │ │ │ ├── tool-caller-color.svg
│ │ │ │ │ ├── message-composer.svg
│ │ │ │ │ ├── message-composer-color.svg
│ │ │ │ │ ├── guideline-matcher.svg
│ │ │ │ │ └── guideline-matcher-color.svg
│ │ │ │ ├── add.svg
│ │ │ │ ├── error.svg
│ │ │ │ ├── filter.svg
│ │ │ │ ├── new-session.svg
│ │ │ │ ├── regenerate.svg
│ │ │ │ ├── resize.svg
│ │ │ │ ├── regenerate-arrow.svg
│ │ │ │ ├── text.svg
│ │ │ │ ├── edit-white.svg
│ │ │ │ ├── edit.svg
│ │ │ │ ├── edit-message.svg
│ │ │ │ ├── puzzle-hover.svg
│ │ │ │ ├── puzzle.svg
│ │ │ │ ├── delete.svg
│ │ │ │ ├── regenerate-filled.svg
│ │ │ │ ├── copy-session.svg
│ │ │ │ ├── copy.svg
│ │ │ │ ├── rename.svg
│ │ │ │ └── expand.svg
│ │ │ ├── assets
│ │ │ │ └── manifest-BRNJYplA.webmanifest
│ │ │ ├── index.html
│ │ │ ├── app-logo.svg
│ │ │ ├── logo-color.svg
│ │ │ ├── emcie-placeholder.svg
│ │ │ └── parlant-bubble-muted.svg
│ │ ├── postcss.config.js
│ │ ├── public
│ │ │ ├── mp4
│ │ │ │ └── loading.mp4
│ │ │ ├── fonts
│ │ │ │ ├── Inter
│ │ │ │ │ └── static
│ │ │ │ │ │ ├── Inter_28pt-Bold.ttf
│ │ │ │ │ │ ├── Inter_28pt-Light.ttf
│ │ │ │ │ │ ├── Inter_28pt-Thin.ttf
│ │ │ │ │ │ ├── Inter_28pt-Italic.ttf
│ │ │ │ │ │ ├── Inter_28pt-Medium.ttf
│ │ │ │ │ │ ├── Inter_28pt-Regular.ttf
│ │ │ │ │ │ ├── Inter_28pt-SemiBold.ttf
│ │ │ │ │ │ ├── Inter_28pt-ExtraBold.ttf
│ │ │ │ │ │ └── Inter_28pt-ExtraLight.ttf
│ │ │ │ ├── ubuntu-mono
│ │ │ │ │ └── static
│ │ │ │ │ │ ├── UbuntuMono-Bold.ttf
│ │ │ │ │ │ ├── UbuntuMono-Italic.ttf
│ │ │ │ │ │ ├── UbuntuMono-Regular.ttf
│ │ │ │ │ │ └── UbuntuMono-BoldItalic.ttf
│ │ │ │ ├── ubuntu-sans
│ │ │ │ │ ├── static
│ │ │ │ │ │ ├── UbuntuSans-Bold.ttf
│ │ │ │ │ │ ├── UbuntuSans-Thin.ttf
│ │ │ │ │ │ ├── UbuntuSans-Italic.ttf
│ │ │ │ │ │ ├── UbuntuSans-Light.ttf
│ │ │ │ │ │ ├── UbuntuSans-Medium.ttf
│ │ │ │ │ │ ├── UbuntuSans-Regular.ttf
│ │ │ │ │ │ ├── UbuntuSans-ExtraBold.ttf
│ │ │ │ │ │ ├── UbuntuSans-SemiBold.ttf
│ │ │ │ │ │ ├── UbuntuSans-BoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans-ExtraLight.ttf
│ │ │ │ │ │ ├── UbuntuSans-LightItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans-MediumItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans-ThinItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans-SemiBoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Bold.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Thin.ttf
│ │ │ │ │ │ ├── UbuntuSans-ExtraBoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans-ExtraLightItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Italic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Light.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Medium.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-Regular.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-ExtraBold.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-SemiBold.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Bold.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Light.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Thin.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-BoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-ExtraLight.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-LightItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-MediumItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-ThinItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Italic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Medium.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-Regular.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-SemiBold.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-SemiBoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-BoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-ExtraBold.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-ExtraLight.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-ThinItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-ExtraBoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_Condensed-ExtraLightItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-LightItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-MediumItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-ExtraBoldItalic.ttf
│ │ │ │ │ │ ├── UbuntuSans_SemiCondensed-SemiBoldItalic.ttf
│ │ │ │ │ │ └── UbuntuSans_SemiCondensed-ExtraLightItalic.ttf
│ │ │ │ │ ├── UbuntuSans-VariableFont_wdth,wght.ttf
│ │ │ │ │ └── UbuntuSans-Italic-VariableFont_wdth,wght.ttf
│ │ │ │ └── ibm-plex-mono
│ │ │ │ │ └── static
│ │ │ │ │ ├── IBMPlexMono-Bold.ttf
│ │ │ │ │ ├── IBMPlexMono-Thin.ttf
│ │ │ │ │ ├── IBMPlexMono-Italic.ttf
│ │ │ │ │ ├── IBMPlexMono-Light.ttf
│ │ │ │ │ ├── IBMPlexMono-Medium.ttf
│ │ │ │ │ ├── IBMPlexMono-Regular.ttf
│ │ │ │ │ ├── IBMPlexMono-SemiBold.ttf
│ │ │ │ │ ├── IBMPlexMono-BoldItalic.ttf
│ │ │ │ │ ├── IBMPlexMono-ExtraLight.ttf
│ │ │ │ │ ├── IBMPlexMono-LightItalic.ttf
│ │ │ │ │ ├── IBMPlexMono-ThinItalic.ttf
│ │ │ │ │ ├── IBMPlexMono-MediumItalic.ttf
│ │ │ │ │ ├── IBMPlexMono-SemiBoldItalic.ttf
│ │ │ │ │ └── IBMPlexMono-ExtraLightItalic.ttf
│ │ │ ├── icons
│ │ │ │ ├── dot-saparetor.svg
│ │ │ │ ├── more.svg
│ │ │ │ ├── send.svg
│ │ │ │ ├── v.svg
│ │ │ │ ├── green-v.svg
│ │ │ │ ├── save.svg
│ │ │ │ ├── cancel.svg
│ │ │ │ ├── close-logs.svg
│ │ │ │ ├── close-white.svg
│ │ │ │ ├── close.svg
│ │ │ │ ├── search.svg
│ │ │ │ ├── close-logs-hover.svg
│ │ │ │ ├── arrow-down.svg
│ │ │ │ ├── export.svg
│ │ │ │ ├── funnel.svg
│ │ │ │ ├── add-filled.svg
│ │ │ │ ├── filters
│ │ │ │ │ ├── tool-caller.svg
│ │ │ │ │ ├── tool-caller-color.svg
│ │ │ │ │ ├── message-composer.svg
│ │ │ │ │ ├── message-composer-color.svg
│ │ │ │ │ ├── guideline-matcher.svg
│ │ │ │ │ └── guideline-matcher-color.svg
│ │ │ │ ├── add.svg
│ │ │ │ ├── error.svg
│ │ │ │ ├── filter.svg
│ │ │ │ ├── new-session.svg
│ │ │ │ ├── regenerate.svg
│ │ │ │ ├── regenerate-arrow.svg
│ │ │ │ ├── resize.svg
│ │ │ │ ├── text.svg
│ │ │ │ ├── edit-white.svg
│ │ │ │ ├── edit.svg
│ │ │ │ ├── edit-message.svg
│ │ │ │ ├── puzzle-hover.svg
│ │ │ │ ├── puzzle.svg
│ │ │ │ ├── delete.svg
│ │ │ │ ├── regenerate-filled.svg
│ │ │ │ ├── copy-session.svg
│ │ │ │ ├── copy.svg
│ │ │ │ ├── rename.svg
│ │ │ │ └── expand.svg
│ │ │ ├── logo-color.svg
│ │ │ ├── app-logo.svg
│ │ │ ├── emcie-placeholder.svg
│ │ │ └── parlant-bubble-muted.svg
│ │ ├── .prettierrc
│ │ ├── tsconfig.json
│ │ ├── .gitignore
│ │ ├── manifest.webmanifest
│ │ ├── components.json
│ │ ├── tsconfig.node.json
│ │ ├── vite.config.ts
│ │ ├── tsconfig.app.json
│ │ ├── eslint.config.js
│ │ └── index.html
│ ├── package-lock.json
│ └── logs.py
│ └── core
│ ├── version.py
│ ├── app_modules
│ ├── common.py
│ ├── tags.py
│ └── services.py
│ ├── nlp
│ ├── generation_info.py
│ └── tokenization.py
│ └── engines
│ └── alpha
│ ├── guideline_matching
│ ├── guideline_matching_context.py
│ └── guideline_match.py
│ └── utils.py
├── tests
├── core
│ ├── .gitkeep
│ ├── unstable
│ │ └── engines
│ │ │ └── alpha
│ │ │ ├── features
│ │ │ └── baseline
│ │ │ │ └── glossary.feature
│ │ │ ├── test_user_story_scenarios.py
│ │ │ └── test_baseline_scenarios.py
│ ├── stable
│ │ └── engines
│ │ │ └── alpha
│ │ │ ├── features
│ │ │ └── baseline
│ │ │ │ ├── errors.feature
│ │ │ │ ├── relationships.feature
│ │ │ │ ├── moderation.feature
│ │ │ │ ├── proactivity.feature
│ │ │ │ └── triggered_utterances.feature
│ │ │ └── test_user_story_scenarios.py
│ ├── common
│ │ └── engines
│ │ │ └── alpha
│ │ │ └── steps
│ │ │ └── tags.py
│ └── test_id_generator.py
├── sdk
│ └── conftest.py
├── __init__.py
├── api
│ ├── test_app.py
│ └── conftest.py
└── e2e
│ └── conftest.py
├── docs
├── demo.gif
├── LogoTransparentDark.png
├── LogoTransparentLight.png
└── advanced
│ └── contributing.md
├── scripts
├── fern
│ ├── fern.config.json
│ ├── docs.yml
│ └── generators.yml
├── initialize_repo.py
├── install_packages.py
└── ci
│ └── github_action_ubuntu_2404_free_space.sh
├── .github
├── dco.yml
├── ISSUE_TEMPLATE
│ ├── feature-request.md
│ └── bug-report.md
└── workflows
│ └── lint.yml
├── .githooks
├── pre-commit
├── pre-push
└── prepare-commit-msg
├── pytest.ini
├── mypy.ini
├── .gitignore
├── CONTRIBUTING.md
├── .devcontainer
└── Dockerfile
└── DCO.md
/src/parlant/py.typed:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tests/core/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/session-view/session-view.module.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/setupTests.ts:
--------------------------------------------------------------------------------
1 | import '@testing-library/jest-dom/vitest';
--------------------------------------------------------------------------------
/docs/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/docs/demo.gif
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/.vite/deps_temp_0491001f/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "module"
3 | }
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/tsconfig.node.tsbuildinfo:
--------------------------------------------------------------------------------
1 | {"root":["./vite.config.ts"],"version":"5.8.3"}
--------------------------------------------------------------------------------
/scripts/fern/fern.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "organization": "parlant",
3 | "version": "0.61.22"
4 | }
--------------------------------------------------------------------------------
/.github/dco.yml:
--------------------------------------------------------------------------------
1 | allowRemediationCommits:
2 | individual: true
3 | require:
4 | members: false
5 |
--------------------------------------------------------------------------------
/docs/LogoTransparentDark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/docs/LogoTransparentDark.png
--------------------------------------------------------------------------------
/docs/LogoTransparentLight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/docs/LogoTransparentLight.png
--------------------------------------------------------------------------------
/.githooks/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ROOT=$(git rev-parse --show-toplevel)
4 | cd $ROOT
5 | python scripts/lint.py --ruff
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/mp4/loading.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/mp4/loading.mp4
--------------------------------------------------------------------------------
/.githooks/pre-push:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ROOT=$(git rev-parse --show-toplevel)
4 | cd $ROOT
5 | python scripts/lint.py --mypy --ruff
6 |
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/mp4/loading.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/mp4/loading.mp4
--------------------------------------------------------------------------------
/src/parlant/api/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "api",
3 | "lockfileVersion": 3,
4 | "requires": true,
5 | "packages": {}
6 | }
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/agents-list/agent-list.module.scss:
--------------------------------------------------------------------------------
1 | .select {
2 | padding: 0 !important;
3 | button {
4 | display: none;
5 | }
6 | }
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Light.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Thin.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Medium.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Light.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Thin.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-ExtraBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/Inter/static/Inter_28pt-SemiBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-mono/static/UbuntuMono-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-mono/static/UbuntuMono-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Thin.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Medium.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-SemiBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-mono/static/UbuntuMono-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-mono/static/UbuntuMono-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Light.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Medium.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-ExtraBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/Inter/static/Inter_28pt-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-mono/static/UbuntuMono-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-mono/static/UbuntuMono-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Thin.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Light.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Medium.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Thin.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-mono/static/UbuntuMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-mono/static/UbuntuMono-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-ExtraBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-SemiBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Thin.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-mono/static/UbuntuMono-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-mono/static/UbuntuMono-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-mono/static/UbuntuMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-mono/static/UbuntuMono-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Light.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Medium.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-SemiBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-mono/static/UbuntuMono-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-mono/static/UbuntuMono-BoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-BoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-LightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-ThinItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Light.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Medium.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-ExtraBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-SemiBold.ttf
--------------------------------------------------------------------------------
/tests/core/unstable/engines/alpha/features/baseline/glossary.feature:
--------------------------------------------------------------------------------
1 | Feature: Glossary
2 | Background:
3 | Given the alpha engine
4 | And an agent
5 | And an empty session
6 |
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-BoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-LightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-ThinItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-MediumItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Thin.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/dot-saparetor.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-SemiBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-mono/static/UbuntuMono-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-mono/static/UbuntuMono-BoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-BoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-LightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-MediumItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-ThinItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/dot-saparetor.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-MediumItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/UbuntuSans-VariableFont_wdth,wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/UbuntuSans-VariableFont_wdth,wght.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Light.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Medium.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-BoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-LightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-ThinItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Thin.ttf
--------------------------------------------------------------------------------
/scripts/fern/docs.yml:
--------------------------------------------------------------------------------
1 | instances:
2 | - url: https://docs.parlant.io
3 | title: Parlant | Documentation
4 | navigation:
5 | - api: API Reference
6 | colors:
7 | accentPrimary: '#ffffff'
8 | background: '#000000'
9 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ibm-plex-mono/static/IBMPlexMono-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-SemiBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Light.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Thin.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-MediumItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/UbuntuSans-VariableFont_wdth,wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/UbuntuSans-VariableFont_wdth,wght.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Light.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Medium.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-BoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-LightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ThinItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Medium.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ibm-plex-mono/static/IBMPlexMono-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-SemiBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Bold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Light.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Thin.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/UbuntuSans-Italic-VariableFont_wdth,wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/UbuntuSans-Italic-VariableFont_wdth,wght.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-MediumItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-BoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-SemiBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ThinItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/UbuntuSans-Italic-VariableFont_wdth,wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/UbuntuSans-Italic-VariableFont_wdth,wght.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-BoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-LightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-MediumItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ThinItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Italic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Medium.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-Regular.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-SemiBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-LightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-MediumItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-BoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraBold.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ThinItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_Condensed-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-LightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-MediumItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/dist/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itning/parlant/develop/src/parlant/api/chat/public/fonts/ubuntu-sans/static/UbuntuSans_SemiCondensed-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/ui/custom/spacer.tsx:
--------------------------------------------------------------------------------
1 | import {memo, ReactElement} from 'react';
2 |
3 | const Spacer = (): ReactElement => {
4 | return
;
5 | };
6 |
7 | export default memo(Spacer);
8 |
--------------------------------------------------------------------------------
/pytest.ini:
--------------------------------------------------------------------------------
1 | [pytest]
2 | asyncio_mode = auto
3 | bdd_features_base_dir = tests/
4 | filterwarnings =
5 | ignore::pytest.PytestDeprecationWarning:pytest_bdd.*
6 | ignore::pytest.PytestWarning:.*usefixtures.*has no effect
7 | addopts = "--import-mode=importlib"
--------------------------------------------------------------------------------
/mypy.ini:
--------------------------------------------------------------------------------
1 | [mypy]
2 | strict = True
3 | namespace_packages = True
4 | explicit_package_bases = True
5 | warn_unused_ignores = False
6 | mypy_path = src
7 | files = src, tests
8 | disable_error_code = type-abstract
9 | exclude = scripts
10 | plugins = pydantic.mypy
--------------------------------------------------------------------------------
/src/parlant/api/chat/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "tabWidth": 2,
4 | "semi": true,
5 | "bracketSameLine": true,
6 | "arrowParens": "always",
7 | "bracketSpacing": false,
8 | "jsxSingleQuote": true,
9 | "printWidth": 250,
10 | "useTabs": true
11 | }
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/more.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/save.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/send.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/v.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/more.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/send.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/v.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/green-v.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/green-v.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/save.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/cancel.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/close-white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/close.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/cancel.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/close-logs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/close-logs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/close-white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/close.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/search.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/search.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [{"path": "./tsconfig.app.json"}, {"path": "./tsconfig.node.json"}],
4 | "compilerOptions": {
5 | "noUnusedLocals": false,
6 | "noUnusedParameters": false,
7 | "lib": ["DOM", "ESNext", "ES2023"],
8 | "baseUrl": ".",
9 | "paths": {
10 | "@/*": ["./src/*"]
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/close-logs-hover.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/close-logs-hover.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/ui/skeleton.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from '@/lib/utils';
2 |
3 | function Skeleton({
4 | className,
5 | ...props
6 | }: React.HTMLAttributes) {
7 | return (
8 |
12 | );
13 | }
14 |
15 | export { Skeleton };
16 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist-ssr
12 | *.local
13 |
14 | # Editor directories and files
15 | .vscode/*
16 | !.vscode/extensions.json
17 | .idea
18 | .DS_Store
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/arrow-down.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/arrow-down.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/tests/core/stable/engines/alpha/features/baseline/errors.feature:
--------------------------------------------------------------------------------
1 | Scenario: Failure to process a message emits an error status
2 | Given the alpha engine
3 | And a session with a single customer message
4 | And a faulty message production mechanism
5 | When processing is triggered
6 | Then a status event is emitted, encountering an error while processing event
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/manifest.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Parlant",
3 | "short_name": "Parlant",
4 | "description": "Chatbot by Parlant",
5 | "start_url": "/",
6 | "display": "standalone",
7 | "background_color": "#ffffff",
8 | "theme_color": "#006e54",
9 | "icons": [
10 | {
11 | "src": "/chat/logo-color.svg",
12 | "sizes": "any",
13 | "type": "image/svg+xml"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/assets/manifest-BRNJYplA.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Parlant",
3 | "short_name": "Parlant",
4 | "description": "Chatbot by Parlant",
5 | "start_url": "/",
6 | "display": "standalone",
7 | "background_color": "#ffffff",
8 | "theme_color": "#006e54",
9 | "icons": [
10 | {
11 | "src": "/chat/logo-color.svg",
12 | "sizes": "any",
13 | "type": "image/svg+xml"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/export.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/funnel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/export.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/funnel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/utils/obj.tsx:
--------------------------------------------------------------------------------
1 | export function groupBy(array: T[], keyFn: (item: T) => string | number): Record {
2 | return array.reduce((result: Record, item: T) => {
3 | let key = keyFn(item);
4 | if (!key) key = key?.toString();
5 | if (!result[key]) {
6 | result[key] = [];
7 | }
8 | result[key].push(item);
9 | return result;
10 | }, {});
11 | }
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/add-filled.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/add-filled.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .env
2 | .pytest_cache
3 | .mypy_cache
4 | .ruff_cache
5 | __pycache__
6 | .justfile
7 | testresults**
8 | tests/core/persistence/test_cache/*.json
9 | data/*.json
10 | cache/
11 | .coverage
12 | .DS_STORE
13 | *~
14 | .vscode
15 | .venv
16 | .cursor
17 | logs
18 | runtime-data
19 | parlant-data
20 | /dist/
21 | scripts/sdks/
22 | scripts/fern/openapi
23 | fern.generate.log
24 | schematic_generation_test_cache.json
25 | test_timing.csv
26 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/filters/tool-caller.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/filters/tool-caller.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/session-list/session-list-item/session-list-item.module.scss:
--------------------------------------------------------------------------------
1 | .editSession {
2 | position: relative;
3 | &::before {
4 | content: '';
5 | position: absolute;
6 | top: 50%;
7 | left: 50%;
8 | border: 1px solid black;
9 | pointer-events: none;
10 | box-sizing: border-box;
11 | height: calc(100% - 4px);
12 | width: calc(100% - 8px);
13 | transform: translate(-50%, -50%);
14 | border-radius: 6px;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/utils/methods.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export const spaceClick = (e: React.KeyboardEvent): void => {
4 | if (e.key === 'Enter' || e.key === ' ') (e.target as HTMLElement).click();
5 | };
6 |
7 | export function getDistanceToRight(element: HTMLElement): number {
8 | const rect = element.getBoundingClientRect();
9 | const distanceToRight = window.innerWidth - rect.right;
10 | return distanceToRight;
11 | }
12 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/filters/tool-caller-color.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/filters/tool-caller-color.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/add.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/error.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/add.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/error.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/filter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/filter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "default",
4 | "rsc": false,
5 | "tsx": true,
6 | "tailwind": {
7 | "config": "tailwind.config.js",
8 | "css": "src/index.css",
9 | "baseColor": "neutral",
10 | "cssVariables": true,
11 | "prefix": ""
12 | },
13 | "aliases": {
14 | "components": "@/components",
15 | "utils": "@/lib/utils",
16 | "ui": "@/components/ui",
17 | "lib": "@/lib",
18 | "hooks": "@/hooks"
19 | }
20 | }
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/main.tsx:
--------------------------------------------------------------------------------
1 | import {StrictMode} from 'react';
2 | import {createRoot} from 'react-dom/client';
3 | import App from './App.tsx';
4 | import './index.css';
5 | import {Toaster} from './components/ui/sonner.tsx';
6 |
7 | createRoot(document.getElementById('root')!).render(
8 |
9 |
10 |
11 |
12 | );
13 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature-request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature Request
3 | about: Suggest an idea for this project
4 | title: "[Enhancement] "
5 | labels: enhancement
6 | assignees: ''
7 |
8 | ---
9 |
10 | # Motivation
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | # Solution Proposal
14 | A clear and concise description of what you want to happen.
15 |
16 | # Discussion
17 | Add any other context or open questions about the feature request here.
18 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/filters/message-composer.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/filters/message-composer.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/filters/message-composer-color.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/filters/message-composer-color.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/header-wrapper/header-wrapper.tsx:
--------------------------------------------------------------------------------
1 | import {ReactNode} from 'react';
2 | import {twMerge} from 'tailwind-merge';
3 |
4 | const HeaderWrapper = ({children, className}: {children?: ReactNode; className?: string}) => {
5 | return
6 |
7 | {children}
8 |
9 |
;
10 | };
11 |
12 | export default HeaderWrapper;
13 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/new-session.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/new-session.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/App.tsx:
--------------------------------------------------------------------------------
1 | import './App.css';
2 | import Chatbot from './components/chatbot/chatbot';
3 | import {useWebSocket} from './hooks/useWebSocket';
4 | import {BASE_URL} from './utils/api';
5 | import {handleChatLogs} from './utils/logs';
6 |
7 | const WebSocketComp = () => {
8 | const socket = useWebSocket(`${BASE_URL}/logs`, true, null, handleChatLogs);
9 | void socket;
10 | return
;
11 | };
12 |
13 | function App() {
14 | return (
15 |
16 |
17 |
18 |
19 | );
20 | }
21 |
22 | export default App;
23 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "lib": ["ES2023"],
5 | "module": "ESNext",
6 | "skipLibCheck": true,
7 |
8 | /* Bundler mode */
9 | "moduleResolution": "bundler",
10 | "allowImportingTsExtensions": true,
11 | "isolatedModules": true,
12 | "moduleDetection": "force",
13 | "noEmit": true,
14 |
15 | /* Linting */
16 | "strict": true,
17 | "noUnusedLocals": true,
18 | "noUnusedParameters": true,
19 | "noFallthroughCasesInSwitch": true
20 | },
21 | "include": ["vite.config.ts"]
22 | }
23 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/gradient-button/gradient-button.module.scss:
--------------------------------------------------------------------------------
1 | .colorsButton {
2 | .children {
3 | color: white;
4 | border-radius: 6px;
5 | border: none;
6 | }
7 | &:hover, &:focus {
8 | background: linear-gradient(89.94deg, #FFB800, #B4E64A, #87DAC6, #FF68C3, #005CE7);
9 | background-size: 200% 200%;
10 | div {
11 | background: linear-gradient(89.94deg, #FFB800, #B4E64A, #87DAC6, #FF68C3, #005CE7);
12 | }
13 | .children {
14 | color: black !important;
15 | background-color: #ffffffc8 !important;
16 | }
17 | }
18 | }
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/regenerate.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/resize.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/regenerate.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vitest/config';
2 | import react from '@vitejs/plugin-react';
3 | import path from 'path';
4 |
5 | // https://vitejs.dev/config/
6 | export default defineConfig({
7 | base: '/chat/',
8 | test: {
9 | globals: true,
10 | environment: 'jsdom',
11 | includeSource: ['app/**/*.{jsx,tsx}'],
12 | setupFiles: ['./setupTests.ts']
13 | },
14 | plugins: [react()],
15 | resolve: {
16 | alias: {
17 | '@': path.resolve(__dirname, './src'),
18 | },
19 | },
20 | server: {
21 | port: 8002,
22 | host: '127.0.0.1'
23 | }
24 | });
25 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/regenerate-arrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/regenerate-arrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/resize.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/scripts/fern/generators.yml:
--------------------------------------------------------------------------------
1 | api:
2 | specs:
3 | - openapi: openapi/parlant.openapi.json
4 | default-group: local
5 | groups:
6 | local:
7 | generators:
8 | - name: fernapi/fern-typescript-node-sdk
9 | version: 0.49.2
10 | config:
11 | namespaceExport: Parlant
12 | output:
13 | location: local-file-system
14 | path: ../sdks/typescript
15 | - name: fernapi/fern-python-sdk
16 | version: 4.3.3
17 | config:
18 | client_class_name: ParlantClient
19 | output:
20 | location: local-file-system
21 | path: ../sdks/python
22 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/text.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/text.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/tests/sdk/conftest.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/utils/date.tsx:
--------------------------------------------------------------------------------
1 | export const getDateStr = (date: Date | string): string => {
2 | date = new Date(date);
3 | const options: Intl.DateTimeFormatOptions = {
4 | year: 'numeric',
5 | month: 'long',
6 | day: 'numeric'
7 | };
8 |
9 | return date.toLocaleDateString('en-US', options);
10 | };
11 |
12 | export const getTimeStr = (date: Date |string): string => {
13 | date = new Date(date);
14 | const options: Intl.DateTimeFormatOptions = {
15 | hour: '2-digit',
16 | minute: '2-digit',
17 | hour12: false,
18 | };
19 |
20 | return date.toLocaleTimeString('en-US', options);
21 | };
--------------------------------------------------------------------------------
/src/parlant/core/version.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | VERSION = "3.1.0-alpha.1"
16 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/edit-white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/edit-white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/tests/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from dotenv import load_dotenv
16 |
17 | load_dotenv()
18 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/edit.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/edit.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "useDefineForClassFields": true,
5 | "lib": ["ES2023", "DOM", "DOM.Iterable"],
6 | "module": "ESNext",
7 | "skipLibCheck": true,
8 |
9 | /* Bundler mode */
10 | "moduleResolution": "bundler",
11 | "allowImportingTsExtensions": true,
12 | "isolatedModules": true,
13 | "moduleDetection": "force",
14 | "noEmit": true,
15 | "jsx": "react-jsx",
16 |
17 | /* Linting */
18 | "strict": true,
19 | "noUnusedLocals": true,
20 | "noUnusedParameters": true,
21 | "noFallthroughCasesInSwitch": true,
22 | "baseUrl": ".",
23 | "paths": {
24 | "@/*": ["./src/*"]
25 | }
26 | },
27 | "include": ["src"]
28 | }
29 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/edit-message.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/tests/core/stable/engines/alpha/features/baseline/relationships.feature:
--------------------------------------------------------------------------------
1 | Feature: Relationship
2 | Scenario: The agent follows a guideline that is entailed by another guideline
3 | Given the alpha engine
4 | And an agent whose job is to sell pizza
5 | And an empty session
6 | And a customer message, "Hi"
7 | And a guideline "howdy" to greet the customer with "Howdy" when the customer says hello
8 | And a guideline "good_sir" to add "good sir" when saying "Howdy"
9 | And a guideline relationship whereby "howdy" entails "good_sir"
10 | When processing is triggered
11 | Then a single message event is emitted
12 | And the message contains a greeting with "Howdy" and "good sir"
13 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug-report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug Report
3 | about: Create a report to help us improve
4 | title: "[Bug] "
5 | labels: bug
6 | assignees: ''
7 |
8 | ---
9 |
10 | # Description
11 | A clear and concise description of what the bug is.
12 |
13 | # How to Reproduce
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | # Expected Behavior
21 | A clear and concise description of what you expected to happen.
22 |
23 | # Environment
24 | - OS: [e.g. iOS]
25 | - Python version [e.g. 3.12]
26 | - Parlant version [e.g. 1.5.1]
27 |
28 | # Discussion
29 | Add any other context or open questions about the problem here.
30 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/edit-message.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/puzzle-hover.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/puzzle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/puzzle-hover.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/puzzle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/core/app_modules/common.py:
--------------------------------------------------------------------------------
1 | import base64
2 | from parlant.core.persistence.common import Cursor, ObjectId
3 |
4 |
5 | def encode_cursor(cursor: Cursor) -> str:
6 | """Encode a cursor to a base64 string for API responses"""
7 | # Simple format: "creation_utc|id"
8 | cursor_str = f"{cursor.creation_utc}|{cursor.id}"
9 | return base64.b64encode(cursor_str.encode("utf-8")).decode()
10 |
11 |
12 | def decode_cursor(cursor_str: str) -> Cursor | None:
13 | """Decode a base64 cursor string from API requests. Returns None if invalid."""
14 | try:
15 | decoded_str = base64.b64decode(cursor_str.encode()).decode("utf-8")
16 | creation_utc, cursor_id = decoded_str.split("|", 1)
17 | return Cursor(creation_utc=creation_utc, id=ObjectId(cursor_id))
18 | except Exception:
19 | return None
20 |
--------------------------------------------------------------------------------
/.githooks/prepare-commit-msg:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # A git commit hook that will automatically append a DCO signoff to the bottom
4 | # of any commit message that does not have one. This append happens after the git
5 | # default message is generated, but before the user is dropped into the commit
6 | # message editor.
7 | ROOT=$(git rev-parse --show-toplevel)
8 | cd $ROOT
9 |
10 | COMMIT_MESSAGE_FILE="$1"
11 | AUTHOR=$(git var GIT_AUTHOR_IDENT)
12 | SIGNOFF=$(echo "$AUTHOR" | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
13 |
14 | # Check for DCO signoff message. If one does not exist, append one and then warn
15 | # the user that you did so.
16 | if ! grep -qs "^$SIGNOFF" "$COMMIT_MESSAGE_FILE"; then
17 | echo -e "\n$SIGNOFF" >> "$COMMIT_MESSAGE_FILE"
18 | echo -e "Appended the following signoff to the end of the commit message:\n $SIGNOFF\n"
19 | fi
--------------------------------------------------------------------------------
/tests/core/stable/engines/alpha/features/baseline/moderation.feature:
--------------------------------------------------------------------------------
1 | Feature: Moderation
2 | Background:
3 | Given the alpha engine
4 |
5 | Scenario: The agent responds to a censored harassment message
6 | Given an agent
7 | And a guideline to recommend Pepsi when the customer says they are thirsty
8 | And a guideline to recommend Coke when the customer's last message is censored
9 | And a guideline to explain the exact reason for censuring the customer's message when the customer's last message is censored
10 | And an empty session
11 | And a customer message, "I'm thirsty", flagged for harassment
12 | When processing is triggered
13 | Then a single message event is emitted
14 | And the message mentions harassment
15 | And the message contains an offering of a Coke
16 |
--------------------------------------------------------------------------------
/docs/advanced/contributing.md:
--------------------------------------------------------------------------------
1 | # Contributing to Parlant
2 |
3 | We use the Linux-standard Developer Certificate of Origin ([DCO.md](https://github.com/emcie-co/parlant/blob/develop/DCO.md)), so that, by contributing, you confirm that you have the rights to submit your contribution under the Apache 2.0 license (i.e., the code you're contributing is truly yours to share with the project).
4 |
5 | Please consult [CONTRIBUTING.md](https://github.com/emcie-co/parlant/blob/develop/CONTRIBUTING.md) for more details.
6 |
7 | Want to start getting involved right now? Join us on [Discord](https://discord.gg/duxWqxKk6J) and let's discuss how you can help shape Parlant. We're excited to work with contributors directly while we set up our formal processes.
8 |
9 | Otherwise, feel free to start a discussion or open an issue on [GitHub](https://github.com/emcie-co/parlant).
10 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/eslint.config.js:
--------------------------------------------------------------------------------
1 | import js from '@eslint/js';
2 | import globals from 'globals';
3 | import reactHooks from 'eslint-plugin-react-hooks';
4 | import reactRefresh from 'eslint-plugin-react-refresh';
5 | import tseslint from 'typescript-eslint';
6 |
7 | export default tseslint.config(
8 | {ignores: ['dist']},
9 | {
10 | extends: [js.configs.recommended, ...tseslint.configs.recommended],
11 | files: ['**/*.{ts,tsx}'],
12 | languageOptions: {
13 | ecmaVersion: 2020,
14 | globals: globals.browser,
15 | },
16 | plugins: {
17 | 'react-hooks': reactHooks,
18 | 'react-refresh': reactRefresh,
19 | },
20 | rules: {
21 | ...reactHooks.configs.recommended.rules,
22 | quotes: ['warn', 'single'],
23 | semi: ['warn', 'always'],
24 | 'react-refresh/only-export-components': ['warn', {allowConstantExport: true}],
25 | },
26 | }
27 | );
28 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | Parlant
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/tests/core/stable/engines/alpha/features/baseline/proactivity.feature:
--------------------------------------------------------------------------------
1 | Feature: Proactivity
2 | Background:
3 | Given the alpha engine
4 | And an agent
5 | And an empty session
6 |
7 | Scenario: The agent does not start a conversation if no proactive guidelines exist
8 | Given a context variable "account_balance" set to "-$207.05"
9 | When processing is triggered
10 | Then a typing status event is not emitted
11 | And no message events are emitted
12 |
13 |
14 | Scenario: The agent starts a conversation based on context values
15 | Given a context variable "account_balance" set to "-$207.05"
16 | And a guideline to offer the customer a loan when the customer's account is overdrawn
17 | When processing is triggered
18 | Then a single message event is emitted
19 | And the message contains an offering of a loan
20 |
--------------------------------------------------------------------------------
/tests/api/test_app.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from fastapi import status
16 | import httpx
17 |
18 |
19 | async def test_health_check_endpoint(async_client: httpx.AsyncClient) -> None:
20 | response = await async_client.get("/healthz")
21 |
22 | assert response.status_code == status.HTTP_200_OK
23 | assert response.json() == {"status": "ok"}
24 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # DCO Sign Off
2 |
3 | All commits must be signed off with the Developer Certificate of Origin ([DCO.md](DCO.md)).
4 | This attests that you have the rights to submit your contribution under our project's license (Apache 2.0).
5 |
6 | To sign off your commits:
7 |
8 | 1. Configure your Git client with your github account details:
9 | ```
10 | git config --global user.name "Your Name"
11 | git config --global user.email "your.email@example.com"
12 | ```
13 | 2. If you've configured git to use our hooks (`.githooks`), you are now ready. Otherwise, either:
14 | 1. use our `.githooks`:
15 | ```
16 | git config set core.hookspath .githooks
17 | ```
18 | **OR**
19 | 2. Add the `-s` flag when committing:
20 | ```
21 | git commit -s -m "Your commit message"
22 | ```
23 | ### Or
24 |
25 | * Add the sign-off manually with:
26 | ```
27 | Signed-off-by: Your Name
28 | ```
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/ui/input.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 |
3 | import {cn} from '@/lib/utils';
4 |
5 | // eslint-disable-next-line @typescript-eslint/no-empty-object-type
6 | export interface InputProps extends React.InputHTMLAttributes {}
7 |
8 | const Input = React.forwardRef(({className, type, ...props}, ref) => {
9 | return (
10 |
19 | );
20 | });
21 | Input.displayName = 'Input';
22 |
23 | export {Input};
24 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/ui/textarea.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 |
3 | import { cn } from '@/lib/utils';
4 |
5 | // eslint-disable-next-line @typescript-eslint/no-empty-object-type
6 | export interface TextareaProps
7 | extends React.TextareaHTMLAttributes {}
8 |
9 | const Textarea = React.forwardRef(
10 | ({ className, ...props }, ref) => {
11 | return (
12 |
20 | );
21 | }
22 | );
23 | Textarea.displayName = 'Textarea';
24 |
25 | export { Textarea };
26 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/delete.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/regenerate-filled.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/delete.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/regenerate-filled.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | Parlant
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/ui/sonner.tsx:
--------------------------------------------------------------------------------
1 | import { useTheme } from 'next-themes';
2 | import { Toaster as Sonner } from 'sonner';
3 |
4 | type ToasterProps = React.ComponentProps
5 |
6 | const Toaster = ({ ...props }: ToasterProps) => {
7 | const { theme = 'system' } = useTheme();
8 |
9 | return (
10 |
26 | );
27 | };
28 |
29 | export { Toaster };
30 |
--------------------------------------------------------------------------------
/src/parlant/core/nlp/generation_info.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from dataclasses import dataclass
16 | from typing import Mapping, Optional
17 |
18 |
19 | @dataclass(frozen=True)
20 | class UsageInfo:
21 | input_tokens: int
22 | output_tokens: int
23 | extra: Optional[Mapping[str, int]] = None
24 |
25 |
26 | @dataclass(frozen=True)
27 | class GenerationInfo:
28 | schema_name: str
29 | model: str
30 | duration: float
31 | usage: UsageInfo
32 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/app-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/logo-color.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/logo-color.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/scripts/initialize_repo.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | import subprocess
16 | from pathlib import Path
17 |
18 | SCRIPTS_DIR = Path("./scripts")
19 |
20 |
21 | def install_packages() -> None:
22 | subprocess.run(["python", SCRIPTS_DIR / "install_packages.py"])
23 |
24 |
25 | def install_hooks() -> None:
26 | subprocess.run(["git", "config", "core.hooksPath", ".githooks"], check=True)
27 |
28 |
29 | if __name__ == "__main__":
30 | install_packages()
31 | install_hooks()
32 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/app-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/session-view/date-header/date-header.tsx:
--------------------------------------------------------------------------------
1 | import {getDateStr} from '@/utils/date';
2 | import {memo, ReactElement} from 'react';
3 | import {twMerge} from 'tailwind-merge';
4 |
5 | const DateHeader = ({date, isFirst, bgColor}: {date: string | Date; isFirst: boolean; bgColor?: string}): ReactElement => {
6 | return (
7 |
8 |
9 |
10 |
{getDateStr(date)}
11 |
12 |
13 |
14 | );
15 | };
16 |
17 | export default memo(DateHeader);
18 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/markdown/markdown.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable @typescript-eslint/no-unused-vars */
2 | import ReactMarkdown from 'react-markdown';
3 | import remarkGfm from 'remark-gfm';
4 | import rehypeHighlight from 'rehype-highlight';
5 | import rehypeRaw from 'rehype-raw';
6 | import 'highlight.js/styles/github.css';
7 | import styles from '../message/message.module.scss';
8 | import {twMerge} from 'tailwind-merge';
9 |
10 | function preserveBlankLines(md: string): string {
11 | return md?.replace?.(/\\n/g, '\n')?.replace(/\n(?!-)/g, ' ') || md;
12 | }
13 |
14 | const Markdown = ({children, className}: {children: string; className?: string}) => {
15 | return (
16 |
20 | }}
21 | rehypePlugins={[rehypeHighlight, rehypeRaw]}
22 | remarkPlugins={[remarkGfm]}
23 | className={twMerge('leading-[19px]', styles.markdown, className)}>
24 | {preserveBlankLines(children)}
25 |
26 | );
27 | };
28 |
29 | export default Markdown;
--------------------------------------------------------------------------------
/tests/core/stable/engines/alpha/features/baseline/triggered_utterances.feature:
--------------------------------------------------------------------------------
1 | Feature: Utterances
2 | Background:
3 | Given the alpha engine
4 | And an agent
5 | And an empty session
6 |
7 | Scenario: The agent utters a message aligned with an action to buy time
8 | Given an utterance request "inform the customer that more information is coming", to buy time
9 | And a customer message, "What's my account balance?"
10 | When uttering is triggered
11 | Then a single message event is emitted
12 | And the message mentions that more information is coming
13 |
14 | Scenario: The agent utters a message aligned with an action to follow up with the customer
15 | Given an utterance request "suggest proceeding to checkout", to follow up with the customer
16 | And an agent message, "Great! What's the pickup location?"
17 | And a customer message, "Main street 1234"
18 | When uttering is triggered
19 | Then a single message event is emitted
20 | And the message mentions proceeding to checkout
21 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/message-details/empty-state.tsx:
--------------------------------------------------------------------------------
1 | import {ClassNameValue, twMerge} from 'tailwind-merge';
2 |
3 | interface Props {
4 | title: string;
5 | subTitle?: string;
6 | className?: ClassNameValue;
7 | wrapperClassName?: ClassNameValue;
8 | imgClassName?: ClassNameValue;
9 | imgUrl?: string;
10 | }
11 |
12 | const EmptyState = ({title, subTitle, wrapperClassName, className, imgClassName, imgUrl}: Props) => {
13 | return (
14 |
15 |
16 |
17 |
{title}
18 | {subTitle &&
{subTitle}
}
19 |
20 |
21 | );
22 | };
23 |
24 | export default EmptyState;
25 |
--------------------------------------------------------------------------------
/src/parlant/core/app_modules/tags.py:
--------------------------------------------------------------------------------
1 | from typing import Sequence
2 |
3 | from parlant.core.loggers import Logger
4 | from parlant.core.tags import TagId, TagStore, Tag, TagUpdateParams
5 |
6 |
7 | class TagModule:
8 | def __init__(
9 | self,
10 | logger: Logger,
11 | tag_store: TagStore,
12 | ):
13 | self._logger = logger
14 | self._tag_store = tag_store
15 |
16 | async def create(self, name: str) -> Tag:
17 | tag = await self._tag_store.create_tag(name=name)
18 | return tag
19 |
20 | async def read(self, tag_id: TagId) -> Tag:
21 | tag = await self._tag_store.read_tag(tag_id=tag_id)
22 | return tag
23 |
24 | async def find(self) -> Sequence[Tag]:
25 | tags = await self._tag_store.list_tags()
26 | return tags
27 |
28 | async def update(self, tag_id: TagId, params: TagUpdateParams) -> Tag:
29 | tag = await self._tag_store.update_tag(tag_id=tag_id, params=params)
30 | return tag
31 |
32 | async def delete(self, tag_id: TagId) -> None:
33 | await self._tag_store.delete_tag(tag_id=tag_id)
34 |
--------------------------------------------------------------------------------
/src/parlant/core/engines/alpha/guideline_matching/guideline_matching_context.py:
--------------------------------------------------------------------------------
1 | from dataclasses import dataclass
2 | from typing import Optional, Sequence
3 |
4 | from parlant.core.agents import Agent
5 | from parlant.core.capabilities import Capability
6 | from parlant.core.context_variables import ContextVariable, ContextVariableValue
7 | from parlant.core.customers import Customer
8 | from parlant.core.emissions import EmittedEvent
9 | from parlant.core.glossary import Term
10 | from parlant.core.guidelines import GuidelineId
11 | from parlant.core.journeys import Journey, JourneyId
12 | from parlant.core.sessions import Event, Session
13 |
14 |
15 | @dataclass(frozen=True)
16 | class GuidelineMatchingContext:
17 | agent: Agent
18 | session: Session
19 | customer: Customer
20 | context_variables: Sequence[tuple[ContextVariable, ContextVariableValue]]
21 | interaction_history: Sequence[Event]
22 | terms: Sequence[Term]
23 | capabilities: Sequence[Capability]
24 | staged_events: Sequence[EmittedEvent]
25 | active_journeys: Sequence[Journey]
26 | journey_paths: dict[JourneyId, list[Optional[GuidelineId]]]
27 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/ui/checkbox.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
3 | import {Check} from 'lucide-react';
4 |
5 | import {cn} from '@/lib/utils';
6 |
7 | const Checkbox = React.forwardRef, React.ComponentPropsWithoutRef>(({className, ...props}, ref) => (
8 |
15 |
16 |
17 |
18 |
19 | ));
20 | Checkbox.displayName = CheckboxPrimitive.Root.displayName;
21 |
22 | export {Checkbox};
23 |
--------------------------------------------------------------------------------
/tests/e2e/conftest.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from pathlib import Path
16 | import tempfile
17 | from typing import Iterator
18 | from pytest import fixture
19 |
20 | from tests.e2e.test_utilities import API, ContextOfTest
21 |
22 |
23 | @fixture
24 | def context() -> Iterator[ContextOfTest]:
25 | with tempfile.TemporaryDirectory(prefix="parlant-server_cli_test_") as home_dir:
26 | home_dir_path = Path(home_dir)
27 |
28 | yield ContextOfTest(
29 | home_dir=home_dir_path,
30 | api=API(),
31 | )
32 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/gradient-button/gradient-button.tsx:
--------------------------------------------------------------------------------
1 | import { spaceClick } from '@/utils/methods';
2 | import styles from './gradient-button.module.scss';
3 | import { ReactElement, ReactNode } from 'react';
4 |
5 | interface GradientButtonProps {
6 | className?: string;
7 | buttonClassName?: string;
8 | children: ReactNode
9 | onClick: (e: React.MouseEvent) => void;
10 | }
11 |
12 | export default function GradientButton({className, buttonClassName, children, onClick}: GradientButtonProps): ReactElement {
13 | return (
14 |
15 |
16 |
17 | {children}
18 |
19 |
20 | );
21 | }
--------------------------------------------------------------------------------
/src/parlant/api/logs.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from fastapi import APIRouter, WebSocket
16 |
17 | from parlant.adapters.loggers.websocket import WebSocketLogger
18 |
19 |
20 | def create_router(
21 | websocket_logger: WebSocketLogger,
22 | ) -> APIRouter:
23 | router = APIRouter()
24 |
25 | @router.websocket("/logs")
26 | async def stream_logs(websocket: WebSocket) -> None:
27 | await websocket.accept()
28 | subscription = await websocket_logger.subscribe(websocket)
29 | await subscription.expiration.wait()
30 |
31 | return router
32 |
--------------------------------------------------------------------------------
/tests/core/common/engines/alpha/steps/tags.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from pytest_bdd import given, parsers
16 | from parlant.core.tags import TagStore, TagId
17 |
18 | from tests.core.common.engines.alpha.utils import step
19 | from tests.core.common.utils import ContextOfTest
20 |
21 |
22 | @step(given, parsers.parse('a tag "{tag_name}"'))
23 | def given_a_tag(
24 | context: ContextOfTest,
25 | tag_name: str,
26 | ) -> TagId:
27 | tag_store = context.container[TagStore]
28 |
29 | tag = context.sync_await(tag_store.create_tag(tag_name))
30 |
31 | return tag.id
32 |
--------------------------------------------------------------------------------
/tests/core/unstable/engines/alpha/test_user_story_scenarios.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from pytest_bdd import scenarios
16 |
17 | from tests.core.common.engines.alpha.utils import load_steps
18 |
19 |
20 | load_steps(
21 | "agents",
22 | "context_variables",
23 | "engines",
24 | "events",
25 | "guidelines",
26 | "sessions",
27 | "terms",
28 | "tools",
29 | "customers",
30 | "tags",
31 | )
32 |
33 | scenarios(
34 | *(
35 | f"core/unstable/engines/alpha/features/user_stories/{feature}.feature"
36 | for feature in ("conversation",)
37 | )
38 | )
39 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/copy-session.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/copy-session.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/message/message.module.scss:
--------------------------------------------------------------------------------
1 | .pendingVideo {
2 | clip-path: inset(1px 0.9px 0.5px 0.8px round 50%);
3 | }
4 | .markdown {
5 | code {
6 | white-space: break-spaces;
7 | max-width: 100%;
8 | word-break: break-word;
9 | background: transparent !important;
10 | font-size: 14px;
11 | }
12 | p {
13 | word-break: break-word;
14 | }
15 | ul {
16 | all: revert;
17 | margin: 0;
18 | padding: 0;
19 | list-style: inside;
20 | }
21 | h2 {
22 | font-weight: bold;
23 | }
24 | table {
25 | white-space: nowrap;
26 | display: block;
27 | overflow: scroll;
28 | scrollbar-width: auto;
29 | border-radius: 2px;
30 | th,
31 | td {
32 | padding-inline: 10px;
33 | text-align: start;
34 | }
35 |
36 | th {
37 | padding: 10px;
38 | }
39 |
40 | tr:last-child td {
41 | padding-bottom: 10px;
42 | }
43 |
44 | thead {
45 | border: 1px solid lightgray;
46 | border-bottom: none;
47 | border-radius: 3px 3px 0 0;
48 | padding: 10px;
49 | }
50 |
51 | tbody {
52 | border: 1px solid lightgray;
53 | border-top: none;
54 | border-radius: 0 0 3px 3px;
55 | padding: 10px;
56 | }
57 | }
58 | li > div {
59 | display: inline;
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/tests/core/stable/engines/alpha/test_user_story_scenarios.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from pytest_bdd import scenarios
16 |
17 | from tests.core.common.engines.alpha.utils import load_steps
18 |
19 |
20 | load_steps(
21 | "agents",
22 | "context_variables",
23 | "engines",
24 | "events",
25 | "guidelines",
26 | "canned_responses",
27 | "sessions",
28 | "terms",
29 | "tools",
30 | "customers",
31 | "tags",
32 | )
33 |
34 | scenarios(
35 | *(
36 | f"core/stable/engines/alpha/features/user_stories/{feature}.feature"
37 | for feature in ("conversation",)
38 | )
39 | )
40 |
--------------------------------------------------------------------------------
/src/parlant/core/nlp/tokenization.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from abc import ABC, abstractmethod
16 |
17 |
18 | class EstimatingTokenizer(ABC):
19 | """An interface for estimating the token count of a prompt."""
20 |
21 | @abstractmethod
22 | async def estimate_token_count(self, prompt: str) -> int:
23 | """Estimate the number of tokens in the given prompt."""
24 | ...
25 |
26 |
27 | class ZeroEstimatingTokenizer(EstimatingTokenizer):
28 | """A tokenizer that always returns zero for token count estimation."""
29 |
30 | async def estimate_token_count(self, prompt: str) -> int:
31 | return 0
32 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/dark-mode-toggle/dark-mode-toggle.tsx:
--------------------------------------------------------------------------------
1 | import { ReactNode, useEffect, useState } from 'react';
2 |
3 | const DarkModeToggle = (): ReactNode =>{
4 | const getInitialTheme = () => localStorage.getItem('theme') || 'light';
5 | const [theme, setTheme] = useState(getInitialTheme);
6 |
7 | useEffect(() => {
8 | const root = window.document.documentElement;
9 |
10 | if (theme === 'dark') {
11 | root.classList.add('dark');
12 | } else {
13 | root.classList.remove('dark');
14 | }
15 |
16 | localStorage.setItem('theme', theme);
17 | }, [theme]);
18 |
19 | const toggleTheme = () => {
20 | setTheme((prevTheme) => (prevTheme === 'light' ? 'dark' : 'light'));
21 | };
22 |
23 | return (
24 |
25 |
27 | Switch to {theme === 'light' ? 'Dark' : 'Light'} Mode
28 |
29 |
30 | );
31 | };
32 |
33 | export default DarkModeToggle;
--------------------------------------------------------------------------------
/src/parlant/core/engines/alpha/utils.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | import json
16 | from typing import Sequence
17 |
18 | from parlant.core.context_variables import ContextVariable, ContextVariableValue
19 |
20 |
21 | def context_variables_to_json(
22 | context_variables: Sequence[tuple[ContextVariable, ContextVariableValue]],
23 | ) -> str:
24 | context_values = {
25 | variable.name: {
26 | "value": value.data,
27 | **({"description": variable.description} if variable.description else {}),
28 | }
29 | for variable, value in context_variables
30 | }
31 |
32 | return json.dumps(context_values)
33 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/copy.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/copy.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/ui/custom/tooltip.tsx:
--------------------------------------------------------------------------------
1 | import {Tooltip as ShadcnTooltip, TooltipContent, TooltipProvider, TooltipTrigger} from '@/components/ui/tooltip';
2 | import {ReactElement} from 'react';
3 | import {ClassNameValue, twMerge} from 'tailwind-merge';
4 |
5 | interface Props {
6 | children: ReactElement;
7 | value: string | ReactElement;
8 | delayDuration?: number;
9 | style?: React.CSSProperties;
10 | side?: 'bottom' | 'top' | 'right' | 'left';
11 | className?: ClassNameValue;
12 | align?: 'center' | 'end' | 'start' | undefined;
13 | }
14 |
15 | export default function Tooltip({children, value, className, style = {}, side = 'bottom', align = 'center', delayDuration = 0}: Props) {
16 | return (
17 |
18 |
19 | {children}
20 |
25 | {value}
26 |
27 |
28 |
29 | );
30 | }
31 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/lib/broadcast-channel.ts:
--------------------------------------------------------------------------------
1 | const channel = new BroadcastChannel('active_tabs');
2 |
3 | const tabId = Date.now() + '-' + Math.random();
4 | console.log('broadcasting...');
5 | channel.postMessage({ type: 'opened', timestamp: Date.now(), id: tabId});
6 |
7 | window.addEventListener('beforeunload', () => {
8 | channel.postMessage({ tabId, type: 'closed' });
9 | sessionStorage.setItem('active_tabs', JSON.stringify([]));
10 | channel.close();
11 | });
12 |
13 | channel.onmessage = (event) => {
14 | const activeTabs = JSON.parse(sessionStorage.getItem('active_tabs') || '[]');
15 | if (event.data.type === 'opened' && event.data.id !== tabId) {
16 | sessionStorage.setItem('active_tabs', JSON.stringify([...activeTabs, event.data.id]));
17 | } else if (event.data.type === 'closed') {
18 | console.log('closedddd');
19 | const tabsData = activeTabs.filter((id: string) => id !== event.data.tabId);
20 | sessionStorage.setItem('active_tabs', JSON.stringify(tabsData));
21 | }
22 | console.log('Message from another tab:', event.data, event);
23 | };
24 |
25 | export const hasOtherOpenedTabs = () => {
26 | const tabsData = JSON.parse(sessionStorage.getItem('active_tabs') || '[]');
27 | return tabsData.length;
28 | };
--------------------------------------------------------------------------------
/scripts/install_packages.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | import subprocess
16 | import sys
17 |
18 | from utils import Package, die, for_each_package
19 |
20 |
21 | def install_package(package: Package) -> None:
22 | if not package.uses_poetry:
23 | print(f"Skipping {package.path}...")
24 | return
25 |
26 | print(f"Installing {package.path}...")
27 |
28 | status, output = subprocess.getstatusoutput(f"poetry -C {package.path} install --all-extras")
29 |
30 | if status != 0:
31 | print(output, file=sys.stderr)
32 | die(f"error: failed to install package: {package.path}")
33 |
34 |
35 | if __name__ == "__main__":
36 | for_each_package(install_package)
37 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/ui/switch.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import * as React from 'react';
4 | import * as SwitchPrimitives from '@radix-ui/react-switch';
5 |
6 | import { cn } from '@/lib/utils';
7 |
8 | const Switch = React.forwardRef<
9 | React.ElementRef,
10 | React.ComponentPropsWithoutRef
11 | >(({ className, ...props }, ref) => (
12 |
20 |
25 |
26 | ));
27 | Switch.displayName = SwitchPrimitives.Root.displayName;
28 |
29 | export { Switch };
30 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/ui/tooltip.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import * as TooltipPrimitive from '@radix-ui/react-tooltip';
3 |
4 | import { cn } from '@/lib/utils';
5 |
6 | const TooltipProvider = TooltipPrimitive.Provider;
7 |
8 | const Tooltip = TooltipPrimitive.Root;
9 |
10 | const TooltipTrigger = TooltipPrimitive.Trigger;
11 |
12 | const TooltipContent = React.forwardRef<
13 | React.ElementRef,
14 | React.ComponentPropsWithoutRef
15 | >(({ className, sideOffset = 4, ...props }, ref) => (
16 |
25 | ));
26 | TooltipContent.displayName = TooltipPrimitive.Content.displayName;
27 |
28 | export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
29 |
--------------------------------------------------------------------------------
/.devcontainer/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/devcontainers/base:ubuntu-24.04
2 |
3 | ARG DEBIAN_FRONTEND=noninteractive
4 | ARG USER=vscode
5 |
6 | RUN DEBIAN_FRONTEND=noninteractive \
7 | && apt-get update \
8 | && apt-get install -y build-essential --no-install-recommends make \
9 | ca-certificates \
10 | bash-completion \
11 | git \
12 | just \
13 | libssl-dev \
14 | zlib1g-dev \
15 | libbz2-dev \
16 | libreadline-dev \
17 | libsqlite3-dev \
18 | wget \
19 | curl \
20 | llvm \
21 | libncurses5-dev \
22 | xz-utils \
23 | tk-dev \
24 | libxml2-dev \
25 | libxmlsec1-dev \
26 | libffi-dev \
27 | liblzma-dev
28 |
29 | # Python and poetry installation
30 | USER $USER
31 | ARG HOME="/home/$USER"
32 | ARG PYTHON_VERSION=3.10
33 |
34 | ENV PYENV_ROOT="${HOME}/.pyenv"
35 | ENV PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${HOME}/.local/bin:$PATH"
36 |
37 | EXPOSE 8800
38 |
39 | RUN echo "Configuring Python environment" \
40 | && curl https://pyenv.run | bash \
41 | && pyenv install ${PYTHON_VERSION} \
42 | && pyenv global ${PYTHON_VERSION} \
43 | && curl -sSL https://install.python-poetry.org | python3 - \
44 | && poetry self update 1.8.4 \
45 | && poetry config virtualenvs.in-project false \
46 | && pip install ruff semver toml
47 |
--------------------------------------------------------------------------------
/.github/workflows/lint.yml:
--------------------------------------------------------------------------------
1 | name: Lint
2 |
3 | on:
4 | push:
5 | branches: [ "main" ]
6 | pull_request:
7 | branches: [ "main" ]
8 |
9 |
10 | jobs:
11 | build:
12 | runs-on: ubuntu-24.04
13 |
14 | strategy:
15 | matrix:
16 | python-version: ["3.10"]
17 | poetry-version: ["1.8.3"]
18 |
19 | steps:
20 | - name: checkout branch commit
21 | uses: actions/checkout@v4
22 |
23 | - name: 'Set up Python (cache: pip)'
24 | uses: actions/setup-python@v5
25 | with:
26 | python-version: ${{ matrix.python-version }}
27 | cache: 'pip'
28 |
29 | - name: Initial Configs and Install Poetry
30 | run: |
31 | pip install poetry==${{ matrix.poetry-version }}
32 | git config --local core.hooksPath .githooks/
33 | chmod +x .githooks/pre-commit .githooks/pre-push
34 |
35 | - name: Set up Poetry Cache
36 | uses: actions/setup-python@v5
37 | with:
38 | python-version: ${{ matrix.python-version }}
39 | cache: 'poetry'
40 |
41 | - name: Install packages
42 | run: python scripts/install_packages.py
43 | continue-on-error: false
44 |
45 | - name: Lint packages
46 | run: python scripts/lint.py
47 | continue-on-error: false
48 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/rename.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/rename.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/hooks/useLocalStorage.ts:
--------------------------------------------------------------------------------
1 | import {useEffect, useState} from 'react';
2 |
3 | const LIMIT = 30;
4 |
5 | export function useLocalStorage(key: string, initialValue: T) {
6 | const [storedValue, setStoredValue] = useState(() => {
7 | try {
8 | const item = globalThis.localStorage?.getItem(key);
9 | return item ? JSON.parse(item) : initialValue;
10 | } catch (error) {
11 | console.error('Error reading from localStorage', error);
12 | return initialValue;
13 | }
14 | });
15 |
16 | const addVal = () => {
17 | try {
18 | if (Array.isArray(storedValue) && storedValue?.length > LIMIT) storedValue.shift();
19 | localStorage.setItem(key, JSON.stringify(storedValue));
20 | } catch (e) {
21 | console.error('Error writing to localStorage', e);
22 | if (e instanceof DOMException && e.name === 'QuotaExceededError') {
23 | const logs = JSON.parse(localStorage.logs || '{}');
24 | if (Object.keys(logs)[0]) {
25 | console.log('deleting first log');
26 | delete logs[Object.keys(logs)[0]];
27 | localStorage.setItem('logs', JSON.stringify(logs));
28 | addVal();
29 | }
30 | }
31 | }
32 | };
33 |
34 | useEffect(() => {
35 | addVal();
36 | // eslint-disable-next-line react-hooks/exhaustive-deps
37 | }, [key, storedValue]);
38 |
39 | return [storedValue, setStoredValue];
40 | }
41 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/utils/api.ts:
--------------------------------------------------------------------------------
1 | export const BASE_URL = import.meta.env.VITE_BASE_URL || '';
2 |
3 | const request = async (url: string, options: RequestInit = {}) => {
4 | try {
5 | const response = await fetch(url, options);
6 | if (!response.ok) {
7 | throw new Error(`HTTP error! Status: ${response.status}`);
8 | }
9 | if (options.method === 'PATCH' || options.method === 'DELETE') return;
10 | return await response.json();
11 | } catch (error) {
12 | console.error('Fetch error:', error);
13 | throw error;
14 | }
15 | };
16 |
17 | export const getData = async (endpoint: string) => {
18 | return request(`${BASE_URL}/${endpoint}`);
19 | };
20 |
21 | export const postData = async (endpoint: string, data?: object) => {
22 | return request(`${BASE_URL}/${endpoint}`, {
23 | method: 'POST',
24 | headers: {
25 | 'Content-Type': 'application/json',
26 | },
27 | body: JSON.stringify(data),
28 | });
29 | };
30 |
31 | export const patchData = async (endpoint: string, data: object) => {
32 | return request(`${BASE_URL}/${endpoint}`, {
33 | method: 'PATCH',
34 | headers: {
35 | 'Content-Type': 'application/json',
36 | },
37 | body: JSON.stringify(data),
38 | });
39 | };
40 |
41 | export const deleteData = async (endpoint: string) => {
42 | return request(`${BASE_URL}/${endpoint}`, {
43 | method: 'DELETE',
44 | });
45 | };
46 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/emcie-placeholder.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/emcie-placeholder.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/core/app_modules/services.py:
--------------------------------------------------------------------------------
1 | from typing import Sequence
2 |
3 | from parlant.core.loggers import Logger
4 | from parlant.core.services.tools.service_registry import ServiceRegistry, ToolServiceKind
5 | from parlant.core.tools import ToolService
6 |
7 |
8 | class ServiceModule:
9 | def __init__(
10 | self,
11 | logger: Logger,
12 | service_registry: ServiceRegistry,
13 | ):
14 | self._logger = logger
15 | self._service_registry = service_registry
16 |
17 | async def read(self, name: str) -> ToolService:
18 | service = await self._service_registry.read_tool_service(name)
19 | return service
20 |
21 | async def update(
22 | self,
23 | name: str,
24 | kind: ToolServiceKind,
25 | url: str,
26 | source: str | None,
27 | ) -> ToolService:
28 | service = await self._service_registry.update_tool_service(
29 | name=name,
30 | kind=kind,
31 | url=url,
32 | source=source,
33 | )
34 |
35 | return service
36 |
37 | async def delete(self, name: str) -> None:
38 | await self._service_registry.read_tool_service(name)
39 | await self._service_registry.delete_service(name)
40 |
41 | async def find(self) -> Sequence[tuple[str, ToolService]]:
42 | return await self._service_registry.list_tool_services()
43 |
--------------------------------------------------------------------------------
/src/parlant/core/engines/alpha/guideline_matching/guideline_match.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | # This is a separate module to avoid circular dependencies
16 |
17 | from dataclasses import dataclass, field
18 | from typing import Mapping
19 |
20 | from parlant.core.common import JSONSerializable
21 | from parlant.core.guidelines import Guideline
22 |
23 |
24 | @dataclass(frozen=True)
25 | class GuidelineMatch:
26 | guideline: Guideline
27 | score: int
28 | rationale: str
29 | metadata: Mapping[str, JSONSerializable] = field(default_factory=dict)
30 |
31 | def __hash__(self) -> int:
32 | return hash(f"{self.guideline.id}_{self.score}_{self.rationale}")
33 |
34 |
35 | @dataclass(frozen=True)
36 | class AnalyzedGuideline:
37 | guideline: Guideline
38 | is_previously_applied: bool
39 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/expand.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/expand.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/message-details/message-logs.tsx:
--------------------------------------------------------------------------------
1 | import {Log} from '@/utils/interfaces';
2 | import MessageLog from './message-log';
3 |
4 | interface Props {
5 | messagesRef: React.RefObject;
6 | filteredLogs: Log[];
7 | }
8 |
9 | const MessageLogs = ({messagesRef, filteredLogs}: Props) => {
10 | return (
11 |
12 |
13 |
14 |
Level
15 |
Message
16 |
17 |
18 | {filteredLogs.map((log, i) => (
19 |
20 |
{log.level?.toLowerCase()}
21 |
22 |
23 | ))}
24 |
25 |
26 |
27 | );
28 | };
29 | export default MessageLogs;
30 |
--------------------------------------------------------------------------------
/tests/core/unstable/engines/alpha/test_baseline_scenarios.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from pytest_bdd import scenarios
16 |
17 | from tests.core.common.engines.alpha.utils import load_steps
18 |
19 |
20 | load_steps(
21 | "agents",
22 | "context_variables",
23 | "engines",
24 | "events",
25 | "guidelines",
26 | "canned_responses",
27 | "sessions",
28 | "terms",
29 | "tools",
30 | "customers",
31 | "tags",
32 | "journeys",
33 | "capabilities",
34 | )
35 |
36 | scenarios(
37 | *(
38 | f"core/unstable/engines/alpha/features/baseline/{feature}.feature"
39 | for feature in (
40 | "supervision",
41 | "glossary",
42 | "tools",
43 | "fluid_canned_responses",
44 | "strict_canned_responses",
45 | "conversation",
46 | )
47 | )
48 | )
49 |
--------------------------------------------------------------------------------
/DCO.md:
--------------------------------------------------------------------------------
1 | Developer Certificate of Origin
2 | Version 1.1
3 |
4 | Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
5 |
6 | Everyone is permitted to copy and distribute verbatim copies of this
7 | license document, but changing it is not allowed.
8 |
9 |
10 | Developer's Certificate of Origin 1.1
11 |
12 | By making a contribution to this project, I certify that:
13 |
14 | (a) The contribution was created in whole or in part by me and I
15 | have the right to submit it under the open source license
16 | indicated in the file; or
17 |
18 | (b) The contribution is based upon previous work that, to the best
19 | of my knowledge, is covered under an appropriate open source
20 | license and I have the right under that license to submit that
21 | work with modifications, whether created in whole or in part
22 | by me, under the same open source license (unless I am
23 | permitted to submit under a different license), as indicated
24 | in the file; or
25 |
26 | (c) The contribution was provided directly to me by some other
27 | person who certified (a), (b) or (c) and I have not modified
28 | it.
29 |
30 | (d) I understand and agree that this project and the contribution
31 | are public and that a record of the contribution (including all
32 | personal information I submit with it, including my sign-off) is
33 | maintained indefinitely and may be redistributed consistent with
34 | this project or the open source license(s) involved.
--------------------------------------------------------------------------------
/tests/api/conftest.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from lagom import Container
16 | from pytest import fixture
17 |
18 | from parlant.core.agents import AgentId
19 | from parlant.core.customers import CustomerId
20 | from parlant.core.sessions import SessionId
21 |
22 | from tests.test_utilities import create_agent, create_customer, create_session
23 |
24 |
25 | @fixture
26 | async def agent_id(container: Container) -> AgentId:
27 | agent = await create_agent(container, name="test-agent")
28 | return agent.id
29 |
30 |
31 | @fixture
32 | async def customer_id(container: Container) -> CustomerId:
33 | customer = await create_customer(container, "Test Customer")
34 | return customer.id
35 |
36 |
37 | @fixture
38 | async def session_id(container: Container, agent_id: AgentId) -> SessionId:
39 | session = await create_session(container, agent_id=agent_id)
40 | return session.id
41 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/message/draft-bubble.tsx:
--------------------------------------------------------------------------------
1 | import Markdown from '../markdown/markdown';
2 | import {twMerge} from 'tailwind-merge';
3 | import Tooltip from '../ui/custom/tooltip';
4 | import {copy} from '@/lib/utils';
5 | import {useEffect, useState} from 'react';
6 |
7 | const DraftBubble = ({draft = '', open = false}) => {
8 | const [wasOpen, setWasOpen] = useState(false);
9 |
10 | useEffect(() => {
11 | if (open) setWasOpen(true);
12 | }, [open]);
13 |
14 | return (
15 |
16 |
17 | {draft}
18 |
19 |
20 |
21 | copy(draft || '')} className='group cursor-pointer'>
22 |
23 |
24 |
25 |
26 |
27 | );
28 | };
29 |
30 | export default DraftBubble;
31 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/message-details/indexeddb-data.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable @typescript-eslint/no-explicit-any */
2 | import {clearIndexedDBData, getIndexedDBSize} from '@/utils/logs';
3 | import {Trash} from 'lucide-react';
4 | import {useEffect, useState} from 'react';
5 | import {toast} from 'sonner';
6 | import {twJoin} from 'tailwind-merge';
7 |
8 | const IndexedDBData = ({eventId, logsDeleted}: {eventId?: string; logsDeleted?: () => void}) => {
9 | const [estimatedDataInMB, setEstimatedDataInMB] = useState(null);
10 |
11 | const setData = async () => {
12 | const estimated = await getIndexedDBSize();
13 | setEstimatedDataInMB(estimated);
14 | };
15 |
16 | async function handleClearDataClick() {
17 | try {
18 | await clearIndexedDBData();
19 | setData();
20 | toast.success('IndexedDB data cleared successfully.');
21 | logsDeleted?.();
22 | } catch (e) {
23 | console.log('Error clearing IndexedDB data', e);
24 | toast.error('Error clearing IndexedDB data');
25 | }
26 | }
27 |
28 | useEffect(() => {
29 | setData();
30 | }, [eventId]);
31 |
32 | const dataInMB = estimatedDataInMB ? +estimatedDataInMB.toFixed(1) : null;
33 | return (
34 |
35 |
The logs use approximately {dataInMB}MB of storage (indexedDB)
36 |
37 |
38 | );
39 | };
40 | export default IndexedDBData;
41 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/ui/radio-group.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
3 | import {Circle} from 'lucide-react';
4 |
5 | import {cn} from '@/lib/utils';
6 |
7 | const RadioGroup = React.forwardRef<
8 | React.ElementRef,
9 | React.ComponentPropsWithoutRef
10 | >(({className, ...props}, ref) => {
11 | return ;
12 | });
13 | RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
14 |
15 | const RadioGroupItem = React.forwardRef<
16 | React.ElementRef,
17 | React.ComponentPropsWithoutRef
18 | >(({className, ...props}, ref) => {
19 | return (
20 |
27 |
28 |
29 |
30 |
31 | );
32 | });
33 | RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
34 |
35 | export {RadioGroup, RadioGroupItem};
36 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/utils/interfaces.tsx:
--------------------------------------------------------------------------------
1 | export interface AgentInterface {
2 | id: string;
3 | name: string;
4 | }
5 |
6 | export interface CustomerInterface {
7 | id: string;
8 | name: string;
9 | }
10 |
11 | export interface Log {
12 | level: 'INFO' | 'DEBUG' | 'WARNING';
13 | trace_id: string;
14 | message: string;
15 | timestamp: number;
16 | }
17 |
18 | export type ServerStatus = 'pending' | 'error' | 'accepted' | 'acknowledged' | 'processing' | 'typing' | 'ready';
19 | type eventSource = 'customer' | 'customer_ui' | 'human_agent' | 'human_agent_on_behalf_of_ai_agent' | 'ai_agent' | 'system';
20 |
21 | export interface EventInterface {
22 | id?: string;
23 | source: eventSource;
24 | kind: 'status' | 'message';
25 | trace_id: string;
26 | serverStatus: ServerStatus;
27 | sessionId?: string;
28 | error?: string;
29 | offset: number;
30 | creation_utc: Date;
31 | data: {
32 | participant?: { display_name?: string }
33 | status?: ServerStatus;
34 | draft?: string;
35 | canned_responses?: string[];
36 | message: string;
37 | data?: { exception?: string, stage?: string };
38 | tags?: string;
39 | };
40 | index?: number;
41 | }
42 |
43 | export interface SessionInterface {
44 | id: string;
45 | title: string;
46 | customer_id: string;
47 | agent_id: string;
48 | creation_utc: string;
49 | }
50 |
51 | export interface SessionCsvInterface {
52 | Source: 'AI Agent' | 'Customer';
53 | Participant: string;
54 | Timestamp: Date;
55 | Message: string;
56 | Draft: string;
57 | Tags: string;
58 | Flag: string;
59 | 'Trace ID': string;
60 | }
61 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/parlant-bubble-muted.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/parlant-bubble-muted.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/tests/core/test_id_generator.py:
--------------------------------------------------------------------------------
1 | # Copyright 2025 Emcie Co Ltd.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from parlant.core.common import IdGenerator
16 |
17 |
18 | async def test_that_id_generator_generates_different_ids_for_objects_with_similar_small_content() -> (
19 | None
20 | ):
21 | generator = IdGenerator()
22 |
23 | small_content_1 = "test"
24 | small_content_2 = "test"
25 |
26 | id1 = generator.generate(small_content_1)
27 | id2 = generator.generate(small_content_2)
28 |
29 | assert id1 != id2
30 | assert len(id1) == 10
31 | assert len(id2) == 10
32 |
33 |
34 | async def test_that_id_generator_generates_different_ids_for_objects_with_similar_big_content() -> (
35 | None
36 | ):
37 | generator = IdGenerator()
38 |
39 | big_content_1 = "a" * 1000
40 | big_content_2 = "a" * 1000
41 |
42 | id1 = generator.generate(big_content_1)
43 | id2 = generator.generate(big_content_2)
44 |
45 | assert id1 != id2
46 | assert len(id1) == 10
47 | assert len(id2) == 10
48 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/error-boundary/error-boundary.tsx:
--------------------------------------------------------------------------------
1 | import {Component, ReactNode} from 'react';
2 |
3 | interface Props {
4 | children: ReactNode;
5 | component?: ReactNode;
6 | }
7 |
8 | interface State {
9 | hasError: boolean;
10 | errorStack?: string;
11 | }
12 |
13 | export default class ErrorBoundary extends Component {
14 | constructor(props: Props) {
15 | super(props);
16 | this.state = {hasError: false};
17 | }
18 |
19 | static getDerivedStateFromError() {
20 | return {hasError: true};
21 | }
22 |
23 | componentDidCatch(error: Error) {
24 | this.setState({errorStack: error.stack});
25 | }
26 |
27 | render(): ReactNode {
28 | return this.state.hasError
29 | ? this.props.component || (
30 |
31 |
32 |
Oops! Something went wrong
33 |
34 | We apologize for the inconvenience. Please try again later, or{' '}
35 |
36 | try again now
37 |
38 | .
39 |
40 |
41 | {this.state.errorStack}
42 |
43 |
44 | )
45 | : this.props.children;
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/components/ui/custom/copy-text.tsx:
--------------------------------------------------------------------------------
1 | import {ReactNode} from 'react';
2 | import {toast} from 'sonner';
3 | import {twMerge} from 'tailwind-merge';
4 | import {spaceClick} from '@/utils/methods';
5 | import {fallbackCopyText} from '@/lib/utils';
6 |
7 | interface Props {
8 | text: string;
9 | textToCopy?: string;
10 | preText?: string;
11 | className?: string;
12 | element?: HTMLElement;
13 | }
14 |
15 | export default function CopyText({text, textToCopy, preText, className, element}: Props): ReactNode {
16 | if (!textToCopy) textToCopy = text;
17 |
18 | const copyClicked = (e: React.MouseEvent) => {
19 | e.stopPropagation();
20 | if (navigator.clipboard && navigator.clipboard.writeText) {
21 | navigator.clipboard
22 | .writeText(textToCopy)
23 | .then(() => toast.info(`Copied text: ${textToCopy}`))
24 | .catch(() => {
25 | fallbackCopyText(textToCopy, element);
26 | });
27 | } else {
28 | fallbackCopyText(textToCopy, element);
29 | }
30 | };
31 |
32 | return (
33 |
34 |
35 | {preText && {preText} }
36 | {text}
37 |
38 |
39 |
40 |
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/filters/guideline-matcher.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/filters/guideline-matcher.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/dist/icons/filters/guideline-matcher-color.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/public/icons/filters/guideline-matcher-color.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/parlant/api/chat/src/store.ts:
--------------------------------------------------------------------------------
1 | import {atom} from 'jotai';
2 | import {AgentInterface, CustomerInterface, EventInterface, SessionInterface} from './utils/interfaces';
3 | import {ReactNode} from 'react';
4 | import {Dimensions} from './hooks/useDialog';
5 |
6 | export const emptyPendingMessage: () => EventInterface = () => ({
7 | kind: 'message',
8 | source: 'customer',
9 | creation_utc: new Date(),
10 | serverStatus: 'pending',
11 | offset: 0,
12 | trace_id: '',
13 | data: {
14 | message: '',
15 | },
16 | });
17 |
18 | const getLogs = () => {
19 | try {
20 | return JSON.parse(localStorage.logs || '{}');
21 | } catch (e) {
22 | console.error(e);
23 | localStorage.removeItem('logs');
24 | return {};
25 | }
26 | };
27 |
28 | export const haveLogsAtom = atom(getLogs());
29 | export const agentsAtom = atom([]);
30 | export const customersAtom = atom([]);
31 | export const customerAtom = atom(null);
32 | export const sessionAtom = atom(null);
33 | export const agentAtom = atom(null);
34 | export const newSessionAtom = atom(null);
35 | export const sessionsAtom = atom([]);
36 | export const viewingMessageDetailsAtom = atom(null);
37 | export const pendingMessageAtom = atom(emptyPendingMessage());
38 | export const dialogAtom = atom<{openDialog: (title: string | null, content: ReactNode, dimensions: Dimensions, dialogClosed?: () => void) => void; closeDialog: () => void}>({closeDialog: () => null, openDialog: () => null});
39 |
--------------------------------------------------------------------------------
/scripts/ci/github_action_ubuntu_2404_free_space.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # Print initial disk space usage
4 | df -h / | awk 'NR==2 {printf "Before cleanup: %s used, %s free\n", $3, $4}'
5 |
6 | # Remove docker images
7 | sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true
8 |
9 | # Remove development toolchains and SDK directories
10 | sudo rm -rf \
11 | /opt/hostedtoolcache/* \
12 | /usr/local/lib/android \
13 | /usr/share/dotnet \
14 | /usr/local/share/powershell \
15 | /usr/share/swift \
16 | /opt/ghc \
17 | /usr/local/.ghcup \
18 | /usr/lib/jvm \
19 | /usr/local/julia* \
20 | /usr/local/n \
21 | /usr/local/share/chromium \
22 | /usr/local/share/vcpkg \
23 | >/dev/null 2>&1 || true
24 |
25 | # Remove unnecessary packages
26 | sudo apt-get remove -y \
27 | azure-cli \
28 | google-cloud-sdk \
29 | firefox \
30 | google-chrome-stable \
31 | microsoft-edge-stable \
32 | mysql* \
33 | mongodb-org* \
34 | dotnet* \
35 | php* \
36 | >/dev/null 2>&1 || true
37 |
38 | # Clean up package system
39 | sudo apt-get autoremove -y >/dev/null 2>&1
40 | sudo apt-get clean -y >/dev/null 2>&1
41 |
42 | # Clean up package caches and data
43 | sudo rm -rf \
44 | /var/lib/docker/* \
45 | /var/lib/gems/* \
46 | /var/lib/apt/lists/* \
47 | /var/cache/* \
48 | /var/lib/snapd \
49 | >/dev/null 2>&1 || true
50 |
51 | # Print final disk space usage and difference
52 | df -h / | awk -v before="$(df -h / | awk 'NR==2 {print $3}')" \
53 | 'NR==2 {printf "After cleanup: %s used, %s free (freed %s)\n",
54 | $3, $4, substr(before,1,length(before)-1) - substr($3,1,length($3)-1) "G"}'
--------------------------------------------------------------------------------