diff --git a/.devcontainer/POST_SETUP_README.md b/.devcontainer/POST_SETUP_README.md index 3bc06ff..5a4fd1d 100644 --- a/.devcontainer/POST_SETUP_README.md +++ b/.devcontainer/POST_SETUP_README.md @@ -21,10 +21,10 @@ See the [README](../README.md) for more details on how to use the Semantic Workb ### Next steps: - Launch an example assistant service: - - Using the [canonical assistant](../semantic-workbench/v1/service/semantic-workbench-assistant/README.md) + - Using the [canonical assistant](../libraries/python/semantic-workbench-assistant/README.md) - Use VS Code > `Run and Debug` (Ctrl/Cmd+Shift+D) > `canonical-assistant` to start the canonical assistant - Using an [example assistant](../examples/) - - Use VS Code > `Run and Debug` (Ctrl/Cmd+Shift+D) > `launch assistant (examples/python-01-echo-bot)` to start the example assistant + - Use VS Code > `Run and Debug` (Ctrl/Cmd+Shift+D) > `launch assistant (examples/python/python-01-echo-bot)` to start the example assistant - Or create your own assistant service by following the [Assistant Development Guide](../docs/ASSISTANT_DEVELOPMENT_GUIDE.md) - Add the assistant to the workbench app by clicking the `Add Assistant` button in the app and selecting the assistant from the list - Configure the assistant and interact with it in the app by clicking on the assistant in the list @@ -34,7 +34,7 @@ See the [README](../README.md) for more details on how to use the Semantic Workb We have included an example Python assistant service that echos the user's input and can serve as a starting point for your own assistant service. -See the [python-01-echo-bot/README](../examples/python-01-echo-bot/README.md) for more details. +See the [python-01-echo-bot/README](../examples/python/python-01-echo-bot/README.md) for more details. ## Deleting a Codespace diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 9f01fad..094a906 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -39,15 +39,17 @@ // "otherPortsAttributes": {}, // Use 'postCreateCommand' to run commands after the container is created. "postCreateCommand": { - // Build and restore dependencies for key projects in the repo - "make": "make -C /workspaces/semanticworkbench", // Set up git to automatically set up the remote when pushing if it doesn't exist - "git_config": "git config --add push.autoSetupRemote true" + "git_config": "git config --add push.autoSetupRemote true", + // Build and restore dependencies for key projects in the repo + "make": "make -C /workspaces/semanticworkbench" }, // Configure tool-specific properties. "customizations": { "codespaces": { - "openFiles": ["/workspaces/semanticworkbench/.devcontainer/POST_SETUP_README.md"] + "openFiles": [ + "/workspaces/semanticworkbench/.devcontainer/POST_SETUP_README.md" + ] }, "vscode": { "extensions": [ diff --git a/.github/workflows/semantic-workbench-service.yml b/.github/workflows/semantic-workbench-service.yml index 2fb725a..9fa5baa 100644 --- a/.github/workflows/semantic-workbench-service.yml +++ b/.github/workflows/semantic-workbench-service.yml @@ -6,7 +6,7 @@ on: paths: [ ".github/workflows/semantic-workbench-service.yml", - "semantic-workbench/v1/service/semantic-workbench-service/**", + "workbench-service/**", ] push: @@ -14,14 +14,14 @@ on: paths: [ ".github/workflows/semantic-workbench-service.yml", - "semantic-workbench/v1/service/semantic-workbench-service/**", + "workbench-service/**", ] workflow_dispatch: defaults: run: - working-directory: semantic-workbench/v1/service/semantic-workbench-service + working-directory: workbench-service jobs: test: diff --git a/.vscode/launch.json b/.vscode/launch.json index 797ee26..420d0a0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -14,7 +14,7 @@ "type": "node", "request": "launch", "name": "app: semantic-workbench-app", - "cwd": "${workspaceFolder}/semantic-workbench/v1/app", + "cwd": "${workspaceFolder}/workbench-app", "skipFiles": ["/**"], "console": "integratedTerminal", "runtimeExecutable": "npm", @@ -24,7 +24,7 @@ "type": "debugpy", "request": "launch", "name": "service: semantic-workbench-service", - "cwd": "${workspaceFolder}/semantic-workbench/v1/service", + "cwd": "${workspaceFolder}/workbench-service", "module": "semantic_workbench_service.start", "justMyCode": false, "consoleTitle": "semantic-workbench-service", @@ -34,7 +34,7 @@ "type": "debugpy", "request": "launch", "name": "canonical-assistant", - "cwd": "${workspaceFolder}/semantic-workbench/v1/service", + "cwd": "${workspaceFolder}/libraries/semantic-workbench-assistant", "module": "semantic_workbench_assistant.start", "args": ["semantic_workbench_assistant.canonical:app", "--port", "3002"], "consoleTitle": "canonical-assistant" diff --git a/.vscode/settings.json b/.vscode/settings.json index 6b3f4e9..2f47bb7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -26,10 +26,10 @@ "python.analysis.fixAll": ["source.unusedImports"], "python.analysis.inlayHints.functionReturnTypes": true, "python.analysis.typeCheckingMode": "basic", - "python.defaultInterpreterPath": "${workspaceFolder}/semantic-workbench/v1/service/.venv", + "python.defaultInterpreterPath": "${workspaceFolder}/workbench-service/.venv", "python.languageServer": "Pylance", "python.testing.pytestEnabled": true, - "python.testing.cwd": "${workspaceFolder:v1}/service", + "python.testing.cwd": "${workspaceFolder:v1}/workbench-service", "python.testing.pytestArgs": [], "[python]": { "editor.defaultFormatter": "charliermarsh.ruff", diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a2ee719..dd808a4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ Before filing a new issue, please search the list of issues to make sure it does not already exist. If you do find an existing issue for what you wanted to report, please include -your own feedback in the discussion. Do consider upvoting (👍 reaction) the original +your own feedback in the discussion. Do consider up-voting (👍 reaction) the original post, as this helps us prioritize popular issues in our backlog. ### Writing a Good Bug Report @@ -87,9 +87,9 @@ We use and recommend the following workflow: You can request that the issue be assigned to you. Note: The issue filer and the implementer don't have to be the same person. 2. Create a personal fork of the repository on GitHub (if you don't already have one). -3. In your fork, create a branch off of main (`git checkout -b mybranch`). +3. In your fork, create a branch off of main (`git checkout -b my_branch`). - Name the branch so that it clearly communicates your intentions, such as - "issue-123" or "githubhandle-issue". + "issue-123" or "github_handle-issue". 4. Make and commit your changes to your branch. 5. Add new tests corresponding to your change, if applicable. 6. Run the build and tests as described in the readme for the part(s) of the Semantic Workbench your changes impact to ensure that your build is clean and all tests are passing. @@ -99,11 +99,10 @@ We use and recommend the following workflow: 8. Wait for feedback or approval of your changes from the code maintainers. 9. When area owners have signed off, and all checks are green, your PR will be merged. - ### Adding Assistants We appreciate your interest in extending Semantic Workbench's functionality through -providing assistants in the main repo. However, we want to clarify our approach to +providing assistants in the main repo. However, we want to clarify our approach to our GitHub repository. To maintain a clean and manageable codebase we will not be hosting assistants directly in the Semantic Workbench GitHub repository. Instead, we encourage contributors to host their assistants in separate diff --git a/KNOWN_ISSUES.md b/KNOWN_ISSUES.md index ba8baa4..b254a7b 100644 --- a/KNOWN_ISSUES.md +++ b/KNOWN_ISSUES.md @@ -1,6 +1,6 @@ # Semantic Workbench Known Issues -You may encounter the following known issues, which may include workarounds, mitigations, or expected resolution timeframes. +You may encounter the following known issues, which may include workarounds, mitigation's, or expected resolution time-frames. ## Semantic Workbench App diff --git a/Makefile b/Makefile index 9ec4bce..4f6df62 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,2 @@ repo_root = $(shell git rev-parse --show-toplevel) -include $(repo_root)/build-tools/makefiles/recursive.mk +include $(repo_root)/tools/makefiles/recursive.mk diff --git a/README.md b/README.md index 3c6555c..58b72e2 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ or more assistants, configuring settings, and exposing various behaviors. The Semantic Workbench is composed of three main components: -- [Workbench Service](semantic-workbench/v1/service/README.md) (Python): The backend service that +- [Workbench Service](workbench-service/README.md) (Python): The backend service that handles core functionalities. -- [Workbench App](semantic-workbench/v1/app/README.md) (React/Typescript): The frontend web user +- [Workbench App](workbench-app/README.md) (React/Typescript): The frontend web user interface for interacting with workbench and assistants. - [Assistant Services](examples) (Python, C#, etc.): any number of assistant services that implement the service protocols/APIs, developed using any framework and programming language of your choice. @@ -30,9 +30,9 @@ See the [GitHub Codespaces / devcontainer README](.devcontainer/README.md) for m # Quick start - Local development environment - Configure your dev environment, [setup guide](docs/SETUP_DEV_ENVIRONMENT.md). -- Start the backend service, see [here for instructions](semantic-workbench/v1/service/README.md). -- Start the frontend app, see [here for instructions](semantic-workbench/v1/app/README.md). -- Start the [Python chatbot example](examples/python-03-simple-chatbot/README.md), or one of the other [examples](examples). +- Start the backend service, see [here for instructions](workbench-service/README.md). +- Start the frontend app, see [here for instructions](workbench-app/README.md). +- Start the [Python chatbot example](examples/python/python-03-simple-chatbot/README.md), or one of the other [examples](examples). ![image](https://raw.githubusercontent.com/microsoft/semanticworkbench/main/docs/images/readme1.png) @@ -46,16 +46,16 @@ To develop new assistants and connect existing ones, see the [Assistant Developm The repository contains a few examples that can be used to create custom assistants: -- [Python Canonical Assistant](semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py) -- [Python example 1](examples/python-01-echo-bot/README.md): a simple assistant echoing text back. -- [Python example 2](examples/python-02-simple-chatbot/README.md): a simple chatbot implementing metaprompt guardrails and content moderation. -- [Python example 3](examples/python-03-simple-chatbot/README.md): a functional chatbot implementing metaprompt guardrails and content moderation. -- [.NET example 1](examples/dotnet-01-echo-bot/README.md): a simple agent with echo and support for a basic `/say` command. -- [.NET example 2](examples/dotnet-02-message-types-demo/README.md): a simple assistants showcasing Azure AI Content Safety integration and some workbench features like Mermaid graphs. -- [.NET example 3](examples/dotnet-03-simple-chatbot/README.md): a functional chatbot implementing metaprompt guardrails and content moderation. +- [Python Canonical Assistant](libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py) +- [Python example 1](examples/python/python-01-echo-bot/README.md): a simple assistant echoing text back. +- [Python example 2](examples/python/python-02-simple-chatbot/README.md): a simple chatbot implementing metaprompt guardrails and content moderation. +- [Python example 3](examples/python/python-03-simple-chatbot/README.md): a functional chatbot implementing metaprompt guardrails and content moderation. +- [.NET example 1](examples/dotnet/dotnet-01-echo-bot/README.md): a simple agent with echo and support for a basic `/say` command. +- [.NET example 2](examples/dotnet/dotnet-02-message-types-demo/README.md): a simple assistants showcasing Azure AI Content Safety integration and some workbench features like Mermaid graphs. +- [.NET example 3](examples/dotnet/dotnet-03-simple-chatbot/README.md): a functional chatbot implementing metaprompt guardrails and content moderation. -![Mermaid graph example](examples/dotnet-02-message-types-demo/docs/mermaid.png) -![ABC music example](examples/dotnet-02-message-types-demo/docs/abc.png) +![Mermaid graph example](examples/dotnet/dotnet-02-message-types-demo/docs/mermaid.png) +![ABC music example](examples/dotnet/dotnet-02-message-types-demo/docs/abc.png) ## Open the Workbench and create an assistant instance @@ -82,13 +82,13 @@ Expected: You get a response from your assistant! ## Refreshing Dev Environment -- [v1\service\.data](service.data) delete this directory or specific files if you know which one. +- Delete `~/workbench-service/.data` or specific files if you know which one(s). - From repo root, run `make clean install`. - This will perform a `git clean` and run installs in all sub-directories - Or a faster option if you just want to install semantic workbench related stuff: - From repo root, run `make clean` - - From `~/semantic-workbench/v1/app`, run `make install` - - From `~/semantic-workbench/v1/service`, run `make install` + - From `~/workbench-app`, run `make install` + - From `~/workbench-service`, run `make install` # Contributing diff --git a/assistant-connector/python/README.md b/assistant-connector/python/README.md deleted file mode 100644 index 124b9cf..0000000 --- a/assistant-connector/python/README.md +++ /dev/null @@ -1,4 +0,0 @@ -To connect your python assistants and agents to Semantic Workbench, please see -[semantic-workbench-assistant.assistant_app](../../semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/). - -You can also check [python-01-echo-bot](../../examples/python-01-echo-bot/assistant/chat.py) for a quick reference. diff --git a/assistants/Makefile b/assistants/Makefile index 9ec4bce..4f6df62 100644 --- a/assistants/Makefile +++ b/assistants/Makefile @@ -1,2 +1,2 @@ repo_root = $(shell git rev-parse --show-toplevel) -include $(repo_root)/build-tools/makefiles/recursive.mk +include $(repo_root)/tools/makefiles/recursive.mk diff --git a/assistants/prospector-assistant/.vscode/launch.json b/assistants/prospector-assistant/.vscode/launch.json index 0788143..6b16373 100644 --- a/assistants/prospector-assistant/.vscode/launch.json +++ b/assistants/prospector-assistant/.vscode/launch.json @@ -4,7 +4,7 @@ { "type": "debugpy", "request": "launch", - "name": "launch assistant", + "name": "assistants: prospector-assistant", "cwd": "${workspaceFolder}", "module": "semantic_workbench_assistant.start", "args": ["assistant.chat:app", "--port", "3011"], diff --git a/assistants/prospector-assistant/Makefile b/assistants/prospector-assistant/Makefile index 4e1835c..ba643bf 100644 --- a/assistants/prospector-assistant/Makefile +++ b/assistants/prospector-assistant/Makefile @@ -2,4 +2,4 @@ repo_root = $(shell git rev-parse --show-toplevel) .DEFAULT_GOAL := venv -include $(repo_root)/build-tools/makefiles/poetry.mk +include $(repo_root)/tools/makefiles/poetry.mk diff --git a/assistants/prospector-assistant/README.md b/assistants/prospector-assistant/README.md index b078f17..6c7dfad 100644 --- a/assistants/prospector-assistant/README.md +++ b/assistants/prospector-assistant/README.md @@ -28,7 +28,7 @@ See the [Responsible AI FAQ](../../RESPONSIBLE_AI_FAQ.md) for more information. - SUGGESTED: Use GitHub Codespaces for a quick, easy, and consistent dev environment: [/.devcontainer/README.md](../../.devcontainer/README.md) - ALTERNATIVE: Local setup following the [main README](../../README.md#quick-start---local-development-environment) -- Set up and verify that the workbench app and service are running using the [semantic-workbench.code-workspace](../../semantic-workbench/v1/semantic-workbench.code-workspace) +- Set up and verify that the workbench app and service are running using the [semantic-workbench.code-workspace](../../semantic-workbench.code-workspace) - If using Azure OpenAI, set up an Azure account and create a Content Safety resource - See [Azure AI Content Safety](https://azure.microsoft.com/products/ai-services/ai-content-safety) for more information - Copy the `.env.example` to `.env` and update the `ASSISTANT__AZURE_CONTENT_SAFETY_ENDPOINT` value with the endpoint of your Azure Content Safety resource diff --git a/assistants/prospector-assistant/pyproject.toml b/assistants/prospector-assistant/pyproject.toml index e291294..abdc9aa 100644 --- a/assistants/prospector-assistant/pyproject.toml +++ b/assistants/prospector-assistant/pyproject.toml @@ -17,8 +17,8 @@ pdfplumber = "^0.11.2" tiktoken = "^0.7.0" # If you copy this file to your project, you should verify the relative path to the following: -semantic-workbench-assistant = { path = "../../semantic-workbench/v1/service/semantic-workbench-assistant", develop = true } -content-safety = { path = "../../libraries/content-safety/", develop = true } +semantic-workbench-assistant = { path = "../../libraries/python/semantic-workbench-assistant", develop = true } +content-safety = { path = "../../libraries/python/content-safety/", develop = true } [tool.poetry.group.dev.dependencies] ruff = "^0.6.4" diff --git a/docs/ASSISTANT_DEVELOPMENT_GUIDE.md b/docs/ASSISTANT_DEVELOPMENT_GUIDE.md index 7fc943b..ecefd4e 100644 --- a/docs/ASSISTANT_DEVELOPMENT_GUIDE.md +++ b/docs/ASSISTANT_DEVELOPMENT_GUIDE.md @@ -4,24 +4,24 @@ For assistants to be instantiated in Semantic Workbench, you need to implement an assistant service that the workbench can talk with via http. -We provide several python base classes to make this easier: [semantic-workbench-assistant](../semantic-workbench/v1/service/semantic-workbench-assistant/README.md) +We provide several python base classes to make this easier: [semantic-workbench-assistant](../libraries/python/semantic-workbench-assistant/README.md) Example assistant services: -- [Canonical assistant example](../semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py) -- Python assistant [python-01-echo-bot](../examples/python-01-echo-bot/README.md) and [python-02-simple-chatbot](../examples/python-02-simple-chatbot/README.md) -- .NET agent [dotnet-01-echo-bot](../examples/dotnet-01-echo-bot/README.md), [dotnet-02-message-types-demo](../examples/dotnet-02-message-types-demo/README.md) and [dotnet-03-simple-chatbot](../examples/dotnet-03-simple-chatbot/README.md) +- [Canonical assistant example](../libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py) +- Python assistant [python-01-echo-bot](../examples/python/python-01-echo-bot/README.md) and [python-02-simple-chatbot](../examples/python/python-02-simple-chatbot/README.md) +- .NET agent [dotnet-01-echo-bot](../examples/dotnet/dotnet-01-echo-bot/README.md), [dotnet-02-message-types-demo](../examples/dotnet/dotnet-02-message-types-demo/README.md) and [dotnet-03-simple-chatbot](../examples/dotnet/dotnet-03-simple-chatbot/README.md) ## Top level concepts RECOMMENDED FOR PYTHON: Use the `semantic-workbench-assistant` classes to create your assistant service. These classes provide a lot of the boilerplate code for you. -See the [semantic-workbench-assistant.assistant_app.AssistantApp](../semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/assistant.py) for the classes -and the Python [python-01-echo-bot](../examples/python-01-echo-bot/README.md) for an example of how to use them. +See the [semantic-workbench-assistant.assistant_app.AssistantApp](../libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/assistant.py) for the classes +and the Python [python-01-echo-bot](../examples/python/python-01-echo-bot/README.md) for an example of how to use them. ### assistant_service.FastAPIAssistantService -Your main job is to implement a service that supports all the Semantic Workbench methods. The [Canonical assistant example](../semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py) demonstrates a minimal implementation. +Your main job is to implement a service that supports all the Semantic Workbench methods. The [Canonical assistant example](../libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py) demonstrates a minimal implementation. It implements an assistant service that inherits from FastAPIAssistantService: @@ -44,7 +44,7 @@ This service is now a FastAPIAssistantService containing all the assistant metho - Follow the `README.md` in the example project to get started - If the project has a `.env.example` file, copy it to `.env` and update the values as needed - Build and Launch assistant. Run workbench service. Run workbench app. Add assistant local url to workbench via UI. -- NOTE: See additional documentation in [/semantic-workbench/v1/app/docs](../semantic-workbench/v1/app/docs/) regarding app features that can be used in the assistant service. +- NOTE: See additional documentation in [/workbench-app/docs](../workbench-app/docs/) regarding app features that can be used in the assistant service. ## Assistant service deployment diff --git a/docs/CUSTOM_APP_REGISTRATION.md b/docs/CUSTOM_APP_REGISTRATION.md index 52b1c4f..b478265 100644 --- a/docs/CUSTOM_APP_REGISTRATION.md +++ b/docs/CUSTOM_APP_REGISTRATION.md @@ -27,13 +27,15 @@ App registration is a free service, but you may need to provide a credit card fo Edit the following files with the new app registration details: -- Semantic Workbench app: [constants.ts](../semantic-workbench/v1/app/src/Constants.ts) +- Semantic Workbench app: [.env.example](../workbench-app/.env.example) - - Update the `msal.auth.clientId` with the `Application (client) ID` + - Copy the `.env.example` file to `.env` + - Update the `VITE_SEMANTIC_WORKBENCH_CLIENT_ID` with the `Application (client) ID` + +- Semantic Workbench service: [config.py](../workbench-service/semantic_workbench_service/config.py) -- Semantic Workbench service: [config.py](../semantic-workbench/v1/service/semantic-workbench-service/semantic_workbench_service/config.py) - Update the `AuthSettings.allowed_app_ids` with the `Application (client) ID` ## TODO -- [ ] Update the codebase to allow app registration details to be passed in as environment variables +- [ ] Update the service config to allow app registration details to be passed in as environment variables diff --git a/docs/SETUP_DEV_ENVIRONMENT.md b/docs/SETUP_DEV_ENVIRONMENT.md index 5233dc6..b79f81b 100644 --- a/docs/SETUP_DEV_ENVIRONMENT.md +++ b/docs/SETUP_DEV_ENVIRONMENT.md @@ -57,7 +57,7 @@ If you haven't already, enable long file paths on Windows. ### Configure and build the backend -- Within the [`v1/service`](../semantic-workbench/v1/service/) directory, create your virtual environment, and install the service packages: +- Within the [`v1/service`](../workbench-service/) directory, create your virtual environment, and install the service packages: make @@ -88,9 +88,9 @@ nvm use 20 ### Build the frontend -Within the [`v1/app`](../semantic-workbench/v1/app/) directory, install packages. +Within the [`v1/app`](../workbench-app/) directory, install packages. ``` -cd semantic-workbench/v1/app +cd workbench-app make ``` diff --git a/examples/Makefile b/examples/Makefile index 9ec4bce..4f6df62 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -1,2 +1,2 @@ repo_root = $(shell git rev-parse --show-toplevel) -include $(repo_root)/build-tools/makefiles/recursive.mk +include $(repo_root)/tools/makefiles/recursive.mk diff --git a/assistant-connector/dotnet/.editorconfig b/examples/dotnet/.editorconfig similarity index 100% rename from assistant-connector/dotnet/.editorconfig rename to examples/dotnet/.editorconfig diff --git a/examples/dotnet-01-echo-bot/MyAgent.cs b/examples/dotnet/dotnet-01-echo-bot/MyAgent.cs similarity index 100% rename from examples/dotnet-01-echo-bot/MyAgent.cs rename to examples/dotnet/dotnet-01-echo-bot/MyAgent.cs diff --git a/examples/dotnet-01-echo-bot/MyAgentConfig.cs b/examples/dotnet/dotnet-01-echo-bot/MyAgentConfig.cs similarity index 100% rename from examples/dotnet-01-echo-bot/MyAgentConfig.cs rename to examples/dotnet/dotnet-01-echo-bot/MyAgentConfig.cs diff --git a/examples/dotnet-01-echo-bot/MyWorkbenchConnector.cs b/examples/dotnet/dotnet-01-echo-bot/MyWorkbenchConnector.cs similarity index 100% rename from examples/dotnet-01-echo-bot/MyWorkbenchConnector.cs rename to examples/dotnet/dotnet-01-echo-bot/MyWorkbenchConnector.cs diff --git a/examples/dotnet-01-echo-bot/Program.cs b/examples/dotnet/dotnet-01-echo-bot/Program.cs similarity index 100% rename from examples/dotnet-01-echo-bot/Program.cs rename to examples/dotnet/dotnet-01-echo-bot/Program.cs diff --git a/examples/dotnet-01-echo-bot/README.md b/examples/dotnet/dotnet-01-echo-bot/README.md similarity index 100% rename from examples/dotnet-01-echo-bot/README.md rename to examples/dotnet/dotnet-01-echo-bot/README.md diff --git a/examples/dotnet-01-echo-bot/appsettings.json b/examples/dotnet/dotnet-01-echo-bot/appsettings.json similarity index 100% rename from examples/dotnet-01-echo-bot/appsettings.json rename to examples/dotnet/dotnet-01-echo-bot/appsettings.json diff --git a/examples/dotnet-01-echo-bot/dotnet-01-echo-bot.csproj b/examples/dotnet/dotnet-01-echo-bot/dotnet-01-echo-bot.csproj similarity index 100% rename from examples/dotnet-01-echo-bot/dotnet-01-echo-bot.csproj rename to examples/dotnet/dotnet-01-echo-bot/dotnet-01-echo-bot.csproj diff --git a/examples/dotnet-02-message-types-demo/MyAgent.cs b/examples/dotnet/dotnet-02-message-types-demo/MyAgent.cs similarity index 100% rename from examples/dotnet-02-message-types-demo/MyAgent.cs rename to examples/dotnet/dotnet-02-message-types-demo/MyAgent.cs diff --git a/examples/dotnet-02-message-types-demo/MyAgentConfig.cs b/examples/dotnet/dotnet-02-message-types-demo/MyAgentConfig.cs similarity index 100% rename from examples/dotnet-02-message-types-demo/MyAgentConfig.cs rename to examples/dotnet/dotnet-02-message-types-demo/MyAgentConfig.cs diff --git a/examples/dotnet-02-message-types-demo/MyWorkbenchConnector.cs b/examples/dotnet/dotnet-02-message-types-demo/MyWorkbenchConnector.cs similarity index 100% rename from examples/dotnet-02-message-types-demo/MyWorkbenchConnector.cs rename to examples/dotnet/dotnet-02-message-types-demo/MyWorkbenchConnector.cs diff --git a/examples/dotnet-02-message-types-demo/Program.cs b/examples/dotnet/dotnet-02-message-types-demo/Program.cs similarity index 100% rename from examples/dotnet-02-message-types-demo/Program.cs rename to examples/dotnet/dotnet-02-message-types-demo/Program.cs diff --git a/examples/dotnet-02-message-types-demo/README.md b/examples/dotnet/dotnet-02-message-types-demo/README.md similarity index 100% rename from examples/dotnet-02-message-types-demo/README.md rename to examples/dotnet/dotnet-02-message-types-demo/README.md diff --git a/examples/dotnet-02-message-types-demo/appsettings.json b/examples/dotnet/dotnet-02-message-types-demo/appsettings.json similarity index 100% rename from examples/dotnet-02-message-types-demo/appsettings.json rename to examples/dotnet/dotnet-02-message-types-demo/appsettings.json diff --git a/examples/dotnet-02-message-types-demo/docs/abc.png b/examples/dotnet/dotnet-02-message-types-demo/docs/abc.png similarity index 100% rename from examples/dotnet-02-message-types-demo/docs/abc.png rename to examples/dotnet/dotnet-02-message-types-demo/docs/abc.png diff --git a/examples/dotnet-02-message-types-demo/docs/code.png b/examples/dotnet/dotnet-02-message-types-demo/docs/code.png similarity index 100% rename from examples/dotnet-02-message-types-demo/docs/code.png rename to examples/dotnet/dotnet-02-message-types-demo/docs/code.png diff --git a/examples/dotnet-02-message-types-demo/docs/config.png b/examples/dotnet/dotnet-02-message-types-demo/docs/config.png similarity index 100% rename from examples/dotnet-02-message-types-demo/docs/config.png rename to examples/dotnet/dotnet-02-message-types-demo/docs/config.png diff --git a/examples/dotnet-02-message-types-demo/docs/echo.png b/examples/dotnet/dotnet-02-message-types-demo/docs/echo.png similarity index 100% rename from examples/dotnet-02-message-types-demo/docs/echo.png rename to examples/dotnet/dotnet-02-message-types-demo/docs/echo.png diff --git a/examples/dotnet-02-message-types-demo/docs/markdown.png b/examples/dotnet/dotnet-02-message-types-demo/docs/markdown.png similarity index 100% rename from examples/dotnet-02-message-types-demo/docs/markdown.png rename to examples/dotnet/dotnet-02-message-types-demo/docs/markdown.png diff --git a/examples/dotnet-02-message-types-demo/docs/mermaid.png b/examples/dotnet/dotnet-02-message-types-demo/docs/mermaid.png similarity index 100% rename from examples/dotnet-02-message-types-demo/docs/mermaid.png rename to examples/dotnet/dotnet-02-message-types-demo/docs/mermaid.png diff --git a/examples/dotnet-02-message-types-demo/docs/reverse.png b/examples/dotnet/dotnet-02-message-types-demo/docs/reverse.png similarity index 100% rename from examples/dotnet-02-message-types-demo/docs/reverse.png rename to examples/dotnet/dotnet-02-message-types-demo/docs/reverse.png diff --git a/examples/dotnet-02-message-types-demo/docs/safety-check.png b/examples/dotnet/dotnet-02-message-types-demo/docs/safety-check.png similarity index 100% rename from examples/dotnet-02-message-types-demo/docs/safety-check.png rename to examples/dotnet/dotnet-02-message-types-demo/docs/safety-check.png diff --git a/examples/dotnet-02-message-types-demo/dotnet-02-message-types-demo.csproj b/examples/dotnet/dotnet-02-message-types-demo/dotnet-02-message-types-demo.csproj similarity index 100% rename from examples/dotnet-02-message-types-demo/dotnet-02-message-types-demo.csproj rename to examples/dotnet/dotnet-02-message-types-demo/dotnet-02-message-types-demo.csproj diff --git a/examples/dotnet-03-simple-chatbot/MyAgent.cs b/examples/dotnet/dotnet-03-simple-chatbot/MyAgent.cs similarity index 100% rename from examples/dotnet-03-simple-chatbot/MyAgent.cs rename to examples/dotnet/dotnet-03-simple-chatbot/MyAgent.cs diff --git a/examples/dotnet-03-simple-chatbot/MyAgentConfig.cs b/examples/dotnet/dotnet-03-simple-chatbot/MyAgentConfig.cs similarity index 100% rename from examples/dotnet-03-simple-chatbot/MyAgentConfig.cs rename to examples/dotnet/dotnet-03-simple-chatbot/MyAgentConfig.cs diff --git a/examples/dotnet-03-simple-chatbot/MyWorkbenchConnector.cs b/examples/dotnet/dotnet-03-simple-chatbot/MyWorkbenchConnector.cs similarity index 100% rename from examples/dotnet-03-simple-chatbot/MyWorkbenchConnector.cs rename to examples/dotnet/dotnet-03-simple-chatbot/MyWorkbenchConnector.cs diff --git a/examples/dotnet-03-simple-chatbot/Program.cs b/examples/dotnet/dotnet-03-simple-chatbot/Program.cs similarity index 100% rename from examples/dotnet-03-simple-chatbot/Program.cs rename to examples/dotnet/dotnet-03-simple-chatbot/Program.cs diff --git a/examples/dotnet-03-simple-chatbot/README.md b/examples/dotnet/dotnet-03-simple-chatbot/README.md similarity index 100% rename from examples/dotnet-03-simple-chatbot/README.md rename to examples/dotnet/dotnet-03-simple-chatbot/README.md diff --git a/examples/dotnet-03-simple-chatbot/appsettings.json b/examples/dotnet/dotnet-03-simple-chatbot/appsettings.json similarity index 100% rename from examples/dotnet-03-simple-chatbot/appsettings.json rename to examples/dotnet/dotnet-03-simple-chatbot/appsettings.json diff --git a/examples/dotnet-03-simple-chatbot/dotnet-03-simple-chatbot.csproj b/examples/dotnet/dotnet-03-simple-chatbot/dotnet-03-simple-chatbot.csproj similarity index 100% rename from examples/dotnet-03-simple-chatbot/dotnet-03-simple-chatbot.csproj rename to examples/dotnet/dotnet-03-simple-chatbot/dotnet-03-simple-chatbot.csproj diff --git a/examples/python-01-echo-bot/.env.example b/examples/python/python-01-echo-bot/.env.example similarity index 100% rename from examples/python-01-echo-bot/.env.example rename to examples/python/python-01-echo-bot/.env.example diff --git a/examples/python-01-echo-bot/.gitignore b/examples/python/python-01-echo-bot/.gitignore similarity index 100% rename from examples/python-01-echo-bot/.gitignore rename to examples/python/python-01-echo-bot/.gitignore diff --git a/examples/python-01-echo-bot/.vscode/launch.json b/examples/python/python-01-echo-bot/.vscode/launch.json similarity index 87% rename from examples/python-01-echo-bot/.vscode/launch.json rename to examples/python/python-01-echo-bot/.vscode/launch.json index 2bea67a..a890202 100644 --- a/examples/python-01-echo-bot/.vscode/launch.json +++ b/examples/python/python-01-echo-bot/.vscode/launch.json @@ -4,7 +4,7 @@ { "type": "debugpy", "request": "launch", - "name": "launch assistant", + "name": "examples: python-01-echo-bot", "cwd": "${workspaceFolder}", "module": "semantic_workbench_assistant.start", "args": ["assistant.chat:app", "--port", "3001"], diff --git a/examples/python-01-echo-bot/.vscode/settings.json b/examples/python/python-01-echo-bot/.vscode/settings.json similarity index 100% rename from examples/python-01-echo-bot/.vscode/settings.json rename to examples/python/python-01-echo-bot/.vscode/settings.json diff --git a/examples/python-02-simple-chatbot/Makefile b/examples/python/python-01-echo-bot/Makefile similarity index 58% rename from examples/python-02-simple-chatbot/Makefile rename to examples/python/python-01-echo-bot/Makefile index 4e1835c..ba643bf 100644 --- a/examples/python-02-simple-chatbot/Makefile +++ b/examples/python/python-01-echo-bot/Makefile @@ -2,4 +2,4 @@ repo_root = $(shell git rev-parse --show-toplevel) .DEFAULT_GOAL := venv -include $(repo_root)/build-tools/makefiles/poetry.mk +include $(repo_root)/tools/makefiles/poetry.mk diff --git a/examples/python-01-echo-bot/README.md b/examples/python/python-01-echo-bot/README.md similarity index 98% rename from examples/python-01-echo-bot/README.md rename to examples/python/python-01-echo-bot/README.md index 5e5f9d2..c986534 100644 --- a/examples/python-01-echo-bot/README.md +++ b/examples/python/python-01-echo-bot/README.md @@ -16,7 +16,7 @@ The code here is only meant to **show the basics**, to **familiarize with code s - SUGGESTED: Use GitHub Codespaces for a quick, easy, and consistent dev environment: [/.devcontainer/README.md](../../.devcontainer/README.md) - ALTERNATIVE: Local setup following the [main README](../../README.md#quick-start---local-development-environment) -- Set up and verify that the workbench app and service are running using the [semantic-workbench.code-workspace](../../semantic-workbench/v1/semantic-workbench.code-workspace) +- Set up and verify that the workbench app and service are running using the [semantic-workbench.code-workspace](../../semantic-workbench.code-workspace) ## Steps diff --git a/examples/python-01-echo-bot/assistant.code-workspace b/examples/python/python-01-echo-bot/assistant.code-workspace similarity index 63% rename from examples/python-01-echo-bot/assistant.code-workspace rename to examples/python/python-01-echo-bot/assistant.code-workspace index 2472534..2318eb7 100644 --- a/examples/python-01-echo-bot/assistant.code-workspace +++ b/examples/python/python-01-echo-bot/assistant.code-workspace @@ -2,7 +2,7 @@ "folders": [ { "path": ".", - "name": "examples/python-01-echo-bot" + "name": "examples/python/python-01-echo-bot" }, { "path": "../../" diff --git a/examples/python-01-echo-bot/assistant/__init__.py b/examples/python/python-01-echo-bot/assistant/__init__.py similarity index 100% rename from examples/python-01-echo-bot/assistant/__init__.py rename to examples/python/python-01-echo-bot/assistant/__init__.py diff --git a/examples/python-01-echo-bot/assistant/chat.py b/examples/python/python-01-echo-bot/assistant/chat.py similarity index 100% rename from examples/python-01-echo-bot/assistant/chat.py rename to examples/python/python-01-echo-bot/assistant/chat.py diff --git a/examples/python-01-echo-bot/assistant/config.py b/examples/python/python-01-echo-bot/assistant/config.py similarity index 100% rename from examples/python-01-echo-bot/assistant/config.py rename to examples/python/python-01-echo-bot/assistant/config.py diff --git a/examples/python-01-echo-bot/poetry.toml b/examples/python/python-01-echo-bot/poetry.toml similarity index 100% rename from examples/python-01-echo-bot/poetry.toml rename to examples/python/python-01-echo-bot/poetry.toml diff --git a/examples/python-01-echo-bot/pyproject.toml b/examples/python/python-01-echo-bot/pyproject.toml similarity index 81% rename from examples/python-01-echo-bot/pyproject.toml rename to examples/python/python-01-echo-bot/pyproject.toml index f49ab13..ff00caa 100644 --- a/examples/python-01-echo-bot/pyproject.toml +++ b/examples/python/python-01-echo-bot/pyproject.toml @@ -11,7 +11,7 @@ python = "~3.11" openai = "^1.3.9" # If you copy this file to your project, you should verify the relative path to the following: -semantic-workbench-assistant = { path = "../../semantic-workbench/v1/service/semantic-workbench-assistant", develop = true } +semantic-workbench-assistant = { path = "../../../libraries/python/semantic-workbench-assistant", develop = true } [tool.poetry.group.dev.dependencies] ruff = "^0.6.4" diff --git a/examples/python-02-simple-chatbot/.env.example b/examples/python/python-02-simple-chatbot/.env.example similarity index 100% rename from examples/python-02-simple-chatbot/.env.example rename to examples/python/python-02-simple-chatbot/.env.example diff --git a/examples/python-02-simple-chatbot/.gitignore b/examples/python/python-02-simple-chatbot/.gitignore similarity index 100% rename from examples/python-02-simple-chatbot/.gitignore rename to examples/python/python-02-simple-chatbot/.gitignore diff --git a/examples/python-02-simple-chatbot/.vscode/launch.json b/examples/python/python-02-simple-chatbot/.vscode/launch.json similarity index 85% rename from examples/python-02-simple-chatbot/.vscode/launch.json rename to examples/python/python-02-simple-chatbot/.vscode/launch.json index 24d7a97..6fe7225 100644 --- a/examples/python-02-simple-chatbot/.vscode/launch.json +++ b/examples/python/python-02-simple-chatbot/.vscode/launch.json @@ -4,7 +4,7 @@ { "type": "debugpy", "request": "launch", - "name": "launch assistant", + "name": "examples: python-02-simple-chatbot", "cwd": "${workspaceFolder}", "module": "semantic_workbench_assistant.start", "args": ["assistant.chat:app", "--port", "3002"], diff --git a/examples/python-02-simple-chatbot/.vscode/settings.json b/examples/python/python-02-simple-chatbot/.vscode/settings.json similarity index 100% rename from examples/python-02-simple-chatbot/.vscode/settings.json rename to examples/python/python-02-simple-chatbot/.vscode/settings.json diff --git a/examples/python-03-multimodel-chatbot/Makefile b/examples/python/python-02-simple-chatbot/Makefile similarity index 58% rename from examples/python-03-multimodel-chatbot/Makefile rename to examples/python/python-02-simple-chatbot/Makefile index 4e1835c..ba643bf 100644 --- a/examples/python-03-multimodel-chatbot/Makefile +++ b/examples/python/python-02-simple-chatbot/Makefile @@ -2,4 +2,4 @@ repo_root = $(shell git rev-parse --show-toplevel) .DEFAULT_GOAL := venv -include $(repo_root)/build-tools/makefiles/poetry.mk +include $(repo_root)/tools/makefiles/poetry.mk diff --git a/examples/python-02-simple-chatbot/README.md b/examples/python/python-02-simple-chatbot/README.md similarity index 98% rename from examples/python-02-simple-chatbot/README.md rename to examples/python/python-02-simple-chatbot/README.md index 77abaed..8754b32 100644 --- a/examples/python-02-simple-chatbot/README.md +++ b/examples/python/python-02-simple-chatbot/README.md @@ -29,7 +29,7 @@ See the [Responsible AI FAQ](../../RESPONSIBLE_AI_FAQ.md) for more information. - SUGGESTED: Use GitHub Codespaces for a quick, easy, and consistent dev environment: [/.devcontainer/README.md](../../.devcontainer/README.md) - ALTERNATIVE: Local setup following the [main README](../../README.md#quick-start---local-development-environment) -- Set up and verify that the workbench app and service are running using the [semantic-workbench.code-workspace](../../semantic-workbench/v1/semantic-workbench.code-workspace) +- Set up and verify that the workbench app and service are running using the [semantic-workbench.code-workspace](../../semantic-workbench.code-workspace) - If using Azure OpenAI, set up an Azure account and create a Content Safety resource - See [Azure AI Content Safety](https://azure.microsoft.com/products/ai-services/ai-content-safety) for more information - Copy the `.env.example` to `.env` and update the `ASSISTANT__AZURE_CONTENT_SAFETY_ENDPOINT` value with the endpoint of your Azure Content Safety resource diff --git a/examples/python-02-simple-chatbot/assistant.code-workspace b/examples/python/python-02-simple-chatbot/assistant.code-workspace similarity index 60% rename from examples/python-02-simple-chatbot/assistant.code-workspace rename to examples/python/python-02-simple-chatbot/assistant.code-workspace index 0a09c83..817ba33 100644 --- a/examples/python-02-simple-chatbot/assistant.code-workspace +++ b/examples/python/python-02-simple-chatbot/assistant.code-workspace @@ -2,7 +2,7 @@ "folders": [ { "path": ".", - "name": "examples/python-02-simple-chatbot" + "name": "examples/python/python-02-simple-chatbot" }, { "path": "../.." diff --git a/examples/python-02-simple-chatbot/assistant/__init__.py b/examples/python/python-02-simple-chatbot/assistant/__init__.py similarity index 100% rename from examples/python-02-simple-chatbot/assistant/__init__.py rename to examples/python/python-02-simple-chatbot/assistant/__init__.py diff --git a/examples/python-02-simple-chatbot/assistant/chat.py b/examples/python/python-02-simple-chatbot/assistant/chat.py similarity index 100% rename from examples/python-02-simple-chatbot/assistant/chat.py rename to examples/python/python-02-simple-chatbot/assistant/chat.py diff --git a/examples/python-02-simple-chatbot/assistant/config.py b/examples/python/python-02-simple-chatbot/assistant/config.py similarity index 100% rename from examples/python-02-simple-chatbot/assistant/config.py rename to examples/python/python-02-simple-chatbot/assistant/config.py diff --git a/examples/python-02-simple-chatbot/assistant/text_includes/guardrails_prompt.txt b/examples/python/python-02-simple-chatbot/assistant/text_includes/guardrails_prompt.txt similarity index 100% rename from examples/python-02-simple-chatbot/assistant/text_includes/guardrails_prompt.txt rename to examples/python/python-02-simple-chatbot/assistant/text_includes/guardrails_prompt.txt diff --git a/examples/python-02-simple-chatbot/poetry.toml b/examples/python/python-02-simple-chatbot/poetry.toml similarity index 100% rename from examples/python-02-simple-chatbot/poetry.toml rename to examples/python/python-02-simple-chatbot/poetry.toml diff --git a/examples/python-02-simple-chatbot/pyproject.toml b/examples/python/python-02-simple-chatbot/pyproject.toml similarity index 74% rename from examples/python-02-simple-chatbot/pyproject.toml rename to examples/python/python-02-simple-chatbot/pyproject.toml index a8e27e8..a755547 100644 --- a/examples/python-02-simple-chatbot/pyproject.toml +++ b/examples/python/python-02-simple-chatbot/pyproject.toml @@ -12,8 +12,8 @@ openai = "^1.3.9" tiktoken = "^0.7.0" # If you copy this file to your project, you should verify the relative path to the following: -semantic-workbench-assistant = { path = "../../semantic-workbench/v1/service/semantic-workbench-assistant", develop = true } -content-safety = { path = "../../libraries/content-safety/", develop = true } +semantic-workbench-assistant = { path = "../../../libraries/python/semantic-workbench-assistant", develop = true } +content-safety = { path = "../../../libraries/python/content-safety/", develop = true } [tool.poetry.group.dev.dependencies] ruff = "^0.6.4" diff --git a/examples/python-03-multimodel-chatbot/.env.example b/examples/python/python-03-multimodel-chatbot/.env.example similarity index 100% rename from examples/python-03-multimodel-chatbot/.env.example rename to examples/python/python-03-multimodel-chatbot/.env.example diff --git a/examples/python-03-multimodel-chatbot/.gitignore b/examples/python/python-03-multimodel-chatbot/.gitignore similarity index 100% rename from examples/python-03-multimodel-chatbot/.gitignore rename to examples/python/python-03-multimodel-chatbot/.gitignore diff --git a/examples/python-03-multimodel-chatbot/.vscode/launch.json b/examples/python/python-03-multimodel-chatbot/.vscode/launch.json similarity index 84% rename from examples/python-03-multimodel-chatbot/.vscode/launch.json rename to examples/python/python-03-multimodel-chatbot/.vscode/launch.json index c07c619..f311ef4 100644 --- a/examples/python-03-multimodel-chatbot/.vscode/launch.json +++ b/examples/python/python-03-multimodel-chatbot/.vscode/launch.json @@ -4,7 +4,7 @@ { "type": "debugpy", "request": "launch", - "name": "launch assistant", + "name": "examples: python-03-multimodel-chatbot", "cwd": "${workspaceFolder}", "module": "semantic_workbench_assistant.start", "args": ["assistant.chat:app", "--port", "3003"], diff --git a/examples/python-03-multimodel-chatbot/.vscode/settings.json b/examples/python/python-03-multimodel-chatbot/.vscode/settings.json similarity index 100% rename from examples/python-03-multimodel-chatbot/.vscode/settings.json rename to examples/python/python-03-multimodel-chatbot/.vscode/settings.json diff --git a/examples/python-01-echo-bot/Makefile b/examples/python/python-03-multimodel-chatbot/Makefile similarity index 58% rename from examples/python-01-echo-bot/Makefile rename to examples/python/python-03-multimodel-chatbot/Makefile index 4e1835c..ba643bf 100644 --- a/examples/python-01-echo-bot/Makefile +++ b/examples/python/python-03-multimodel-chatbot/Makefile @@ -2,4 +2,4 @@ repo_root = $(shell git rev-parse --show-toplevel) .DEFAULT_GOAL := venv -include $(repo_root)/build-tools/makefiles/poetry.mk +include $(repo_root)/tools/makefiles/poetry.mk diff --git a/examples/python-03-multimodel-chatbot/README.md b/examples/python/python-03-multimodel-chatbot/README.md similarity index 98% rename from examples/python-03-multimodel-chatbot/README.md rename to examples/python/python-03-multimodel-chatbot/README.md index 4d3c3c0..1b35c3f 100644 --- a/examples/python-03-multimodel-chatbot/README.md +++ b/examples/python/python-03-multimodel-chatbot/README.md @@ -28,7 +28,7 @@ See the [Responsible AI FAQ](../../RESPONSIBLE_AI_FAQ.md) for more information. - SUGGESTED: Use GitHub Codespaces for a quick, easy, and consistent dev environment: [/.devcontainer/README.md](../../.devcontainer/README.md) - ALTERNATIVE: Local setup following the [main README](../../README.md#quick-start---local-development-environment) -- Set up and verify that the workbench app and service are running using the [semantic-workbench.code-workspace](../../semantic-workbench/v1/semantic-workbench.code-workspace) +- Set up and verify that the workbench app and service are running using the [semantic-workbench.code-workspace](../../semantic-workbench.code-workspace) - If using Azure OpenAI, set up an Azure account and create a Content Safety resource - See [Azure AI Content Safety](https://azure.microsoft.com/products/ai-services/ai-content-safety) for more information - Copy the `.env.example` to `.env` and update the `ASSISTANT__AZURE_CONTENT_SAFETY_ENDPOINT` value with the endpoint of your Azure Content Safety resource diff --git a/examples/python-03-multimodel-chatbot/assistant.code-workspace b/examples/python/python-03-multimodel-chatbot/assistant.code-workspace similarity index 59% rename from examples/python-03-multimodel-chatbot/assistant.code-workspace rename to examples/python/python-03-multimodel-chatbot/assistant.code-workspace index 6e04233..f1b47c1 100644 --- a/examples/python-03-multimodel-chatbot/assistant.code-workspace +++ b/examples/python/python-03-multimodel-chatbot/assistant.code-workspace @@ -2,7 +2,7 @@ "folders": [ { "path": ".", - "name": "examples/python-03-multimodel-chatbot" + "name": "examples/python/python-03-multimodel-chatbot" }, { "path": "../.." diff --git a/examples/python-03-multimodel-chatbot/assistant/__init__.py b/examples/python/python-03-multimodel-chatbot/assistant/__init__.py similarity index 100% rename from examples/python-03-multimodel-chatbot/assistant/__init__.py rename to examples/python/python-03-multimodel-chatbot/assistant/__init__.py diff --git a/examples/python-03-multimodel-chatbot/assistant/chat.py b/examples/python/python-03-multimodel-chatbot/assistant/chat.py similarity index 100% rename from examples/python-03-multimodel-chatbot/assistant/chat.py rename to examples/python/python-03-multimodel-chatbot/assistant/chat.py diff --git a/examples/python-03-multimodel-chatbot/assistant/config.py b/examples/python/python-03-multimodel-chatbot/assistant/config.py similarity index 100% rename from examples/python-03-multimodel-chatbot/assistant/config.py rename to examples/python/python-03-multimodel-chatbot/assistant/config.py diff --git a/examples/python-03-multimodel-chatbot/assistant/model_adapters.py b/examples/python/python-03-multimodel-chatbot/assistant/model_adapters.py similarity index 100% rename from examples/python-03-multimodel-chatbot/assistant/model_adapters.py rename to examples/python/python-03-multimodel-chatbot/assistant/model_adapters.py diff --git a/examples/python-03-multimodel-chatbot/assistant/text_includes/guardrails_prompt.txt b/examples/python/python-03-multimodel-chatbot/assistant/text_includes/guardrails_prompt.txt similarity index 100% rename from examples/python-03-multimodel-chatbot/assistant/text_includes/guardrails_prompt.txt rename to examples/python/python-03-multimodel-chatbot/assistant/text_includes/guardrails_prompt.txt diff --git a/examples/python-03-multimodel-chatbot/poetry.toml b/examples/python/python-03-multimodel-chatbot/poetry.toml similarity index 100% rename from examples/python-03-multimodel-chatbot/poetry.toml rename to examples/python/python-03-multimodel-chatbot/poetry.toml diff --git a/examples/python-03-multimodel-chatbot/pyproject.toml b/examples/python/python-03-multimodel-chatbot/pyproject.toml similarity index 76% rename from examples/python-03-multimodel-chatbot/pyproject.toml rename to examples/python/python-03-multimodel-chatbot/pyproject.toml index 8cb9328..350e653 100644 --- a/examples/python-03-multimodel-chatbot/pyproject.toml +++ b/examples/python/python-03-multimodel-chatbot/pyproject.toml @@ -14,8 +14,8 @@ openai = "^1.3.9" tiktoken = "^0.7.0" # If you copy this file to your project, you should verify the relative path to the following: -semantic-workbench-assistant = { path = "../../semantic-workbench/v1/service/semantic-workbench-assistant", develop = true } -content-safety = { path = "../../libraries/content-safety/", develop = true } +semantic-workbench-assistant = { path = "../../../libraries/python/semantic-workbench-assistant", develop = true } +content-safety = { path = "../../../libraries/python/content-safety/", develop = true } [tool.poetry.group.dev.dependencies] ruff = "^0.6.4" diff --git a/libraries/Makefile b/libraries/Makefile index 9ec4bce..4f6df62 100644 --- a/libraries/Makefile +++ b/libraries/Makefile @@ -1,2 +1,2 @@ repo_root = $(shell git rev-parse --show-toplevel) -include $(repo_root)/build-tools/makefiles/recursive.mk +include $(repo_root)/tools/makefiles/recursive.mk diff --git a/examples/.editorconfig b/libraries/dotnet/.editorconfig similarity index 100% rename from examples/.editorconfig rename to libraries/dotnet/.editorconfig diff --git a/assistant-connector/dotnet/README.md b/libraries/dotnet/README.md similarity index 100% rename from assistant-connector/dotnet/README.md rename to libraries/dotnet/README.md diff --git a/assistant-connector/dotnet/SemanticWorkbench.sln b/libraries/dotnet/SemanticWorkbench.sln similarity index 100% rename from assistant-connector/dotnet/SemanticWorkbench.sln rename to libraries/dotnet/SemanticWorkbench.sln diff --git a/assistant-connector/dotnet/SemanticWorkbench.sln.DotSettings b/libraries/dotnet/SemanticWorkbench.sln.DotSettings similarity index 100% rename from assistant-connector/dotnet/SemanticWorkbench.sln.DotSettings rename to libraries/dotnet/SemanticWorkbench.sln.DotSettings diff --git a/assistant-connector/dotnet/WorkbenchConnector/AgentBase.cs b/libraries/dotnet/WorkbenchConnector/AgentBase.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/AgentBase.cs rename to libraries/dotnet/WorkbenchConnector/AgentBase.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/ConfigUtils.cs b/libraries/dotnet/WorkbenchConnector/ConfigUtils.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/ConfigUtils.cs rename to libraries/dotnet/WorkbenchConnector/ConfigUtils.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Constants.cs b/libraries/dotnet/WorkbenchConnector/Constants.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Constants.cs rename to libraries/dotnet/WorkbenchConnector/Constants.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/IAgentConfig.cs b/libraries/dotnet/WorkbenchConnector/IAgentConfig.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/IAgentConfig.cs rename to libraries/dotnet/WorkbenchConnector/IAgentConfig.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Models/ChatHistoryExt.cs b/libraries/dotnet/WorkbenchConnector/Models/ChatHistoryExt.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Models/ChatHistoryExt.cs rename to libraries/dotnet/WorkbenchConnector/Models/ChatHistoryExt.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Models/Command.cs b/libraries/dotnet/WorkbenchConnector/Models/Command.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Models/Command.cs rename to libraries/dotnet/WorkbenchConnector/Models/Command.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Models/Conversation.cs b/libraries/dotnet/WorkbenchConnector/Models/Conversation.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Models/Conversation.cs rename to libraries/dotnet/WorkbenchConnector/Models/Conversation.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Models/ConversationEvent.cs b/libraries/dotnet/WorkbenchConnector/Models/ConversationEvent.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Models/ConversationEvent.cs rename to libraries/dotnet/WorkbenchConnector/Models/ConversationEvent.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Models/DebugInfo.cs b/libraries/dotnet/WorkbenchConnector/Models/DebugInfo.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Models/DebugInfo.cs rename to libraries/dotnet/WorkbenchConnector/Models/DebugInfo.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Models/Insight.cs b/libraries/dotnet/WorkbenchConnector/Models/Insight.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Models/Insight.cs rename to libraries/dotnet/WorkbenchConnector/Models/Insight.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Models/Message.cs b/libraries/dotnet/WorkbenchConnector/Models/Message.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Models/Message.cs rename to libraries/dotnet/WorkbenchConnector/Models/Message.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Models/MessageMetadata.cs b/libraries/dotnet/WorkbenchConnector/Models/MessageMetadata.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Models/MessageMetadata.cs rename to libraries/dotnet/WorkbenchConnector/Models/MessageMetadata.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Models/Participant.cs b/libraries/dotnet/WorkbenchConnector/Models/Participant.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Models/Participant.cs rename to libraries/dotnet/WorkbenchConnector/Models/Participant.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Models/Sender.cs b/libraries/dotnet/WorkbenchConnector/Models/Sender.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Models/Sender.cs rename to libraries/dotnet/WorkbenchConnector/Models/Sender.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Storage/AgentInfo.cs b/libraries/dotnet/WorkbenchConnector/Storage/AgentInfo.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Storage/AgentInfo.cs rename to libraries/dotnet/WorkbenchConnector/Storage/AgentInfo.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Storage/AgentServiceStorage.cs b/libraries/dotnet/WorkbenchConnector/Storage/AgentServiceStorage.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Storage/AgentServiceStorage.cs rename to libraries/dotnet/WorkbenchConnector/Storage/AgentServiceStorage.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Storage/IAgentServiceStorage.cs b/libraries/dotnet/WorkbenchConnector/Storage/IAgentServiceStorage.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Storage/IAgentServiceStorage.cs rename to libraries/dotnet/WorkbenchConnector/Storage/IAgentServiceStorage.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/StringLoggingExtensions.cs b/libraries/dotnet/WorkbenchConnector/StringLoggingExtensions.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/StringLoggingExtensions.cs rename to libraries/dotnet/WorkbenchConnector/StringLoggingExtensions.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/Webservice.cs b/libraries/dotnet/WorkbenchConnector/Webservice.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/Webservice.cs rename to libraries/dotnet/WorkbenchConnector/Webservice.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/WorkbenchConfig.cs b/libraries/dotnet/WorkbenchConnector/WorkbenchConfig.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/WorkbenchConfig.cs rename to libraries/dotnet/WorkbenchConnector/WorkbenchConfig.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/WorkbenchConnector.cs b/libraries/dotnet/WorkbenchConnector/WorkbenchConnector.cs similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/WorkbenchConnector.cs rename to libraries/dotnet/WorkbenchConnector/WorkbenchConnector.cs diff --git a/assistant-connector/dotnet/WorkbenchConnector/WorkbenchConnector.csproj b/libraries/dotnet/WorkbenchConnector/WorkbenchConnector.csproj similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/WorkbenchConnector.csproj rename to libraries/dotnet/WorkbenchConnector/WorkbenchConnector.csproj diff --git a/assistant-connector/dotnet/WorkbenchConnector/icon.png b/libraries/dotnet/WorkbenchConnector/icon.png similarity index 100% rename from assistant-connector/dotnet/WorkbenchConnector/icon.png rename to libraries/dotnet/WorkbenchConnector/icon.png diff --git a/assistant-connector/dotnet/pack.sh b/libraries/dotnet/pack.sh similarity index 100% rename from assistant-connector/dotnet/pack.sh rename to libraries/dotnet/pack.sh diff --git a/libraries/content-safety/.gitignore b/libraries/python/content-safety/.gitignore similarity index 100% rename from libraries/content-safety/.gitignore rename to libraries/python/content-safety/.gitignore diff --git a/libraries/content-safety/.vscode/settings.json b/libraries/python/content-safety/.vscode/settings.json similarity index 100% rename from libraries/content-safety/.vscode/settings.json rename to libraries/python/content-safety/.vscode/settings.json diff --git a/libraries/content-safety/Makefile b/libraries/python/content-safety/Makefile similarity index 58% rename from libraries/content-safety/Makefile rename to libraries/python/content-safety/Makefile index 4e1835c..ba643bf 100644 --- a/libraries/content-safety/Makefile +++ b/libraries/python/content-safety/Makefile @@ -2,4 +2,4 @@ repo_root = $(shell git rev-parse --show-toplevel) .DEFAULT_GOAL := venv -include $(repo_root)/build-tools/makefiles/poetry.mk +include $(repo_root)/tools/makefiles/poetry.mk diff --git a/libraries/content-safety/README.md b/libraries/python/content-safety/README.md similarity index 53% rename from libraries/content-safety/README.md rename to libraries/python/content-safety/README.md index 621589a..b03b4e2 100644 --- a/libraries/content-safety/README.md +++ b/libraries/python/content-safety/README.md @@ -2,8 +2,8 @@ Use these evaluators to ensure that the content being processed by your assistant and being displayed to users is safe and appropriate. This is especially important when dealing with user-generated or model-generated content, but can also be useful for code-generated content as well. -See the [Responsible AI FAQ](../../RESPONSIBLE_AI_FAQ.md) for more information. +See the [Responsible AI FAQ](../../../RESPONSIBLE_AI_FAQ.md) for more information. ## Recommended -The recommended evaluator is the [`combined-content-safety-evaluator`](./combined-content-safety-evaluator/README.md) which is a complete package that includes all of the evaluators in this repository. Alternatively, you can use the individual evaluators if you only need one or two of them. See the README files in each evaluator's directory for more information. +The recommended evaluator is the [`combined-content-safety-evaluator`](./content_safety/README.md) which is a complete package that includes all of the evaluators in this repository. Alternatively, you can use the individual evaluators if you only need one or two of them. See the README files in each evaluator's directory for more information. diff --git a/libraries/content-safety/content_safety/README.md b/libraries/python/content-safety/content_safety/README.md similarity index 100% rename from libraries/content-safety/content_safety/README.md rename to libraries/python/content-safety/content_safety/README.md diff --git a/libraries/content-safety/content_safety/__init__.py b/libraries/python/content-safety/content_safety/__init__.py similarity index 100% rename from libraries/content-safety/content_safety/__init__.py rename to libraries/python/content-safety/content_safety/__init__.py diff --git a/libraries/content-safety/content_safety/evaluators/__init__.py b/libraries/python/content-safety/content_safety/evaluators/__init__.py similarity index 100% rename from libraries/content-safety/content_safety/evaluators/__init__.py rename to libraries/python/content-safety/content_safety/evaluators/__init__.py diff --git a/libraries/content-safety/content_safety/evaluators/azure_content_safety/__init__.py b/libraries/python/content-safety/content_safety/evaluators/azure_content_safety/__init__.py similarity index 100% rename from libraries/content-safety/content_safety/evaluators/azure_content_safety/__init__.py rename to libraries/python/content-safety/content_safety/evaluators/azure_content_safety/__init__.py diff --git a/libraries/content-safety/content_safety/evaluators/azure_content_safety/config.py b/libraries/python/content-safety/content_safety/evaluators/azure_content_safety/config.py similarity index 100% rename from libraries/content-safety/content_safety/evaluators/azure_content_safety/config.py rename to libraries/python/content-safety/content_safety/evaluators/azure_content_safety/config.py diff --git a/libraries/content-safety/content_safety/evaluators/azure_content_safety/evaluator.py b/libraries/python/content-safety/content_safety/evaluators/azure_content_safety/evaluator.py similarity index 100% rename from libraries/content-safety/content_safety/evaluators/azure_content_safety/evaluator.py rename to libraries/python/content-safety/content_safety/evaluators/azure_content_safety/evaluator.py diff --git a/libraries/content-safety/content_safety/evaluators/config.py b/libraries/python/content-safety/content_safety/evaluators/config.py similarity index 100% rename from libraries/content-safety/content_safety/evaluators/config.py rename to libraries/python/content-safety/content_safety/evaluators/config.py diff --git a/libraries/content-safety/content_safety/evaluators/evaluator.py b/libraries/python/content-safety/content_safety/evaluators/evaluator.py similarity index 100% rename from libraries/content-safety/content_safety/evaluators/evaluator.py rename to libraries/python/content-safety/content_safety/evaluators/evaluator.py diff --git a/libraries/content-safety/content_safety/evaluators/openai_moderations/__init__.py b/libraries/python/content-safety/content_safety/evaluators/openai_moderations/__init__.py similarity index 100% rename from libraries/content-safety/content_safety/evaluators/openai_moderations/__init__.py rename to libraries/python/content-safety/content_safety/evaluators/openai_moderations/__init__.py diff --git a/libraries/content-safety/content_safety/evaluators/openai_moderations/config.py b/libraries/python/content-safety/content_safety/evaluators/openai_moderations/config.py similarity index 100% rename from libraries/content-safety/content_safety/evaluators/openai_moderations/config.py rename to libraries/python/content-safety/content_safety/evaluators/openai_moderations/config.py diff --git a/libraries/content-safety/content_safety/evaluators/openai_moderations/evaluator.py b/libraries/python/content-safety/content_safety/evaluators/openai_moderations/evaluator.py similarity index 100% rename from libraries/content-safety/content_safety/evaluators/openai_moderations/evaluator.py rename to libraries/python/content-safety/content_safety/evaluators/openai_moderations/evaluator.py diff --git a/libraries/content-safety/poetry.toml b/libraries/python/content-safety/poetry.toml similarity index 100% rename from libraries/content-safety/poetry.toml rename to libraries/python/content-safety/poetry.toml diff --git a/libraries/content-safety/pyproject.toml b/libraries/python/content-safety/pyproject.toml similarity index 78% rename from libraries/content-safety/pyproject.toml rename to libraries/python/content-safety/pyproject.toml index 09fb529..24af1e1 100644 --- a/libraries/content-safety/pyproject.toml +++ b/libraries/python/content-safety/pyproject.toml @@ -9,12 +9,12 @@ packages = [{ include = "content_safety" }] [tool.poetry.dependencies] python = "~3.11" azure-ai-contentsafety = "^1.0.0" -azure-core = {version = "*", extras = ["aio"]} +azure-core = { version = "*", extras = ["aio"] } azure-identity = "^1.17.1" openai = "^1.3.9" # If you copy this file to your project, you should verify the relative path to the following: -semantic-workbench-assistant = { path = "../../semantic-workbench/v1/service/semantic-workbench-assistant", develop = true } +semantic-workbench-assistant = { path = "../semantic-workbench-assistant", develop = true } [tool.poetry.group.dev.dependencies] ruff = "^0.6.4" diff --git a/libraries/python/semantic-workbench-api-model/.vscode/settings.json b/libraries/python/semantic-workbench-api-model/.vscode/settings.json new file mode 100644 index 0000000..8579d20 --- /dev/null +++ b/libraries/python/semantic-workbench-api-model/.vscode/settings.json @@ -0,0 +1,259 @@ +{ + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit", + "source.fixAll": "explicit" + }, + "editor.formatOnSave": true, + "files.eol": "\n", + "files.trimTrailingWhitespace": true, + "flake8.ignorePatterns": ["**/*.py"], // disable flake8 in favor of ruff + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "python.analysis.autoFormatStrings": true, + "python.analysis.autoImportCompletions": true, + "python.analysis.diagnosticMode": "workspace", + "python.analysis.exclude": [ + "**/node_modules/**", + "**/.venv/**", + "**/.data/**", + "**/__pycache__/**" + ], + "python.analysis.fixAll": ["source.unusedImports"], + "python.analysis.inlayHints.functionReturnTypes": true, + "python.analysis.typeCheckingMode": "basic", + "python.defaultInterpreterPath": "${workspaceFolder}/.venv", + "python.languageServer": "Pylance", + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll": "explicit", + "source.unusedImports": "explicit", + "source.organizeImports": "explicit", + "source.formatDocument": "explicit" + } + }, + "ruff.nativeServer": "on", + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit", + "source.fixAll": "explicit" + } + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit", + "source.fixAll": "explicit" + } + }, + "css.lint.validProperties": ["composes"], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "eslint.lintTask.enable": true, + "editor.formatOnPaste": true, + "editor.formatOnType": true, + "eslint.workingDirectories": [ + { + "mode": "auto" + } + ], + "javascript.updateImportsOnFileMove.enabled": "always", + "search.exclude": { + "**/node_modules": true, + "**/bower_components": true, + "**/build": true, + "**/.venv": true + }, + "typescript.updateImportsOnFileMove.enabled": "always", + "eslint.enable": true, + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact" + ], + "files.associations": { "*.json": "jsonc" }, + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true + }, + "editor.bracketPairColorization.enabled": true, + "editor.guides.bracketPairs": "active", + "eslint.options": { + "overrideConfigFile": ".eslintrc.cjs" + }, + "better-comments.highlightPlainText": true, + "better-comments.multilineComments": true, + "better-comments.tags": [ + { + "tag": "!", + "color": "#FF2D00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "?", + "color": "#3498DB", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "//", + "color": "#474747", + "strikethrough": true, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "todo", + "color": "#FF8C00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "fixme", + "color": "#FF2D00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "*", + "color": "#98C379", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + } + ], + "cSpell.words": [ + "abcjs", + "activedescendant", + "addoption", + "aiosqlite", + "aiter", + "appsettings", + "arcname", + "aread", + "asgi", + "assistantparticipant", + "assistantserviceregistration", + "asyncpg", + "autoflush", + "azurewebsites", + "cachetools", + "Codespace", + "Codespaces", + "cognitiveservices", + "conversationmessage", + "conversationrole", + "conversationshare", + "conversationshareredemption", + "datetime", + "datname", + "dbaeumer", + "dbapi", + "dbtype", + "deadcode", + "decompile", + "deepmerge", + "devcontainer", + "devcontainers", + "devtunnel", + "dotenv", + "echosql", + "endregion", + "epivision", + "esbenp", + "fastapi", + "fileversion", + "fluentui", + "getfixturevalue", + "griffel", + "hashkey", + "httpx", + "innerjoin", + "inspectable", + "isouter", + "joinedload", + "jsonable", + "jsonlogger", + "jungaretti", + "jwks", + "keyvault", + "Langchain", + "levelname", + "levelno", + "listbox", + "msal", + "nonchat", + "norender", + "Ofsteps", + "ondelete", + "openai", + "pydantic", + "pylance", + "pyproject", + "pythonjsonlogger", + "quickstart", + "raiseerr", + "reactflow", + "reduxjs", + "rehype", + "rjsf", + "rootpath", + "selectin", + "semanticworkbench", + "sessionmaker", + "setenv", + "sqlalchemy", + "sqlmodel", + "sqltypes", + "stackoverflow", + "starlette", + "streamsaver", + "subprocessor", + "tabster", + "tamasfe", + "tiktoken", + "tracebacks", + "Typeahead", + "upscaled", + "usecwd", + "userparticipant", + "uvicorn", + "virtualenvs", + "webservice", + "westus", + "winget", + "workbenchservice", + "workflowdefinition", + "workflowrun", + "workflowuserparticipant" + ] +} diff --git a/libraries/python/semantic-workbench-api-model/Makefile b/libraries/python/semantic-workbench-api-model/Makefile new file mode 100644 index 0000000..688713a --- /dev/null +++ b/libraries/python/semantic-workbench-api-model/Makefile @@ -0,0 +1,8 @@ +repo_root = $(shell git rev-parse --show-toplevel) + +.DEFAULT_GOAL := venv + +include $(repo_root)/tools/makefiles/poetry.mk + +test: venv + $(VENV_BIN)/pytest diff --git a/semantic-workbench/v1/service/semantic-workbench-api-model/README.md b/libraries/python/semantic-workbench-api-model/README.md similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-api-model/README.md rename to libraries/python/semantic-workbench-api-model/README.md diff --git a/semantic-workbench/v1/service/semantic-workbench-api-model/poetry.toml b/libraries/python/semantic-workbench-api-model/poetry.toml similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-api-model/poetry.toml rename to libraries/python/semantic-workbench-api-model/poetry.toml diff --git a/semantic-workbench/v1/service/semantic-workbench-api-model/pyproject.toml b/libraries/python/semantic-workbench-api-model/pyproject.toml similarity index 87% rename from semantic-workbench/v1/service/semantic-workbench-api-model/pyproject.toml rename to libraries/python/semantic-workbench-api-model/pyproject.toml index 527ae87..2ce2493 100644 --- a/semantic-workbench/v1/service/semantic-workbench-api-model/pyproject.toml +++ b/libraries/python/semantic-workbench-api-model/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "semantic-workbench-api-model" version = "0.1.0" -description = "Library of pydantic models for requests and responses to the semantic-workbench-service and semant-workbench-assistant services." +description = "Library of pydantic models for requests and responses to the semantic-workbench-service and semantic-workbench-assistant services." authors = ["Semantic Workbench Team"] readme = "README.md" packages= [ diff --git a/semantic-workbench/v1/service/semantic-workbench-api-model/semantic_workbench_api_model/__init__.py b/libraries/python/semantic-workbench-api-model/semantic_workbench_api_model/__init__.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-api-model/semantic_workbench_api_model/__init__.py rename to libraries/python/semantic-workbench-api-model/semantic_workbench_api_model/__init__.py diff --git a/semantic-workbench/v1/service/semantic-workbench-api-model/semantic_workbench_api_model/assistant_model.py b/libraries/python/semantic-workbench-api-model/semantic_workbench_api_model/assistant_model.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-api-model/semantic_workbench_api_model/assistant_model.py rename to libraries/python/semantic-workbench-api-model/semantic_workbench_api_model/assistant_model.py diff --git a/semantic-workbench/v1/service/semantic-workbench-api-model/semantic_workbench_api_model/assistant_service_client.py b/libraries/python/semantic-workbench-api-model/semantic_workbench_api_model/assistant_service_client.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-api-model/semantic_workbench_api_model/assistant_service_client.py rename to libraries/python/semantic-workbench-api-model/semantic_workbench_api_model/assistant_service_client.py diff --git a/semantic-workbench/v1/service/semantic-workbench-api-model/semantic_workbench_api_model/workbench_model.py b/libraries/python/semantic-workbench-api-model/semantic_workbench_api_model/workbench_model.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-api-model/semantic_workbench_api_model/workbench_model.py rename to libraries/python/semantic-workbench-api-model/semantic_workbench_api_model/workbench_model.py diff --git a/semantic-workbench/v1/service/semantic-workbench-api-model/semantic_workbench_api_model/workbench_service_client.py b/libraries/python/semantic-workbench-api-model/semantic_workbench_api_model/workbench_service_client.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-api-model/semantic_workbench_api_model/workbench_service_client.py rename to libraries/python/semantic-workbench-api-model/semantic_workbench_api_model/workbench_service_client.py diff --git a/libraries/python/semantic-workbench-assistant/.gitignore b/libraries/python/semantic-workbench-assistant/.gitignore new file mode 100644 index 0000000..2317ceb --- /dev/null +++ b/libraries/python/semantic-workbench-assistant/.gitignore @@ -0,0 +1,9 @@ +__pycache__ +.pytest_cache +*.egg* +.data +.venv +venv +.env + +poetry.lock diff --git a/libraries/python/semantic-workbench-assistant/.vscode/launch.json b/libraries/python/semantic-workbench-assistant/.vscode/launch.json new file mode 100644 index 0000000..043e823 --- /dev/null +++ b/libraries/python/semantic-workbench-assistant/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "debugpy", + "request": "launch", + "name": "canonical-assistant", + "cwd": "${workspaceFolder}", + "module": "semantic_workbench_assistant.start", + "args": ["semantic_workbench_assistant.canonical:app", "--port", "3100"], + "consoleTitle": "canonical-assistant" + } + ] +} diff --git a/libraries/python/semantic-workbench-assistant/.vscode/settings.json b/libraries/python/semantic-workbench-assistant/.vscode/settings.json new file mode 100644 index 0000000..a9ad9d8 --- /dev/null +++ b/libraries/python/semantic-workbench-assistant/.vscode/settings.json @@ -0,0 +1,225 @@ +{ + "editor.bracketPairColorization.enabled": true, + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit", + "source.fixAll": "explicit" + }, + "editor.guides.bracketPairs": "active", + "editor.formatOnPaste": true, + "editor.formatOnType": true, + "editor.formatOnSave": true, + "files.eol": "\n", + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true + }, + "files.trimTrailingWhitespace": true, + "flake8.ignorePatterns": ["**/*.py"], // disable flake8 in favor of ruff + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "python.analysis.autoFormatStrings": true, + "python.analysis.autoImportCompletions": true, + "python.analysis.diagnosticMode": "workspace", + "python.analysis.exclude": [ + "**/.venv/**", + "**/.data/**", + "**/__pycache__/**" + ], + "python.analysis.fixAll": ["source.unusedImports"], + "python.analysis.inlayHints.functionReturnTypes": true, + "python.analysis.typeCheckingMode": "basic", + "python.defaultInterpreterPath": "${workspaceFolder}/.venv", + "python.testing.pytestEnabled": true, + "python.testing.cwd": "${workspaceFolder}", + "python.testing.pytestArgs": [], + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll": "explicit", + "source.unusedImports": "explicit", + "source.organizeImports": "explicit", + "source.formatDocument": "explicit" + } + }, + "ruff.nativeServer": "on", + "search.exclude": { + "**/.venv": true, + "**/.data": true, + "**/__pycache__": true + }, + "better-comments.highlightPlainText": true, + "better-comments.multilineComments": true, + "better-comments.tags": [ + { + "tag": "!", + "color": "#FF2D00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "?", + "color": "#3498DB", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "//", + "color": "#474747", + "strikethrough": true, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "todo", + "color": "#FF8C00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "fixme", + "color": "#FF2D00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "*", + "color": "#98C379", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + } + ], + // For use with optional extension: "streetsidesoftware.code-spell-checker" + "cSpell.words": [ + "abcjs", + "activedescendant", + "addoption", + "aiosqlite", + "aiter", + "appsettings", + "arcname", + "aread", + "asgi", + "assistantparticipant", + "assistantserviceregistration", + "asyncpg", + "autoflush", + "azurewebsites", + "cachetools", + "Codespace", + "Codespaces", + "cognitiveservices", + "conversationmessage", + "conversationrole", + "conversationshare", + "conversationshareredemption", + "datetime", + "datname", + "dbaeumer", + "dbapi", + "dbtype", + "deadcode", + "decompile", + "deepmerge", + "devcontainer", + "devcontainers", + "devtunnel", + "dotenv", + "echosql", + "endregion", + "epivision", + "esbenp", + "fastapi", + "fileversion", + "fluentui", + "getfixturevalue", + "griffel", + "hashkey", + "httpx", + "innerjoin", + "inspectable", + "isouter", + "joinedload", + "jsonable", + "jsonlogger", + "jungaretti", + "jwks", + "keyvault", + "Langchain", + "levelname", + "levelno", + "listbox", + "msal", + "nonchat", + "norender", + "Ofsteps", + "ondelete", + "openai", + "pydantic", + "pylance", + "pyproject", + "pythonjsonlogger", + "quickstart", + "raiseerr", + "reactflow", + "reduxjs", + "rehype", + "rjsf", + "rootpath", + "selectin", + "semanticworkbench", + "sessionmaker", + "setenv", + "sqlalchemy", + "sqlmodel", + "sqltypes", + "stackoverflow", + "starlette", + "streamsaver", + "subprocessor", + "tabster", + "tamasfe", + "tiktoken", + "tracebacks", + "Typeahead", + "upscaled", + "usecwd", + "userparticipant", + "uvicorn", + "virtualenvs", + "webservice", + "westus", + "winget", + "workbenchservice", + "workflowdefinition", + "workflowrun", + "workflowuserparticipant" + ] +} diff --git a/libraries/python/semantic-workbench-assistant/Makefile b/libraries/python/semantic-workbench-assistant/Makefile new file mode 100644 index 0000000..688713a --- /dev/null +++ b/libraries/python/semantic-workbench-assistant/Makefile @@ -0,0 +1,8 @@ +repo_root = $(shell git rev-parse --show-toplevel) + +.DEFAULT_GOAL := venv + +include $(repo_root)/tools/makefiles/poetry.mk + +test: venv + $(VENV_BIN)/pytest diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/README.md b/libraries/python/semantic-workbench-assistant/README.md similarity index 91% rename from semantic-workbench/v1/service/semantic-workbench-assistant/README.md rename to libraries/python/semantic-workbench-assistant/README.md index b98be81..fdc1ce6 100644 --- a/semantic-workbench/v1/service/semantic-workbench-assistant/README.md +++ b/libraries/python/semantic-workbench-assistant/README.md @@ -9,6 +9,6 @@ The repository contains a without any AI feature, that can be used as starting p To start the canonical assistant: ```sh -cd semantic-workbench/v1/service +cd workbench-service start-semantic-workbench-assistant semantic_workbench_assistant.canonical:app -``` \ No newline at end of file +``` diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/poetry.toml b/libraries/python/semantic-workbench-assistant/poetry.toml similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/poetry.toml rename to libraries/python/semantic-workbench-assistant/poetry.toml diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/pyproject.toml b/libraries/python/semantic-workbench-assistant/pyproject.toml similarity index 83% rename from semantic-workbench/v1/service/semantic-workbench-assistant/pyproject.toml rename to libraries/python/semantic-workbench-assistant/pyproject.toml index ea830f3..255daf5 100644 --- a/semantic-workbench/v1/service/semantic-workbench-assistant/pyproject.toml +++ b/libraries/python/semantic-workbench-assistant/pyproject.toml @@ -33,3 +33,13 @@ build-backend = "poetry.core.masonry.api" [tool.pyright] exclude = ["venv", ".venv"] + +[tool.pytest.ini_options] +addopts = "-vv" +log_cli = true +log_cli_level = "WARNING" +log_cli_format = "%(asctime)s | %(levelname)-7s | %(name)s | %(message)s" +testpaths = [ + "tests" +] +asyncio_mode="auto" diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/__init__.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/__init__.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/__init__.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/__init__.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/__init__.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/__init__.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/__init__.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/__init__.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/assistant.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/assistant.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/assistant.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/assistant.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/config.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/config.py similarity index 99% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/config.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/config.py index 5da4f62..c58197c 100644 --- a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/config.py +++ b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/config.py @@ -48,6 +48,7 @@ async def get(self, assistant_context: AssistantContext) -> ConfigModelT: # if the config file hasn't been written yet, check the export/import path path = self._export_import_path_for(assistant_context) + config = None try: config = read_model(path, self._default.__class__) except ValidationError as e: diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/content_safety.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/content_safety.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/content_safety.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/content_safety.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/context.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/context.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/context.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/context.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/error.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/error.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/error.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/error.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/export_import.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/export_import.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/export_import.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/export_import.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/protocol.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/protocol.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/protocol.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/protocol.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/service.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/service.py similarity index 99% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/service.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/service.py index 57ee84e..a2aa08b 100644 --- a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/service.py +++ b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/service.py @@ -141,6 +141,7 @@ async def lifespan(self) -> AsyncIterator[None]: for task in self._conversation_event_tasks: task.cancel() + results = [] with contextlib.suppress(asyncio.CancelledError): results = await asyncio.gather(*self._conversation_event_tasks, return_exceptions=True) @@ -149,6 +150,7 @@ async def lifespan(self) -> AsyncIterator[None]: logging.exception("event handling task raised exception", exc_info=result) def read_assistant_states(self) -> _PersistedAssistantStates: + states = None try: states = read_model(self._assistant_states_path, _PersistedAssistantStates) except FileNotFoundError: @@ -404,6 +406,7 @@ async def _forward_events_from_queue(self, queue: asyncio.Queue[_Event]) -> NoRe """ while True: try: + wrapper = None try: async with asyncio.timeout(1): wrapper = await queue.get() @@ -417,6 +420,9 @@ async def _forward_events_from_queue(self, queue: asyncio.Queue[_Event]) -> NoRe queue.task_done() + if wrapper is None: + continue + assistant_id = wrapper.assistant_id event = wrapper.event diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_service.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_service.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/assistant_service.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_service.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/auth.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/auth.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/auth.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/auth.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py similarity index 99% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py index dedd5b4..9078871 100644 --- a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py +++ b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/canonical.py @@ -30,7 +30,7 @@ class PromptConfigModel(BaseModel): class ConfigStateModel(BaseModel): - model_config: ConfigDict = ConfigDict(extra="forbid", strict=True) + model_config: ConfigDict = ConfigDict(extra="forbid", strict=True) # type: ignore un_annotated_text: str = "" short_text: Annotated[ diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/command.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/command.py similarity index 89% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/command.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/command.py index 7bb5cbb..82a3ae8 100644 --- a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/command.py +++ b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/command.py @@ -1,5 +1,6 @@ import argparse import shlex +from typing import NoReturn class CommandArgumentParser(argparse.ArgumentParser): @@ -26,10 +27,11 @@ def __init__(self, command: str, description: str, add_help=True): def command(self) -> str: return self.prog - def error(self, message): + def error(self, message) -> NoReturn: self._error_message = message + raise argparse.ArgumentError(None, message) - def parse_args(self, arg_string: str): + def parse_args(self, arg_string: str) -> argparse.Namespace: # type: ignore try: sys_args_like = shlex.split(arg_string) except ValueError as e: diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/config.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/config.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/config.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/config.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/logging_config.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/logging_config.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/logging_config.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/logging_config.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/settings.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/settings.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/settings.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/settings.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/start.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/start.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/start.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/start.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/storage.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/storage.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/semantic_workbench_assistant/storage.py rename to libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/storage.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/tests/conftest.py b/libraries/python/semantic-workbench-assistant/tests/conftest.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/tests/conftest.py rename to libraries/python/semantic-workbench-assistant/tests/conftest.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/tests/test_assistant_app.py b/libraries/python/semantic-workbench-assistant/tests/test_assistant_app.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/tests/test_assistant_app.py rename to libraries/python/semantic-workbench-assistant/tests/test_assistant_app.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/tests/test_canonical.py b/libraries/python/semantic-workbench-assistant/tests/test_canonical.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/tests/test_canonical.py rename to libraries/python/semantic-workbench-assistant/tests/test_canonical.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/tests/test_config.py b/libraries/python/semantic-workbench-assistant/tests/test_config.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/tests/test_config.py rename to libraries/python/semantic-workbench-assistant/tests/test_config.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/tests/test_storage_file_storage.py b/libraries/python/semantic-workbench-assistant/tests/test_storage_file_storage.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/tests/test_storage_file_storage.py rename to libraries/python/semantic-workbench-assistant/tests/test_storage_file_storage.py diff --git a/semantic-workbench/v1/service/semantic-workbench-assistant/tests/test_storage_model_storage.py b/libraries/python/semantic-workbench-assistant/tests/test_storage_model_storage.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-assistant/tests/test_storage_model_storage.py rename to libraries/python/semantic-workbench-assistant/tests/test_storage_model_storage.py diff --git a/semantic-workbench.code-workspace b/semantic-workbench.code-workspace index b1707dd..2b6610d 100644 --- a/semantic-workbench.code-workspace +++ b/semantic-workbench.code-workspace @@ -1,52 +1,81 @@ { + "launch": { + "version": "0.2.0", + "configurations": [], + "compounds": [ + { + "name": "semantic-workbench", + "configurations": [ + "app: semantic-workbench-app", + "service: semantic-workbench-service" + ] + }, + { + "name": "everything", + "configurations": [ + "app: semantic-workbench-app", + "service: semantic-workbench-service", + "examples: python-01-echo-bot", + "examples: python-02-simple-chatbot", + "examples: python-03-multimodel-chatbot", + "assistants: prospector-assistant", + ] + } + ] + }, + // Naming convention: : (skip all subfolders) "folders": [ { "name": "docs", "path": "./docs" }, { - "name": "semantic-workbench/v1", - "path": "./semantic-workbench/v1" + "name": "workbench-app", + "path": "./workbench-app" }, { - "name": "examples/python-01-echo-bot", - "path": "./examples/python-01-echo-bot" + "name": "workbench-service", + "path": "./workbench-service" }, { - "name": "examples/python-02-simple-chatbot", - "path": "./examples/python-02-simple-chatbot" + "name": "examples:python-01-echo-bot", + "path": "./examples/python/python-01-echo-bot" }, { - "name": "examples/python-03-multimodel-chatbot", - "path": "./examples/python-03-multimodel-chatbot" + "name": "examples:python-02-simple-chatbot", + "path": "./examples/python/python-02-simple-chatbot" }, { - "name": "assistants/prospector-assistant", + "name": "examples:python-03-multimodel-chatbot", + "path": "./examples/python/python-03-multimodel-chatbot" + }, + { + "name": "assistants:prospector-assistant", "path": "./assistants/prospector-assistant" }, { - "name": "assistant-connector", - "path": "./assistant-connector" + "name": "libraries:content-safety", + "path": "./libraries/python/content-safety" }, { - "name": "libraries/content-safety", - "path": "./libraries/content-safety" + "name": "libraries:semantic-workbench-api-model", + "path": "./libraries/python/semantic-workbench-api-model" }, { - "name": "build-tools", - "path": "./build-tools" + "name": "libraries:semantic-workbench-assistant", + "path": "./libraries/python/semantic-workbench-assistant" }, { - "name": ".github", - "path": "./.github" + "name": "tools", + "path": "./tools" }, { "name": ".devcontainer", "path": "./.devcontainer" }, { - "name": ".vscode", - "path": "./.vscode" + "name": ".github", + "path": "./.github" } ] } diff --git a/semantic-workbench/v1/Makefile b/semantic-workbench/v1/Makefile index 9ec4bce..4f6df62 100644 --- a/semantic-workbench/v1/Makefile +++ b/semantic-workbench/v1/Makefile @@ -1,2 +1,2 @@ repo_root = $(shell git rev-parse --show-toplevel) -include $(repo_root)/build-tools/makefiles/recursive.mk +include $(repo_root)/tools/makefiles/recursive.mk diff --git a/semantic-workbench/v1/app/src/libs/AuthHelper.ts b/semantic-workbench/v1/app/src/libs/AuthHelper.ts deleted file mode 100644 index 5ecc570..0000000 --- a/semantic-workbench/v1/app/src/libs/AuthHelper.ts +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. - -import { - Configuration, - EndSessionRequest, - IPublicClientApplication, - LogLevel, - RedirectRequest, -} from '@azure/msal-browser'; -import debug from 'debug'; -import { Constants } from '../Constants'; - -const log = debug(Constants.debug.root).extend('auth-helper'); - -const msalConfig: Configuration = { - auth: { - ...Constants.msal.auth, - redirectUri: window.origin, - }, - cache: Constants.msal.cache, - system: { - loggerOptions: { - loggerCallback: (level, message, containsPii) => { - if (containsPii) { - return; - } - switch (level) { - case LogLevel.Error: - log('error:', message); - return; - // case LogLevel.Info: - // log('info:', message); - // return; - // case LogLevel.Verbose: - // log('verbose:', message); - // return; - case LogLevel.Warning: - log('warn:', message); - } - }, - }, - }, -}; - -const loginRequest: RedirectRequest = { - scopes: Constants.msal.msGraphScopes, - // extraScopesToConsent: Constants.msal.skScopes, -}; - -const logoutRequest: EndSessionRequest = { - postLogoutRedirectUri: window.origin, -}; - -const loginAsync = async (instance: IPublicClientApplication) => { - if (Constants.msal.method === 'redirect') { - await instance.loginRedirect(loginRequest); - return undefined; - } else { - return await instance.loginPopup(loginRequest); - } -}; - -const logoutAsync = async (instance: IPublicClientApplication) => { - if (Constants.msal.method === 'popup') { - void instance.logoutPopup(logoutRequest); - } - if (Constants.msal.method === 'redirect') { - void instance.logoutRedirect(logoutRequest); - } -}; - -export const AuthHelper = { - msalConfig, - loginRequest, - logoutRequest, - loginAsync, - logoutAsync, -}; diff --git a/semantic-workbench/v1/service/Makefile b/semantic-workbench/v1/service/Makefile_old similarity index 95% rename from semantic-workbench/v1/service/Makefile rename to semantic-workbench/v1/service/Makefile_old index 30a363e..2fa64eb 100644 --- a/semantic-workbench/v1/service/Makefile +++ b/semantic-workbench/v1/service/Makefile_old @@ -2,7 +2,7 @@ repo_root = $(shell git rev-parse --show-toplevel) .DEFAULT_GOAL := venv -include $(repo_root)/build-tools/makefiles/poetry.mk +include $(repo_root)/tools/makefiles/poetry.mk test: venv $(VENV_BIN)/pytest @@ -59,4 +59,4 @@ docker-push-assistants: docker-deploy-assistants: @$(foreach example,$(ASSISTANT_EXAMPLES),$(MAKE) docker-deploy-$(subst _,-,$(example))-assistant;) -include $(repo_root)/build-tools/makefiles/docker.mk +include $(repo_root)/tools/makefiles/docker.mk diff --git a/build-tools/makefiles/docker.mk b/tools/makefiles/docker.mk similarity index 100% rename from build-tools/makefiles/docker.mk rename to tools/makefiles/docker.mk diff --git a/build-tools/makefiles/poetry.mk b/tools/makefiles/poetry.mk similarity index 100% rename from build-tools/makefiles/poetry.mk rename to tools/makefiles/poetry.mk diff --git a/build-tools/makefiles/recursive.mk b/tools/makefiles/recursive.mk similarity index 100% rename from build-tools/makefiles/recursive.mk rename to tools/makefiles/recursive.mk diff --git a/build-tools/makefiles/shell.mk b/tools/makefiles/shell.mk similarity index 100% rename from build-tools/makefiles/shell.mk rename to tools/makefiles/shell.mk diff --git a/tools/reset-service-data.sh b/tools/reset-service-data.sh index b039c1e..1364a63 100755 --- a/tools/reset-service-data.sh +++ b/tools/reset-service-data.sh @@ -5,5 +5,5 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && cd .. && pwd)" cd $ROOT # ================================================================ -rm -f semantic-workbench/v1/service/.data/workbench.db -rm -f semantic-workbench/v1/service/semantic-workbench-service/.data/workbench.db +rm -f workbench-service/.data/workbench.db +rm -f workbench-service/.data/workbench.db diff --git a/tools/run-app.sh b/tools/run-app.sh index ea2677b..5c9cea1 100755 --- a/tools/run-app.sh +++ b/tools/run-app.sh @@ -5,7 +5,7 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && cd .. && pwd)" cd $ROOT # ================================================================ -cd semantic-workbench/v1/app +cd workbench-app # Check node version, it must be major version 20 (any minor), otherwise show an error and exit NODE_VERSION=$(node -v) diff --git a/tools/run-canonical-agent.sh b/tools/run-canonical-agent.sh index e966f52..63e259f 100755 --- a/tools/run-canonical-agent.sh +++ b/tools/run-canonical-agent.sh @@ -5,6 +5,6 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && cd .. && pwd)" cd $ROOT # ================================================================ -cd semantic-workbench/v1/service +cd workbench-service poetry run start-semantic-workbench-assistant semantic_workbench_assistant.canonical:app \ No newline at end of file diff --git a/tools/run-dotnet-example1.sh b/tools/run-dotnet-example1.sh index 66282c2..c5e45ca 100755 --- a/tools/run-dotnet-example1.sh +++ b/tools/run-dotnet-example1.sh @@ -5,7 +5,7 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && cd .. && pwd)" cd $ROOT # ================================================================ -cd examples/dotnet-01-echo-bot +cd examples/dotnet/dotnet-01-echo-bot dotnet build dotnet run diff --git a/tools/run-dotnet-example2.sh b/tools/run-dotnet-example2.sh index cc466d9..bda2be4 100755 --- a/tools/run-dotnet-example2.sh +++ b/tools/run-dotnet-example2.sh @@ -5,7 +5,7 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && cd .. && pwd)" cd $ROOT # ================================================================ -cd examples/dotnet-02-message-types-demo +cd examples/dotnet/dotnet-02-message-types-demo dotnet build dotnet run diff --git a/tools/run-dotnet-example3.sh b/tools/run-dotnet-example3.sh index 91c8559..0d67756 100755 --- a/tools/run-dotnet-example3.sh +++ b/tools/run-dotnet-example3.sh @@ -5,7 +5,7 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && cd .. && pwd)" cd $ROOT # ================================================================ -cd examples/dotnet-03-simple-chatbot +cd examples/dotnet/dotnet-03-simple-chatbot dotnet build dotnet run diff --git a/tools/run-python-example1.sh b/tools/run-python-example1.sh index a0ad15c..27099cf 100755 --- a/tools/run-python-example1.sh +++ b/tools/run-python-example1.sh @@ -5,7 +5,7 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && cd .. && pwd)" cd $ROOT # ================================================================ -cd examples/python-01-echo-bot +cd examples/python/python-01-echo-bot poetry install poetry run start-semantic-workbench-assistant assistant.chat:app diff --git a/tools/run-python-example2.sh b/tools/run-python-example2.sh index eb8cffd..c81b4a3 100755 --- a/tools/run-python-example2.sh +++ b/tools/run-python-example2.sh @@ -5,7 +5,7 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && cd .. && pwd)" cd $ROOT # ================================================================ -cd examples/python-02-simple-chatbot +cd examples/python/python-02-simple-chatbot poetry install poetry run start-semantic-workbench-assistant assistant.chat:app diff --git a/tools/run-service.sh b/tools/run-service.sh index 6e4c30c..04e7ed9 100755 --- a/tools/run-service.sh +++ b/tools/run-service.sh @@ -5,10 +5,10 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && cd .. && pwd)" cd $ROOT # ================================================================ -cd semantic-workbench/v1/service/semantic-workbench-service +cd workbench-service # Note: this creates the .data folder at -# path ./semantic-workbench/v1/service/semantic-workbench-service/.data -# rather than ./semantic-workbench/v1/service/.data +# path ./workbench-service/.data +# rather than ./workbench-service/.data poetry install poetry run start-semantic-workbench-service diff --git a/workbench-app/.env.example b/workbench-app/.env.example new file mode 100644 index 0000000..f41ff88 --- /dev/null +++ b/workbench-app/.env.example @@ -0,0 +1,26 @@ +# This file contains the environment variables that are used by the app. You can copy this +# file to a new file named .env and update the values to match your environment. +# +# NOTE: If you set the environment variables in the host environment, those values will +# take precedence over the values in this file. +# +# The following is the client id from the Semantic Workbench GitHub sample app registration +# This is used to authenticate the user with the Semantic Workbench API and must match the +# client id used by the Semantic Workbench service. The default value allows you to run the +# sample app without registering your own app while running this app locally (https://127.0.0.1:300) +# If you register your own app, you must update this value to match the client id of your app. +# +# See /docs/CUSTOM_APP_REGISTRATION.md for more information. +# +VITE_SEMANTIC_WORKBENCH_CLIENT_ID=22cb77c3-ca98-4a26-b4db-ac4dcecba690 + +# The authority to use for authentication requests. +# The authority value depends on the type of account you want to authenticate and should +# match the value used when registering the app. The following values are supported: +# +# - Specific tenant only: 'https://login.microsoftonline.com//', +# - Personal accounts only: 'https://login.microsoftonline.com/consumers', +# - Work + School accounts: 'https://login.microsoftonline.com/organizations', +# - Work + School + Personal: 'https://login.microsoftonline.com/common' +# +VITE_SEMANTIC_WORKBENCH_AUTHORITY=https://login.microsoftonline.com/common diff --git a/semantic-workbench/v1/app/.eslintrc.cjs b/workbench-app/.eslintrc.cjs similarity index 100% rename from semantic-workbench/v1/app/.eslintrc.cjs rename to workbench-app/.eslintrc.cjs diff --git a/semantic-workbench/v1/app/.gitignore b/workbench-app/.gitignore similarity index 100% rename from semantic-workbench/v1/app/.gitignore rename to workbench-app/.gitignore diff --git a/workbench-app/.vscode/launch.json b/workbench-app/.vscode/launch.json new file mode 100644 index 0000000..8c9861b --- /dev/null +++ b/workbench-app/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "app: semantic-workbench-app", + "cwd": "${workspaceFolder}", + "skipFiles": ["/**"], + "console": "integratedTerminal", + "runtimeExecutable": "npm", + "runtimeArgs": ["run", "dev"] + } + ] +} diff --git a/workbench-app/.vscode/settings.json b/workbench-app/.vscode/settings.json new file mode 100644 index 0000000..dcdcc21 --- /dev/null +++ b/workbench-app/.vscode/settings.json @@ -0,0 +1,231 @@ +{ + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit", + "source.fixAll": "explicit" + }, + "editor.formatOnSave": true, + "files.eol": "\n", + "files.trimTrailingWhitespace": true, + "flake8.ignorePatterns": ["**/*.py"], // disable flake8 in favor of ruff + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "ruff.nativeServer": "on", + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit", + "source.fixAll": "explicit" + } + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit", + "source.fixAll": "explicit" + } + }, + "css.lint.validProperties": ["composes"], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "eslint.lintTask.enable": true, + "editor.formatOnPaste": true, + "editor.formatOnType": true, + "eslint.workingDirectories": [ + { + "mode": "auto" + } + ], + "javascript.updateImportsOnFileMove.enabled": "always", + "search.exclude": { + "**/node_modules": true, + "**/bower_components": true, + "**/build": true, + "**/.venv": true + }, + "typescript.updateImportsOnFileMove.enabled": "always", + "eslint.enable": true, + "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"], + "files.associations": { "*.json": "jsonc" }, + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true + }, + "editor.bracketPairColorization.enabled": true, + "editor.guides.bracketPairs": "active", + "eslint.options": { + "overrideConfigFile": ".eslintrc.cjs" + }, + "better-comments.highlightPlainText": true, + "better-comments.multilineComments": true, + "better-comments.tags": [ + { + "tag": "!", + "color": "#FF2D00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "?", + "color": "#3498DB", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "//", + "color": "#474747", + "strikethrough": true, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "todo", + "color": "#FF8C00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "fixme", + "color": "#FF2D00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "*", + "color": "#98C379", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + } + ], + "cSpell.words": [ + "abcjs", + "activedescendant", + "addoption", + "aiosqlite", + "aiter", + "appsettings", + "arcname", + "aread", + "asgi", + "assistantparticipant", + "assistantserviceregistration", + "asyncpg", + "autoflush", + "azurewebsites", + "cachetools", + "Codespace", + "Codespaces", + "cognitiveservices", + "conversationmessage", + "conversationrole", + "conversationshare", + "conversationshareredemption", + "datetime", + "datname", + "dbaeumer", + "dbapi", + "dbtype", + "deadcode", + "decompile", + "deepmerge", + "devcontainer", + "devcontainers", + "devtunnel", + "dotenv", + "echosql", + "endregion", + "epivision", + "esbenp", + "fastapi", + "fileversion", + "fluentui", + "getfixturevalue", + "griffel", + "hashkey", + "httpx", + "innerjoin", + "inspectable", + "isouter", + "joinedload", + "jsonable", + "jsonlogger", + "jungaretti", + "jwks", + "keyvault", + "Langchain", + "levelname", + "levelno", + "listbox", + "msal", + "multimodel", + "nonchat", + "norender", + "Ofsteps", + "ondelete", + "openai", + "pydantic", + "pylance", + "pyproject", + "pythonjsonlogger", + "quickstart", + "raiseerr", + "reactflow", + "reduxjs", + "rehype", + "rjsf", + "rootpath", + "selectin", + "semanticworkbench", + "sessionmaker", + "setenv", + "sqlalchemy", + "sqlmodel", + "sqltypes", + "stackoverflow", + "starlette", + "streamsaver", + "subprocessor", + "tabster", + "tamasfe", + "tiktoken", + "tracebacks", + "Typeahead", + "upscaled", + "usecwd", + "userparticipant", + "uvicorn", + "virtualenvs", + "webservice", + "westus", + "winget", + "workbenchservice", + "workflowdefinition", + "workflowrun", + "workflowuserparticipant" + ] +} diff --git a/semantic-workbench/v1/app/Makefile b/workbench-app/Makefile similarity index 86% rename from semantic-workbench/v1/app/Makefile rename to workbench-app/Makefile index 656a364..964b2cf 100644 --- a/semantic-workbench/v1/app/Makefile +++ b/workbench-app/Makefile @@ -23,4 +23,4 @@ format: lint: npm run lint -include $(repo_root)/build-tools/makefiles/shell.mk +include $(repo_root)/tools/makefiles/shell.mk diff --git a/semantic-workbench/v1/app/README.md b/workbench-app/README.md similarity index 100% rename from semantic-workbench/v1/app/README.md rename to workbench-app/README.md diff --git a/semantic-workbench/v1/app/docs/MESSAGE_METADATA.md b/workbench-app/docs/MESSAGE_METADATA.md similarity index 100% rename from semantic-workbench/v1/app/docs/MESSAGE_METADATA.md rename to workbench-app/docs/MESSAGE_METADATA.md diff --git a/semantic-workbench/v1/app/docs/MESSAGE_TYPES.md b/workbench-app/docs/MESSAGE_TYPES.md similarity index 100% rename from semantic-workbench/v1/app/docs/MESSAGE_TYPES.md rename to workbench-app/docs/MESSAGE_TYPES.md diff --git a/semantic-workbench/v1/app/docs/STATE_INSPECTORS.md b/workbench-app/docs/STATE_INSPECTORS.md similarity index 100% rename from semantic-workbench/v1/app/docs/STATE_INSPECTORS.md rename to workbench-app/docs/STATE_INSPECTORS.md diff --git a/semantic-workbench/v1/app/index.html b/workbench-app/index.html similarity index 100% rename from semantic-workbench/v1/app/index.html rename to workbench-app/index.html diff --git a/semantic-workbench/v1/app/package-lock.json b/workbench-app/package-lock.json similarity index 100% rename from semantic-workbench/v1/app/package-lock.json rename to workbench-app/package-lock.json diff --git a/semantic-workbench/v1/app/package.json b/workbench-app/package.json similarity index 100% rename from semantic-workbench/v1/app/package.json rename to workbench-app/package.json diff --git a/semantic-workbench/v1/app/prettier.config.cjs b/workbench-app/prettier.config.cjs similarity index 100% rename from semantic-workbench/v1/app/prettier.config.cjs rename to workbench-app/prettier.config.cjs diff --git a/semantic-workbench/v1/app/public/assets/background-1-upscaled.jpg b/workbench-app/public/assets/background-1-upscaled.jpg similarity index 100% rename from semantic-workbench/v1/app/public/assets/background-1-upscaled.jpg rename to workbench-app/public/assets/background-1-upscaled.jpg diff --git a/semantic-workbench/v1/app/public/assets/background-1-upscaled.png b/workbench-app/public/assets/background-1-upscaled.png similarity index 100% rename from semantic-workbench/v1/app/public/assets/background-1-upscaled.png rename to workbench-app/public/assets/background-1-upscaled.png diff --git a/semantic-workbench/v1/app/public/assets/background-1.jpg b/workbench-app/public/assets/background-1.jpg similarity index 100% rename from semantic-workbench/v1/app/public/assets/background-1.jpg rename to workbench-app/public/assets/background-1.jpg diff --git a/semantic-workbench/v1/app/public/assets/background-1.png b/workbench-app/public/assets/background-1.png similarity index 100% rename from semantic-workbench/v1/app/public/assets/background-1.png rename to workbench-app/public/assets/background-1.png diff --git a/semantic-workbench/v1/app/public/assets/background-2.jpg b/workbench-app/public/assets/background-2.jpg similarity index 100% rename from semantic-workbench/v1/app/public/assets/background-2.jpg rename to workbench-app/public/assets/background-2.jpg diff --git a/semantic-workbench/v1/app/public/assets/background-2.png b/workbench-app/public/assets/background-2.png similarity index 100% rename from semantic-workbench/v1/app/public/assets/background-2.png rename to workbench-app/public/assets/background-2.png diff --git a/semantic-workbench/v1/app/public/assets/experimental-feature.jpg b/workbench-app/public/assets/experimental-feature.jpg similarity index 100% rename from semantic-workbench/v1/app/public/assets/experimental-feature.jpg rename to workbench-app/public/assets/experimental-feature.jpg diff --git a/semantic-workbench/v1/app/public/assets/favicon.svg b/workbench-app/public/assets/favicon.svg similarity index 100% rename from semantic-workbench/v1/app/public/assets/favicon.svg rename to workbench-app/public/assets/favicon.svg diff --git a/semantic-workbench/v1/app/public/assets/workflow-designer-1.jpg b/workbench-app/public/assets/workflow-designer-1.jpg similarity index 100% rename from semantic-workbench/v1/app/public/assets/workflow-designer-1.jpg rename to workbench-app/public/assets/workflow-designer-1.jpg diff --git a/semantic-workbench/v1/app/public/assets/workflow-designer-outlets.jpg b/workbench-app/public/assets/workflow-designer-outlets.jpg similarity index 100% rename from semantic-workbench/v1/app/public/assets/workflow-designer-outlets.jpg rename to workbench-app/public/assets/workflow-designer-outlets.jpg diff --git a/semantic-workbench/v1/app/public/assets/workflow-designer-states.jpg b/workbench-app/public/assets/workflow-designer-states.jpg similarity index 100% rename from semantic-workbench/v1/app/public/assets/workflow-designer-states.jpg rename to workbench-app/public/assets/workflow-designer-states.jpg diff --git a/semantic-workbench/v1/app/public/assets/workflow-designer-transitions.jpg b/workbench-app/public/assets/workflow-designer-transitions.jpg similarity index 100% rename from semantic-workbench/v1/app/public/assets/workflow-designer-transitions.jpg rename to workbench-app/public/assets/workflow-designer-transitions.jpg diff --git a/semantic-workbench/v1/app/run.sh b/workbench-app/run.sh similarity index 100% rename from semantic-workbench/v1/app/run.sh rename to workbench-app/run.sh diff --git a/semantic-workbench/v1/app/src/Constants.ts b/workbench-app/src/Constants.ts similarity index 100% rename from semantic-workbench/v1/app/src/Constants.ts rename to workbench-app/src/Constants.ts diff --git a/semantic-workbench/v1/app/src/Root.tsx b/workbench-app/src/Root.tsx similarity index 100% rename from semantic-workbench/v1/app/src/Root.tsx rename to workbench-app/src/Root.tsx diff --git a/semantic-workbench/v1/app/src/components/App/AppFooter.tsx b/workbench-app/src/components/App/AppFooter.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/AppFooter.tsx rename to workbench-app/src/components/App/AppFooter.tsx diff --git a/semantic-workbench/v1/app/src/components/App/AppHeader.tsx b/workbench-app/src/components/App/AppHeader.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/AppHeader.tsx rename to workbench-app/src/components/App/AppHeader.tsx diff --git a/semantic-workbench/v1/app/src/components/App/AppMenu.tsx b/workbench-app/src/components/App/AppMenu.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/AppMenu.tsx rename to workbench-app/src/components/App/AppMenu.tsx diff --git a/semantic-workbench/v1/app/src/components/App/AppView.tsx b/workbench-app/src/components/App/AppView.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/AppView.tsx rename to workbench-app/src/components/App/AppView.tsx diff --git a/semantic-workbench/v1/app/src/components/App/CommandButton.tsx b/workbench-app/src/components/App/CommandButton.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/CommandButton.tsx rename to workbench-app/src/components/App/CommandButton.tsx diff --git a/semantic-workbench/v1/app/src/components/App/ConfirmLeave.tsx b/workbench-app/src/components/App/ConfirmLeave.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/ConfirmLeave.tsx rename to workbench-app/src/components/App/ConfirmLeave.tsx diff --git a/semantic-workbench/v1/app/src/components/App/ContentExport.tsx b/workbench-app/src/components/App/ContentExport.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/ContentExport.tsx rename to workbench-app/src/components/App/ContentExport.tsx diff --git a/semantic-workbench/v1/app/src/components/App/ContentImport.tsx b/workbench-app/src/components/App/ContentImport.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/ContentImport.tsx rename to workbench-app/src/components/App/ContentImport.tsx diff --git a/semantic-workbench/v1/app/src/components/App/CopyButton.tsx b/workbench-app/src/components/App/CopyButton.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/CopyButton.tsx rename to workbench-app/src/components/App/CopyButton.tsx diff --git a/semantic-workbench/v1/app/src/components/App/DynamicIframe.tsx b/workbench-app/src/components/App/DynamicIframe.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/DynamicIframe.tsx rename to workbench-app/src/components/App/DynamicIframe.tsx diff --git a/semantic-workbench/v1/app/src/components/App/ErrorList.tsx b/workbench-app/src/components/App/ErrorList.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/ErrorList.tsx rename to workbench-app/src/components/App/ErrorList.tsx diff --git a/semantic-workbench/v1/app/src/components/App/ExperimentalNotice.tsx b/workbench-app/src/components/App/ExperimentalNotice.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/ExperimentalNotice.tsx rename to workbench-app/src/components/App/ExperimentalNotice.tsx diff --git a/semantic-workbench/v1/app/src/components/App/FormWidgets/CustomizedArrayFieldTemplate.tsx b/workbench-app/src/components/App/FormWidgets/CustomizedArrayFieldTemplate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/FormWidgets/CustomizedArrayFieldTemplate.tsx rename to workbench-app/src/components/App/FormWidgets/CustomizedArrayFieldTemplate.tsx diff --git a/semantic-workbench/v1/app/src/components/App/FormWidgets/CustomizedObjectFieldTemplate.tsx b/workbench-app/src/components/App/FormWidgets/CustomizedObjectFieldTemplate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/FormWidgets/CustomizedObjectFieldTemplate.tsx rename to workbench-app/src/components/App/FormWidgets/CustomizedObjectFieldTemplate.tsx diff --git a/semantic-workbench/v1/app/src/components/App/FormWidgets/InspectableWidget.tsx b/workbench-app/src/components/App/FormWidgets/InspectableWidget.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/FormWidgets/InspectableWidget.tsx rename to workbench-app/src/components/App/FormWidgets/InspectableWidget.tsx diff --git a/semantic-workbench/v1/app/src/components/App/LabelWithDescription.tsx b/workbench-app/src/components/App/LabelWithDescription.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/LabelWithDescription.tsx rename to workbench-app/src/components/App/LabelWithDescription.tsx diff --git a/semantic-workbench/v1/app/src/components/App/Loading.tsx b/workbench-app/src/components/App/Loading.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/Loading.tsx rename to workbench-app/src/components/App/Loading.tsx diff --git a/semantic-workbench/v1/app/src/components/App/MiniControl.tsx b/workbench-app/src/components/App/MiniControl.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/MiniControl.tsx rename to workbench-app/src/components/App/MiniControl.tsx diff --git a/semantic-workbench/v1/app/src/components/App/MyAssistantServiceRegistrations.tsx b/workbench-app/src/components/App/MyAssistantServiceRegistrations.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/MyAssistantServiceRegistrations.tsx rename to workbench-app/src/components/App/MyAssistantServiceRegistrations.tsx diff --git a/semantic-workbench/v1/app/src/components/App/MyItemsManager.tsx b/workbench-app/src/components/App/MyItemsManager.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/MyItemsManager.tsx rename to workbench-app/src/components/App/MyItemsManager.tsx diff --git a/semantic-workbench/v1/app/src/components/App/PresenceMotionList.tsx b/workbench-app/src/components/App/PresenceMotionList.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/PresenceMotionList.tsx rename to workbench-app/src/components/App/PresenceMotionList.tsx diff --git a/semantic-workbench/v1/app/src/components/App/ProfileSettings.tsx b/workbench-app/src/components/App/ProfileSettings.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/App/ProfileSettings.tsx rename to workbench-app/src/components/App/ProfileSettings.tsx diff --git a/semantic-workbench/v1/app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationApiKey.tsx b/workbench-app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationApiKey.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationApiKey.tsx rename to workbench-app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationApiKey.tsx diff --git a/semantic-workbench/v1/app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationApiKeyReset.tsx b/workbench-app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationApiKeyReset.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationApiKeyReset.tsx rename to workbench-app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationApiKeyReset.tsx diff --git a/semantic-workbench/v1/app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationCreate.tsx b/workbench-app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationCreate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationCreate.tsx rename to workbench-app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationCreate.tsx diff --git a/semantic-workbench/v1/app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationRemove.tsx b/workbench-app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationRemove.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationRemove.tsx rename to workbench-app/src/components/AssistantServiceRegistrations/AssistantServiceRegistrationRemove.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/ApplyConfigButton.tsx b/workbench-app/src/components/Assistants/ApplyConfigButton.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/ApplyConfigButton.tsx rename to workbench-app/src/components/Assistants/ApplyConfigButton.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/AssistantAdd.tsx b/workbench-app/src/components/Assistants/AssistantAdd.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/AssistantAdd.tsx rename to workbench-app/src/components/Assistants/AssistantAdd.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/AssistantCreate.tsx b/workbench-app/src/components/Assistants/AssistantCreate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/AssistantCreate.tsx rename to workbench-app/src/components/Assistants/AssistantCreate.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/AssistantDelete.tsx b/workbench-app/src/components/Assistants/AssistantDelete.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/AssistantDelete.tsx rename to workbench-app/src/components/Assistants/AssistantDelete.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/AssistantDuplicate.tsx b/workbench-app/src/components/Assistants/AssistantDuplicate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/AssistantDuplicate.tsx rename to workbench-app/src/components/Assistants/AssistantDuplicate.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/AssistantEdit.tsx b/workbench-app/src/components/Assistants/AssistantEdit.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/AssistantEdit.tsx rename to workbench-app/src/components/Assistants/AssistantEdit.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/AssistantExport.tsx b/workbench-app/src/components/Assistants/AssistantExport.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/AssistantExport.tsx rename to workbench-app/src/components/Assistants/AssistantExport.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/AssistantImport.tsx b/workbench-app/src/components/Assistants/AssistantImport.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/AssistantImport.tsx rename to workbench-app/src/components/Assistants/AssistantImport.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/AssistantRemove.tsx b/workbench-app/src/components/Assistants/AssistantRemove.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/AssistantRemove.tsx rename to workbench-app/src/components/Assistants/AssistantRemove.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/AssistantRename.tsx b/workbench-app/src/components/Assistants/AssistantRename.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/AssistantRename.tsx rename to workbench-app/src/components/Assistants/AssistantRename.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/AssistantServiceMetadata.tsx b/workbench-app/src/components/Assistants/AssistantServiceMetadata.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/AssistantServiceMetadata.tsx rename to workbench-app/src/components/Assistants/AssistantServiceMetadata.tsx diff --git a/semantic-workbench/v1/app/src/components/Assistants/MyAssistants.tsx b/workbench-app/src/components/Assistants/MyAssistants.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Assistants/MyAssistants.tsx rename to workbench-app/src/components/Assistants/MyAssistants.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/Canvas/AssistantCanvas.tsx b/workbench-app/src/components/Conversations/Canvas/AssistantCanvas.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/Canvas/AssistantCanvas.tsx rename to workbench-app/src/components/Conversations/Canvas/AssistantCanvas.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/Canvas/AssistantCanvasList.tsx b/workbench-app/src/components/Conversations/Canvas/AssistantCanvasList.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/Canvas/AssistantCanvasList.tsx rename to workbench-app/src/components/Conversations/Canvas/AssistantCanvasList.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/Canvas/AssistantInspector.tsx b/workbench-app/src/components/Conversations/Canvas/AssistantInspector.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/Canvas/AssistantInspector.tsx rename to workbench-app/src/components/Conversations/Canvas/AssistantInspector.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/Canvas/AssistantInspectorList.tsx b/workbench-app/src/components/Conversations/Canvas/AssistantInspectorList.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/Canvas/AssistantInspectorList.tsx rename to workbench-app/src/components/Conversations/Canvas/AssistantInspectorList.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/Canvas/CanvasControls.tsx b/workbench-app/src/components/Conversations/Canvas/CanvasControls.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/Canvas/CanvasControls.tsx rename to workbench-app/src/components/Conversations/Canvas/CanvasControls.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/Canvas/CanvasDrawer.tsx b/workbench-app/src/components/Conversations/Canvas/CanvasDrawer.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/Canvas/CanvasDrawer.tsx rename to workbench-app/src/components/Conversations/Canvas/CanvasDrawer.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/Canvas/ConversationCanvas.tsx b/workbench-app/src/components/Conversations/Canvas/ConversationCanvas.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/Canvas/ConversationCanvas.tsx rename to workbench-app/src/components/Conversations/Canvas/ConversationCanvas.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/Canvas/InteractCanvas.tsx b/workbench-app/src/components/Conversations/Canvas/InteractCanvas.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/Canvas/InteractCanvas.tsx rename to workbench-app/src/components/Conversations/Canvas/InteractCanvas.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ChatInputPlugins/ClearEditorPlugin.tsx b/workbench-app/src/components/Conversations/ChatInputPlugins/ClearEditorPlugin.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ChatInputPlugins/ClearEditorPlugin.tsx rename to workbench-app/src/components/Conversations/ChatInputPlugins/ClearEditorPlugin.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ChatInputPlugins/LexicalMenu.ts b/workbench-app/src/components/Conversations/ChatInputPlugins/LexicalMenu.ts similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ChatInputPlugins/LexicalMenu.ts rename to workbench-app/src/components/Conversations/ChatInputPlugins/LexicalMenu.ts diff --git a/semantic-workbench/v1/app/src/components/Conversations/ChatInputPlugins/ParticipantMentionsPlugin.tsx b/workbench-app/src/components/Conversations/ChatInputPlugins/ParticipantMentionsPlugin.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ChatInputPlugins/ParticipantMentionsPlugin.tsx rename to workbench-app/src/components/Conversations/ChatInputPlugins/ParticipantMentionsPlugin.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ChatInputPlugins/TypeaheadMenuPlugin.css b/workbench-app/src/components/Conversations/ChatInputPlugins/TypeaheadMenuPlugin.css similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ChatInputPlugins/TypeaheadMenuPlugin.css rename to workbench-app/src/components/Conversations/ChatInputPlugins/TypeaheadMenuPlugin.css diff --git a/semantic-workbench/v1/app/src/components/Conversations/ChatInputPlugins/TypeaheadMenuPlugin.tsx b/workbench-app/src/components/Conversations/ChatInputPlugins/TypeaheadMenuPlugin.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ChatInputPlugins/TypeaheadMenuPlugin.tsx rename to workbench-app/src/components/Conversations/ChatInputPlugins/TypeaheadMenuPlugin.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/CodeContentRenderer.tsx b/workbench-app/src/components/Conversations/ContentRenderers/CodeContentRenderer.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/CodeContentRenderer.tsx rename to workbench-app/src/components/Conversations/ContentRenderers/CodeContentRenderer.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/ContentListRenderer.tsx b/workbench-app/src/components/Conversations/ContentRenderers/ContentListRenderer.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/ContentListRenderer.tsx rename to workbench-app/src/components/Conversations/ContentRenderers/ContentListRenderer.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/ContentRenderer.tsx b/workbench-app/src/components/Conversations/ContentRenderers/ContentRenderer.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/ContentRenderer.tsx rename to workbench-app/src/components/Conversations/ContentRenderers/ContentRenderer.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/DiffRenderer.tsx b/workbench-app/src/components/Conversations/ContentRenderers/DiffRenderer.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/DiffRenderer.tsx rename to workbench-app/src/components/Conversations/ContentRenderers/DiffRenderer.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/HtmlContentRenderer.tsx b/workbench-app/src/components/Conversations/ContentRenderers/HtmlContentRenderer.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/HtmlContentRenderer.tsx rename to workbench-app/src/components/Conversations/ContentRenderers/HtmlContentRenderer.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/JsonSchemaContentRenderer.tsx b/workbench-app/src/components/Conversations/ContentRenderers/JsonSchemaContentRenderer.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/JsonSchemaContentRenderer.tsx rename to workbench-app/src/components/Conversations/ContentRenderers/JsonSchemaContentRenderer.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/MarkdownContentRenderer.tsx b/workbench-app/src/components/Conversations/ContentRenderers/MarkdownContentRenderer.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/MarkdownContentRenderer.tsx rename to workbench-app/src/components/Conversations/ContentRenderers/MarkdownContentRenderer.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/MermaidContentRenderer.tsx b/workbench-app/src/components/Conversations/ContentRenderers/MermaidContentRenderer.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/MermaidContentRenderer.tsx rename to workbench-app/src/components/Conversations/ContentRenderers/MermaidContentRenderer.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/MusicABCContentRenderer.css b/workbench-app/src/components/Conversations/ContentRenderers/MusicABCContentRenderer.css similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/MusicABCContentRenderer.css rename to workbench-app/src/components/Conversations/ContentRenderers/MusicABCContentRenderer.css diff --git a/semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/MusicABCContentRenderer.tsx b/workbench-app/src/components/Conversations/ContentRenderers/MusicABCContentRenderer.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ContentRenderers/MusicABCContentRenderer.tsx rename to workbench-app/src/components/Conversations/ContentRenderers/MusicABCContentRenderer.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationCreate.tsx b/workbench-app/src/components/Conversations/ConversationCreate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationCreate.tsx rename to workbench-app/src/components/Conversations/ConversationCreate.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationDuplicate.tsx b/workbench-app/src/components/Conversations/ConversationDuplicate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationDuplicate.tsx rename to workbench-app/src/components/Conversations/ConversationDuplicate.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationExport.tsx b/workbench-app/src/components/Conversations/ConversationExport.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationExport.tsx rename to workbench-app/src/components/Conversations/ConversationExport.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationFileIcon.tsx b/workbench-app/src/components/Conversations/ConversationFileIcon.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationFileIcon.tsx rename to workbench-app/src/components/Conversations/ConversationFileIcon.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationRemove.tsx b/workbench-app/src/components/Conversations/ConversationRemove.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationRemove.tsx rename to workbench-app/src/components/Conversations/ConversationRemove.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationRename.tsx b/workbench-app/src/components/Conversations/ConversationRename.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationRename.tsx rename to workbench-app/src/components/Conversations/ConversationRename.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationShare.tsx b/workbench-app/src/components/Conversations/ConversationShare.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationShare.tsx rename to workbench-app/src/components/Conversations/ConversationShare.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationShareCreate.tsx b/workbench-app/src/components/Conversations/ConversationShareCreate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationShareCreate.tsx rename to workbench-app/src/components/Conversations/ConversationShareCreate.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationShareList.tsx b/workbench-app/src/components/Conversations/ConversationShareList.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationShareList.tsx rename to workbench-app/src/components/Conversations/ConversationShareList.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationShareView.tsx b/workbench-app/src/components/Conversations/ConversationShareView.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationShareView.tsx rename to workbench-app/src/components/Conversations/ConversationShareView.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationTranscript.tsx b/workbench-app/src/components/Conversations/ConversationTranscript.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationTranscript.tsx rename to workbench-app/src/components/Conversations/ConversationTranscript.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ConversationsImport.tsx b/workbench-app/src/components/Conversations/ConversationsImport.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ConversationsImport.tsx rename to workbench-app/src/components/Conversations/ConversationsImport.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/DebugInspector.tsx b/workbench-app/src/components/Conversations/DebugInspector.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/DebugInspector.tsx rename to workbench-app/src/components/Conversations/DebugInspector.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/FileItem.tsx b/workbench-app/src/components/Conversations/FileItem.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/FileItem.tsx rename to workbench-app/src/components/Conversations/FileItem.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/FileList.tsx b/workbench-app/src/components/Conversations/FileList.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/FileList.tsx rename to workbench-app/src/components/Conversations/FileList.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/InputAttachmentList.tsx b/workbench-app/src/components/Conversations/InputAttachmentList.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/InputAttachmentList.tsx rename to workbench-app/src/components/Conversations/InputAttachmentList.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/InputOptionsControl.tsx b/workbench-app/src/components/Conversations/InputOptionsControl.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/InputOptionsControl.tsx rename to workbench-app/src/components/Conversations/InputOptionsControl.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/InteractHistory.tsx b/workbench-app/src/components/Conversations/InteractHistory.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/InteractHistory.tsx rename to workbench-app/src/components/Conversations/InteractHistory.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/InteractInput.tsx b/workbench-app/src/components/Conversations/InteractInput.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/InteractInput.tsx rename to workbench-app/src/components/Conversations/InteractInput.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/InteractMessage.tsx b/workbench-app/src/components/Conversations/InteractMessage.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/InteractMessage.tsx rename to workbench-app/src/components/Conversations/InteractMessage.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/MessageDelete.tsx b/workbench-app/src/components/Conversations/MessageDelete.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/MessageDelete.tsx rename to workbench-app/src/components/Conversations/MessageDelete.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/MessageLink.tsx b/workbench-app/src/components/Conversations/MessageLink.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/MessageLink.tsx rename to workbench-app/src/components/Conversations/MessageLink.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/MyConversations.tsx b/workbench-app/src/components/Conversations/MyConversations.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/MyConversations.tsx rename to workbench-app/src/components/Conversations/MyConversations.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/MyShares.tsx b/workbench-app/src/components/Conversations/MyShares.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/MyShares.tsx rename to workbench-app/src/components/Conversations/MyShares.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ParticipantList.tsx b/workbench-app/src/components/Conversations/ParticipantList.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ParticipantList.tsx rename to workbench-app/src/components/Conversations/ParticipantList.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ParticipantStatus.tsx b/workbench-app/src/components/Conversations/ParticipantStatus.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ParticipantStatus.tsx rename to workbench-app/src/components/Conversations/ParticipantStatus.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/RewindConversation.tsx b/workbench-app/src/components/Conversations/RewindConversation.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/RewindConversation.tsx rename to workbench-app/src/components/Conversations/RewindConversation.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/ShareRemove.tsx b/workbench-app/src/components/Conversations/ShareRemove.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/ShareRemove.tsx rename to workbench-app/src/components/Conversations/ShareRemove.tsx diff --git a/semantic-workbench/v1/app/src/components/Conversations/SpeechButton.tsx b/workbench-app/src/components/Conversations/SpeechButton.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Conversations/SpeechButton.tsx rename to workbench-app/src/components/Conversations/SpeechButton.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/MyWorkflows.tsx b/workbench-app/src/components/Workflows/MyWorkflows.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/MyWorkflows.tsx rename to workbench-app/src/components/Workflows/MyWorkflows.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowControl.tsx b/workbench-app/src/components/Workflows/WorkflowControl.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowControl.tsx rename to workbench-app/src/components/Workflows/WorkflowControl.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowConversation.tsx b/workbench-app/src/components/Workflows/WorkflowConversation.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowConversation.tsx rename to workbench-app/src/components/Workflows/WorkflowConversation.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowCreate.tsx b/workbench-app/src/components/Workflows/WorkflowCreate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowCreate.tsx rename to workbench-app/src/components/Workflows/WorkflowCreate.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/AssistantDefinitionAdd.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/AssistantDefinitionAdd.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/AssistantDefinitionAdd.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/AssistantDefinitionAdd.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/AssistantDefinitionCreate.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/AssistantDefinitionCreate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/AssistantDefinitionCreate.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/AssistantDefinitionCreate.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/ConversationDefinitionCreate.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/ConversationDefinitionCreate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/ConversationDefinitionCreate.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/ConversationDefinitionCreate.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/DefinitionPropertiesEditor.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/DefinitionPropertiesEditor.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/DefinitionPropertiesEditor.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/DefinitionPropertiesEditor.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/StatePropertiesEditor.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/StatePropertiesEditor.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/StatePropertiesEditor.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/StatePropertiesEditor.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowCanvas.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowCanvas.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowCanvas.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowCanvas.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowDefinitionEditor.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowDefinitionEditor.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowDefinitionEditor.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowDefinitionEditor.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowDesigner.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowDesigner.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowDesigner.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowDesigner.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowExport.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowExport.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowExport.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowExport.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowHelp.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowHelp.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowHelp.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowHelp.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowImport.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowImport.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowImport.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowImport.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateAssistantEditor.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateAssistantEditor.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateAssistantEditor.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateAssistantEditor.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateAssistants.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateAssistants.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateAssistants.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateAssistants.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateConversation.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateConversation.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateConversation.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateConversation.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateEditor.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateEditor.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateEditor.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateEditor.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateHandle.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateHandle.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateHandle.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateHandle.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateNode.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateNode.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateNode.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateNode.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateOutlets.tsx b/workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateOutlets.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowDesigner/WorkflowStateOutlets.tsx rename to workbench-app/src/components/Workflows/WorkflowDesigner/WorkflowStateOutlets.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowEdit.tsx b/workbench-app/src/components/Workflows/WorkflowEdit.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowEdit.tsx rename to workbench-app/src/components/Workflows/WorkflowEdit.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowRemove.tsx b/workbench-app/src/components/Workflows/WorkflowRemove.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowRemove.tsx rename to workbench-app/src/components/Workflows/WorkflowRemove.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowRunCreate.tsx b/workbench-app/src/components/Workflows/WorkflowRunCreate.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowRunCreate.tsx rename to workbench-app/src/components/Workflows/WorkflowRunCreate.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowRunRemove.tsx b/workbench-app/src/components/Workflows/WorkflowRunRemove.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowRunRemove.tsx rename to workbench-app/src/components/Workflows/WorkflowRunRemove.tsx diff --git a/semantic-workbench/v1/app/src/components/Workflows/WorkflowRuns.tsx b/workbench-app/src/components/Workflows/WorkflowRuns.tsx similarity index 100% rename from semantic-workbench/v1/app/src/components/Workflows/WorkflowRuns.tsx rename to workbench-app/src/components/Workflows/WorkflowRuns.tsx diff --git a/semantic-workbench/v1/app/src/index.css b/workbench-app/src/index.css similarity index 100% rename from semantic-workbench/v1/app/src/index.css rename to workbench-app/src/index.css diff --git a/semantic-workbench/v1/app/src/libs/AppStorage.ts b/workbench-app/src/libs/AppStorage.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/AppStorage.ts rename to workbench-app/src/libs/AppStorage.ts diff --git a/workbench-app/src/libs/AuthHelper.ts b/workbench-app/src/libs/AuthHelper.ts new file mode 100644 index 0000000..b7ec41b --- /dev/null +++ b/workbench-app/src/libs/AuthHelper.ts @@ -0,0 +1,84 @@ +// Copyright (c) Microsoft. All rights reserved. + +import { EndSessionRequest, IPublicClientApplication, LogLevel, RedirectRequest } from '@azure/msal-browser'; +import debug from 'debug'; +import { Constants } from '../Constants'; + +const log = debug(Constants.debug.root).extend('auth-helper'); + +const getMsalConfig = () => { + const envClientId: string | undefined = import.meta.env.VITE_SEMANTIC_WORKBENCH_CLIENT_ID; + const envAuthority: string | undefined = import.meta.env.VITE_SEMANTIC_WORKBENCH_AUTHORITY; + const clientId = envClientId || Constants.msal.auth.clientId; + const authority = envAuthority || Constants.msal.auth.authority; + + log(`Using clientId: ${clientId} (from env: ${!!envClientId})`); + log(`Using authority: ${authority} (from env: ${!!envAuthority})`); + + return { + auth: { + ...Constants.msal.auth, + clientId, + authority, + redirectUri: window.origin, + }, + cache: Constants.msal.cache, + system: { + loggerOptions: { + loggerCallback: (level: any, message: any, containsPii: any) => { + if (containsPii) { + return; + } + switch (level) { + case LogLevel.Error: + log('error:', message); + return; + // case LogLevel.Info: + // log('info:', message); + // return; + // case LogLevel.Verbose: + // log('verbose:', message); + // return; + case LogLevel.Warning: + log('warn:', message); + } + }, + }, + }, + }; +}; + +const loginRequest: RedirectRequest = { + scopes: Constants.msal.msGraphScopes, + // extraScopesToConsent: Constants.msal.skScopes, +}; + +const logoutRequest: EndSessionRequest = { + postLogoutRedirectUri: window.origin, +}; + +const loginAsync = async (instance: IPublicClientApplication) => { + if (Constants.msal.method === 'redirect') { + await instance.loginRedirect(loginRequest); + return undefined; + } else { + return await instance.loginPopup(loginRequest); + } +}; + +const logoutAsync = async (instance: IPublicClientApplication) => { + if (Constants.msal.method === 'popup') { + void instance.logoutPopup(logoutRequest); + } + if (Constants.msal.method === 'redirect') { + void instance.logoutRedirect(logoutRequest); + } +}; + +export const AuthHelper = { + getMsalConfig, + loginRequest, + logoutRequest, + loginAsync, + logoutAsync, +}; diff --git a/semantic-workbench/v1/app/src/libs/Utility.ts b/workbench-app/src/libs/Utility.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/Utility.ts rename to workbench-app/src/libs/Utility.ts diff --git a/semantic-workbench/v1/app/src/libs/WorkbenchEventSource.ts b/workbench-app/src/libs/WorkbenchEventSource.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/WorkbenchEventSource.ts rename to workbench-app/src/libs/WorkbenchEventSource.ts diff --git a/semantic-workbench/v1/app/src/libs/useConversationUtility.ts b/workbench-app/src/libs/useConversationUtility.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/useConversationUtility.ts rename to workbench-app/src/libs/useConversationUtility.ts diff --git a/semantic-workbench/v1/app/src/libs/useCustomTheme.ts b/workbench-app/src/libs/useCustomTheme.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/useCustomTheme.ts rename to workbench-app/src/libs/useCustomTheme.ts diff --git a/semantic-workbench/v1/app/src/libs/useDragAndDrop.ts b/workbench-app/src/libs/useDragAndDrop.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/useDragAndDrop.ts rename to workbench-app/src/libs/useDragAndDrop.ts diff --git a/semantic-workbench/v1/app/src/libs/useEnvironment.ts b/workbench-app/src/libs/useEnvironment.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/useEnvironment.ts rename to workbench-app/src/libs/useEnvironment.ts diff --git a/semantic-workbench/v1/app/src/libs/useInteractCanvasController.ts b/workbench-app/src/libs/useInteractCanvasController.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/useInteractCanvasController.ts rename to workbench-app/src/libs/useInteractCanvasController.ts diff --git a/semantic-workbench/v1/app/src/libs/useKeySequence.ts b/workbench-app/src/libs/useKeySequence.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/useKeySequence.ts rename to workbench-app/src/libs/useKeySequence.ts diff --git a/semantic-workbench/v1/app/src/libs/useLocalUserAccount.ts b/workbench-app/src/libs/useLocalUserAccount.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/useLocalUserAccount.ts rename to workbench-app/src/libs/useLocalUserAccount.ts diff --git a/semantic-workbench/v1/app/src/libs/useMicrosoftGraph.ts b/workbench-app/src/libs/useMicrosoftGraph.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/useMicrosoftGraph.ts rename to workbench-app/src/libs/useMicrosoftGraph.ts diff --git a/semantic-workbench/v1/app/src/libs/useSiteUtility.ts b/workbench-app/src/libs/useSiteUtility.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/useSiteUtility.ts rename to workbench-app/src/libs/useSiteUtility.ts diff --git a/semantic-workbench/v1/app/src/libs/useWorkbenchService.ts b/workbench-app/src/libs/useWorkbenchService.ts similarity index 100% rename from semantic-workbench/v1/app/src/libs/useWorkbenchService.ts rename to workbench-app/src/libs/useWorkbenchService.ts diff --git a/semantic-workbench/v1/app/src/main.tsx b/workbench-app/src/main.tsx similarity index 98% rename from semantic-workbench/v1/app/src/main.tsx rename to workbench-app/src/main.tsx index 732c786..d3942b2 100644 --- a/semantic-workbench/v1/app/src/main.tsx +++ b/workbench-app/src/main.tsx @@ -112,7 +112,7 @@ const authenticatedRouter = createBrowserRouter([ }, ]); -const msalInstance = new PublicClientApplication(AuthHelper.msalConfig); +const msalInstance = new PublicClientApplication(AuthHelper.getMsalConfig()); const accounts = msalInstance.getAllAccounts(); if (accounts.length > 0) { diff --git a/semantic-workbench/v1/app/src/models/Assistant.ts b/workbench-app/src/models/Assistant.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/Assistant.ts rename to workbench-app/src/models/Assistant.ts diff --git a/semantic-workbench/v1/app/src/models/AssistantServiceInfo.ts b/workbench-app/src/models/AssistantServiceInfo.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/AssistantServiceInfo.ts rename to workbench-app/src/models/AssistantServiceInfo.ts diff --git a/semantic-workbench/v1/app/src/models/AssistantServiceRegistration.ts b/workbench-app/src/models/AssistantServiceRegistration.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/AssistantServiceRegistration.ts rename to workbench-app/src/models/AssistantServiceRegistration.ts diff --git a/semantic-workbench/v1/app/src/models/AssistantStateDescription.ts b/workbench-app/src/models/AssistantStateDescription.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/AssistantStateDescription.ts rename to workbench-app/src/models/AssistantStateDescription.ts diff --git a/semantic-workbench/v1/app/src/models/Config.ts b/workbench-app/src/models/Config.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/Config.ts rename to workbench-app/src/models/Config.ts diff --git a/semantic-workbench/v1/app/src/models/Conversation.ts b/workbench-app/src/models/Conversation.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/Conversation.ts rename to workbench-app/src/models/Conversation.ts diff --git a/semantic-workbench/v1/app/src/models/ConversationFile.ts b/workbench-app/src/models/ConversationFile.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/ConversationFile.ts rename to workbench-app/src/models/ConversationFile.ts diff --git a/semantic-workbench/v1/app/src/models/ConversationMessage.ts b/workbench-app/src/models/ConversationMessage.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/ConversationMessage.ts rename to workbench-app/src/models/ConversationMessage.ts diff --git a/semantic-workbench/v1/app/src/models/ConversationParticipant.ts b/workbench-app/src/models/ConversationParticipant.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/ConversationParticipant.ts rename to workbench-app/src/models/ConversationParticipant.ts diff --git a/semantic-workbench/v1/app/src/models/ConversationShare.ts b/workbench-app/src/models/ConversationShare.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/ConversationShare.ts rename to workbench-app/src/models/ConversationShare.ts diff --git a/semantic-workbench/v1/app/src/models/ConversationShareRedemption.ts b/workbench-app/src/models/ConversationShareRedemption.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/ConversationShareRedemption.ts rename to workbench-app/src/models/ConversationShareRedemption.ts diff --git a/semantic-workbench/v1/app/src/models/ConversationState.ts b/workbench-app/src/models/ConversationState.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/ConversationState.ts rename to workbench-app/src/models/ConversationState.ts diff --git a/semantic-workbench/v1/app/src/models/ConversationStateDescription.ts b/workbench-app/src/models/ConversationStateDescription.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/ConversationStateDescription.ts rename to workbench-app/src/models/ConversationStateDescription.ts diff --git a/semantic-workbench/v1/app/src/models/InteractCanvasState.ts b/workbench-app/src/models/InteractCanvasState.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/InteractCanvasState.ts rename to workbench-app/src/models/InteractCanvasState.ts diff --git a/semantic-workbench/v1/app/src/models/ServiceEnvironment.ts b/workbench-app/src/models/ServiceEnvironment.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/ServiceEnvironment.ts rename to workbench-app/src/models/ServiceEnvironment.ts diff --git a/semantic-workbench/v1/app/src/models/User.ts b/workbench-app/src/models/User.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/User.ts rename to workbench-app/src/models/User.ts diff --git a/semantic-workbench/v1/app/src/models/WorkflowDefinition.ts b/workbench-app/src/models/WorkflowDefinition.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/WorkflowDefinition.ts rename to workbench-app/src/models/WorkflowDefinition.ts diff --git a/semantic-workbench/v1/app/src/models/WorkflowRun.ts b/workbench-app/src/models/WorkflowRun.ts similarity index 100% rename from semantic-workbench/v1/app/src/models/WorkflowRun.ts rename to workbench-app/src/models/WorkflowRun.ts diff --git a/semantic-workbench/v1/app/src/redux/app/hooks.ts b/workbench-app/src/redux/app/hooks.ts similarity index 100% rename from semantic-workbench/v1/app/src/redux/app/hooks.ts rename to workbench-app/src/redux/app/hooks.ts diff --git a/semantic-workbench/v1/app/src/redux/app/rtkQueryErrorLogger.ts b/workbench-app/src/redux/app/rtkQueryErrorLogger.ts similarity index 100% rename from semantic-workbench/v1/app/src/redux/app/rtkQueryErrorLogger.ts rename to workbench-app/src/redux/app/rtkQueryErrorLogger.ts diff --git a/semantic-workbench/v1/app/src/redux/app/store.ts b/workbench-app/src/redux/app/store.ts similarity index 100% rename from semantic-workbench/v1/app/src/redux/app/store.ts rename to workbench-app/src/redux/app/store.ts diff --git a/semantic-workbench/v1/app/src/redux/features/app/AppState.ts b/workbench-app/src/redux/features/app/AppState.ts similarity index 100% rename from semantic-workbench/v1/app/src/redux/features/app/AppState.ts rename to workbench-app/src/redux/features/app/AppState.ts diff --git a/semantic-workbench/v1/app/src/redux/features/app/appSlice.ts b/workbench-app/src/redux/features/app/appSlice.ts similarity index 100% rename from semantic-workbench/v1/app/src/redux/features/app/appSlice.ts rename to workbench-app/src/redux/features/app/appSlice.ts diff --git a/semantic-workbench/v1/app/src/redux/features/settings/SettingsState.ts b/workbench-app/src/redux/features/settings/SettingsState.ts similarity index 100% rename from semantic-workbench/v1/app/src/redux/features/settings/SettingsState.ts rename to workbench-app/src/redux/features/settings/SettingsState.ts diff --git a/semantic-workbench/v1/app/src/redux/features/settings/settingsSlice.ts b/workbench-app/src/redux/features/settings/settingsSlice.ts similarity index 100% rename from semantic-workbench/v1/app/src/redux/features/settings/settingsSlice.ts rename to workbench-app/src/redux/features/settings/settingsSlice.ts diff --git a/semantic-workbench/v1/app/src/routes/AcceptTerms.tsx b/workbench-app/src/routes/AcceptTerms.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/AcceptTerms.tsx rename to workbench-app/src/routes/AcceptTerms.tsx diff --git a/semantic-workbench/v1/app/src/routes/AssistantEditor.tsx b/workbench-app/src/routes/AssistantEditor.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/AssistantEditor.tsx rename to workbench-app/src/routes/AssistantEditor.tsx diff --git a/semantic-workbench/v1/app/src/routes/AssistantServiceRegistrationEditor.tsx b/workbench-app/src/routes/AssistantServiceRegistrationEditor.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/AssistantServiceRegistrationEditor.tsx rename to workbench-app/src/routes/AssistantServiceRegistrationEditor.tsx diff --git a/semantic-workbench/v1/app/src/routes/Dashboard.tsx b/workbench-app/src/routes/Dashboard.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/Dashboard.tsx rename to workbench-app/src/routes/Dashboard.tsx diff --git a/semantic-workbench/v1/app/src/routes/ErrorPage.tsx b/workbench-app/src/routes/ErrorPage.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/ErrorPage.tsx rename to workbench-app/src/routes/ErrorPage.tsx diff --git a/semantic-workbench/v1/app/src/routes/Interact.tsx b/workbench-app/src/routes/Interact.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/Interact.tsx rename to workbench-app/src/routes/Interact.tsx diff --git a/semantic-workbench/v1/app/src/routes/Login.tsx b/workbench-app/src/routes/Login.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/Login.tsx rename to workbench-app/src/routes/Login.tsx diff --git a/semantic-workbench/v1/app/src/routes/Settings.tsx b/workbench-app/src/routes/Settings.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/Settings.tsx rename to workbench-app/src/routes/Settings.tsx diff --git a/semantic-workbench/v1/app/src/routes/ShareRedeem.tsx b/workbench-app/src/routes/ShareRedeem.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/ShareRedeem.tsx rename to workbench-app/src/routes/ShareRedeem.tsx diff --git a/semantic-workbench/v1/app/src/routes/Shares.tsx b/workbench-app/src/routes/Shares.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/Shares.tsx rename to workbench-app/src/routes/Shares.tsx diff --git a/semantic-workbench/v1/app/src/routes/WorkflowEditor.tsx b/workbench-app/src/routes/WorkflowEditor.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/WorkflowEditor.tsx rename to workbench-app/src/routes/WorkflowEditor.tsx diff --git a/semantic-workbench/v1/app/src/routes/WorkflowInteract.tsx b/workbench-app/src/routes/WorkflowInteract.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/WorkflowInteract.tsx rename to workbench-app/src/routes/WorkflowInteract.tsx diff --git a/semantic-workbench/v1/app/src/routes/WorkflowRunEditor.tsx b/workbench-app/src/routes/WorkflowRunEditor.tsx similarity index 100% rename from semantic-workbench/v1/app/src/routes/WorkflowRunEditor.tsx rename to workbench-app/src/routes/WorkflowRunEditor.tsx diff --git a/semantic-workbench/v1/app/src/services/workbench/assistant.ts b/workbench-app/src/services/workbench/assistant.ts similarity index 100% rename from semantic-workbench/v1/app/src/services/workbench/assistant.ts rename to workbench-app/src/services/workbench/assistant.ts diff --git a/semantic-workbench/v1/app/src/services/workbench/assistantServiceRegistration.ts b/workbench-app/src/services/workbench/assistantServiceRegistration.ts similarity index 100% rename from semantic-workbench/v1/app/src/services/workbench/assistantServiceRegistration.ts rename to workbench-app/src/services/workbench/assistantServiceRegistration.ts diff --git a/semantic-workbench/v1/app/src/services/workbench/conversation.ts b/workbench-app/src/services/workbench/conversation.ts similarity index 100% rename from semantic-workbench/v1/app/src/services/workbench/conversation.ts rename to workbench-app/src/services/workbench/conversation.ts diff --git a/semantic-workbench/v1/app/src/services/workbench/file.ts b/workbench-app/src/services/workbench/file.ts similarity index 100% rename from semantic-workbench/v1/app/src/services/workbench/file.ts rename to workbench-app/src/services/workbench/file.ts diff --git a/semantic-workbench/v1/app/src/services/workbench/index.ts b/workbench-app/src/services/workbench/index.ts similarity index 100% rename from semantic-workbench/v1/app/src/services/workbench/index.ts rename to workbench-app/src/services/workbench/index.ts diff --git a/semantic-workbench/v1/app/src/services/workbench/participant.ts b/workbench-app/src/services/workbench/participant.ts similarity index 100% rename from semantic-workbench/v1/app/src/services/workbench/participant.ts rename to workbench-app/src/services/workbench/participant.ts diff --git a/semantic-workbench/v1/app/src/services/workbench/share.ts b/workbench-app/src/services/workbench/share.ts similarity index 100% rename from semantic-workbench/v1/app/src/services/workbench/share.ts rename to workbench-app/src/services/workbench/share.ts diff --git a/semantic-workbench/v1/app/src/services/workbench/state.ts b/workbench-app/src/services/workbench/state.ts similarity index 100% rename from semantic-workbench/v1/app/src/services/workbench/state.ts rename to workbench-app/src/services/workbench/state.ts diff --git a/semantic-workbench/v1/app/src/services/workbench/workbench.ts b/workbench-app/src/services/workbench/workbench.ts similarity index 100% rename from semantic-workbench/v1/app/src/services/workbench/workbench.ts rename to workbench-app/src/services/workbench/workbench.ts diff --git a/semantic-workbench/v1/app/src/services/workbench/workflow.ts b/workbench-app/src/services/workbench/workflow.ts similarity index 100% rename from semantic-workbench/v1/app/src/services/workbench/workflow.ts rename to workbench-app/src/services/workbench/workflow.ts diff --git a/semantic-workbench/v1/app/src/vite-env.d.ts b/workbench-app/src/vite-env.d.ts similarity index 100% rename from semantic-workbench/v1/app/src/vite-env.d.ts rename to workbench-app/src/vite-env.d.ts diff --git a/semantic-workbench/v1/app/tools/filtered-ts-prune.cjs b/workbench-app/tools/filtered-ts-prune.cjs similarity index 100% rename from semantic-workbench/v1/app/tools/filtered-ts-prune.cjs rename to workbench-app/tools/filtered-ts-prune.cjs diff --git a/semantic-workbench/v1/app/tsconfig.json b/workbench-app/tsconfig.json similarity index 100% rename from semantic-workbench/v1/app/tsconfig.json rename to workbench-app/tsconfig.json diff --git a/semantic-workbench/v1/app/vite.config.ts b/workbench-app/vite.config.ts similarity index 100% rename from semantic-workbench/v1/app/vite.config.ts rename to workbench-app/vite.config.ts diff --git a/workbench-service/.vscode/extensions.json b/workbench-service/.vscode/extensions.json new file mode 100644 index 0000000..609622d --- /dev/null +++ b/workbench-service/.vscode/extensions.json @@ -0,0 +1,17 @@ +{ + "recommendations": [ + "aaron-bond.better-comments", + "charliermarsh.ruff", + "dbaeumer.vscode-eslint", + "epivision.vscode-file-header", + "esbenp.prettier-vscode", + "github.vscode-github-actions", + "ms-azuretools.vscode-docker", + "ms-python.debugpy", + "ms-python.python", + "ms-vscode.makefile-tools", + "ms-vscode.vscode-node-azure-pack", + "tamasfe.even-better-toml", + "streetsidesoftware.code-spell-checker" + ] +} diff --git a/workbench-service/.vscode/launch.json b/workbench-service/.vscode/launch.json new file mode 100644 index 0000000..f987750 --- /dev/null +++ b/workbench-service/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "debugpy", + "request": "launch", + "name": "service: semantic-workbench-service", + "cwd": "${workspaceFolder}", + "module": "semantic_workbench_service.start", + "justMyCode": false, + "consoleTitle": "semantic-workbench-service", + "args": ["--host", "0.0.0.0", "--port", "3000"] + } + ] +} diff --git a/workbench-service/.vscode/settings.json b/workbench-service/.vscode/settings.json new file mode 100644 index 0000000..a9ad9d8 --- /dev/null +++ b/workbench-service/.vscode/settings.json @@ -0,0 +1,225 @@ +{ + "editor.bracketPairColorization.enabled": true, + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit", + "source.fixAll": "explicit" + }, + "editor.guides.bracketPairs": "active", + "editor.formatOnPaste": true, + "editor.formatOnType": true, + "editor.formatOnSave": true, + "files.eol": "\n", + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true + }, + "files.trimTrailingWhitespace": true, + "flake8.ignorePatterns": ["**/*.py"], // disable flake8 in favor of ruff + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "python.analysis.autoFormatStrings": true, + "python.analysis.autoImportCompletions": true, + "python.analysis.diagnosticMode": "workspace", + "python.analysis.exclude": [ + "**/.venv/**", + "**/.data/**", + "**/__pycache__/**" + ], + "python.analysis.fixAll": ["source.unusedImports"], + "python.analysis.inlayHints.functionReturnTypes": true, + "python.analysis.typeCheckingMode": "basic", + "python.defaultInterpreterPath": "${workspaceFolder}/.venv", + "python.testing.pytestEnabled": true, + "python.testing.cwd": "${workspaceFolder}", + "python.testing.pytestArgs": [], + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll": "explicit", + "source.unusedImports": "explicit", + "source.organizeImports": "explicit", + "source.formatDocument": "explicit" + } + }, + "ruff.nativeServer": "on", + "search.exclude": { + "**/.venv": true, + "**/.data": true, + "**/__pycache__": true + }, + "better-comments.highlightPlainText": true, + "better-comments.multilineComments": true, + "better-comments.tags": [ + { + "tag": "!", + "color": "#FF2D00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "?", + "color": "#3498DB", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "//", + "color": "#474747", + "strikethrough": true, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "todo", + "color": "#FF8C00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "fixme", + "color": "#FF2D00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "*", + "color": "#98C379", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + } + ], + // For use with optional extension: "streetsidesoftware.code-spell-checker" + "cSpell.words": [ + "abcjs", + "activedescendant", + "addoption", + "aiosqlite", + "aiter", + "appsettings", + "arcname", + "aread", + "asgi", + "assistantparticipant", + "assistantserviceregistration", + "asyncpg", + "autoflush", + "azurewebsites", + "cachetools", + "Codespace", + "Codespaces", + "cognitiveservices", + "conversationmessage", + "conversationrole", + "conversationshare", + "conversationshareredemption", + "datetime", + "datname", + "dbaeumer", + "dbapi", + "dbtype", + "deadcode", + "decompile", + "deepmerge", + "devcontainer", + "devcontainers", + "devtunnel", + "dotenv", + "echosql", + "endregion", + "epivision", + "esbenp", + "fastapi", + "fileversion", + "fluentui", + "getfixturevalue", + "griffel", + "hashkey", + "httpx", + "innerjoin", + "inspectable", + "isouter", + "joinedload", + "jsonable", + "jsonlogger", + "jungaretti", + "jwks", + "keyvault", + "Langchain", + "levelname", + "levelno", + "listbox", + "msal", + "nonchat", + "norender", + "Ofsteps", + "ondelete", + "openai", + "pydantic", + "pylance", + "pyproject", + "pythonjsonlogger", + "quickstart", + "raiseerr", + "reactflow", + "reduxjs", + "rehype", + "rjsf", + "rootpath", + "selectin", + "semanticworkbench", + "sessionmaker", + "setenv", + "sqlalchemy", + "sqlmodel", + "sqltypes", + "stackoverflow", + "starlette", + "streamsaver", + "subprocessor", + "tabster", + "tamasfe", + "tiktoken", + "tracebacks", + "Typeahead", + "upscaled", + "usecwd", + "userparticipant", + "uvicorn", + "virtualenvs", + "webservice", + "westus", + "winget", + "workbenchservice", + "workflowdefinition", + "workflowrun", + "workflowuserparticipant" + ] +} diff --git a/workbench-service/Makefile b/workbench-service/Makefile new file mode 100644 index 0000000..9e1f616 --- /dev/null +++ b/workbench-service/Makefile @@ -0,0 +1,24 @@ +repo_root = $(shell git rev-parse --show-toplevel) + +.DEFAULT_GOAL := venv + +include $(repo_root)/tools/makefiles/poetry.mk + +test: venv + $(VENV_BIN)/pytest + +WORKBENCH__DB__URL ?= postgresql:///workbench + +.PHONY: alembic-upgrade-head +alembic-upgrade-head: + WORKBENCH__DB__URL="$(WORKBENCH__DB__URL)" alembic upgrade head + +.PHONY: alembic-generate-migration +alembic-generate-migration: +ifndef migration + $(info You must provide a name for the migration.) + $(info ex: make alembic-generate-migration migration="neato changes") + $(error "migration" is not set) +else + WORKBENCH__DB__URL="$(WORKBENCH__DB__URL)" alembic revision --autogenerate -m "$(migration)" +endif diff --git a/semantic-workbench/v1/service/semantic-workbench-service/README.md b/workbench-service/README.md similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-service/README.md rename to workbench-service/README.md diff --git a/semantic-workbench/v1/service/semantic-workbench-service/alembic.ini b/workbench-service/alembic.ini similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-service/alembic.ini rename to workbench-service/alembic.ini diff --git a/semantic-workbench/v1/service/semantic-workbench-service/devdb/docker-compose.yaml b/workbench-service/devdb/docker-compose.yaml similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-service/devdb/docker-compose.yaml rename to workbench-service/devdb/docker-compose.yaml diff --git a/semantic-workbench/v1/service/semantic-workbench-service/devdb/postgresql-init.sh b/workbench-service/devdb/postgresql-init.sh similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-service/devdb/postgresql-init.sh rename to workbench-service/devdb/postgresql-init.sh diff --git a/semantic-workbench/v1/service/semantic-workbench-service/migrations/README b/workbench-service/migrations/README similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-service/migrations/README rename to workbench-service/migrations/README diff --git a/semantic-workbench/v1/service/semantic-workbench-service/migrations/env.py b/workbench-service/migrations/env.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-service/migrations/env.py rename to workbench-service/migrations/env.py diff --git a/semantic-workbench/v1/service/semantic-workbench-service/migrations/script.py.mako b/workbench-service/migrations/script.py.mako similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-service/migrations/script.py.mako rename to workbench-service/migrations/script.py.mako diff --git a/semantic-workbench/v1/service/semantic-workbench-service/migrations/versions/2024_09_19_000000_69dcda481c14_init.py b/workbench-service/migrations/versions/2024_09_19_000000_69dcda481c14_init.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-service/migrations/versions/2024_09_19_000000_69dcda481c14_init.py rename to workbench-service/migrations/versions/2024_09_19_000000_69dcda481c14_init.py diff --git a/semantic-workbench/v1/service/semantic-workbench-service/migrations/versions/2024_09_19_190029_dffb1d7e219a_file_version_filename.py b/workbench-service/migrations/versions/2024_09_19_190029_dffb1d7e219a_file_version_filename.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-service/migrations/versions/2024_09_19_190029_dffb1d7e219a_file_version_filename.py rename to workbench-service/migrations/versions/2024_09_19_190029_dffb1d7e219a_file_version_filename.py diff --git a/semantic-workbench/v1/service/semantic-workbench-service/migrations/versions/2024_09_20_204130_b29524775484_share.py b/workbench-service/migrations/versions/2024_09_20_204130_b29524775484_share.py similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-service/migrations/versions/2024_09_20_204130_b29524775484_share.py rename to workbench-service/migrations/versions/2024_09_20_204130_b29524775484_share.py diff --git a/semantic-workbench/v1/service/semantic-workbench-service/poetry.toml b/workbench-service/poetry.toml similarity index 100% rename from semantic-workbench/v1/service/semantic-workbench-service/poetry.toml rename to workbench-service/poetry.toml diff --git a/semantic-workbench/v1/service/semantic-workbench-service/pyproject.toml b/workbench-service/pyproject.toml similarity index 60% rename from semantic-workbench/v1/service/semantic-workbench-service/pyproject.toml rename to workbench-service/pyproject.toml index c582ae2..24c8620 100644 --- a/semantic-workbench/v1/service/semantic-workbench-service/pyproject.toml +++ b/workbench-service/pyproject.toml @@ -25,13 +25,13 @@ python-dotenv = "~1.0.0" python-jose = { version = "*", extras = ["cryptography"] } python-json-logger = "^2.0.7" rich = "^13.7.0" -semantic-workbench-api-model = { path = "../semantic-workbench-api-model", develop = true } +semantic-workbench-api-model = { path = "../libraries/python/semantic-workbench-api-model", develop = true } sqlmodel = "~0.0.14" sse-starlette = "~1.8.2" [tool.poetry.group.dev.dependencies] # semantic-workbench-assistant is used for integration tests -semantic-workbench-assistant = { path = "../semantic-workbench-assistant", develop = true } +semantic-workbench-assistant = { path = "../libraries/python/semantic-workbench-assistant", develop = true } asgi-lifespan = "^2.1.0" pytest = "^7.4.3" pytest-asyncio = "^0.23.5.post1" @@ -48,3 +48,23 @@ build-backend = "poetry.core.masonry.api" [tool.pyright] exclude = ["venv", ".venv"] + +[tool.pytest.ini_options] +addopts = "-vv" +log_cli = true +log_cli_level = "WARNING" +log_cli_format = "%(asctime)s | %(levelname)-7s | %(name)s | %(message)s" +testpaths = ["tests"] +asyncio_mode = "auto" + + +# fail tests on warnings that aren't explicitly ignored +filterwarnings = [ + "error", + # stream warnings are from bugs in starlette - hopefully they fix this + "ignore: Unclosed .MemoryObject(Send|Receive)Stream.:ResourceWarning", + # aiosqlite doesn't handle cancelations correctly + "ignore: Exception in thread Thread:pytest.PytestUnhandledThreadExceptionWarning", + # asyncpg sometimes fails to close sockets + "ignore: unclosed