Skip to content

Commit a91627a

Browse files
committed
Merge branch 'develop'
Signed-off-by: Yam Marcovitz <[email protected]>
2 parents 5367d9c + ae56083 commit a91627a

File tree

11 files changed

+62
-28
lines changed

11 files changed

+62
-28
lines changed

CHANGELOG.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,21 @@ All notable changes to Parlant will be documented here.
66

77
TBD
88

9+
## [3.0.1] - 2025-08-16
10+
11+
### Changed
12+
13+
- Move tool call success log to DEBUG level
14+
15+
### Fixed
16+
17+
- Fix tool-based variable not enabling the associated tool on the server
18+
- Fix authorization errors throwing 500 instead of 403
19+
- Changed OpenAI LLM request operation level to TRACE to fix evaluation progress bars
20+
921
## [3.0.0] - 2025-08-15
1022

11-
Please see the announcement at https://parlant.io/blog/parlant-3-0-release
23+
- Please see the announcement at https://parlant.io/blog/parlant-3-0-release
1224

1325
## [2.2.0] - 2025-05-20
1426

README.md

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828

2929
</div>
3030

31-
---
32-
3331
## 🎯 The Problem Every AI Developer Faces
3432

3533
You build an AI agent. It works great in testing. Then real users start talking to it and...
@@ -89,7 +87,9 @@ async def main():
8987
tools=[get_weather]
9088
)
9189

92-
# 🎉 Agent ready at http://localhost:8800
90+
# 🎉 Test playground ready at http://localhost:8800
91+
# Integrate the official React widget into your app,
92+
# or follow the tutorial to build your own frontend!
9393

9494
if __name__ == "__main__":
9595
import asyncio
@@ -100,32 +100,40 @@ if __name__ == "__main__":
100100

101101
## 🎬 See It In Action
102102

103-
<img alt="Parlant Demo" src="https://www.parlant.io/img/example-scheduling-journey.gif" width="100%" />
103+
<img alt="Parlant Demo" src="https://github.com/emcie-co/parlant/blob/develop/docs/demo.gif?raw=true" width="100%" />
104104

105105
## 🔥 Why Developers Are Switching to Parlant
106106

107-
<table>
107+
<table width="100%">
108108
<tr>
109-
<td width="50%">
109+
<td width="50%">
110110

111111
### 🏗️ **Traditional AI Frameworks**
112112

113+
</td>
114+
<td width="50%">
115+
116+
### **Parlant**
117+
118+
</td>
119+
</tr>
120+
<tr>
121+
<td width="50%">
122+
113123
- Write complex system prompts
114124
- Hope the LLM follows them
115125
- Debug unpredictable behaviors
116-
- Scale by adding more prompt engineering
117-
- Cross fingers for production reliability
126+
- Scale by prompt engineering
127+
- Cross fingers for reliability
118128

119129
</td>
120130
<td width="50%">
121131

122-
### **Parlant**
123-
124132
- Define rules in natural language
125133
- **Guaranteed** rule compliance
126134
- Predictable, consistent behavior
127-
- Scale by adding more guidelines
128-
- Production-ready reliability from day one
135+
- Scale by adding guidelines
136+
- Production-ready from day one
129137

130138
</td>
131139
</tr>
@@ -138,18 +146,19 @@ if __name__ == "__main__":
138146
| **Financial Services** | **Healthcare** | **E-commerce** | **Legal Tech** |
139147
| :----------------------: | :---------------------: | :-------------------------: | :------------------------: |
140148
| Compliance-first design | HIPAA-ready agents | Customer service at scale | Precise legal guidance |
141-
| Risk management built-in | Patient data protection | Order processing automation | Document review assistance |
149+
| Built-in risk management | Patient data protection | Order processing automation | Document review assistance |
142150

143151
</div>
144152

145153
## 🛠️ Enterprise-Grade Features
146154

155+
- **🧭 Conversational Journeys** - Lead the customer step-by-step to a goal
147156
- **🎯 Dynamic Guideline Matching** - Context-aware rule application
148157
- **🔧 Reliable Tool Integration** - APIs, databases, external services
149158
- **📊 Conversation Analytics** - Deep insights into agent behavior
150159
- **🔄 Iterative Refinement** - Continuously improve agent responses
151160
- **🛡️ Built-in Guardrails** - Prevent hallucination and off-topic responses
152-
- **📱 React Widget** - Drop-in chat UI for any web app
161+
- **📱 React Widget** - [Drop-in chat UI for any web app](https://github.com/emcie-co/parlant-chat-react)
153162
- **🔍 Full Explainability** - Understand every decision your agent makes
154163

155164
## 📈 Join 1000+ Developers Building Better AI
@@ -166,7 +175,7 @@ _Financial institutions • Healthcare providers • Legal firms • E-commerce
166175

167176
## 🏃‍♂️ Quick Start Paths
168177

169-
<table>
178+
<table border="0">
170179
<tr>
171180
<td><strong>🎯 I want to test it myself</strong></td>
172181
<td><a href="https://www.parlant.io/docs/quickstart/installation">→ 5-minute quickstart</a></td>
@@ -183,9 +192,7 @@ _Financial institutions • Healthcare providers • Legal firms • E-commerce
183192

184193
## 🌟 What Developers Are Saying
185194

186-
> _"Finally! An AI framework that actually works in production. Parlant solved our consistency issues overnight."_ > **— Sarah Chen, Lead AI Engineer @ FinTech Startup**
187-
188-
> _"The difference is night and day. Our agents went from 60% accuracy to 95%+ with Parlant's guideline system."_ > **— Marcus Rodriguez, CTO @ HealthTech Company**
195+
> _"By far the most elegant conversational AI framework that I've come across! Developing with Parlant is pure joy."_ **— Vishal Ahuja, Senior Lead, Customer-Facing Conversational AI @ JPMorgan Chase**
189196
190197
## 🤝 Community & Support
191198

docs/demo.gif

6.27 MB
Loading

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 = "3.0.0"
3+
version = "3.0.1"
44
license = "Apache-2.0"
55
description = ""
66
authors = ["Yam Marcovitz <[email protected]>", "Dor Zohar <[email protected]>"]

src/parlant/adapters/nlp/openai_service.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ async def generate(
132132
) -> SchematicGenerationResult[T]:
133133
with self._logger.scope("OpenAISchematicGenerator"):
134134
with self._logger.operation(
135-
f"LLM Request ({self.schema.__name__})", level=LogLevel.DEBUG
135+
f"LLM Request ({self.schema.__name__})", level=LogLevel.TRACE
136136
):
137137
return await self._do_generate(prompt, hints)
138138

@@ -399,7 +399,7 @@ def extract_tags(category: str) -> list[ModerationTag]:
399399

400400
return mapping.get(category.replace("/", "_").replace("-", "_"), [])
401401

402-
with self._logger.operation("OpenAI Moderation Request", level=LogLevel.DEBUG):
402+
with self._logger.operation("OpenAI Moderation Request", level=LogLevel.TRACE):
403403
response = await self._client.moderations.create(
404404
input=content,
405405
model=self.model_name,

src/parlant/api/app.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
from parlant.api import logs
4242
from parlant.api import canned_responses
4343
from parlant.api.authorization import (
44+
AuthorizationException,
4445
AuthorizationPolicy,
4546
Operation,
4647
RateLimitExceededException,
@@ -178,13 +179,24 @@ async def add_correlation_id(
178179
async def rate_limit_exceeded_handler(
179180
request: Request, exc: RateLimitExceededException
180181
) -> HTTPException:
181-
logger.warning(f"Rate limit exceeded: {exc}")
182+
logger.trace(f"Rate limit exceeded: {exc}")
182183

183184
raise HTTPException(
184185
status_code=status.HTTP_429_TOO_MANY_REQUESTS,
185186
detail=str(exc),
186187
)
187188

189+
@api_app.exception_handler(AuthorizationException)
190+
async def authorization_error_handler(
191+
request: Request, exc: AuthorizationException
192+
) -> HTTPException:
193+
logger.trace(f"Authorization error: {exc}")
194+
195+
raise HTTPException(
196+
status_code=status.HTTP_403_FORBIDDEN,
197+
detail=str(exc),
198+
)
199+
188200
@api_app.exception_handler(ItemNotFoundError)
189201
async def item_not_found_error_handler(
190202
request: Request, exc: ItemNotFoundError

src/parlant/api/authorization.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,8 @@ def name(self) -> str:
219219
return "production"
220220

221221
@override
222-
async def check_permission(self, request: Request, permission: Operation) -> bool:
223-
if permission in [
222+
async def check_permission(self, request: Request, operation: Operation) -> bool:
223+
if operation in [
224224
Operation.CREATE_GUEST_SESSION,
225225
Operation.READ_SESSION,
226226
Operation.LIST_EVENTS,

src/parlant/core/engines/alpha/tool_calling/tool_caller.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ async def _run_tool(
266266
tool_call.arguments,
267267
)
268268

269-
self._logger.trace(
269+
self._logger.debug(
270270
f"Execution::Result: Tool call succeeded ({tool_call.tool_id.to_string()}/{tool_call.id})\n{json.dumps(asdict(result), indent=2, default=str)}"
271271
)
272272
except Exception as exc:

src/parlant/core/engines/alpha/tool_event_generator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ async def generate_events(
104104
_ = preexecution_state # Not used for now, but good to have for extensibility
105105

106106
if not context.state.tool_enabled_guideline_matches:
107-
self._logger.debug("Skipping tool calling; no tools associated with guidelines found")
107+
self._logger.trace("Skipping tool calling; no tools associated with guidelines found")
108108
return ToolEventGenerationResult(generations=[], events=[], insights=ToolInsights())
109109

110110
await context.session_event_emitter.emit_status_event(

src/parlant/core/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
VERSION = "3.0.0"
15+
VERSION = "3.0.1"

0 commit comments

Comments
 (0)