-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
doc: API endpoints for sotopia #242
Merged
Merged
Changes from 8 commits
Commits
Show all changes
21 commits
Select commit
Hold shift + click to select a range
decacd9
api doc
XuhuiZhou b62a554
add PUT
XuhuiZhou 1942a14
add an temp example for websocket
XuhuiZhou a5e0cc2
websocket
XuhuiZhou 1cddc10
update readme
XuhuiZhou 4cd747f
Update README.md
ProKil 2342dc5
update websocket live simulation api doc
bugsz 4977993
[autofix.ci] apply automated fixes
autofix-ci[bot] 215cf8c
update websocket doc
bugsz ea2f92c
Merge branch 'feature/sotopia-ui-doc' of https://github.com/sotopia-lβ¦
bugsz ae7f7a8
add api server with websocket as well as a client
bugsz f6aeecf
fix mypy errors
bugsz ead08b4
support stopping the chat
bugsz ed6e437
add 404 to the status code
bugsz c345711
fix mypy issue
bugsz cdc19ec
remove files
XuhuiZhou 1cb3759
update requirement
XuhuiZhou 644249b
update return message from the server
bugsz 859eda2
add restful error code
bugsz 2cc44cc
Update README.md
bugsz 80063cc
remove paks
XuhuiZhou File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
# Sotopia UI | ||
XuhuiZhou marked this conversation as resolved.
Show resolved
Hide resolved
|
||
> [!CAUTION] | ||
> Work in progress: the API endpoints are being implemented. And will be released in the future major version. | ||
|
||
## FastAPI Server | ||
|
||
The API server is a FastAPI application that is used to connect the Sotopia UI to the Sotopia backend. | ||
This could also help with other projects that need to connect to the Sotopia backend through HTTP requests. | ||
|
||
Here are some initial design of the API server: | ||
|
||
### Getting Data from the API Server | ||
|
||
#### GET /scenarios | ||
|
||
Get all scenarios. | ||
|
||
returns: | ||
- scenarios: list[EnvironmentProfile] | ||
|
||
#### GET /scenarios/?get_by={id|tag}/{scenario_id|scenario_tag} | ||
|
||
Get scenarios by scenario_tag. | ||
parameters: | ||
- get_by: Literal["id", "tag"] | ||
- scenario_id: str or scenario_tag: str | ||
(This scenario tag could be a keyword; so people can search for scenarios by keywords) | ||
|
||
returns: | ||
- scenarios: list[EnvironmentProfile] | ||
|
||
#### GET /agents | ||
|
||
Get all agents. | ||
|
||
returns: | ||
- agents: list[AgentProfile] | ||
|
||
#### GET /agents/?get_by={id|gender|occupation}/{value} | ||
|
||
Get agents by id, gender, or occupation. | ||
parameters: | ||
- get_by: Literal["id", "gender", "occupation"] | ||
- value: str (agent_id, agent_gender, or agent_occupation) | ||
|
||
returns: | ||
- agents: list[AgentProfile] | ||
|
||
|
||
#### GET /episodes | ||
|
||
Get all episodes. | ||
|
||
returns: | ||
- episodes: list[Episode] | ||
|
||
#### GET /episodes/?get_by={id|tag}/{episode_id|episode_tag} | ||
|
||
Get episode by episode_tag. | ||
XuhuiZhou marked this conversation as resolved.
Show resolved
Hide resolved
|
||
parameters: | ||
- get_by: Literal["id", "tag"] | ||
- episode_id: str or episode_tag: str | ||
|
||
returns: | ||
- episodes: list[Episode] | ||
|
||
|
||
### Sending Data to the API Server | ||
|
||
#### POST /agents/ | ||
|
||
Send agent profile to the API server. | ||
Request Body: | ||
AgentProfile | ||
|
||
returns: | ||
- agent_id: str | ||
|
||
#### POST /scenarios/ | ||
|
||
Send scenario profile to the API server. | ||
Request Body: | ||
EnvironmentProfile | ||
|
||
returns: | ||
- scenario_id: str | ||
|
||
### Updating Data in the API Server | ||
|
||
#### PUT /agents/{agent_id} | ||
|
||
Update agent profile in the API server. | ||
Request Body: | ||
AgentProfile | ||
|
||
returns: | ||
- agent_id: str | ||
|
||
|
||
#### PUT /scenarios/{scenario_id} | ||
|
||
Update scenario profile in the API server. | ||
Request Body: | ||
EnvironmentProfile | ||
|
||
returns: | ||
- scenario_id: str | ||
|
||
### Initiating a new non-streaming simulation episode | ||
|
||
#### POST /episodes/ | ||
|
||
```python | ||
class SimulationEpisodeInitiation(BaseModel): | ||
scenario_id: str | ||
agent_ids: list[str] | ||
episode_tag: str | ||
models: list[str] | ||
``` | ||
|
||
Send episode profile to the API server. | ||
Request Body: | ||
SimulationEpisodeInitiation | ||
|
||
returns: | ||
- episode_id: str (This is the id of the episode that will be used to get the episode data, saved in the redis database) | ||
|
||
### Initiating a new interactive streaming simulation episode (this operation will open a websocket connection) | ||
|
||
We use the websocket connection to send the simulation step-by-step results to the UI. | ||
ProKil marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Please see an example protocol [here](https://claude.site/artifacts/322011f6-597f-4819-8afb-bf8137dfb56a) | ||
ProKil marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
#### WEBSOCKET /ws/simulate/?token={token} | ||
|
||
Parameters: | ||
- Token: String. User authentication token. Each token maps to a unique session. | ||
|
||
returns: | ||
- msg: WSMessage | ||
|
||
**WSMessage** | ||
```json | ||
{ | ||
"type": "WSMessageType", | ||
"data": { | ||
// Message-specific payload | ||
} | ||
} | ||
``` | ||
|
||
**WSMessageType** | ||
| Type | Direction | Description | | ||
|-----------|--------|-------------| | ||
| SERVER_MSG | Server β Client | Standard message from server (payload: `messageForRendering` [here](https://github.com/sotopia-lab/sotopia-demo/blob/main/socialstream/rendering_utils.py) ) | | ||
| CLIENT_MSG | Client β Server | Standard message from client (payload: TBD) | | ||
bugsz marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| ERROR | Server β Client | Error notification (payload: TBD) | | ||
| START_SIM | Client β Server | Initialize simulation (payload: `SimulationEpisodeInitialization`) | | ||
| END_SIM | Server β Client | Terminate simulation (payload: not needed) | | ||
ProKil marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
**Error Type: TBD** | ||
bugsz marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
**Implementation plan**: Currently only support LLM-LLM simulation based on [this function](https://github.com/sotopia-lab/sotopia/blob/19d39e068c3bca9246fc366e5759414f62284f93/sotopia/server.py#L108). |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is websockets needed? Can we use aiohttp?