diff --git a/docs/ar/changelog.mdx b/docs/ar/changelog.mdx index ff996fff3..8fbb2d750 100644 --- a/docs/ar/changelog.mdx +++ b/docs/ar/changelog.mdx @@ -4,6 +4,28 @@ description: "تحديثات المنتج والتحسينات وإصلاحات icon: "clock" mode: "wide" --- + + ## v1.13.0a7 + + [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a7) + + ## ما الذي تغير + + ### الميزات + - إضافة امتداد A2UI مع دعم v0.8/v0.9، والمخططات، والوثائق + + ### إصلاحات الأخطاء + - إصلاح بادئات الرؤية متعددة الأنماط عن طريق إضافة GPT-5 وسلسلة o + + ### الوثائق + - تحديث سجل التغييرات والإصدار لـ v1.13.0a6 + + ## المساهمون + + @alex-clawd, @greysonlalonde, @joaomdmoura + + + ## v1.13.0a6 diff --git a/docs/en/changelog.mdx b/docs/en/changelog.mdx index b62dceebb..037db203e 100644 --- a/docs/en/changelog.mdx +++ b/docs/en/changelog.mdx @@ -4,6 +4,28 @@ description: "Product updates, improvements, and bug fixes for CrewAI" icon: "clock" mode: "wide" --- + + ## v1.13.0a7 + + [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a7) + + ## What's Changed + + ### Features + - Add A2UI extension with v0.8/v0.9 support, schemas, and docs + + ### Bug Fixes + - Fix multimodal vision prefixes by adding GPT-5 and o-series + + ### Documentation + - Update changelog and version for v1.13.0a6 + + ## Contributors + + @alex-clawd, @greysonlalonde, @joaomdmoura + + + ## v1.13.0a6 diff --git a/docs/ko/changelog.mdx b/docs/ko/changelog.mdx index 957d51723..f4f30ae07 100644 --- a/docs/ko/changelog.mdx +++ b/docs/ko/changelog.mdx @@ -4,6 +4,28 @@ description: "CrewAI의 제품 업데이트, 개선 사항 및 버그 수정" icon: "clock" mode: "wide" --- + + ## v1.13.0a7 + + [GitHub 릴리스 보기](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a7) + + ## 변경 사항 + + ### 기능 + - v0.8/v0.9 지원, 스키마 및 문서가 포함된 A2UI 확장 추가 + + ### 버그 수정 + - GPT-5 및 o-series를 추가하여 다중 모드 비전 접두사 수정 + + ### 문서 + - v1.13.0a6에 대한 변경 로그 및 버전 업데이트 + + ## 기여자 + + @alex-clawd, @greysonlalonde, @joaomdmoura + + + ## v1.13.0a6 diff --git a/docs/pt-BR/changelog.mdx b/docs/pt-BR/changelog.mdx index 2126ae851..3173bcf1b 100644 --- a/docs/pt-BR/changelog.mdx +++ b/docs/pt-BR/changelog.mdx @@ -4,6 +4,28 @@ description: "Atualizações de produto, melhorias e correções do CrewAI" icon: "clock" mode: "wide" --- + + ## v1.13.0a7 + + [Ver release no GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a7) + + ## O que Mudou + + ### Funcionalidades + - Adicionar a extensão A2UI com suporte a v0.8/v0.9, esquemas e documentação + + ### Correções de Bugs + - Corrigir prefixos de visão multimodal adicionando GPT-5 e o-series + + ### Documentação + - Atualizar changelog e versão para v1.13.0a6 + + ## Contribuidores + + @alex-clawd, @greysonlalonde, @joaomdmoura + + + ## v1.13.0a6 diff --git a/lib/crewai-files/src/crewai_files/__init__.py b/lib/crewai-files/src/crewai_files/__init__.py index 1b79e738c..26da7d77f 100644 --- a/lib/crewai-files/src/crewai_files/__init__.py +++ b/lib/crewai-files/src/crewai_files/__init__.py @@ -152,4 +152,4 @@ __all__ = [ "wrap_file_source", ] -__version__ = "1.13.0a6" +__version__ = "1.13.0a7" diff --git a/lib/crewai-tools/pyproject.toml b/lib/crewai-tools/pyproject.toml index ef65d3a54..30da18c45 100644 --- a/lib/crewai-tools/pyproject.toml +++ b/lib/crewai-tools/pyproject.toml @@ -11,7 +11,7 @@ dependencies = [ "pytube~=15.0.0", "requests~=2.32.5", "docker~=7.1.0", - "crewai==1.13.0a6", + "crewai==1.13.0a7", "tiktoken~=0.8.0", "beautifulsoup4~=4.13.4", "python-docx~=1.2.0", diff --git a/lib/crewai-tools/src/crewai_tools/__init__.py b/lib/crewai-tools/src/crewai_tools/__init__.py index 1c0d7271a..292596708 100644 --- a/lib/crewai-tools/src/crewai_tools/__init__.py +++ b/lib/crewai-tools/src/crewai_tools/__init__.py @@ -309,4 +309,4 @@ __all__ = [ "ZapierActionTools", ] -__version__ = "1.13.0a6" +__version__ = "1.13.0a7" diff --git a/lib/crewai/pyproject.toml b/lib/crewai/pyproject.toml index 705cdcb6f..0133eaffa 100644 --- a/lib/crewai/pyproject.toml +++ b/lib/crewai/pyproject.toml @@ -54,7 +54,7 @@ Repository = "https://github.com/crewAIInc/crewAI" [project.optional-dependencies] tools = [ - "crewai-tools==1.13.0a6", + "crewai-tools==1.13.0a7", ] embeddings = [ "tiktoken~=0.8.0" diff --git a/lib/crewai/src/crewai/__init__.py b/lib/crewai/src/crewai/__init__.py index e7a039caa..64d459358 100644 --- a/lib/crewai/src/crewai/__init__.py +++ b/lib/crewai/src/crewai/__init__.py @@ -10,6 +10,7 @@ from crewai.agent.core import Agent from crewai.agent.planning_config import PlanningConfig from crewai.crew import Crew from crewai.crews.crew_output import CrewOutput +from crewai.execution_context import ExecutionContext from crewai.flow.flow import Flow from crewai.knowledge.knowledge import Knowledge from crewai.llm import LLM @@ -44,7 +45,7 @@ def _suppress_pydantic_deprecation_warnings() -> None: _suppress_pydantic_deprecation_warnings() -__version__ = "1.13.0a6" +__version__ = "1.13.0a7" _telemetry_submitted = False @@ -178,6 +179,7 @@ __all__ = [ "BaseLLM", "Crew", "CrewOutput", + "ExecutionContext", "Flow", "Knowledge", "LLMGuardrail", diff --git a/lib/crewai/src/crewai/cli/templates/crew/pyproject.toml b/lib/crewai/src/crewai/cli/templates/crew/pyproject.toml index 8920f2052..a14ab19cd 100644 --- a/lib/crewai/src/crewai/cli/templates/crew/pyproject.toml +++ b/lib/crewai/src/crewai/cli/templates/crew/pyproject.toml @@ -5,7 +5,7 @@ description = "{{name}} using crewAI" authors = [{ name = "Your Name", email = "you@example.com" }] requires-python = ">=3.10,<3.14" dependencies = [ - "crewai[tools]==1.13.0a6" + "crewai[tools]==1.13.0a7" ] [project.scripts] diff --git a/lib/crewai/src/crewai/cli/templates/flow/pyproject.toml b/lib/crewai/src/crewai/cli/templates/flow/pyproject.toml index 08346e304..914232bb0 100644 --- a/lib/crewai/src/crewai/cli/templates/flow/pyproject.toml +++ b/lib/crewai/src/crewai/cli/templates/flow/pyproject.toml @@ -5,7 +5,7 @@ description = "{{name}} using crewAI" authors = [{ name = "Your Name", email = "you@example.com" }] requires-python = ">=3.10,<3.14" dependencies = [ - "crewai[tools]==1.13.0a6" + "crewai[tools]==1.13.0a7" ] [project.scripts] diff --git a/lib/crewai/src/crewai/cli/templates/tool/pyproject.toml b/lib/crewai/src/crewai/cli/templates/tool/pyproject.toml index 178537741..21457ceda 100644 --- a/lib/crewai/src/crewai/cli/templates/tool/pyproject.toml +++ b/lib/crewai/src/crewai/cli/templates/tool/pyproject.toml @@ -5,7 +5,7 @@ description = "Power up your crews with {{folder_name}}" readme = "README.md" requires-python = ">=3.10,<3.14" dependencies = [ - "crewai[tools]==1.13.0a6" + "crewai[tools]==1.13.0a7" ] [tool.crewai] diff --git a/lib/crewai/src/crewai/events/base_events.py b/lib/crewai/src/crewai/events/base_events.py index 6eeaa06e8..bceeccbf6 100644 --- a/lib/crewai/src/crewai/events/base_events.py +++ b/lib/crewai/src/crewai/events/base_events.py @@ -25,13 +25,25 @@ def _get_or_create_counter() -> Iterator[int]: return counter +_last_emitted: contextvars.ContextVar[int] = contextvars.ContextVar( + "_last_emitted", default=0 +) + + def get_next_emission_sequence() -> int: """Get the next emission sequence number. Returns: The next sequence number. """ - return next(_get_or_create_counter()) + seq = next(_get_or_create_counter()) + _last_emitted.set(seq) + return seq + + +def get_emission_sequence() -> int: + """Get the current emission sequence value without incrementing.""" + return _last_emitted.get() def reset_emission_counter() -> None: @@ -41,6 +53,14 @@ def reset_emission_counter() -> None: """ counter: Iterator[int] = itertools.count(start=1) _emission_counter.set(counter) + _last_emitted.set(0) + + +def set_emission_counter(start: int) -> None: + """Set the emission counter to resume from a given value.""" + counter: Iterator[int] = itertools.count(start=start + 1) + _emission_counter.set(counter) + _last_emitted.set(start) class BaseEvent(BaseModel): diff --git a/lib/crewai/src/crewai/execution_context.py b/lib/crewai/src/crewai/execution_context.py new file mode 100644 index 000000000..7bad1fd2c --- /dev/null +++ b/lib/crewai/src/crewai/execution_context.py @@ -0,0 +1,80 @@ +"""Checkpointable execution context for the crewAI runtime. + +Captures the ContextVar state needed to resume execution from a checkpoint. +Used by the RootModel (step 5) to include execution context in snapshots. +""" + +from __future__ import annotations + +from typing import Any + +from pydantic import BaseModel, Field + +from crewai.context import ( + _current_task_id, + _platform_integration_token, +) +from crewai.events.base_events import ( + get_emission_sequence, + set_emission_counter, +) +from crewai.events.event_context import ( + _event_id_stack, + _last_event_id, + _triggering_event_id, +) +from crewai.flow.flow_context import ( + current_flow_id, + current_flow_method_name, + current_flow_request_id, +) + + +class ExecutionContext(BaseModel): + """Snapshot of ContextVar state required for checkpoint/resume.""" + + current_task_id: str | None = Field(default=None) + flow_request_id: str | None = Field(default=None) + flow_id: str | None = Field(default=None) + flow_method_name: str = Field(default="unknown") + + event_id_stack: tuple[tuple[str, str], ...] = Field(default=()) + last_event_id: str | None = Field(default=None) + triggering_event_id: str | None = Field(default=None) + emission_sequence: int = Field(default=0) + + feedback_callback_info: dict[str, Any] | None = Field(default=None) + platform_token: str | None = Field(default=None) + + +def capture_execution_context( + feedback_callback_info: dict[str, Any] | None = None, +) -> ExecutionContext: + """Read all checkpoint-required ContextVars into an ExecutionContext.""" + return ExecutionContext( + current_task_id=_current_task_id.get(), + flow_request_id=current_flow_request_id.get(), + flow_id=current_flow_id.get(), + flow_method_name=current_flow_method_name.get(), + event_id_stack=_event_id_stack.get(), + last_event_id=_last_event_id.get(), + triggering_event_id=_triggering_event_id.get(), + emission_sequence=get_emission_sequence(), + feedback_callback_info=feedback_callback_info, + platform_token=_platform_integration_token.get(), + ) + + +def apply_execution_context(ctx: ExecutionContext) -> None: + """Write an ExecutionContext back into the ContextVars.""" + _current_task_id.set(ctx.current_task_id) + current_flow_request_id.set(ctx.flow_request_id) + current_flow_id.set(ctx.flow_id) + current_flow_method_name.set(ctx.flow_method_name) + + _event_id_stack.set(ctx.event_id_stack) + _last_event_id.set(ctx.last_event_id) + _triggering_event_id.set(ctx.triggering_event_id) + set_emission_counter(ctx.emission_sequence) + + _platform_integration_token.set(ctx.platform_token) diff --git a/lib/devtools/src/crewai_devtools/__init__.py b/lib/devtools/src/crewai_devtools/__init__.py index 6e4f62e46..d878b722b 100644 --- a/lib/devtools/src/crewai_devtools/__init__.py +++ b/lib/devtools/src/crewai_devtools/__init__.py @@ -1,3 +1,3 @@ """CrewAI development tools.""" -__version__ = "1.13.0a6" +__version__ = "1.13.0a7"