Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: keep in history list after history deleted #19

Closed
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
1364065
feat: add workflows
SuZhou-Joe Nov 8, 2023
d616e09
feat: remove useless workflow
SuZhou-Joe Nov 8, 2023
16ae642
feat: fix unit test flow
SuZhou-Joe Nov 9, 2023
6d26618
feat: make workflow run
SuZhou-Joe Nov 9, 2023
f12a316
feat: make workflows run
SuZhou-Joe Nov 9, 2023
af89436
feat: make workflows run
SuZhou-Joe Nov 9, 2023
1821b6c
feat: make windows flow pass
SuZhou-Joe Nov 10, 2023
50bfccd
feat: change .babelrc to babel.config.js according to https://github.…
SuZhou-Joe Nov 10, 2023
267131c
feat: use agent framework API to generate answer
SuZhou-Joe Nov 1, 2023
04ef332
feat: comply with multi type of agent
SuZhou-Joe Nov 8, 2023
7cfd027
feat: integrate with memory APIs
SuZhou-Joe Nov 20, 2023
20f2092
feat: use the agent id from request body
SuZhou-Joe Nov 20, 2023
60b3a7c
feat: remove useless code
SuZhou-Joe Nov 20, 2023
7d4153b
feat: update babel.config.ts
SuZhou-Joe Nov 20, 2023
8daadfc
feat: modify API path according to doc
SuZhou-Joe Nov 21, 2023
b20f382
feat: add mechannism to register messageParser
SuZhou-Joe Nov 20, 2023
2ca5ced
feat: sort when run
SuZhou-Joe Nov 20, 2023
d0ddf09
feat: sort when run
SuZhou-Joe Nov 20, 2023
f46739b
feat: add doc change
SuZhou-Joe Nov 20, 2023
8d54ff0
feat: add diagram
SuZhou-Joe Nov 20, 2023
b191faa
feat: optimize code
SuZhou-Joe Nov 22, 2023
4bcca2a
feat: add error handling
SuZhou-Joe Nov 22, 2023
b7035bd
feat: optimize
SuZhou-Joe Nov 22, 2023
15dcaf1
feat: change implementation of basic_input_output to built-in parser …
SuZhou-Joe Nov 22, 2023
15ea29b
Add interaction into message props (#12)
SuZhou-Joe Nov 27, 2023
979404d
Integrate Memeory APIs of agent framework (#15)
gaobinlong Nov 28, 2023
37eaa5c
feat: add visualization card in customized parser (#16)
SuZhou-Joe Nov 29, 2023
f4b7b2e
fix: change to new session after history deleted
wanglam Nov 29, 2023
9214138
test: add miss file and style mock
wanglam Nov 29, 2023
daae475
feat: add unit test for clear deleted old chat session data
wanglam Nov 29, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions .babelrc

This file was deleted.

43 changes: 43 additions & 0 deletions .github/workflows/backport.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Backport
on:
pull_request_target:
types:
- closed
- labeled

jobs:
backport:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
name: Backport
# Only react to merged PRs for security reasons.
# See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target.
if: >
github.event.pull_request.merged
&& (
github.event.action == 'closed'
|| (
github.event.action == 'labeled'
&& contains(github.event.label.name, 'backport')
)
)
steps:
- name: GitHub App token
id: github_app_token
uses: tibdex/[email protected]
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.APP_PRIVATE_KEY }}
# opensearch-trigger-bot installation ID
installation_id: 22958780

- name: Backport
uses: VachaShah/[email protected]
with:
github_token: ${{ steps.github_app_token.outputs.token }}
head_template: backport/backport-<%= number %>-to-<%= base %>
files_to_skip: "CHANGELOG.md"
labels_template: "<%= JSON.stringify([...labels, 'autocut']) %>"
failure_labels: "failed backport"
19 changes: 19 additions & 0 deletions .github/workflows/changelog_verifier.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: "Changelog Verifier"
on:
pull_request:
branches: [ '**' ]
types: [opened, edited, review_requested, synchronize, reopened, ready_for_review, labeled, unlabeled]

jobs:
# Enforces the update of a changelog file on every pull request
verify-changelog:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ github.event.pull_request.head.sha }}

- uses: dangoslen/changelog-enforcer@v3
with:
skipLabels: "autocut, Skip-Changelog"
37 changes: 37 additions & 0 deletions .github/workflows/links_checker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Copyright OpenSearch Contributors
# SPDX-License-Identifier: Apache-2.0

name: Link Checker

on:
push:
branches: [ "**" ]
pull_request:
branches: [ "**" ]

jobs:
linkchecker:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Checkout OpenSearch-Dashboards
uses: actions/checkout@v2
with:
repository: opensearch-project/OpenSearch-Dashboards
ref: main
path: OpenSearch-Dashboards
- name: Load Excludes
run: |
LYCHEE_EXCLUDE=$(sed -e :a -e 'N;s/\n/ --exclude /;ta' OpenSearch-Dashboards/.lycheeexclude)
echo "LYCHEE_EXCLUDE=$LYCHEE_EXCLUDE" >> $GITHUB_ENV
- name: Lychee Link Checker
id: lychee
uses: lycheeverse/[email protected]
with:
args: --accept=200,403,429 --exclude ${{ env.LYCHEE_EXCLUDE }} --exclude-mail "**/*.html" "**/*.md" "**/*.txt" "**/*.json" "**/*.js" "**/*.ts" "**/*.tsx"
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Fail if there were link errors
run: exit ${{ steps.lychee.outputs.exit_code }}
98 changes: 98 additions & 0 deletions .github/workflows/unit_test_workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: Build and test

# trigger on every commit push and PR for all branches except pushes for backport branches
on:
pull_request:
branches: ["**"]
push:
branches: ["**"]
env:
OPENSEARCH_DASHBOARDS_VERSION: '2.x'
NODE_OPTIONS: "--max-old-space-size=6144 --dns-result-order=ipv4first"

jobs:
Get-CI-Image-Tag:
uses: opensearch-project/opensearch-build/.github/workflows/get-ci-image-tag.yml@main
with:
product: opensearch-dashboards

tests-linux:
needs: Get-CI-Image-Tag
name: Run unit tests
runs-on: ubuntu-latest
container:
# using the same image which is used by opensearch-build team to build the OpenSearch Distribution
# this image tag is subject to change as more dependencies and updates will arrive over time
image: ${{ needs.Get-CI-Image-Tag.outputs.ci-image-version-linux }}
# need to switch to root so that github actions can install runner binary on container without permission issues.
options: --user root

steps:
# Enable longer filenames for windows
- name: Checkout OpenSearch-Dashboards
uses: actions/checkout@v2
with:
repository: opensearch-project/OpenSearch-Dashboards
ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }}
path: OpenSearch-Dashboards
- name: Checkout dashboards-assistant plugin
uses: actions/checkout@v2
with:
path: OpenSearch-Dashboards/plugins/dashboards-assistant
- name: Bootstrap / Run tests
run: |
chown -R 1000:1000 `pwd`
cd ./OpenSearch-Dashboards/
su `id -un 1000` -c "source $NVM_DIR/nvm.sh && nvm use && node -v && yarn -v &&
cd ./plugins/dashboards-assistant &&
whoami && yarn osd bootstrap && yarn run test:jest --coverage"

- name: Uploads coverage
uses: codecov/codecov-action@v1

tests-windows-macos:
name: Run unit tests
strategy:
matrix:
os: [macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
# Enable longer filenames for windows
- name: Enable longer filenames
if: ${{ matrix.os == 'windows-latest' }}
run: git config --system core.longpaths true
- name: Checkout OpenSearch-Dashboards
uses: actions/checkout@v2
with:
repository: opensearch-project/OpenSearch-Dashboards
ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }}
path: OpenSearch-Dashboards
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version-file: './OpenSearch-Dashboards/.nvmrc'
registry-url: 'https://registry.npmjs.org'
- name: Install Yarn
# Need to use bash to avoid having a windows/linux specific step
shell: bash
run: |
YARN_VERSION=$(node -p "require('./OpenSearch-Dashboards/package.json').engines.yarn")
echo "Installing yarn@$YARN_VERSION"
npm i -g yarn@$YARN_VERSION
- run: node -v
- run: yarn -v
- name: Checkout dashboards-assistant plugin
uses: actions/checkout@v2
with:
path: OpenSearch-Dashboards/plugins/dashboards-assistant
- name: Bootstrap plugin/dashboards-assistant
run: |
cd OpenSearch-Dashboards/plugins/dashboards-assistant
yarn osd bootstrap
- name: Run tests
run: |
cd OpenSearch-Dashboards/plugins/dashboards-assistant
yarn run test:jest --coverage
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# CHANGELOG

Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)

### 📈 Features/Enhancements

- Add support for registerMessageParser ([#5](https://github.com/opensearch-project/dashboards-assistant/pull/5))
- Change implementation of basic_input_output to built-in parser ([#10](https://github.com/opensearch-project/dashboards-assistant/pull/10))
- Add interactions into ChatState and pass specific interaction into message_bubble ([#12](https://github.com/opensearch-project/dashboards-assistant/pull/12))
26 changes: 26 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

// babelrc doesn't respect NODE_PATH anymore but using require does.
// Alternative to install them locally in node_modules
module.exports = function (api) {
// ensure env is test so that this config won't impact build or dev server
if (api.env('test')) {
return {
presets: [
require('@babel/preset-env'),
require('@babel/preset-react'),
require('@babel/preset-typescript'),
],
plugins: [
[require('@babel/plugin-transform-runtime'), { regenerator: true }],
require('@babel/plugin-transform-class-properties'),
require('@babel/plugin-transform-object-rest-spread'),
[require('@babel/plugin-transform-modules-commonjs'), { allowTopLevelThis: true }],
],
};
}
return {};
};
11 changes: 11 additions & 0 deletions common/types/chat_saved_object_attributes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,23 @@
export const CHAT_SAVED_OBJECT = 'assistant-chat';
export const SAVED_OBJECT_VERSION = 1;

export interface Interaction {
input: string;
response: string;
conversation_id: string;
interaction_id: string;
create_time: string;
additional_info?: Record<string, unknown>;
parent_interaction_id?: string;
}

export interface ISession {
title: string;
version: number;
createdTimeMs: number;
updatedTimeMs: number;
messages: IMessage[];
interactions: Interaction[];
}

export interface ISessionFindResponse {
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"scripts": {
"osd": "node ../../scripts/osd",
"build": "yarn plugin-helpers build",
"test": "../../node_modules/.bin/jest --config ./test/jest.config.js",
"test:jest": "../../node_modules/.bin/jest --config ./test/jest.config.js",
"plugin-helpers": "node ../../scripts/plugin_helpers",
"prepare": "husky install",
"lint:es": "node ../../scripts/eslint",
Expand All @@ -19,6 +19,7 @@
},
"dependencies": {
"autosize": "^6.0.1",
"csv-parser": "^3.0.0",
"dompurify": "^2.4.1",
"jsdom": "^22.1.0",
"langchain": "^0.0.164",
Expand Down
4 changes: 4 additions & 0 deletions public/chat_header_button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ export const HeaderChatButton: React.FC<HeaderChatButtonProps> = (props) => {
const [inputFocus, setInputFocus] = useState(false);
const flyoutFullScreen = chatSize === 'fullscreen';
const inputRef = useRef<HTMLInputElement>(null);
const [rootAgentId, setRootAgentId] = useState<string>(
new URL(window.location.href).searchParams.get('agent_id') || ''
);

if (!flyoutLoaded && flyoutVisible) flyoutLoaded = true;

Expand Down Expand Up @@ -76,6 +79,7 @@ export const HeaderChatButton: React.FC<HeaderChatButtonProps> = (props) => {
setTitle,
traceId,
setTraceId,
rootAgentId,
}),
[
appId,
Expand Down
1 change: 1 addition & 0 deletions public/contexts/chat_context.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ export interface IChatContext {
setTitle: React.Dispatch<React.SetStateAction<string | undefined>>;
traceId?: string;
setTraceId: React.Dispatch<React.SetStateAction<string | undefined>>;
rootAgentId?: string;
}
export const ChatContext = React.createContext<IChatContext | null>(null);

Expand Down
Loading
Loading