diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 40b66a54471c..74595b02e8ee 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -32,23 +32,23 @@ jobs: version: [ # For main use the workflow target - { ref: "${{github.ref}}", dest-dir: dev, uv-version: "0.5.13" }, - { ref: "v0.4.0", dest-dir: stable, uv-version: "0.5.13" }, - { ref: "v0.4.0.dev0", dest-dir: "0.4.0.dev0", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev1", dest-dir: "0.4.0.dev1", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev2", dest-dir: "0.4.0.dev2", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev3", dest-dir: "0.4.0.dev3", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev4", dest-dir: "0.4.0.dev4", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev5", dest-dir: "0.4.0.dev5", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev6", dest-dir: "0.4.0.dev6", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev7", dest-dir: "0.4.0.dev7", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev8", dest-dir: "0.4.0.dev8", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev9", dest-dir: "0.4.0.dev9", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev10", dest-dir: "0.4.0.dev10", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev11", dest-dir: "0.4.0.dev11", uv-version: "0.5.11" }, - { ref: "v0.4.0.dev12", dest-dir: "0.4.0.dev12", uv-version: "0.5.13" }, - { ref: "v0.4.0.dev13", dest-dir: "0.4.0.dev13", uv-version: "0.5.13" }, - { ref: "v0.4.0", dest-dir: "0.4.0", uv-version: "0.5.13" }, + { ref: "${{github.ref}}", dest-dir: dev, uv-version: "0.5.13", sphinx-release-override: "dev" }, + { ref: "v0.4.0.post1", dest-dir: stable, uv-version: "0.5.13", sphinx-release-override: "stable" }, + { ref: "v0.4.0.dev0", dest-dir: "0.4.0.dev0", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev1", dest-dir: "0.4.0.dev1", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev2", dest-dir: "0.4.0.dev2", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev3", dest-dir: "0.4.0.dev3", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev4", dest-dir: "0.4.0.dev4", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev5", dest-dir: "0.4.0.dev5", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev6", dest-dir: "0.4.0.dev6", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev7", dest-dir: "0.4.0.dev7", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev8", dest-dir: "0.4.0.dev8", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev9", dest-dir: "0.4.0.dev9", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev10", dest-dir: "0.4.0.dev10", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev11", dest-dir: "0.4.0.dev11", uv-version: "0.5.11", sphinx-release-override: "" }, + { ref: "v0.4.0.dev12", dest-dir: "0.4.0.dev12", uv-version: "0.5.13", sphinx-release-override: "" }, + { ref: "v0.4.0.dev13", dest-dir: "0.4.0.dev13", uv-version: "0.5.13", sphinx-release-override: "" }, + { ref: "v0.4.0.post1", dest-dir: "0.4.0", uv-version: "0.5.13", sphinx-release-override: "" }, ] steps: - name: Checkout @@ -73,6 +73,7 @@ jobs: env: PY_DOCS_DIR: ${{ matrix.version.dest-dir }}/ PY_SWITCHER_VERSION: ${{ matrix.version.dest-dir }} + SPHINX_RELEASE_OVERRIDE: ${{ matrix.version.sphinx-release-override }} - uses: actions/upload-artifact@v4 with: path: "./python/docs-staging" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e9705198c74d..c2e781239c48 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -118,3 +118,19 @@ Args: agent_type (str): Agent type to handle this subscription """ ``` + +## Docs when adding a new API + +Now that 0.4.0 is out, we should ensure the docs between versions are easy to navigate. To this end, added or changed APIs should have the following added to their docstrings respectively: + +```rst +.. versionadded:: v0.4.1 + + Here's a version added message. + +.. versionchanged:: v0.4.1 + + Here's a version changed message. +``` + +See [here](https://pydata-sphinx-theme.readthedocs.io/en/stable/examples/kitchen-sink/admonitions.html#versionadded) for how they are rendered. diff --git a/docs/switcher.json b/docs/switcher.json index 3d94443e6a4e..f90f52ef0847 100644 --- a/docs/switcher.json +++ b/docs/switcher.json @@ -1,7 +1,7 @@ [ { "name": "0.4.0 (stable)", - "version": "0.4.0", + "version": "stable", "url": "/autogen/stable/", "preferred": true }, diff --git a/python/packages/autogen-core/docs/src/_static/banner-override.js b/python/packages/autogen-core/docs/src/_static/banner-override.js new file mode 100644 index 000000000000..e67243f03901 --- /dev/null +++ b/python/packages/autogen-core/docs/src/_static/banner-override.js @@ -0,0 +1,11 @@ +var version = DOCUMENTATION_OPTIONS.VERSION; +if (version === "stable") { + var styles = ` +#bd-header-version-warning { + display: none; +} + ` + var styleSheet = document.createElement("style") + styleSheet.textContent = styles + document.head.appendChild(styleSheet) +} \ No newline at end of file diff --git a/python/packages/autogen-core/docs/src/_templates/version-banner-override.html b/python/packages/autogen-core/docs/src/_templates/version-banner-override.html new file mode 100644 index 000000000000..1fa4844f966c --- /dev/null +++ b/python/packages/autogen-core/docs/src/_templates/version-banner-override.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/packages/autogen-core/docs/src/conf.py b/python/packages/autogen-core/docs/src/conf.py index 7aa75ebd1acc..fc46900dc004 100644 --- a/python/packages/autogen-core/docs/src/conf.py +++ b/python/packages/autogen-core/docs/src/conf.py @@ -17,8 +17,12 @@ copyright = "2024, Microsoft" author = "Microsoft" version = "0.4" -release = autogen_core.__version__ +release_override = os.getenv("SPHINX_RELEASE_OVERRIDE") +if release_override is None or release_override == "": + release = autogen_core.__version__ +else: + release = release_override sys.path.append(str(Path(".").resolve())) @@ -117,7 +121,7 @@ "footer_start": ["copyright"], "footer_center": ["footer-middle-links"], - "footer_end": ["theme-version"], + "footer_end": ["theme-version", "version-banner-override"], "pygments_light_style": "xcode", "pygments_dark_style": "monokai", "navbar_start": ["navbar-logo", "version-switcher"], @@ -131,7 +135,7 @@ ] } -html_js_files = ["custom-icon.js"] +html_js_files = ["custom-icon.js", "banner-override.js"] html_sidebars = { "packages/index": [], "user-guide/core-user-guide/**": ["sidebar-nav-bs-core"], diff --git a/python/packages/autogen-core/docs/src/user-guide/core-user-guide/design-patterns/intro.md b/python/packages/autogen-core/docs/src/user-guide/core-user-guide/design-patterns/intro.md index 5fad8db2506c..b8f50d799a98 100644 --- a/python/packages/autogen-core/docs/src/user-guide/core-user-guide/design-patterns/intro.md +++ b/python/packages/autogen-core/docs/src/user-guide/core-user-guide/design-patterns/intro.md @@ -9,7 +9,7 @@ like software development. A multi-agent design pattern is a structure that emerges from message protocols: it describes how agents interact with each other to solve problems. -For example, the [tool-equiped agent](../framework/tools.ipynb#tool-equipped-agent) in +For example, the [tool-equipped agent](../framework/tools.ipynb#tool-equipped-agent) in the previous section employs a design pattern called ReAct, which involves an agent interacting with tools. diff --git a/python/packages/autogen-core/src/autogen_core/_component_config.py b/python/packages/autogen-core/src/autogen_core/_component_config.py index f5426428c90c..1045282921f2 100644 --- a/python/packages/autogen-core/src/autogen_core/_component_config.py +++ b/python/packages/autogen-core/src/autogen_core/_component_config.py @@ -2,7 +2,7 @@ import importlib import warnings -from typing import Any, ClassVar, Dict, Generic, Literal, Protocol, Type, cast, overload, runtime_checkable +from typing import Any, ClassVar, Dict, Generic, List, Literal, Protocol, Type, cast, overload, runtime_checkable from pydantic import BaseModel from typing_extensions import Self, TypeVar @@ -243,9 +243,9 @@ def _from_config(cls, config: Config) -> MyComponent: return cls(value=config.value) """ - required_class_vars = ["component_config_schema", "component_type"] + required_class_vars: ClassVar[List[str]] = ["component_config_schema", "component_type"] - def __init_subclass__(cls, **kwargs: Any): + def __init_subclass__(cls, **kwargs: Any) -> None: super().__init_subclass__(**kwargs) # TODO: validate provider is loadable diff --git a/python/packages/autogen-ext/src/autogen_ext/agents/openai/_openai_assistant_agent.py b/python/packages/autogen-ext/src/autogen_ext/agents/openai/_openai_assistant_agent.py index e4d359cf3eff..d738a5fae894 100644 --- a/python/packages/autogen-ext/src/autogen_ext/agents/openai/_openai_assistant_agent.py +++ b/python/packages/autogen-ext/src/autogen_ext/agents/openai/_openai_assistant_agent.py @@ -109,6 +109,8 @@ class OpenAIAssistantAgent(BaseChatAgent): * Vector store integration for efficient file search * Automatic file parsing and embedding + You can use an existing thread or assistant by providing the `thread_id` or `assistant_id` parameters. + Example: .. code-block:: python @@ -160,6 +162,7 @@ async def example(): instructions (str): System instructions for the assistant tools (Optional[Iterable[Union[Literal["code_interpreter", "file_search"], Tool | Callable[..., Any] | Callable[..., Awaitable[Any]]]]]): Tools the assistant can use assistant_id (Optional[str]): ID of existing assistant to use + thread_id (Optional[str]): ID of existing thread to use metadata (Optional[object]): Additional metadata for the assistant response_format (Optional[AssistantResponseFormatOptionParam]): Response format settings temperature (Optional[float]): Temperature for response generation diff --git a/python/packages/autogen-ext/src/autogen_ext/py.typed b/python/packages/autogen-ext/src/autogen_ext/py.typed new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/samples/agentchat_chainlit/README.md b/python/samples/agentchat_chainlit/README.md index 3f297158598c..d03ca98e0283 100644 --- a/python/samples/agentchat_chainlit/README.md +++ b/python/samples/agentchat_chainlit/README.md @@ -104,5 +104,5 @@ team = RoundRobinGroupChat( In this example, we created a basic AutoGen team with a single agent in a RoundRobinGroupChat team. There are a few ways you can extend this example: - Add more [agents](https://microsoft.github.io/autogen/dev/user-guide/agentchat-user-guide/tutorial/agents.html) to the team. -- Explor custom agents that sent multimodal messages +- Explore custom agents that sent multimodal messages - Explore more [team](https://microsoft.github.io/autogen/dev/user-guide/agentchat-user-guide/tutorial/teams.html) types beyond the `RoundRobinGroupChat`.