-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
adds codespace-assistant w/ experimental tool support via model-conte…
…xt-protocol (#305) A very experimental assistant to poke at using model-context-protocol tools + multi-step support for assisting in developing code projects within the semantic workbench repo while running in a Codespace environment (not to be deployed to hosted workbench, nor tested for local usage). Will also be used for developing alternate approaches for managing large context, dynamic context needs, and other challenges that arise for this scenario.
- Loading branch information
Showing
36 changed files
with
4,851 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Description: Example of .env file | ||
# Usage: Copy this file to .env and set the values | ||
|
||
# NOTE: | ||
# - Environment variables in the host environment will take precedence over values in this file. | ||
# - When running with VS Code, you must 'stop' and 'start' the process for changes to take effect. | ||
# It is not enough to just use the VS Code 'restart' button | ||
|
||
# Assistant Service | ||
ASSISTANT__AZURE_OPENAI_ENDPOINT=https://<YOUR-RESOURCE-NAME>.openai.azure.com/ | ||
ASSISTANT__AZURE_CONTENT_SAFETY_ENDPOINT=https://<YOUR-RESOURCE-NAME>.cognitiveservices.azure.com/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
{ | ||
"version": "0.2.0", | ||
"configurations": [ | ||
{ | ||
"type": "debugpy", | ||
"request": "launch", | ||
"name": "assistants: codespace-assistant", | ||
"cwd": "${workspaceFolder}", | ||
"module": "semantic_workbench_assistant.start", | ||
"consoleTitle": "${workspaceFolderBasename}" | ||
//"justMyCode": false, // Set to false to debug external libraries | ||
} | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
{ | ||
"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.trimTrailingWhitespace": true, | ||
"[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.fixAll": ["source.unusedImports"], | ||
"python.analysis.inlayHints.functionReturnTypes": true, | ||
"python.analysis.typeCheckingMode": "standard", | ||
"python.defaultInterpreterPath": "${workspaceFolder}/.venv", | ||
"[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 | ||
}, | ||
// For use with optional extension: "streetsidesoftware.code-spell-checker" | ||
"cSpell.ignorePaths": [ | ||
".venv", | ||
"node_modules", | ||
"package-lock.json", | ||
"settings.json", | ||
"uv.lock" | ||
], | ||
"cSpell.words": [ | ||
"Codespaces", | ||
"contentsafety", | ||
"deepmerge", | ||
"devcontainer", | ||
"dotenv", | ||
"endregion", | ||
"Excalidraw", | ||
"fastapi", | ||
"jsonschema", | ||
"Langchain", | ||
"modelcontextprotocol", | ||
"moderations", | ||
"mzxrai", | ||
"openai", | ||
"pdfplumber", | ||
"pydantic", | ||
"pyproject", | ||
"pyright", | ||
"semanticworkbench", | ||
"tiktoken", | ||
"updown", | ||
"virtualenvs", | ||
"webresearch" | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
repo_root = $(shell git rev-parse --show-toplevel) | ||
include $(repo_root)/tools/makefiles/python.mk | ||
include $(repo_root)/tools/makefiles/docker-assistant.mk |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
# An assistant for help in developing within the Semantic Workbench repo in Codespaces | ||
|
||
NOTE: DO NOT DEPLOY THIS ASSISTANT OUTSIDE OF CODESPACES (OR LOCAL, BUT THIS HAS NOT BEEN TESTED) | ||
|
||
This assistant is designed to help with development within the Semantic Workbench repo in Codespaces, and is not intended for deployment to production environments. | ||
|
||
## Responsible AI | ||
|
||
The chatbot includes some important best practices for AI development, such as: | ||
|
||
- **System prompt safety**, ie a set of LLM guardrails to protect users. As a developer you should understand how these | ||
guardrails work in your scenarios, and how to change them if needed. The system prompt and the prompt safety | ||
guardrails are split in two to help with testing. When talking to LLM models, prompt safety is injected before the | ||
system prompt. | ||
- See https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message for more details | ||
about protecting application and users in different scenarios. | ||
- **Content moderation**, via [Azure AI Content Safety](https://azure.microsoft.com/products/ai-services/ai-content-safety) | ||
or [OpenAI Content Moderation](https://platform.openai.com/docs/guides/moderation). | ||
|
||
See the [Responsible AI FAQ](../../RESPONSIBLE_AI_FAQ.md) for more information. | ||
|
||
# Suggested Development Environment | ||
|
||
- Use GitHub Codespaces for a quick, turn-key dev environment: [/.devcontainer/README.md](../../.devcontainer/README.md) | ||
- VS Code is recommended for development | ||
|
||
## Pre-requisites | ||
|
||
- Set up your dev environment | ||
- 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#local-development-environment) | ||
- 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 | ||
- From VS Code > `Terminal`, run `az login` to authenticate with Azure prior to starting the assistant | ||
|
||
## Steps | ||
|
||
- Use VS Code > `Run and Debug` (ctrl/cmd+shift+d) > `semantic-workbench` to start the app and service from this workspace | ||
- Use VS Code > `Run and Debug` (ctrl/cmd+shift+d) > `launch assistant` to start the assistant. | ||
- If running in a devcontainer, follow the instructions in [.devcontainer/POST_SETUP_README.md](../../.devcontainer/POST_SETUP_README.md#start-the-app-and-service) for any additional steps. | ||
- Return to the workbench app to interact with the assistant | ||
- Add a new assistant from the main menu of the app, choose the assistant name as defined by the `service_name` in [chat.py](./assistant/chat.py) | ||
- Click the newly created assistant to configure and interact with it | ||
|
||
## Starting the example from CLI | ||
|
||
If you're not using VS Code and/or Codespaces, you can also work from the | ||
command line, using `uv`: | ||
|
||
``` | ||
cd <PATH TO THIS FOLDER> | ||
uv run start-assistant | ||
``` | ||
|
||
## Create your own assistant | ||
|
||
Copy the contents of this folder to your project. | ||
|
||
- The paths are already set if you put in the same repo root and relative path of `/<your_projects>/<your_assistant_name>` | ||
- If placed in a different location, update the references in the `pyproject.toml` to point to the appropriate locations for the `semantic-workbench-*` packages | ||
|
||
## From Development to Production | ||
|
||
It's important to highlight how Semantic Workbench is a development tool, and it's not designed to host agents in | ||
a production environment. The workbench helps with testing and debugging, in a development and isolated environment, usually your localhost. | ||
|
||
The core of your assistant/AI application, e.g. how it reacts to users, how it invokes tools, how it stores data, can be | ||
developed with any framework, such as Semantic Kernel, Langchain, OpenAI assistants, etc. That is typically the code | ||
you will add to `chat.py`. | ||
|
||
**Semantic Workbench is not a framework**. Dependencies on `semantic-workbench-assistant` package are used only to test and debug your code in Semantic Workbench. **When an assistant is fully developed and ready for production, configurable settings should be hard coded, dependencies on `semantic-workbench-assistant` and similar should be removed**. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
{ | ||
"folders": [ | ||
{ | ||
"path": ".", | ||
"name": "assistants/codespace-assistant" | ||
}, | ||
{ | ||
"path": "../.." | ||
} | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
from .chat import app | ||
from .config import AssistantConfigModel | ||
|
||
__all__ = ["app", "AssistantConfigModel"] |
Oops, something went wrong.