Skip to content

Commit ca4902c

Browse files
committed
Merge branch 'develop'
Signed-off-by: Yam Marcovitz <[email protected]>
2 parents 6803caf + ed71f49 commit ca4902c

File tree

29 files changed

+1215
-605
lines changed

29 files changed

+1215
-605
lines changed

.devcontainer/devcontainer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
"mutantdino.resourcemonitor",
3131
"njpwerner.autodocstring",
3232
"tamasfe.even-better-toml",
33-
"zeshuaro.vscode-python-poetry"
33+
"zeshuaro.vscode-python-poetry",
34+
"streetsidesoftware.code-spell-checker"
3435
]
3536
}
3637
},

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@ All notable changes to Parlant will be documented here.
55
## [Unreleased]
66
TBD
77

8+
## [2.1.2] - 2025-05-07
9+
10+
### Changed
11+
- Remove interaction history from utterance recomposition prompt
12+
- Use tool calls from the entire interaction for utterance field substitution
13+
- Improve error handling and reporting with utterance rendering failures
14+
15+
### Fixed
16+
- Always reason about utterance selection to improve performance
17+
818
## [2.1.1] - 2025-04-30
919

1020
### Fixed

README.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
<!--<img alt="Parlant Banner" src="https://github.com/emcie-co/parlant/blob/develop/banner.png?raw=true" />-->
44

55

6-
7-
<h3>Parlant: The Conversation Modeling Engine</h3>
6+
<h1>Parlant</h1>
7+
<h3>The Conversation Modeling Engine</h3>
88

9-
**Stop fighting with prompts and take charge of GenAI interactions!**
9+
Parlant is the open-source framework for safe, compliant, and custom generative AI conversations. It gives you the power of LLMs without the unpredictability.
1010

1111
<a href="https://trendshift.io/repositories/12768" target="_blank"><img src="https://trendshift.io/api/badge/repositories/12768" alt="emcie-co%2Fparlant | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
1212

@@ -53,6 +53,10 @@ parlant guideline create \
5353
--action "thank them for checking out Parlant"
5454
# Now start a new conversation and greet the agent
5555
```
56+
57+
## Quick Demo
58+
<img alt="Parlant Banner" src="https://github.com/emcie-co/parlant/blob/develop/ParlantGIF.gif?raw=true" />
59+
5660

5761
## What is Conversation Modeling?
5862
You've built an AI agent—that's great! However, when you actually test it, you see it's not handling many customer interactions properly, and your business experts are displeased with it. What do you do?
@@ -65,12 +69,9 @@ A conversation model is a structured, domain-specific set of principles, actions
6569

6670
The problem of getting your AI agent to say what _you_ want it to say is a hard one, experienced by virtually anyone building customer-facing agents. Here's how Conversation Modeling compares to other approaches to solving this problem.
6771

68-
- **Flow engines** (such as [Rasa](https://github.com/RasaHQ/rasa), [Botpress](https://github.com/botpress/botpress) or [LangFlow](https://github.com/langflow-ai/langflow)) _force_ the user to interact according to predefined flows. In contrast, a **CM engine** dynamically _adapts_ to a user's natural interaction patterns while conforming to your rules.
69-
70-
- **Free-form prompt engineering** (such as with [LangGraph](https://www.langchain.com/langgraph) or [LlamaIndex](https://docs.llamaindex.ai/)) leads to _inconsistency_, frequently failing to uphold requirements. Conversely, a **CM engine** leverages structure to _enforce_ conformance to a Conversation Model.
72+
- **Flow engines** _force_ the user to interact according to predefined flows. In contrast, a **CM engine** dynamically _adapts_ to a user's natural interaction patterns while conforming to your rules.
7173

72-
## Quick Demo
73-
<img alt="Parlant Banner" src="https://github.com/emcie-co/parlant/blob/develop/ParlantGIF.gif?raw=true" />
74+
- **Free-form prompt engineering** leads to _inconsistency_, frequently failing to uphold requirements. Conversely, a **CM engine** leverages structure to _enforce_ conformance to a Conversation Model.
7475

7576

7677
## Who uses Parlant?

poetry.lock

Lines changed: 243 additions & 194 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "parlant"
3-
version = "2.1.1"
3+
version = "2.1.2"
44
license = "Apache-2.0"
55
description = ""
66
authors = ["Yam Marcovitz <[email protected]>", "Dor Zohar <[email protected]>"]

src/parlant/api/chat/dist/assets/index-BnUKjToq.js renamed to src/parlant/api/chat/dist/assets/index-BHV6vFSJ.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/parlant/api/chat/dist/assets/index-BxadTjeo.css renamed to src/parlant/api/chat/dist/assets/index-CZpORbbw.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/parlant/api/chat/dist/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
1111
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&display=swap" rel="stylesheet" />
1212
<title>Parlant</title>
13-
<script type="module" crossorigin src="/chat/assets/index-BnUKjToq.js"></script>
14-
<link rel="stylesheet" crossorigin href="/chat/assets/index-BxadTjeo.css">
13+
<script type="module" crossorigin src="/chat/assets/index-BHV6vFSJ.js"></script>
14+
<link rel="stylesheet" crossorigin href="/chat/assets/index-CZpORbbw.css">
1515
</head>
1616
<body>
1717
<div id="root"></div>

src/parlant/api/chat/src/App.css

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,44 @@ body {
4444
img {
4545
user-select: none;
4646
}
47+
48+
.bubblesWrapper {
49+
height: fit-content;
50+
width: fit-content;
51+
background-color: #F5F9F7;
52+
padding: 10px;
53+
margin: 10px;
54+
margin-inline: 20px;
55+
border-radius: 15px;
56+
}
57+
58+
.bubbles {
59+
height: 15px;
60+
width: 31px;
61+
aspect-ratio: 2.5;
62+
--_g: no-repeat radial-gradient(farthest-side, #333333 90%, #0000);
63+
background: var(--_g), var(--_g), var(--_g);
64+
background-size: 25% 50%;
65+
animation: l43 1s infinite linear;
66+
}
67+
68+
@keyframes l43 {
69+
0% {
70+
background-position: calc(0*100%/2) 50%, calc(1*100%/2) 50%, calc(2*100%/2) 50%;
71+
}
72+
20% {
73+
background-position: calc(0*100%/2) 0, calc(1*100%/2) 50%, calc(2*100%/2) 50%;
74+
}
75+
40% {
76+
background-position: calc(0*100%/2) 100%, calc(1*100%/2) 0, calc(2*100%/2) 50%;
77+
}
78+
60% {
79+
background-position: calc(0*100%/2) 50%, calc(1*100%/2) 100%, calc(2*100%/2) 0;
80+
}
81+
80% {
82+
background-position: calc(0*100%/2) 50%, calc(1*100%/2) 50%, calc(2*100%/2) 100%;
83+
}
84+
100% {
85+
background-position: calc(0*100%/2) 50%, calc(1*100%/2) 50%, calc(2*100%/2) 50%;
86+
}
87+
}

src/parlant/api/chat/src/components/session-view/session-view.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ const SessionView = (): ReactElement => {
183183
useEffect(formatMessagesFromEvents, [lastEvents]);
184184
useEffect(scrollToLastMessage, [messages?.length, pendingMessage, isFirstScroll]);
185185
useEffect(resetSession, [session?.id]);
186+
useEffect(() => {
187+
if (showThinking) lastMessageRef?.current?.scrollIntoView({behavior: 'smooth'});
188+
}, [showThinking]);
186189
useEffect(() => {
187190
if (agents && agent?.id) setIsMissingAgent(!agents?.find((a) => a.id === agent?.id));
188191
}, [agents, agent?.id]);
@@ -260,6 +263,13 @@ const SessionView = (): ReactElement => {
260263
</div>
261264
</React.Fragment>
262265
))}
266+
{(showTyping || showThinking) && (
267+
<div ref={lastMessageRef} className='flex snap-end flex-col max-w-[min(1020px,100%)] w-[1020px] self-center'>
268+
<div className='bubblesWrapper snap-end' aria-hidden="true">
269+
<div className='bubbles' />
270+
</div>
271+
</div>
272+
)}
263273
</div>
264274
<div className={twMerge('w-full flex justify-between', isMissingAgent && 'hidden')}>
265275
<Spacer />
@@ -304,7 +314,7 @@ const SessionView = (): ReactElement => {
304314
className='box-shadow-none placeholder:text-[#282828] resize-none border-none h-full rounded-none min-h-[unset] p-0 whitespace-nowrap no-scrollbar font-inter font-light text-[16px] leading-[18px] bg-white'
305315
/>
306316
<p className={twMerge('absolute invisible left-[0.25em] -bottom-[28px] font-normal text-[#A9AFB7] text-[14px] font-inter', (showTyping || showThinking) && 'visible')}>
307-
{showTyping ? `${agent?.name} is typing...` : `${agent?.name} is online`}
317+
{showTyping ? `${agent?.name} is typing...` : `${agent?.name} is thinking...`}
308318
</p>
309319
<Button variant='ghost' data-testid='submit-button' className='max-w-[60px] rounded-full hover:bg-white' ref={submitButtonRef} disabled={!message?.trim() || !agent?.id} onClick={() => postMessage(message)}>
310320
<img src='icons/send.svg' alt='Send' height={19.64} width={21.52} className='h-10' />

0 commit comments

Comments
 (0)