From fd154f04d30afc35504aa9faa51586a9ccb6cd7b Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 16 Jun 2023 12:42:24 +0200 Subject: [PATCH 01/12] fix: abuse phone param --- app/controllers/api/account.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 39cb851b2b..d2e8f67463 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -917,7 +917,7 @@ App::post('/v1/account/sessions/phone') ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) ->label('sdk.response.model', Response::MODEL_TOKEN) ->label('abuse-limit', 10) - ->label('abuse-key', 'url:{url},email:{param-email}') + ->label('abuse-key', 'url:{url},email:{param-phone}') ->param('userId', '', new CustomId(), 'Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.') ->param('phone', '', new Phone(), 'Phone number. Format this number with a leading \'+\' and a country code, e.g., +16175551212.') ->inject('request') From 82f2033f9989822c2de59c404cab8e293fe202e8 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Tue, 25 Jul 2023 06:37:27 +0545 Subject: [PATCH 02/12] audio/aac mime type added --- app/config/storage/mimes.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/config/storage/mimes.php b/app/config/storage/mimes.php index 3e3cad3698..756954d76a 100644 --- a/app/config/storage/mimes.php +++ b/app/config/storage/mimes.php @@ -31,6 +31,7 @@ return [ 'audio/ogg', // Ogg Vorbis RFC 5334 'audio/vorbis', // Vorbis RFC 5215 'audio/vnd.wav', // wav RFC 2361 + 'audio/aac', //AAC audio // Microsoft Word 'application/msword', From 86ec1ec1d2ccb7bbf7b5007933341bb6464bb1ff Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Tue, 25 Jul 2023 01:08:46 +0000 Subject: [PATCH 03/12] adding audio/x-hx-aac-adts as well --- app/config/storage/mimes.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/config/storage/mimes.php b/app/config/storage/mimes.php index 756954d76a..5d315f45bc 100644 --- a/app/config/storage/mimes.php +++ b/app/config/storage/mimes.php @@ -32,6 +32,7 @@ return [ 'audio/vorbis', // Vorbis RFC 5215 'audio/vnd.wav', // wav RFC 2361 'audio/aac', //AAC audio + 'audio/x-hx-aac-adts', // AAC audio // Microsoft Word 'application/msword', From 3b4255c457c1cf150f32bfd003cc3e2b7f844811 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Tue, 1 Aug 2023 18:18:27 +0530 Subject: [PATCH 04/12] fix: error in initialising the Exception constructor in api.php --- app/controllers/shared/api.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 289fbca8f4..2f0bbbf153 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -27,7 +27,7 @@ $parseLabel = function (string $label, array $responsePayload, array $requestPar $parts = explode('.', $match); if (count($parts) !== 2) { - throw new Exception('Too less or too many parts', 400, Exception::GENERAL_ARGUMENT_INVALID); + throw new Exception(Exception::GENERAL_SERVER_ERROR, "The server encountered an error while parsing the label: $label"); } $namespace = $parts[0] ?? ''; From f6d2df8115dd11648000909b3759c6ed863fb4be Mon Sep 17 00:00:00 2001 From: "Vincent (Wen Yu) Ge" Date: Tue, 1 Aug 2023 12:21:34 -0400 Subject: [PATCH 05/12] Update app/controllers/shared/api.php Co-authored-by: Christy Jacob --- app/controllers/shared/api.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 2f0bbbf153..daa7f9d5da 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -27,7 +27,7 @@ $parseLabel = function (string $label, array $responsePayload, array $requestPar $parts = explode('.', $match); if (count($parts) !== 2) { - throw new Exception(Exception::GENERAL_SERVER_ERROR, "The server encountered an error while parsing the label: $label"); + throw new Exception(Exception::GENERAL_SERVER_ERROR, "The server encountered an error while parsing the label: $label. Please create an issue on GitHub to allow us to investigate further https://github.com/appwrite/appwrite/issues/new/choose"); } $namespace = $parts[0] ?? ''; From 2a7ec490afd01ec2537c73e271f295e0d650b8f9 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Thu, 3 Aug 2023 10:29:36 +0000 Subject: [PATCH 06/12] setup appwrite assistant for test --- app/config/services.php | 13 ++++++ app/controllers/api/assistant.php | 74 +++++++++++++++++++++++++++++++ docker-compose.yml | 9 ++++ 3 files changed, 96 insertions(+) create mode 100644 app/controllers/api/assistant.php diff --git a/app/config/services.php b/app/config/services.php index 8383b44c82..086acd185a 100644 --- a/app/config/services.php +++ b/app/config/services.php @@ -199,4 +199,17 @@ return [ 'optional' => false, 'icon' => '', ], + 'assistant' => [ + 'key' => 'assistant', + 'name' => 'Assistant', + 'subtitle' => 'The Appwrite assistant service allows you to interact with appwrite assistant.', + 'description' => '', + 'controller' => 'api/assistant.php', + 'sdk' => true, + 'docs' => true, + 'docsUrl' => '', + 'tests' => false, + 'optional' => false, + 'icon' => '', + ], ]; diff --git a/app/controllers/api/assistant.php b/app/controllers/api/assistant.php new file mode 100644 index 0000000000..7ea9da87a4 --- /dev/null +++ b/app/controllers/api/assistant.php @@ -0,0 +1,74 @@ +groups(['console']) + ->inject('project') + ->action(function (Document $project) { + if ($project->getId() !== 'console') { + throw new Exception(Exception::GENERAL_ACCESS_FORBIDDEN); + } + }); + + +App::post('/v1/assistant/chat') + ->desc('Ask Query') + ->groups(['api', 'assistant']) + ->label('scope', 'public') + // ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) + ->label('sdk.namespace', 'assistant') + ->label('sdk.method', 'chat') + ->label('sdk.description', '/docs/references/assistant/chat.md') + ->label('sdk.response.code', Response::STATUS_CODE_OK) + ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) + ->label('sdk.response.model', Response::MODEL_CONSOLE_VARIABLES) + ->param('query', '', new Text(2000), 'Query') + ->inject('response') + ->action(function (string $query, Response $response) { + $ch = curl_init('http://appwrite-assistant:3003/'); + $responseHeaders = []; + $responseStatus = -1; + $responseBody = ''; + $responseType = ''; + $query = json_encode(['prompt' => $query]); + + $headers = ['accept: text/event-stream']; + $handleEvent = function($ch, $data) { + var_dump($data); + return \strlen($data); + }; + + curl_setopt($ch, CURLOPT_WRITEFUNCTION, $handleEvent); + + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); + curl_setopt($ch, CURLOPT_TIMEOUT, 9000); + curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($curl, $header) use (&$responseHeaders) { + $len = strlen($header); + $header = explode(':', $header, 2); + + if (count($header) < 2) { // ignore invalid headers + return $len; + } + + $responseHeaders[strtolower(trim($header[0]))] = trim($header[1]); + + return $len; + }); + + curl_setopt($ch, CURLOPT_POSTFIELDS, $query); + + $responseBody = curl_exec($ch); + + curl_close($ch); + + $response->send('Response ended'); + + }); diff --git a/docker-compose.yml b/docker-compose.yml index 560c42ae38..f72458560f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -659,6 +659,15 @@ services: - _APP_REDIS_PORT - _APP_REDIS_USER - _APP_REDIS_PASS + + appwrite-assistant: + container_name: appwrite-assistant + image: dlohani/appwrite_ask + networks: + - appwrite + environment: + - OPENAI_API_KEY + mariadb: image: mariadb:10.7 # fix issues when upgrading using: mysql_upgrade -u root -p From 45afea91759a0d88064b327c2d10144926ec8b16 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Fri, 4 Aug 2023 01:42:22 +0000 Subject: [PATCH 07/12] moved assistant endpoint to console, and add env support --- .env | 4 +- app/config/services.php | 13 ------ app/controllers/api/assistant.php | 74 ------------------------------- app/controllers/api/console.php | 56 +++++++++++++++++++++++ docker-compose.yml | 2 + 5 files changed, 61 insertions(+), 88 deletions(-) delete mode 100644 app/controllers/api/assistant.php diff --git a/.env b/.env index 60c2fffa07..6af1940557 100644 --- a/.env +++ b/.env @@ -87,4 +87,6 @@ _APP_GRAPHQL_MAX_COMPLEXITY=250 _APP_GRAPHQL_MAX_DEPTH=3 DOCKERHUB_PULL_USERNAME= DOCKERHUB_PULL_PASSWORD= -DOCKERHUB_PULL_EMAIL= \ No newline at end of file +DOCKERHUB_PULL_EMAIL= +OPENAI_API_KEY=YOUR_OPENAI_API_KEY +ASSISTANT_SECRET=your-secret-key \ No newline at end of file diff --git a/app/config/services.php b/app/config/services.php index 086acd185a..8383b44c82 100644 --- a/app/config/services.php +++ b/app/config/services.php @@ -199,17 +199,4 @@ return [ 'optional' => false, 'icon' => '', ], - 'assistant' => [ - 'key' => 'assistant', - 'name' => 'Assistant', - 'subtitle' => 'The Appwrite assistant service allows you to interact with appwrite assistant.', - 'description' => '', - 'controller' => 'api/assistant.php', - 'sdk' => true, - 'docs' => true, - 'docsUrl' => '', - 'tests' => false, - 'optional' => false, - 'icon' => '', - ], ]; diff --git a/app/controllers/api/assistant.php b/app/controllers/api/assistant.php deleted file mode 100644 index 7ea9da87a4..0000000000 --- a/app/controllers/api/assistant.php +++ /dev/null @@ -1,74 +0,0 @@ -groups(['console']) - ->inject('project') - ->action(function (Document $project) { - if ($project->getId() !== 'console') { - throw new Exception(Exception::GENERAL_ACCESS_FORBIDDEN); - } - }); - - -App::post('/v1/assistant/chat') - ->desc('Ask Query') - ->groups(['api', 'assistant']) - ->label('scope', 'public') - // ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) - ->label('sdk.namespace', 'assistant') - ->label('sdk.method', 'chat') - ->label('sdk.description', '/docs/references/assistant/chat.md') - ->label('sdk.response.code', Response::STATUS_CODE_OK) - ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) - ->label('sdk.response.model', Response::MODEL_CONSOLE_VARIABLES) - ->param('query', '', new Text(2000), 'Query') - ->inject('response') - ->action(function (string $query, Response $response) { - $ch = curl_init('http://appwrite-assistant:3003/'); - $responseHeaders = []; - $responseStatus = -1; - $responseBody = ''; - $responseType = ''; - $query = json_encode(['prompt' => $query]); - - $headers = ['accept: text/event-stream']; - $handleEvent = function($ch, $data) { - var_dump($data); - return \strlen($data); - }; - - curl_setopt($ch, CURLOPT_WRITEFUNCTION, $handleEvent); - - curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); - curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); - curl_setopt($ch, CURLOPT_TIMEOUT, 9000); - curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($curl, $header) use (&$responseHeaders) { - $len = strlen($header); - $header = explode(':', $header, 2); - - if (count($header) < 2) { // ignore invalid headers - return $len; - } - - $responseHeaders[strtolower(trim($header[0]))] = trim($header[1]); - - return $len; - }); - - curl_setopt($ch, CURLOPT_POSTFIELDS, $query); - - $responseBody = curl_exec($ch); - - curl_close($ch); - - $response->send('Response ended'); - - }); diff --git a/app/controllers/api/console.php b/app/controllers/api/console.php index 060fa10cb5..49994e4704 100644 --- a/app/controllers/api/console.php +++ b/app/controllers/api/console.php @@ -4,6 +4,7 @@ use Appwrite\Extend\Exception; use Appwrite\Utopia\Response; use Utopia\App; use Utopia\Database\Document; +use Utopia\Validator\Text; App::init() ->groups(['console']) @@ -38,3 +39,58 @@ App::get('/v1/console/variables') $response->dynamic($variables, Response::MODEL_CONSOLE_VARIABLES); }); + + +App::post('/v1/console/assistant') + ->desc('Ask Query') + ->groups(['api', 'assistant']) + ->label('scope', 'public') + ->label('sdk.namespace', 'assistant') + ->label('sdk.method', 'chat') + ->label('sdk.description', '/docs/references/assistant/chat.md') + ->label('sdk.response.code', Response::STATUS_CODE_OK) + ->label('sdk.response.type', Response::CONTENT_TYPE_TEXT) + ->param('query', '', new Text(2000), 'Query') + ->inject('response') + ->action(function (string $query, Response $response) { + $ch = curl_init('http://appwrite-assistant:3003/'); + $responseHeaders = []; + $query = json_encode(['prompt' => $query]); + + $headers = ['accept: text/event-stream', 'authorization: ' . APP::getEnv('ASSISTANT_SECRET')]; + $handleEvent = function($ch, $data) use ($response) { + + $response->chunk($data); + + return \strlen($data); + }; + + curl_setopt($ch, CURLOPT_WRITEFUNCTION, $handleEvent); + + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); + curl_setopt($ch, CURLOPT_TIMEOUT, 9000); + curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($curl, $header) use (&$responseHeaders) { + $len = strlen($header); + $header = explode(':', $header, 2); + + if (count($header) < 2) { // ignore invalid headers + return $len; + } + + $responseHeaders[strtolower(trim($header[0]))] = trim($header[1]); + + return $len; + }); + + curl_setopt($ch, CURLOPT_POSTFIELDS, $query); + + curl_exec($ch); + + curl_close($ch); + + $response->chunk('', true); + + }); diff --git a/docker-compose.yml b/docker-compose.yml index f72458560f..64cfe1a8bf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -178,6 +178,7 @@ services: - _APP_GRAPHQL_MAX_BATCH_SIZE - _APP_GRAPHQL_MAX_COMPLEXITY - _APP_GRAPHQL_MAX_DEPTH + - ASSISTANT_SECRET appwrite-realtime: entrypoint: realtime @@ -667,6 +668,7 @@ services: - appwrite environment: - OPENAI_API_KEY + - ASSISTANT_SECRET mariadb: From 49085be4e4da1761f597203927dd86b4edf5588c Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Fri, 4 Aug 2023 02:17:02 +0000 Subject: [PATCH 08/12] fix formatting --- app/controllers/api/console.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/api/console.php b/app/controllers/api/console.php index 49994e4704..eb070f9f16 100644 --- a/app/controllers/api/console.php +++ b/app/controllers/api/console.php @@ -58,7 +58,7 @@ App::post('/v1/console/assistant') $query = json_encode(['prompt' => $query]); $headers = ['accept: text/event-stream', 'authorization: ' . APP::getEnv('ASSISTANT_SECRET')]; - $handleEvent = function($ch, $data) use ($response) { + $handleEvent = function ($ch, $data) use ($response) { $response->chunk($data); @@ -92,5 +92,4 @@ App::post('/v1/console/assistant') curl_close($ch); $response->chunk('', true); - }); From 64321cfb0bba6007c42c7c849d2d9b9bcd318711 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Fri, 4 Aug 2023 13:08:59 +0000 Subject: [PATCH 09/12] remove authorization --- .env | 3 +-- app/controllers/api/console.php | 8 ++++---- docker-compose.yml | 2 -- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/.env b/.env index 6af1940557..9970305e49 100644 --- a/.env +++ b/.env @@ -88,5 +88,4 @@ _APP_GRAPHQL_MAX_DEPTH=3 DOCKERHUB_PULL_USERNAME= DOCKERHUB_PULL_PASSWORD= DOCKERHUB_PULL_EMAIL= -OPENAI_API_KEY=YOUR_OPENAI_API_KEY -ASSISTANT_SECRET=your-secret-key \ No newline at end of file +OPENAI_API_KEY=YOUR_OPENAI_API_KEY \ No newline at end of file diff --git a/app/controllers/api/console.php b/app/controllers/api/console.php index eb070f9f16..9b6be8ea8a 100644 --- a/app/controllers/api/console.php +++ b/app/controllers/api/console.php @@ -45,6 +45,7 @@ App::post('/v1/console/assistant') ->desc('Ask Query') ->groups(['api', 'assistant']) ->label('scope', 'public') + ->label('sdk.auth', [APP_AUTH_TYPE_SESSION]) ->label('sdk.namespace', 'assistant') ->label('sdk.method', 'chat') ->label('sdk.description', '/docs/references/assistant/chat.md') @@ -52,14 +53,13 @@ App::post('/v1/console/assistant') ->label('sdk.response.type', Response::CONTENT_TYPE_TEXT) ->param('query', '', new Text(2000), 'Query') ->inject('response') - ->action(function (string $query, Response $response) { + ->inject('user') + ->action(function (string $query, Response $response, Document $user) { $ch = curl_init('http://appwrite-assistant:3003/'); $responseHeaders = []; $query = json_encode(['prompt' => $query]); - - $headers = ['accept: text/event-stream', 'authorization: ' . APP::getEnv('ASSISTANT_SECRET')]; + $headers = ['accept: text/event-stream']; $handleEvent = function ($ch, $data) use ($response) { - $response->chunk($data); return \strlen($data); diff --git a/docker-compose.yml b/docker-compose.yml index 64cfe1a8bf..f72458560f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -178,7 +178,6 @@ services: - _APP_GRAPHQL_MAX_BATCH_SIZE - _APP_GRAPHQL_MAX_COMPLEXITY - _APP_GRAPHQL_MAX_DEPTH - - ASSISTANT_SECRET appwrite-realtime: entrypoint: realtime @@ -668,7 +667,6 @@ services: - appwrite environment: - OPENAI_API_KEY - - ASSISTANT_SECRET mariadb: From cd18853fedaf94fac50f01f36c8b5de17d9561f2 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Fri, 4 Aug 2023 13:16:57 +0000 Subject: [PATCH 10/12] add abuse labels --- app/controllers/api/console.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/api/console.php b/app/controllers/api/console.php index 9b6be8ea8a..3c3e2757aa 100644 --- a/app/controllers/api/console.php +++ b/app/controllers/api/console.php @@ -51,6 +51,8 @@ App::post('/v1/console/assistant') ->label('sdk.description', '/docs/references/assistant/chat.md') ->label('sdk.response.code', Response::STATUS_CODE_OK) ->label('sdk.response.type', Response::CONTENT_TYPE_TEXT) + ->label('abuse-limit', 15) + ->label('abuse-key', 'userId:{userId}') ->param('query', '', new Text(2000), 'Query') ->inject('response') ->inject('user') From 767a3caef848118cff53825520d15cd3ea1e0dd7 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Fri, 4 Aug 2023 13:17:23 +0000 Subject: [PATCH 11/12] remove unused injection --- app/controllers/api/console.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/api/console.php b/app/controllers/api/console.php index 3c3e2757aa..f2ea83af58 100644 --- a/app/controllers/api/console.php +++ b/app/controllers/api/console.php @@ -55,8 +55,7 @@ App::post('/v1/console/assistant') ->label('abuse-key', 'userId:{userId}') ->param('query', '', new Text(2000), 'Query') ->inject('response') - ->inject('user') - ->action(function (string $query, Response $response, Document $user) { + ->action(function (string $query, Response $response) { $ch = curl_init('http://appwrite-assistant:3003/'); $responseHeaders = []; $query = json_encode(['prompt' => $query]); From 72ebccfd7f9e352aab6738cc9c3971523dcf433b Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Mon, 7 Aug 2023 07:55:24 +0000 Subject: [PATCH 12/12] update assistant --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index f72458560f..47c45a4823 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -662,7 +662,7 @@ services: appwrite-assistant: container_name: appwrite-assistant - image: dlohani/appwrite_ask + image: appwrite/assistant:0.1.0 networks: - appwrite environment: