mirror of
https://github.com/microsoft/autogen.git
synced 2025-06-26 22:30:10 +00:00

<!-- Thank you for your contribution! Please review https://microsoft.github.io/autogen/docs/Contribute before opening a pull request. --> <!-- Please add a reviewer to the assignee section when you create a PR. If you don't have the access to it, we will shortly find a reviewer and assign them to your PR. --> ## Why are these changes needed? Fix termination UI in AGS, ensure it can be edited correctly <img width="1269" alt="image" src="https://github.com/user-attachments/assets/eaa7a92f-a1ea-4ab4-a679-2894ac441311" /> <img width="1273" alt="image" src="https://github.com/user-attachments/assets/6db81068-932f-4d4e-9512-279770c02bf2" /> <img width="1270" alt="image" src="https://github.com/user-attachments/assets/5ca9df7d-b968-46c9-9d62-becd78809273" /> <!-- Please give a short summary of the change and the problem this solves. --> ## Related issue number <!-- For example: "Closes #1234" --> Closes #5872 ## Checks - [ ] I've included any doc changes needed for <https://microsoft.github.io/autogen/>. See <https://github.com/microsoft/autogen/blob/main/CONTRIBUTING.md> to build and test documentation locally. - [ ] I've added tests (if relevant) corresponding to the changes introduced in this PR. - [ ] I've made sure all auto checks have passed.
132 lines
3.7 KiB
Python
132 lines
3.7 KiB
Python
import os
|
|
import tempfile
|
|
import warnings
|
|
from typing import Optional
|
|
|
|
import typer
|
|
import uvicorn
|
|
from typing_extensions import Annotated
|
|
|
|
from .version import VERSION
|
|
|
|
app = typer.Typer()
|
|
|
|
# Ignore deprecation warnings from websockets
|
|
warnings.filterwarnings("ignore", message="websockets.legacy is deprecated*")
|
|
warnings.filterwarnings("ignore", message="websockets.server.WebSocketServerProtocol is deprecated*")
|
|
|
|
|
|
def get_env_file_path():
|
|
app_dir = os.path.join(os.path.expanduser("~"), ".autogenstudio")
|
|
if not os.path.exists(app_dir):
|
|
os.makedirs(app_dir, exist_ok=True)
|
|
return os.path.join(app_dir, "temp_env_vars.env")
|
|
|
|
|
|
@app.command()
|
|
def ui(
|
|
host: str = "127.0.0.1",
|
|
port: int = 8081,
|
|
workers: int = 1,
|
|
reload: Annotated[bool, typer.Option("--reload")] = False,
|
|
docs: bool = True,
|
|
appdir: str | None = None,
|
|
database_uri: Optional[str] = None,
|
|
upgrade_database: bool = False,
|
|
):
|
|
"""
|
|
Run the AutoGen Studio UI.
|
|
|
|
Args:
|
|
host (str, optional): Host to run the UI on. Defaults to 127.0.0.1 (localhost).
|
|
port (int, optional): Port to run the UI on. Defaults to 8081.
|
|
workers (int, optional): Number of workers to run the UI with. Defaults to 1.
|
|
reload (bool, optional): Whether to reload the UI on code changes. Defaults to False.
|
|
docs (bool, optional): Whether to generate API docs. Defaults to False.
|
|
appdir (str, optional): Path to the AutoGen Studio app directory. Defaults to None.
|
|
database-uri (str, optional): Database URI to connect to. Defaults to None.
|
|
"""
|
|
|
|
# Write configuration
|
|
env_vars = {
|
|
"AUTOGENSTUDIO_HOST": host,
|
|
"AUTOGENSTUDIO_PORT": port,
|
|
"AUTOGENSTUDIO_API_DOCS": str(docs),
|
|
}
|
|
if appdir:
|
|
env_vars["AUTOGENSTUDIO_APPDIR"] = appdir
|
|
if database_uri:
|
|
env_vars["AUTOGENSTUDIO_DATABASE_URI"] = database_uri
|
|
if upgrade_database:
|
|
env_vars["AUTOGENSTUDIO_UPGRADE_DATABASE"] = "1"
|
|
|
|
# Create temporary env file to share configuration with uvicorn workers
|
|
env_file_path = get_env_file_path()
|
|
with open(env_file_path, "w") as temp_env:
|
|
for key, value in env_vars.items():
|
|
temp_env.write(f"{key}={value}\n")
|
|
|
|
uvicorn.run(
|
|
"autogenstudio.web.app:app",
|
|
host=host,
|
|
port=port,
|
|
workers=workers,
|
|
reload=reload,
|
|
reload_excludes=["**/alembic/*", "**/alembic.ini", "**/versions/*"] if reload else None,
|
|
env_file=env_file_path,
|
|
)
|
|
|
|
|
|
@app.command()
|
|
def serve(
|
|
team: str = "",
|
|
host: str = "127.0.0.1",
|
|
port: int = 8084,
|
|
workers: int = 1,
|
|
docs: bool = False,
|
|
):
|
|
"""
|
|
Serve an API Endpoint based on an AutoGen Studio workflow json file.
|
|
|
|
Args:
|
|
team (str): Path to the team json file.
|
|
host (str, optional): Host to run the UI on. Defaults to 127.0.0.1 (localhost).
|
|
port (int, optional): Port to run the UI on. Defaults to 8084
|
|
workers (int, optional): Number of workers to run the UI with. Defaults to 1.
|
|
reload (bool, optional): Whether to reload the UI on code changes. Defaults to False.
|
|
docs (bool, optional): Whether to generate API docs. Defaults to False.
|
|
|
|
"""
|
|
|
|
os.environ["AUTOGENSTUDIO_API_DOCS"] = str(docs)
|
|
os.environ["AUTOGENSTUDIO_TEAM_FILE"] = team
|
|
|
|
# validate the team file
|
|
if not os.path.exists(team):
|
|
raise ValueError(f"Team file not found: {team}")
|
|
|
|
uvicorn.run(
|
|
"autogenstudio.web.serve:app",
|
|
host=host,
|
|
port=port,
|
|
workers=workers,
|
|
reload=False,
|
|
)
|
|
|
|
|
|
@app.command()
|
|
def version():
|
|
"""
|
|
Print the version of the AutoGen Studio UI CLI.
|
|
"""
|
|
|
|
typer.echo(f"AutoGen Studio CLI version: {VERSION}")
|
|
|
|
|
|
def run():
|
|
app()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app()
|