Skip to content

Commit 191fc35

Browse files
Merge branch 'main' into parthiban/fix/ollama-base-url-normalization
2 parents c292f8c + 4bc5d29 commit 191fc35

803 files changed

Lines changed: 174563 additions & 2016 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/docs.json

Lines changed: 1536 additions & 34 deletions
Large diffs are not rendered by default.

docs/edge/ar/changelog.mdx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,46 @@ description: "تحديثات المنتج والتحسينات وإصلاحات
44
icon: "clock"
55
mode: "wide"
66
---
7+
<Update label="27 أغسطس 2026">
8+
## v1.15.18
9+
10+
[عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.18)
11+
12+
## ما الذي تغير
13+
14+
### الميزات
15+
- ترقية تدفقات المحادثة إلى حالة مستقرة
16+
- تسجيل نشر تم إنشاؤه مع UUID المعطى
17+
- تحسين وثائق تدفقات المحادثة وواجهات برمجة التطبيقات
18+
- السماح لإعلان بتسمية تنسيق استجابة الموجه
19+
- السماح لتدفق الدردشة بإعلان شكل حالته الخاصة
20+
- قبول إعدادات LLM على نمط الطاقم في إعلان المحادثة
21+
- الإبلاغ عن إنشاء المشروع مع المعرف المُصنّع
22+
- تسجيل ما إذا كانت العملية تحتوي على مدخلات، دون تسجيل المدخلات
23+
- ملء معرف المشروع من كل أمر مشروع يتم استدعاؤه بواسطة المستخدم
24+
25+
### إصلاحات الأخطاء
26+
- الحفاظ على نتائج الأداة عندما تكون الإجابة النهائية فارغة
27+
- ربط Claude Sonnet 4.6 الافتراضي بنافذة السياق 1M الخاصة به
28+
- رفع الحد الأقصى الافتراضي لـ max_tokens من Anthropic لاستدعاءات الأدوات الكبيرة
29+
- عرض أجزاء محتوى الرسالة كنص، وليس كتمثيل بايثون
30+
- الاحتفاظ بأدوار الرسائل عندما يحصل Agent.kickoff على محادثة
31+
- تخطي روابط الاعتراض على تدفقات crewai-internal
32+
- تسجيل فشل المهام كفشلات، وليس نجاحات
33+
- إصدار دورة حياة التدفق عند استئناف مكتوم
34+
- فتح واجهة المستخدم النصية للمحادثة لتدفق دردشة إعلاني
35+
- تسجيل crew_memory كسلسلة نصية، وليس كقيمة منطقية
36+
- إصدار project_id دائمًا حتى تظل القيم الغائبة والفارغة متميزة
37+
38+
### الوثائق
39+
- توضيح وثائق المراقبة لـ Arize Phoenix
40+
41+
## المساهمون
42+
43+
@Vidit-Ostwal, @arizedatngo, @joaomdmoura, @lorenzejay, @lucasgomide
44+
45+
</Update>
46+
747
<Update label="19 أغسطس 2026">
848
## v1.15.17
949

docs/edge/ar/guides/flows/conversational-flows.mdx

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,6 @@ icon: comments
55
mode: "wide"
66
---
77

8-
<Warning>
9-
**هذه ميزة تجريبية.** يقع سطح `Flow` المحادثاتي
10-
(`conversational = True` و`handle_turn` و`stream_turn` و`ConversationConfig`
11-
و`RouterConfig` و`ConversationState` والرسم المدمج) ضمن
12-
`crewai.experimental`، وقد يتغير قبل أن يصبح مستقراً. ثبّت إصدار CrewAI
13-
إذا كنت تعتمد على سلوك محدد.
14-
</Warning>
15-
168
## نظرة عامة
179

1810
تعامل التطبيقات المحادثية مع كل سطر من المستخدم كـ **تشغيل flow جديد** بنفس **معرّف الجلسة**. توفر CrewAI مساعدات لسجل الرسائل، وتوجيه النية الاختياري، وتأجيل التتبع، والبث المنظّم للجولات، إضافة إلى REPL محلي عبر `flow.chat()`.
@@ -48,7 +40,7 @@ from uuid import uuid4
4840

4941
from crewai import Flow
5042
from crewai.flow import listen
51-
from crewai.experimental.conversational import (
43+
from crewai.flow import (
5244
ConversationConfig,
5345
ConversationState,
5446
)
@@ -129,7 +121,7 @@ result = stream.result
129121

130122
## مساعدات `ChatState` منخفضة المستوى
131123

132-
تظل `ChatState` و`ConversationalConfig` القديمة ومساعدات `crewai.flow.conversation` قابلة للاستيراد للتنسيق المتقدم أو الاختبارات أو الأغلفة المخصصة. وهي منفصلة عن واجهتي `ConversationState` / `ConversationConfig` التجريبيتين، ولا تضيف وسيطي `user_message=` أو `session_id=` إلى `Flow.kickoff()`.
124+
تظل `ChatState` و`ConversationalConfig` القديمة ومساعدات `crewai.flow.conversation` قابلة للاستيراد للتنسيق المتقدم أو الاختبارات أو الأغلفة المخصصة. وهي منفصلة عن واجهتي `ConversationState` / `ConversationConfig`، ولا تضيف وسيطي `user_message=` أو `session_id=` إلى `Flow.kickoff()`.
133125

134126
```python
135127
from crewai.flow import ChatState
@@ -151,7 +143,7 @@ class MyChatState(ChatState):
151143

152144
`ConversationalInputs` هو `TypedDict` لمفاتيح `kickoff(inputs={...})` الاصطلاحية: `id` و`user_message` و`last_intent`.
153145

154-
تخزن `ConversationState` التجريبية `messages` ككائنات `ConversationMessage`، وتوفر أيضاً `current_user_message` و`ended` و`events` و`agent_threads`. استخدم `conversation_messages` عند تمرير سجلها القانوني إلى LLM.
146+
تخزن `ConversationState` رسائل `messages` ككائنات `ConversationMessage`، وتوفر أيضاً `current_user_message` و`ended` و`events` و`agent_threads`. استخدم `conversation_messages` عند تمرير سجلها القانوني إلى LLM.
155147

156148
## API المحادثة على `Flow`
157149

@@ -193,7 +185,7 @@ class MyChatState(ChatState):
193185

194186
### مساعدات الوحدة (`crewai.flow.conversation`)
195187

196-
يمكن استيرادها من `crewai.flow.conversation` للاختبارات أو التنسيق المخصص. تستخدم هذه المساعدات بنية `ConversationalConfig` القديمة؛ كما تمسح `prepare_conversational_turn()` قيمة `last_intent`، بخلاف `handle_turn()` التجريبية التي تحتفظ بها كسياق للموجّه.
188+
يمكن استيرادها من `crewai.flow.conversation` للاختبارات أو التنسيق المخصص. تستخدم هذه المساعدات بنية `ConversationalConfig` القديمة؛ كما تمسح `prepare_conversational_turn()` قيمة `last_intent`، بخلاف `handle_turn()` التي تحتفظ بها كسياق للموجّه.
197189

198190
| الدالة | الوصف |
199191
|--------|--------|
@@ -237,7 +229,7 @@ def route_turn(self, context):
237229

238230
لا تستخدم `@human_feedback` لأسطر المتابعة في الدردشة إلا عند الحاجة لموافقة بشرية على مخرجات خطوة محددة.
239231

240-
## `Flow` المحادثاتي (تجريبي)
232+
## `Flow` المحادثاتي
241233

242234
اشترك في رسم الدردشة المحادثاتي بتعيين `conversational = True` على صنف فرعي من `Flow` أو بتطبيق `@ConversationConfig(...)`. يوفر `Flow` الأساسي عندئذٍ `route_conversation` كنقطة البدء/الموجّه المدمجة، إضافة إلى مستمعي `converse_turn` و`end_conversation`. يظل المستمع المهمل `answer_from_history_turn` متاحاً للتوافق. يدير الإطار `state.messages`، ويمكنه تشغيل LLM للموجّه، ويبقي دفعة trace مفتوحة عبر الجولات. أنت تكتب **المسارات المخصصة**؛ والإطار يتولى الباقي.
243235

@@ -248,7 +240,7 @@ def route_turn(self, context):
248240
```python
249241
from crewai import Flow
250242
from crewai.flow import listen
251-
from crewai.experimental.conversational import (
243+
from crewai.flow import (
252244
ConversationConfig,
253245
ConversationState,
254246
)
@@ -333,7 +325,7 @@ from typing import Literal
333325
from pydantic import BaseModel
334326

335327
from crewai import LLM
336-
from crewai.experimental.conversational import RouterConfig
328+
from crewai.flow import RouterConfig
337329

338330

339331
class MyRoute(BaseModel):
@@ -472,7 +464,7 @@ flow.chat(
472464
from typing import Any
473465

474466
from crewai import Flow
475-
from crewai.experimental.conversational import ConversationState
467+
from crewai.flow import ConversationState
476468

477469

478470
class SupportFlow(Flow[ConversationState]):
@@ -580,7 +572,7 @@ flow.chat(session_id=session_id)
580572

581573
### دورة حياة trace لـ `Flow` المحادثاتي
582574

583-
يستخدم [`Flow` المحادثاتي](#flow-المحادثاتي-تجريبي) التجريبي دورة حياة التتبع نفسها: القيمة الافتراضية لـ `defer_trace_finalization` هي `True`، ولذلك يبقي كل `handle_turn()` trace الجلسة مفتوحاً. تمنع الجولات المؤجلة أيضاً إصدار `flow_failed` لكل جولة؛ وعند حدوث خطأ في جولة أو إلغاء الجلسة، أنهِ الجلسة صراحةً. يغلق ذلك الدفعة بحدث `FlowFinished` على مستوى الجلسة بدلاً من حدث `FlowFailed` لكل جولة. لُف REPL/الحلقة دائماً بـ `try/finally` واستدعِ `flow.finalize_session_traces()` عند الخروج. بدون ذلك، تبقى دفعة trace مفتوحة وقد لا تُصدَّر المحادثة النهائية أبداً.
575+
يستخدم [`Flow` المحادثاتي](#flow-المحادثاتي) دورة حياة التتبع نفسها: القيمة الافتراضية لـ `defer_trace_finalization` هي `True`، ولذلك يبقي كل `handle_turn()` trace الجلسة مفتوحاً. تمنع الجولات المؤجلة أيضاً إصدار `flow_failed` لكل جولة؛ وعند حدوث خطأ في جولة أو إلغاء الجلسة، أنهِ الجلسة صراحةً. يغلق ذلك الدفعة بحدث `FlowFinished` على مستوى الجلسة بدلاً من حدث `FlowFailed` لكل جولة. لُف REPL/الحلقة دائماً بـ `try/finally` واستدعِ `flow.finalize_session_traces()` عند الخروج. بدون ذلك، تبقى دفعة trace مفتوحة وقد لا تُصدَّر المحادثة النهائية أبداً.
584576

585577
## البث
586578

@@ -613,7 +605,7 @@ from crewai.flow import (
613605
start,
614606
)
615607
from crewai.flow.conversation import prepare_conversational_turn
616-
from crewai.experimental.conversational import (
608+
from crewai.flow import (
617609
ConversationConfig,
618610
ConversationState,
619611
RouterConfig,

docs/edge/ar/learn/streaming-runtime-contract.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ result = stream.result
151151

152152
```python
153153
from crewai import Flow
154-
from crewai.experimental.conversational import ConversationConfig, ConversationState
154+
from crewai.flow import ConversationConfig, ConversationState
155155

156156

157157
@ConversationConfig(llm="gpt-4o-mini", defer_trace_finalization=True)

docs/edge/en/changelog.mdx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,46 @@ description: "Product updates, improvements, and bug fixes for CrewAI"
44
icon: "clock"
55
mode: "wide"
66
---
7+
<Update label="Aug 27, 2026">
8+
## v1.15.18
9+
10+
[View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.18)
11+
12+
## What's Changed
13+
14+
### Features
15+
- Promote conversational flows to stable
16+
- Record a created deployment with the given UUID
17+
- Enhance conversational flow documentation and APIs
18+
- Let a declaration name the router's response format
19+
- Let a chat flow declare its own state shape
20+
- Accept crew-style LLM config in a conversational declaration
21+
- Report project creation with the minted ID
22+
- Record whether a run had inputs, without recording the inputs
23+
- Backfill project ID from every user-invoked project command
24+
25+
### Bug Fixes
26+
- Preserve tool results when the final answer is empty
27+
- Map default Claude Sonnet 4.6 to its 1M context window
28+
- Raise Anthropic default max_tokens for large tool calls
29+
- Render message content parts as text, not as a Python repr
30+
- Keep message roles when Agent.kickoff gets a conversation
31+
- Skip interception hooks on crewai-internal flows
32+
- Record task failures as failures, not successes
33+
- Emit the flow lifecycle on a suppressed resume
34+
- Open the conversational TUI for a declarative chat flow
35+
- Record crew_memory as a string, not a bool
36+
- Always emit project_id so absent and empty stay distinct
37+
38+
### Documentation
39+
- Clarify Arize Phoenix observability docs
40+
41+
## Contributors
42+
43+
@Vidit-Ostwal, @arizedatngo, @joaomdmoura, @lorenzejay, @lucasgomide
44+
45+
</Update>
46+
747
<Update label="Aug 19, 2026">
848
## v1.15.17
949

docs/edge/en/guides/flows/conversational-flows.mdx

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,6 @@ icon: comments
55
mode: "wide"
66
---
77

8-
<Warning>
9-
**This is an experimental feature.** The conversational `Flow` surface
10-
(`conversational = True`, `handle_turn`, `stream_turn`, `ConversationConfig`,
11-
`RouterConfig`, `ConversationState`, and the built-in graph) lives under
12-
`crewai.experimental` and may change before it graduates. Pin your CrewAI
13-
version if you depend on specific behavior.
14-
</Warning>
15-
168
## Overview
179

1810
Conversational apps treat each user line as a **new flow run** with the **same session id**. CrewAI adds helpers for message history, optional intent routing, deferred tracing, structured turn streaming, and a local `flow.chat()` REPL.
@@ -48,7 +40,7 @@ from uuid import uuid4
4840

4941
from crewai import Flow
5042
from crewai.flow import listen
51-
from crewai.experimental.conversational import (
43+
from crewai.flow import (
5244
ConversationConfig,
5345
ConversationState,
5446
)
@@ -129,7 +121,7 @@ Decorating a `Flow` subclass with `ConversationConfig` both attaches the chat de
129121

130122
## Lower-level `ChatState` helpers
131123

132-
`ChatState`, the legacy `ConversationalConfig`, and `crewai.flow.conversation` helpers are still importable for advanced orchestration, tests, or custom wrappers. They are separate from the experimental `ConversationState` / `ConversationConfig` API and do not add `user_message=` or `session_id=` keyword arguments to `Flow.kickoff()`.
124+
`ChatState`, the legacy `ConversationalConfig`, and `crewai.flow.conversation` helpers are still importable for advanced orchestration, tests, or custom wrappers. They are separate from the `ConversationState` / `ConversationConfig` API and do not add `user_message=` or `session_id=` keyword arguments to `Flow.kickoff()`.
133125

134126
```python
135127
from crewai.flow import ChatState
@@ -151,7 +143,7 @@ class MyChatState(ChatState):
151143

152144
`ConversationalInputs` is a `TypedDict` for conventional `kickoff(inputs={...})` keys: `id`, `user_message`, `last_intent`.
153145

154-
The experimental `ConversationState` stores `messages` as `ConversationMessage` objects and additionally provides `current_user_message`, `ended`, `events`, and `agent_threads`. Use `conversation_messages` when passing its canonical history to an LLM.
146+
`ConversationState` stores `messages` as `ConversationMessage` objects and additionally provides `current_user_message`, `ended`, `events`, and `agent_threads`. Use `conversation_messages` when passing its canonical history to an LLM.
155147

156148
## `Flow` conversational API
157149

@@ -193,7 +185,7 @@ The experimental `ConversationState` stores `messages` as `ConversationMessage`
193185

194186
### Module helpers (`crewai.flow.conversation`)
195187

196-
Importable from `crewai.flow.conversation` for tests or custom orchestration. These helpers use the legacy `ConversationalConfig` shape; `prepare_conversational_turn()` also clears `last_intent`, unlike experimental `handle_turn()`, which preserves it as router context.
188+
Importable from `crewai.flow.conversation` for tests or custom orchestration. These helpers use the legacy `ConversationalConfig` shape; `prepare_conversational_turn()` also clears `last_intent`, unlike `handle_turn()`, which preserves it as router context.
197189

198190
| Function | Description |
199191
|----------|-------------|
@@ -237,7 +229,7 @@ Each `handle_turn()` completes one graph run, and the conversation continues wit
237229

238230
Do **not** use `@human_feedback` for follow-up chat lines unless a human must approve a specific step output before it is shown.
239231

240-
## Conversational `Flow` (experimental)
232+
## Conversational `Flow`
241233

242234
Opt into the conversational chat graph by setting `conversational = True` on a `Flow` subclass or applying `@ConversationConfig(...)`. The base `Flow` then supplies `route_conversation` as the built-in start/router plus the `converse_turn` and `end_conversation` listeners. The deprecated `answer_from_history_turn` listener remains available for compatibility. The framework manages `state.messages`, can drive a router LLM, and keeps the trace batch open across turns. You write the **custom routes**; the framework owns the rest.
243235

@@ -248,7 +240,7 @@ Use this when you want a multi-turn chat with a router and per-route handlers wi
248240
```python
249241
from crewai import Flow
250242
from crewai.flow import listen
251-
from crewai.experimental.conversational import (
243+
from crewai.flow import (
252244
ConversationConfig,
253245
ConversationState,
254246
)
@@ -333,7 +325,7 @@ from typing import Literal
333325
from pydantic import BaseModel
334326

335327
from crewai import LLM
336-
from crewai.experimental.conversational import RouterConfig
328+
from crewai.flow import RouterConfig
337329

338330

339331
class MyRoute(BaseModel):
@@ -471,7 +463,7 @@ To run side effects (event bus setup, telemetry) on every routing decision, over
471463
from typing import Any
472464

473465
from crewai import Flow
474-
from crewai.experimental.conversational import ConversationState
466+
from crewai.flow import ConversationState
475467

476468

477469
class SupportFlow(Flow[ConversationState]):
@@ -581,7 +573,7 @@ the session ends.
581573

582574
### Conversational `Flow` trace lifecycle
583575

584-
The experimental [conversational `Flow`](#conversational-flow-experimental) uses the same tracing lifecycle: `defer_trace_finalization` defaults to `True`, so each `handle_turn()` keeps the session trace open. Deferred turns also suppress per-turn `flow_failed`; on a turn error or session abort, finalize the session explicitly. This closes the batch with the session-level `FlowFinished` event rather than a per-turn `FlowFailed` event. Always wrap your REPL/loop in `try/finally` and call `flow.finalize_session_traces()` on exit. Without it, the trace batch stays open and the final conversation may never export.
576+
The [conversational `Flow`](#conversational-flow) uses the same tracing lifecycle: `defer_trace_finalization` defaults to `True`, so each `handle_turn()` keeps the session trace open. Deferred turns also suppress per-turn `flow_failed`; on a turn error or session abort, finalize the session explicitly. This closes the batch with the session-level `FlowFinished` event rather than a per-turn `FlowFailed` event. Always wrap your REPL/loop in `try/finally` and call `flow.finalize_session_traces()` on exit. Without it, the trace batch stays open and the final conversation may never export.
585577

586578
## Streaming
587579

@@ -614,7 +606,7 @@ from crewai.flow import (
614606
start,
615607
)
616608
from crewai.flow.conversation import prepare_conversational_turn
617-
from crewai.experimental.conversational import (
609+
from crewai.flow import (
618610
ConversationConfig,
619611
ConversationState,
620612
RouterConfig,

docs/edge/en/learn/streaming-runtime-contract.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ Conversational Flows can stream one user turn with `stream_turn()`:
151151

152152
```python
153153
from crewai import Flow
154-
from crewai.experimental.conversational import ConversationConfig, ConversationState
154+
from crewai.flow import ConversationConfig, ConversationState
155155

156156

157157
@ConversationConfig(llm="gpt-4o-mini", defer_trace_finalization=True)

0 commit comments

Comments
 (0)