import { Callout } from "nextra/components"

<Callout type="warning">
This part of the documentation is for experimental features. The APIs and functionalities are subject to frequent change.
</Callout>

<Callout type="info">
Sotopia is transitioning to the AACT (an actor model library with strong typing and validation) engine for its experimental features. Essentially, for each agent, we have an individual process running the agent's logic. Why are we not using asyncio directly? (Note that's basically what currently popular multi-agent frameworks like Autogen, Swarm, CrewAI etc. are using).

Asyncio requires non-blocking implementation of the agent's logic. Imagine two agents chatting with each other. If we use asyncio directly, we need to wait for the first agent to finish its turn before the second agent can respond. This is not a natural interaction flow. Like if one agent is taking forever in typing, the other agent will have to wait. That's totally fine for cases where the agents are "cooperative" and the interaction is "turn-based."

But that's really not the case for social simulations.

And what if we have 1000 agents? Things will get even worse as the interactions and dependencies between the agents become more complex.

Instead, we advocate this "real-time" async interaction flow, where each agent is independent and they can do their own thing regardless of the other agents.

And we believe this new engine will be the future of more realistic social simulations.
So here we are! In this very exciting experimental phase. And we are looking for your feedback and help!
</Callout>

The experimental APIs of Sotopia are intended for quickly prototyping and experimenting with new functionalities,
without breaking the existing stable APIs. But we will still maintain the quality of the code for these features.
Feel free to raise an issue if you find any bugs or wants more features in the experimental APIs.

# Experimetal APIs
The experimental APIs are in different states:

- *scheduled*: the APIs will be merged into next minor releases.
- *implemented*: the APIs are implemented and can be used, which might be merged into the stable APIs in the next few minor releases.
- *planned*: the APIs are planned and will be implemented in the future.
- *idealized*: the APIs are idealized and might be implemented in the future.

Here are the experimental APIs:
- [Agents](/experimental/agents) (*implemented*): aact-based asynchronous agents that don't follow OpenAI Gym's turn-based formulation.
- Engines (*planned*): aact-based asynchronous environment engines. This would include
    - [Orchestrator](https://github.com/sotopia-lab/sotopia/issues/231): an engine base class for engines that dictates the orders and turns of the agents.
    - [Evaluator](https://github.com/sotopia-lab/sotopia/issues/232): an engine base class for engines that evaluates the agents' performance.
    - API Engine: an engine that interacts with REST APIs.
- Generation APIs (*planned*): experimental generation APIs
