diff --git a/.dev.vars b/.dev.vars deleted file mode 100644 index 337c5cc..0000000 --- a/.dev.vars +++ /dev/null @@ -1,8 +0,0 @@ -EVENTSOURCE_HOST=http://some-event-host:3005 -GROQ_API_KEY=your-value -ANTHROPIC_API_KEY=your-value -FIREWORKS_API_KEY=your-value -XAI_API_KEY=your-value -CEREBRAS_API_KEY=your-value -CLOUDFLARE_API_KEY=your-value -CLOUDFLARE_ACCOUNT_ID=your-value diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a32258d..fb03c7d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,26 +33,4 @@ jobs: run: bun install - name: Test - run: bun run test:coverage - - # Upload coverage as Pages artifact only on push to main - - name: Upload coverage html - uses: actions/upload-pages-artifact@v3 - with: - path: ./coverage - name: "coverage" - - - deploy_coverage: - needs: tests - runs-on: ubuntu-latest - environment: - name: coverage-ui - url: ${{ steps.deployment.outputs.page_url }} - - steps: - - name: Deploy coverage-ui - id: deployment - uses: actions/deploy-pages@v4 - with: - artifact_name: 'coverage' + run: bun test:all diff --git a/.gitignore b/.gitignore index f15459d..645d01d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,16 @@ +**/.open-gsio/ **/node_modules/ -/dist/ +**/dist/ +**/build/ +**/coverage/ **/.wrangler/ -/.idea/ -public/sitemap.xml -public/robots.txt -public/static/fonts/* -.dev.vars -secrets.json -wrangler.dev.jsonc -/coverage/ -/html \ No newline at end of file +**/.idea/ +**/html/ +**/.env +packages/client/public/static/fonts/* + +**/secrets.json +**/.dev.vars +packages/client/public/sitemap.xml +packages/client/public/robots.txt +wrangler.dev.jsonc \ No newline at end of file diff --git a/README.md b/README.md index 4170d37..06dbe55 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ > **Note**: This project is currently under active development. The styling is a work in progress and some functionality > may be broken. Tests are being actively ported and stability will improve over time. Thank you for your patience! +This is a full-stack Conversational AI. It runs on Cloudflare or Bun. + ## Table of Contents - [Stack](#stack) @@ -37,15 +39,15 @@ ## Installation -1. `bun i && bun test` -1. [Add your own `GROQ_API_KEY` in .dev.vars](https://console.groq.com/keys) OR [Setup Local Inference](#local-inference) +1. `bun i && bun test:all` +1. [Setup Local Inference](#local-inference) OR [Add your own `GROQ_API_KEY` in packages/cloudflare-workers/open-gsio/.dev.vars](https://console.groq.com/keys) 1. In isolated shells, run `bun run server:dev` and `bun run client:dev` -> Note: it should be possible to use pnpm in place of bun. +> Note: it should be possible to use pnpm in place of bun. ## Deployment -1. Setup the KV_STORAGE bindings in `wrangler.jsonc` -1. [Add another `GROQ_API_KEY` in secrets.json](https://console.groq.com/keys) +1. Setup KV_STORAGE binding in `packages/server/wrangler.jsonc` +1. [Add keys in secrets.json](https://console.groq.com/keys) 1. Run `bun run deploy && bun run deploy:secrets && bun run deploy` > Note: Subsequent deployments should omit `bun run deploy:secrets` @@ -62,7 +64,7 @@ brew tap seemueller-io/tap brew install seemueller-io/tap/mlx-omni-server bun run openai:local mlx-omni-server # Start mlx-omni-server -bun run openai:local:enable # Configure connection +bun run openai:local:configure # Configure connection bun run server:dev # Restart server ~~~ #### Adding models for local inference (Apple Silicon) @@ -84,7 +86,7 @@ curl http://localhost:10240/v1/chat/completions \ ### Ollama ~~~bash bun run openai:local ollama # Start ollama server -bun run openai:local:enable # Configure connection +bun run openai:local:configure # Configure connection bun run server:dev # Restart server ~~~ #### Adding models for local inference (ollama) @@ -100,19 +102,19 @@ docker exec -it ollama ollama run ${MODEL_TO_ADD} Tests are located in `__tests__` directories next to the code they test. Testing is incomplete at this time. -> `bun run test` will run all tests +> `bun test:all` will run all tests ## Troubleshooting -1. `bun run clean` +1. `bun clean` 1. `bun i` -1. `bun server:dev` -1. `bun client:dev` +1. `bun server:dev` +1. `bun client:dev` 1. Submit an issue History --- -A high-level overview for the development history of the parent repository, [geoff-seemueller-io](https://geoff.seemueller.io), is provided in [LEGACY.md](./LEGACY.md). +A high-level overview for the development history of the parent repository, [geoff-seemueller-io](https://geoff.seemueller.io), is provided in [LEGACY.md](./LEGACY.md). ## License ~~~text diff --git a/bun.lock b/bun.lock index 57b2bbb..6f40d00 100644 --- a/bun.lock +++ b/bun.lock @@ -3,11 +3,25 @@ "workspaces": { "": { "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "packages/ai": { + "name": "@open-gsio/ai", + }, + "packages/client": { + "name": "@open-gsio/client", + "dependencies": { "@anthropic-ai/sdk": "^0.32.1", "@chakra-ui/react": "^2.10.6", "@cloudflare/workers-types": "^4.20241205.0", "@emotion/react": "^11.13.5", "@emotion/styled": "^11.13.5", + "@open-gsio/env": "workspace:*", + "@open-gsio/scripts": "workspace:*", "@testing-library/jest-dom": "^6.4.2", "@testing-library/react": "^14.2.1", "@testing-library/user-event": "^14.5.2", @@ -48,6 +62,77 @@ "zod": "^3.23.8", }, }, + "packages/cloudflare-workers/open-gsio": { + "name": "@open-gsio/worker", + "dependencies": { + "@cloudflare/vite-plugin": "^1.3.1", + "vite": "6.3.5", + "wrangler": "^4.18.0", + }, + }, + "packages/env": { + "name": "@open-gsio/env", + }, + "packages/scripts": { + "name": "@open-gsio/scripts", + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "packages/server": { + "name": "@open-gsio/server", + "devDependencies": { + "@anthropic-ai/sdk": "^0.32.1", + "@chakra-ui/react": "^2.10.6", + "@cloudflare/workers-types": "^4.20241205.0", + "@emotion/react": "^11.13.5", + "@emotion/styled": "^11.13.5", + "@open-gsio/env": "workspace:*", + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/react": "^14.2.1", + "@testing-library/user-event": "^14.5.2", + "@types/marked": "^6.0.0", + "@vitejs/plugin-react": "^4.3.4", + "@vitest/coverage-v8": "^3.1.4", + "@vitest/ui": "^3.1.4", + "bun-sqlite-key-value": "^1.13.1", + "chokidar": "^4.0.1", + "dotenv": "^16.5.0", + "framer-motion": "^11.13.1", + "isomorphic-dompurify": "^2.19.0", + "itty-router": "^5.0.18", + "js-cookie": "^3.0.5", + "jsdom": "^24.0.0", + "katex": "^0.16.20", + "lucide-react": "^0.436.0", + "marked": "^15.0.4", + "marked-extended-latex": "^1.1.0", + "marked-footnote": "^1.2.4", + "marked-katex-extension": "^5.1.4", + "mobx": "^6.13.5", + "mobx-react-lite": "^4.0.7", + "mobx-state-tree": "^6.0.1", + "moo": "^0.5.2", + "openai": "^5.0.1", + "qrcode.react": "^4.1.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-icons": "^5.4.0", + "react-streaming": "^0.3.44", + "react-textarea-autosize": "^8.5.5", + "shiki": "^1.24.0", + "typescript": "^5.7.2", + "vike": "0.4.193", + "vite": "^6.3.5", + "vite-plugin-pwa": "^1.0.0", + "vitest": "^3.1.4", + "wrangler": "^4.18.0", + "zod": "^3.23.8", + }, + }, }, "packages": { "@adobe/css-tools": ["@adobe/css-tools@4.4.3", "", {}, "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA=="], @@ -270,6 +355,8 @@ "@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.3.2", "", { "peerDependencies": { "unenv": "2.0.0-rc.17", "workerd": "^1.20250508.0" }, "optionalPeers": ["workerd"] }, "sha512-MtUgNl+QkQyhQvv5bbWP+BpBC1N0me4CHHuP2H4ktmOMKdB/6kkz/lo+zqiA4mEazb4y+1cwyNjVrQ2DWeE4mg=="], + "@cloudflare/vite-plugin": ["@cloudflare/vite-plugin@1.3.1", "", { "dependencies": { "@cloudflare/unenv-preset": "2.3.2", "@mjackson/node-fetch-server": "^0.6.1", "@rollup/plugin-replace": "^6.0.1", "get-port": "^7.1.0", "miniflare": "4.20250525.0", "picocolors": "^1.1.1", "tinyglobby": "^0.2.12", "unenv": "2.0.0-rc.17", "wrangler": "4.18.0", "ws": "8.18.0" }, "peerDependencies": { "vite": "^6.1.0" } }, "sha512-jTBdQ/oerE2w5jo0Hef8vIsuT5SxrYj5+NPlSRUjaTOdUaiuXr5uknKolhiYU35j8vbR+k+vlS/H/qR87q1WXA=="], + "@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20250525.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-L5l+7sSJJT2+riR5rS3Q3PKNNySPjWfRIeaNGMVRi1dPO6QPi4lwuxfRUFNoeUdilZJUVPfSZvTtj9RedsKznQ=="], "@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20250525.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y3IbIdrF/vJWh/WBvshwcSyUh175VAiLRW7963S1dXChrZ1N5wuKGQm9xY69cIGVtitpMJWWW3jLq7J/Xxwm0Q=="], @@ -428,12 +515,26 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + "@mjackson/node-fetch-server": ["@mjackson/node-fetch-server@0.6.1", "", {}, "sha512-9ZJnk/DJjt805uv5PPv11haJIW+HHf3YEEyVXv+8iLQxLD/iXA68FH220XoiTPBC4gCg5q+IMadDw8qPqlA5wg=="], + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "@open-gsio/ai": ["@open-gsio/ai@workspace:packages/ai"], + + "@open-gsio/client": ["@open-gsio/client@workspace:packages/client"], + + "@open-gsio/env": ["@open-gsio/env@workspace:packages/env"], + + "@open-gsio/scripts": ["@open-gsio/scripts@workspace:packages/scripts"], + + "@open-gsio/server": ["@open-gsio/server@workspace:packages/server"], + + "@open-gsio/worker": ["@open-gsio/worker@workspace:packages/cloudflare-workers/open-gsio"], + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], "@polka/url": ["@polka/url@1.0.0-next.28", "", {}, "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw=="], @@ -444,11 +545,11 @@ "@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@15.3.1", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.22.1" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA=="], - "@rollup/plugin-replace": ["@rollup/plugin-replace@2.4.2", "", { "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" }, "peerDependencies": { "rollup": "^1.20.0 || ^2.0.0" } }, "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg=="], + "@rollup/plugin-replace": ["@rollup/plugin-replace@6.0.2", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "magic-string": "^0.30.3" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ=="], "@rollup/plugin-terser": ["@rollup/plugin-terser@0.4.4", "", { "dependencies": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", "terser": "^5.17.4" }, "peerDependencies": { "rollup": "^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A=="], - "@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + "@rollup/pluginutils": ["@rollup/pluginutils@5.1.4", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ=="], "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.39.0", "", { "os": "android", "cpu": "arm" }, "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA=="], @@ -524,6 +625,8 @@ "@types/babel__traverse": ["@types/babel__traverse@7.20.7", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng=="], + "@types/bun": ["@types/bun@1.2.15", "", { "dependencies": { "bun-types": "1.2.15" } }, "sha512-U1ljPdBEphF0nw1MIk0hI7kPg7dFdPyM7EenHsp6W5loNHl7zqy6JQf/RKCgnUn2KDzUpkBwHPnEJEjII594bA=="], + "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], @@ -638,6 +741,10 @@ "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + "bun-sqlite-key-value": ["bun-sqlite-key-value@1.13.1", "", { "peerDependencies": { "typescript": "^5.5.3" } }, "sha512-cb3thB8QXPeXB6B7NhObpADEYvtVNwqg/0ED7PgKt2OxVAxPSejkiTsy1+byQDC0AwLYajw3nhtr/ubKvcLcKw=="], + + "bun-types": ["bun-types@1.2.15", "", { "dependencies": { "@types/node": "*" } }, "sha512-NarRIaS+iOaQU1JPfyKhZm4AsUOrwUOqRNHY0XxI8GI8jYxiLXLcdjYMG9UKS+fwWasc1uw1htV9AX24dD+p4w=="], + "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], @@ -744,6 +851,8 @@ "dompurify": ["dompurify@3.2.5", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ=="], + "dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], @@ -852,6 +961,8 @@ "get-own-enumerable-property-symbols": ["get-own-enumerable-property-symbols@3.0.2", "", {}, "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="], + "get-port": ["get-port@7.1.0", "", {}, "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw=="], + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], "get-source": ["get-source@2.0.12", "", { "dependencies": { "data-uri-to-buffer": "^2.0.0", "source-map": "^0.6.1" } }, "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w=="], @@ -1772,25 +1883,17 @@ "@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + "@cloudflare/vite-plugin/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], + "@rollup/plugin-babel/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + "@rollup/plugin-babel/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], - "@rollup/plugin-node-resolve/@rollup/pluginutils": ["@rollup/pluginutils@5.1.4", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ=="], - - "@rollup/plugin-replace/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], - - "@rollup/plugin-replace/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], - "@rollup/plugin-terser/terser": ["terser@5.39.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw=="], - "@rollup/pluginutils/@types/estree": ["@types/estree@0.0.39", "", {}, "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="], - - "@rollup/pluginutils/estree-walker": ["estree-walker@1.0.1", "", {}, "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="], - - "@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - - "@rollup/pluginutils/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], + "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], "@surma/rollup-plugin-off-main-thread/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], @@ -1864,6 +1967,8 @@ "vite-node/es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], + "workbox-build/@rollup/plugin-replace": ["@rollup/plugin-replace@2.4.2", "", { "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" }, "peerDependencies": { "rollup": "^1.20.0 || ^2.0.0" } }, "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg=="], + "workbox-build/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], "workbox-build/pretty-bytes": ["pretty-bytes@5.6.0", "", {}, "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg=="], @@ -2032,7 +2137,11 @@ "@babel/traverse/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], - "@rollup/plugin-node-resolve/@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + "@rollup/plugin-babel/@rollup/pluginutils/@types/estree": ["@types/estree@0.0.39", "", {}, "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="], + + "@rollup/plugin-babel/@rollup/pluginutils/estree-walker": ["estree-walker@1.0.1", "", {}, "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="], + + "@rollup/plugin-babel/@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "@rollup/plugin-terser/terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], @@ -2098,6 +2207,10 @@ "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], + "workbox-build/@rollup/plugin-replace/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + + "workbox-build/@rollup/plugin-replace/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], + "workbox-build/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], "workbox-build/source-map/whatwg-url": ["whatwg-url@7.1.0", "", { "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg=="], @@ -2212,6 +2325,12 @@ "@babel/plugin-transform-modules-umd/@babel/helper-module-transforms/@babel/traverse/@babel/types": ["@babel/types@7.27.3", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw=="], + "workbox-build/@rollup/plugin-replace/@rollup/pluginutils/@types/estree": ["@types/estree@0.0.39", "", {}, "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="], + + "workbox-build/@rollup/plugin-replace/@rollup/pluginutils/estree-walker": ["estree-walker@1.0.1", "", {}, "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="], + + "workbox-build/@rollup/plugin-replace/@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "workbox-build/glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], "workbox-build/source-map/whatwg-url/tr46": ["tr46@1.0.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA=="], diff --git a/gitleaks-report.json b/gitleaks-report.json deleted file mode 100644 index fe51488..0000000 --- a/gitleaks-report.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/package.json b/package.json index 7e464ed..0193e94 100644 --- a/package.json +++ b/package.json @@ -1,75 +1,30 @@ { + "name": "open-gsio", + "module": "index.ts", "type": "module", + "version": "2.0.0", + "private": true, + "workspaces": [ + "packages/*", + "packages/cloudflare-workers/*" + ], "scripts": { - "clean": "rm -rf node_modules && rm -rf .wrangler && rm -rf dist && rm -rf coverage && rm -rf html", - "build": "pnpm client:build && pnpm server:build", - "client:dev": "pnpm vite dev --host 0.0.0.0", - "server:dev": "pnpm run build && pnpm wrangler dev", - "client": "pnpm client:dev", - "client:build": "vite build", - "server:build": "WRANGLER_LOG=info wrangler build", - "deploy": "CI=true; NODE_ENV=production vite build && NODE_ENV=production wrangler deploy --minify", - "deploy:secrets": "wrangler secret bulk secrets.json", - "deploy:email-service": "wrangler deploy --cwd workers/email", - "deploy:analytics-service": "wrangler deploy --cwd workers/analytics", - "deploy:session-proxy": "wrangler deploy --cwd workers/session-proxy", - "deploy:all": "pnpm deploy && pnpm deploy:session:proxy && pnpm deploy:email-service && pnpm deploy:analytics-service", - "tail": "wrangler tail", - "tail:email-service": "wrangler tail -c workers/email/wrangler-email.toml", - "tail:analytics-service": "wrangler tail -c workers/analytics/wrangler-analytics.toml", - "tail:session-proxy": "wrangler tail -c workers/session-proxy/wrangler-session-proxy.toml --env production", - "openai:local": "./scripts/start_inference_server.sh mlx-omni-server", - "openai:local:mlx": "./scripts/start_inference_server.sh mlx-omni-server", - "openai:local:ollama": "./scripts/start_inference_server.sh ollama", - "openai:local:configure": "scripts/configure_local_inference.sh", - "test": "vitest run", - "test:watch": "vitest", - "test:coverage": "vitest run --coverage.enabled=true" + "clean": "packages/scripts/cleanup.sh", + "test:all": "bun run --filter='*' tests", + "client:dev": "(cd packages/client && bun run dev)", + "server:dev": "(cd packages/server && bun run dev)", + "build": "(cd packages/cloudflare-workers && bun run deploy:dry-run)", + "deploy": "(cd packages/cloudflare-workers && bun run deploy)", + "deploy:secrets": "wrangler secret bulk secrets.json -c packages/cloudflare-workers/open-gsio/wrangler.jsonc", + "openai:local:mlx": "packages/scripts/start_inference_server.sh mlx-omni-server", + "openai:local:ollama": "packages/scripts/start_inference_server.sh ollama", + "openai:local:configure": "packages/scripts/configure_local_inference.sh" }, "devDependencies": { - "@anthropic-ai/sdk": "^0.32.1", - "@chakra-ui/react": "^2.10.6", - "@cloudflare/workers-types": "^4.20241205.0", - "@emotion/react": "^11.13.5", - "@emotion/styled": "^11.13.5", - "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "^14.2.1", - "@testing-library/user-event": "^14.5.2", - "@types/marked": "^6.0.0", - "@vitejs/plugin-react": "^4.3.4", - "@vitest/coverage-v8": "^3.1.4", - "@vitest/ui": "^3.1.4", - "chokidar": "^4.0.1", - "framer-motion": "^11.13.1", - "isomorphic-dompurify": "^2.19.0", - "itty-router": "^5.0.18", - "js-cookie": "^3.0.5", - "jsdom": "^24.0.0", - "katex": "^0.16.20", - "lucide-react": "^0.436.0", - "marked": "^15.0.4", - "marked-extended-latex": "^1.1.0", - "marked-footnote": "^1.2.4", - "marked-katex-extension": "^5.1.4", - "mobx": "^6.13.5", - "mobx-react-lite": "^4.0.7", - "mobx-state-tree": "^6.0.1", - "moo": "^0.5.2", - "openai": "^5.0.1", - "qrcode.react": "^4.1.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-icons": "^5.4.0", - "react-streaming": "^0.3.44", - "react-textarea-autosize": "^8.5.5", - "shiki": "^1.24.0", - "typescript": "^5.7.2", - "vike": "0.4.193", - "vite": "^6.3.5", - "vite-plugin-pwa": "^1.0.0", - "vitest": "^3.1.4", - "wrangler": "^4.18.0", - "zod": "^3.23.8" + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5" }, "packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39" } diff --git a/packages/ai/index.ts b/packages/ai/index.ts new file mode 100644 index 0000000..c7e0d4d --- /dev/null +++ b/packages/ai/index.ts @@ -0,0 +1 @@ +export * from "./supported-models.ts"; \ No newline at end of file diff --git a/packages/ai/package.json b/packages/ai/package.json new file mode 100644 index 0000000..27192a5 --- /dev/null +++ b/packages/ai/package.json @@ -0,0 +1,4 @@ +{ + "name": "@open-gsio/ai", + "module": "index.ts" +} \ No newline at end of file diff --git a/packages/ai/supported-models.ts b/packages/ai/supported-models.ts new file mode 100644 index 0000000..077506d --- /dev/null +++ b/packages/ai/supported-models.ts @@ -0,0 +1,88 @@ +const SUPPORTED_MODELS_GROUPS = { + openai: [ + // "o1-preview", + // "o1-mini", + // "gpt-4o", + // "gpt-3.5-turbo" + ], + groq: [ + // "mixtral-8x7b-32768", + // "deepseek-r1-distill-llama-70b", + "meta-llama/llama-4-scout-17b-16e-instruct", + "gemma2-9b-it", + "mistral-saba-24b", + // "qwen-2.5-32b", + "llama-3.3-70b-versatile", + // "llama-3.3-70b-versatile" + // "llama-3.1-70b-versatile", + // "llama-3.3-70b-versatile" + ], + cerebras: ["llama-3.3-70b"], + claude: [ + // "claude-3-5-sonnet-20241022", + // "claude-3-opus-20240229" + ], + fireworks: [ + // "llama-v3p1-405b-instruct", + // "llama-v3p1-70b-instruct", + // "llama-v3p2-90b-vision-instruct", + // "mixtral-8x22b-instruct", + // "mythomax-l2-13b", + // "yi-large" + ], + google: [ + // "gemini-2.0-flash-exp", + // "gemini-1.5-flash", + // "gemini-exp-1206", + // "gemini-1.5-pro" + ], + xai: [ + // "grok-beta", + // "grok-2", + // "grok-2-1212", + // "grok-2-latest", + // "grok-beta" + ], + cloudflareAI: [ + "llama-3.2-3b-instruct", // max_tokens + "llama-3-8b-instruct", // max_tokens + "llama-3.1-8b-instruct-fast", // max_tokens + "deepseek-math-7b-instruct", + "deepseek-coder-6.7b-instruct-awq", + "hermes-2-pro-mistral-7b", + "openhermes-2.5-mistral-7b-awq", + "mistral-7b-instruct-v0.2", + "neural-chat-7b-v3-1-awq", + "openchat-3.5-0106", + // "gemma-7b-it", + ], +}; + +export type SupportedModel = + | keyof typeof SUPPORTED_MODELS_GROUPS + | (typeof SUPPORTED_MODELS_GROUPS)[keyof typeof SUPPORTED_MODELS_GROUPS][number]; + +export type ModelFamily = keyof typeof SUPPORTED_MODELS_GROUPS; + +function getModelFamily(model: string): ModelFamily | undefined { + return Object.keys(SUPPORTED_MODELS_GROUPS) + .filter((family) => { + return SUPPORTED_MODELS_GROUPS[ + family as keyof typeof SUPPORTED_MODELS_GROUPS + ].includes(model.trim()); + }) + .at(0) as ModelFamily | undefined; +} + +const SUPPORTED_MODELS = [ + // ...SUPPORTED_MODELS_GROUPS.xai, + // ...SUPPORTED_MODELS_GROUPS.claude, + // ...SUPPORTED_MODELS_GROUPS.google, + ...SUPPORTED_MODELS_GROUPS.groq, + // ...SUPPORTED_MODELS_GROUPS.fireworks, + // ...SUPPORTED_MODELS_GROUPS.openai, + // ...SUPPORTED_MODELS_GROUPS.cerebras, + // ...SUPPORTED_MODELS_GROUPS.cloudflareAI, +]; + +export { SUPPORTED_MODELS, SUPPORTED_MODELS_GROUPS, getModelFamily }; diff --git a/packages/client/package.json b/packages/client/package.json new file mode 100644 index 0000000..6857a1d --- /dev/null +++ b/packages/client/package.json @@ -0,0 +1,57 @@ +{ + "name": "@open-gsio/client", + "type": "module", + "scripts": { + "dev": "bun vite dev", + "build": "bun vite build", + "tests": "vitest run", + "tests:coverage": "vitest run --coverage.enabled=true" + }, + "dependencies": { + "@open-gsio/env": "workspace:*", + "@open-gsio/scripts": "workspace:*", + "@anthropic-ai/sdk": "^0.32.1", + "@chakra-ui/react": "^2.10.6", + "@cloudflare/workers-types": "^4.20241205.0", + "@emotion/react": "^11.13.5", + "@emotion/styled": "^11.13.5", + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/react": "^14.2.1", + "@testing-library/user-event": "^14.5.2", + "@types/marked": "^6.0.0", + "@vitejs/plugin-react": "^4.3.4", + "@vitest/coverage-v8": "^3.1.4", + "@vitest/ui": "^3.1.4", + "chokidar": "^4.0.1", + "framer-motion": "^11.13.1", + "isomorphic-dompurify": "^2.19.0", + "itty-router": "^5.0.18", + "js-cookie": "^3.0.5", + "jsdom": "^24.0.0", + "katex": "^0.16.20", + "lucide-react": "^0.436.0", + "marked": "^15.0.4", + "marked-extended-latex": "^1.1.0", + "marked-footnote": "^1.2.4", + "marked-katex-extension": "^5.1.4", + "mobx": "^6.13.5", + "mobx-react-lite": "^4.0.7", + "mobx-state-tree": "^6.0.1", + "moo": "^0.5.2", + "openai": "^5.0.1", + "qrcode.react": "^4.1.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-icons": "^5.4.0", + "react-streaming": "^0.3.44", + "react-textarea-autosize": "^8.5.5", + "shiki": "^1.24.0", + "typescript": "^5.7.2", + "vike": "0.4.193", + "vite": "^6.3.5", + "vite-plugin-pwa": "^1.0.0", + "vitest": "^3.1.4", + "wrangler": "^4.18.0", + "zod": "^3.23.8" + } +} diff --git a/public/android-chrome-192x192.png b/packages/client/public/android-chrome-192x192.png similarity index 100% rename from public/android-chrome-192x192.png rename to packages/client/public/android-chrome-192x192.png diff --git a/public/android-chrome-512x512.png b/packages/client/public/android-chrome-512x512.png similarity index 100% rename from public/android-chrome-512x512.png rename to packages/client/public/android-chrome-512x512.png diff --git a/public/apple-touch-icon.png b/packages/client/public/apple-touch-icon.png similarity index 100% rename from public/apple-touch-icon.png rename to packages/client/public/apple-touch-icon.png diff --git a/public/cfga.min.js b/packages/client/public/cfga.min.js similarity index 100% rename from public/cfga.min.js rename to packages/client/public/cfga.min.js diff --git a/public/code-tokenizer-md.jpg b/packages/client/public/code-tokenizer-md.jpg similarity index 100% rename from public/code-tokenizer-md.jpg rename to packages/client/public/code-tokenizer-md.jpg diff --git a/public/favicon-16x16.png b/packages/client/public/favicon-16x16.png similarity index 100% rename from public/favicon-16x16.png rename to packages/client/public/favicon-16x16.png diff --git a/public/favicon-32x32.png b/packages/client/public/favicon-32x32.png similarity index 100% rename from public/favicon-32x32.png rename to packages/client/public/favicon-32x32.png diff --git a/public/favicon.ico b/packages/client/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to packages/client/public/favicon.ico diff --git a/public/general-problem-solver.png b/packages/client/public/general-problem-solver.png similarity index 100% rename from public/general-problem-solver.png rename to packages/client/public/general-problem-solver.png diff --git a/public/me.png b/packages/client/public/me.png similarity index 100% rename from public/me.png rename to packages/client/public/me.png diff --git a/public/reactive-state-machine-4.png b/packages/client/public/reactive-state-machine-4.png similarity index 100% rename from public/reactive-state-machine-4.png rename to packages/client/public/reactive-state-machine-4.png diff --git a/public/reactive_state_machine_5.png b/packages/client/public/reactive_state_machine_5.png similarity index 100% rename from public/reactive_state_machine_5.png rename to packages/client/public/reactive_state_machine_5.png diff --git a/public/rehoboam.png b/packages/client/public/rehoboam.png similarity index 100% rename from public/rehoboam.png rename to packages/client/public/rehoboam.png diff --git a/public/site.webmanifest b/packages/client/public/site.webmanifest similarity index 100% rename from public/site.webmanifest rename to packages/client/public/site.webmanifest diff --git a/scripts/generate_robots_txt.js b/packages/client/scripts/generate_robots_txt.js similarity index 100% rename from scripts/generate_robots_txt.js rename to packages/client/scripts/generate_robots_txt.js diff --git a/scripts/generate_sitemap.js b/packages/client/scripts/generate_sitemap.js similarity index 100% rename from scripts/generate_sitemap.js rename to packages/client/scripts/generate_sitemap.js diff --git a/src/components/BuiltWithButton.tsx b/packages/client/src/components/BuiltWithButton.tsx similarity index 100% rename from src/components/BuiltWithButton.tsx rename to packages/client/src/components/BuiltWithButton.tsx diff --git a/src/components/ThemeSelection.tsx b/packages/client/src/components/ThemeSelection.tsx similarity index 100% rename from src/components/ThemeSelection.tsx rename to packages/client/src/components/ThemeSelection.tsx diff --git a/src/components/WelcomeHome.tsx b/packages/client/src/components/WelcomeHome.tsx similarity index 100% rename from src/components/WelcomeHome.tsx rename to packages/client/src/components/WelcomeHome.tsx diff --git a/src/components/__tests__/ThemeSelection.test.tsx b/packages/client/src/components/__tests__/ThemeSelection.test.tsx similarity index 100% rename from src/components/__tests__/ThemeSelection.test.tsx rename to packages/client/src/components/__tests__/ThemeSelection.test.tsx diff --git a/src/components/__tests__/WelcomeHome.test.tsx b/packages/client/src/components/__tests__/WelcomeHome.test.tsx similarity index 100% rename from src/components/__tests__/WelcomeHome.test.tsx rename to packages/client/src/components/__tests__/WelcomeHome.test.tsx diff --git a/src/components/about/AboutComponent.tsx b/packages/client/src/components/about/AboutComponent.tsx similarity index 100% rename from src/components/about/AboutComponent.tsx rename to packages/client/src/components/about/AboutComponent.tsx diff --git a/src/components/chat/Chat.tsx b/packages/client/src/components/chat/Chat.tsx similarity index 100% rename from src/components/chat/Chat.tsx rename to packages/client/src/components/chat/Chat.tsx diff --git a/src/components/chat/IntermediateStepsComponent.tsx b/packages/client/src/components/chat/IntermediateStepsComponent.tsx similarity index 100% rename from src/components/chat/IntermediateStepsComponent.tsx rename to packages/client/src/components/chat/IntermediateStepsComponent.tsx diff --git a/src/components/chat/input-menu/FlyoutSubMenu.tsx b/packages/client/src/components/chat/input-menu/FlyoutSubMenu.tsx similarity index 100% rename from src/components/chat/input-menu/FlyoutSubMenu.tsx rename to packages/client/src/components/chat/input-menu/FlyoutSubMenu.tsx diff --git a/src/components/chat/input-menu/InputMenu.tsx b/packages/client/src/components/chat/input-menu/InputMenu.tsx similarity index 100% rename from src/components/chat/input-menu/InputMenu.tsx rename to packages/client/src/components/chat/input-menu/InputMenu.tsx diff --git a/src/components/chat/input/ChatInput.tsx b/packages/client/src/components/chat/input/ChatInput.tsx similarity index 100% rename from src/components/chat/input/ChatInput.tsx rename to packages/client/src/components/chat/input/ChatInput.tsx diff --git a/src/components/chat/input/ChatInputSendButton.tsx b/packages/client/src/components/chat/input/ChatInputSendButton.tsx similarity index 100% rename from src/components/chat/input/ChatInputSendButton.tsx rename to packages/client/src/components/chat/input/ChatInputSendButton.tsx diff --git a/src/components/chat/input/ChatInputTextArea.tsx b/packages/client/src/components/chat/input/ChatInputTextArea.tsx similarity index 100% rename from src/components/chat/input/ChatInputTextArea.tsx rename to packages/client/src/components/chat/input/ChatInputTextArea.tsx diff --git a/src/components/chat/input/__tests__/ChatInput.test.tsx b/packages/client/src/components/chat/input/__tests__/ChatInput.test.tsx similarity index 100% rename from src/components/chat/input/__tests__/ChatInput.test.tsx rename to packages/client/src/components/chat/input/__tests__/ChatInput.test.tsx diff --git a/src/components/chat/lib/SupportedModels.ts b/packages/client/src/components/chat/lib/SupportedModels.ts similarity index 100% rename from src/components/chat/lib/SupportedModels.ts rename to packages/client/src/components/chat/lib/SupportedModels.ts diff --git a/src/components/chat/lib/domPurify.ts b/packages/client/src/components/chat/lib/domPurify.ts similarity index 100% rename from src/components/chat/lib/domPurify.ts rename to packages/client/src/components/chat/lib/domPurify.ts diff --git a/src/components/chat/lib/exportConversationAsMarkdown.ts b/packages/client/src/components/chat/lib/exportConversationAsMarkdown.ts similarity index 100% rename from src/components/chat/lib/exportConversationAsMarkdown.ts rename to packages/client/src/components/chat/lib/exportConversationAsMarkdown.ts diff --git a/src/components/chat/messages/ChatMessageContent.tsx b/packages/client/src/components/chat/messages/ChatMessageContent.tsx similarity index 100% rename from src/components/chat/messages/ChatMessageContent.tsx rename to packages/client/src/components/chat/messages/ChatMessageContent.tsx diff --git a/src/components/chat/messages/ChatMessages.tsx b/packages/client/src/components/chat/messages/ChatMessages.tsx similarity index 100% rename from src/components/chat/messages/ChatMessages.tsx rename to packages/client/src/components/chat/messages/ChatMessages.tsx diff --git a/src/components/chat/messages/MessageBubble.tsx b/packages/client/src/components/chat/messages/MessageBubble.tsx similarity index 100% rename from src/components/chat/messages/MessageBubble.tsx rename to packages/client/src/components/chat/messages/MessageBubble.tsx diff --git a/src/components/chat/messages/MessageEditorComponent.tsx b/packages/client/src/components/chat/messages/MessageEditorComponent.tsx similarity index 100% rename from src/components/chat/messages/MessageEditorComponent.tsx rename to packages/client/src/components/chat/messages/MessageEditorComponent.tsx diff --git a/src/components/chat/messages/MessageMarkdown.tsx b/packages/client/src/components/chat/messages/MessageMarkdown.tsx similarity index 100% rename from src/components/chat/messages/MessageMarkdown.tsx rename to packages/client/src/components/chat/messages/MessageMarkdown.tsx diff --git a/src/components/chat/messages/MessageMarkdownRenderer.tsx b/packages/client/src/components/chat/messages/MessageMarkdownRenderer.tsx similarity index 100% rename from src/components/chat/messages/MessageMarkdownRenderer.tsx rename to packages/client/src/components/chat/messages/MessageMarkdownRenderer.tsx diff --git a/src/components/chat/messages/MotionBox.tsx b/packages/client/src/components/chat/messages/MotionBox.tsx similarity index 100% rename from src/components/chat/messages/MotionBox.tsx rename to packages/client/src/components/chat/messages/MotionBox.tsx diff --git a/src/components/chat/messages/UserMessageTools.tsx b/packages/client/src/components/chat/messages/UserMessageTools.tsx similarity index 100% rename from src/components/chat/messages/UserMessageTools.tsx rename to packages/client/src/components/chat/messages/UserMessageTools.tsx diff --git a/src/components/chat/messages/__tests__/MessageBubble.test.tsx b/packages/client/src/components/chat/messages/__tests__/MessageBubble.test.tsx similarity index 100% rename from src/components/chat/messages/__tests__/MessageBubble.test.tsx rename to packages/client/src/components/chat/messages/__tests__/MessageBubble.test.tsx diff --git a/src/components/chat/messages/__tests__/MessageEditorComponent.test.tsx b/packages/client/src/components/chat/messages/__tests__/MessageEditorComponent.test.tsx similarity index 100% rename from src/components/chat/messages/__tests__/MessageEditorComponent.test.tsx rename to packages/client/src/components/chat/messages/__tests__/MessageEditorComponent.test.tsx diff --git a/src/components/code/CodeBlock.tsx b/packages/client/src/components/code/CodeBlock.tsx similarity index 100% rename from src/components/code/CodeBlock.tsx rename to packages/client/src/components/code/CodeBlock.tsx diff --git a/src/components/code/CodeHighlighter.ts b/packages/client/src/components/code/CodeHighlighter.ts similarity index 100% rename from src/components/code/CodeHighlighter.ts rename to packages/client/src/components/code/CodeHighlighter.ts diff --git a/src/components/connect/ConnectComponent.tsx b/packages/client/src/components/connect/ConnectComponent.tsx similarity index 100% rename from src/components/connect/ConnectComponent.tsx rename to packages/client/src/components/connect/ConnectComponent.tsx diff --git a/src/components/connect/MarkdownEditor.tsx b/packages/client/src/components/connect/MarkdownEditor.tsx similarity index 82% rename from src/components/connect/MarkdownEditor.tsx rename to packages/client/src/components/connect/MarkdownEditor.tsx index 166a5e2..b9f6fc6 100644 --- a/src/components/connect/MarkdownEditor.tsx +++ b/packages/client/src/components/connect/MarkdownEditor.tsx @@ -8,7 +8,7 @@ export const MarkdownEditor = (props: { }) => { return ( - +