1
0
Fork 0
mirror of synced 2024-07-04 22:20:45 +12:00
appwrite/app/controllers/api/console.php

111 lines
4.1 KiB
PHP
Raw Normal View History

2023-04-01 04:14:59 +13:00
<?php
use Appwrite\Extend\Exception;
use Appwrite\Utopia\Response;
use Utopia\App;
use Utopia\Database\Document;
use Utopia\Validator\Text;
2023-04-01 04:14:59 +13:00
App::init()
->groups(['console'])
2023-04-01 09:48:34 +13:00
->inject('project')
2023-04-01 04:14:59 +13:00
->action(function (Document $project) {
if ($project->getId() !== 'console') {
throw new Exception(Exception::GENERAL_ACCESS_FORBIDDEN);
}
});
App::get('/v1/console/variables')
2023-08-02 03:26:48 +12:00
->desc('Get variables')
2023-04-01 04:14:59 +13:00
->groups(['api', 'projects'])
->label('scope', 'projects.read')
2023-04-01 04:17:30 +13:00
->label('sdk.auth', [APP_AUTH_TYPE_ADMIN])
2023-04-01 04:14:59 +13:00
->label('sdk.namespace', 'console')
->label('sdk.method', 'variables')
->label('sdk.description', '/docs/references/console/variables.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)
->inject('response')
->action(function (Response $response) {
2023-08-29 02:08:50 +12:00
$isDomainEnabled = !empty(App::getEnv('_APP_DOMAIN', ''))
&& !empty(App::getEnv('_APP_DOMAIN_TARGET', ''))
&& App::getEnv('_APP_DOMAIN', '') !== 'localhost'
&& App::getEnv('_APP_DOMAIN_TARGET', '') !== 'localhost';
2023-04-01 04:14:59 +13:00
2023-08-23 13:35:00 +12:00
$isVcsEnabled = !empty(App::getEnv('_APP_VCS_GITHUB_APP_NAME', ''))
&& !empty(App::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY', ''))
&& !empty(App::getEnv('_APP_VCS_GITHUB_APP_ID', ''))
&& !empty(App::getEnv('_APP_VCS_GITHUB_CLIENT_ID', ''))
&& !empty(App::getEnv('_APP_VCS_GITHUB_CLIENT_SECRET', ''));
2023-08-20 20:10:42 +12:00
$isAssistantEnabled = !empty(App::getEnv('_APP_ASSISTANT_OPENAI_API_KEY', ''));
2023-04-01 04:14:59 +13:00
$variables = new Document([
'_APP_DOMAIN_TARGET' => App::getEnv('_APP_DOMAIN_TARGET'),
'_APP_STORAGE_LIMIT' => +App::getEnv('_APP_STORAGE_LIMIT'),
'_APP_FUNCTIONS_SIZE_LIMIT' => +App::getEnv('_APP_FUNCTIONS_SIZE_LIMIT'),
'_APP_USAGE_STATS' => App::getEnv('_APP_USAGE_STATS'),
2023-08-20 20:10:42 +12:00
'_APP_VCS_ENABLED' => $isVcsEnabled,
2023-08-29 02:08:50 +12:00
'_APP_DOMAIN_ENABLED' => $isDomainEnabled,
2023-08-20 20:10:42 +12:00
'_APP_ASSISTANT_ENABLED' => $isAssistantEnabled
2023-04-01 04:14:59 +13:00
]);
$response->dynamic($variables, Response::MODEL_CONSOLE_VARIABLES);
});
App::post('/v1/console/assistant')
->desc('Ask Query')
->groups(['api', 'assistant'])
2023-08-31 06:44:33 +12:00
->label('scope', 'assistant.read')
2023-08-30 21:19:55 +12:00
->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_TEXT)
2023-08-05 01:16:57 +12:00
->label('abuse-limit', 15)
->label('abuse-key', 'userId:{userId}')
->param('prompt', '', new Text(2000), 'Prompt. A string containing questions asked to the AI assistant.')
->inject('response')
2023-08-11 21:19:05 +12:00
->action(function (string $prompt, Response $response) {
$ch = curl_init('http://appwrite-assistant:3003/');
$responseHeaders = [];
2023-08-11 21:19:05 +12:00
$query = json_encode(['prompt' => $prompt]);
2023-08-05 01:08:59 +12:00
$headers = ['accept: text/event-stream'];
2023-08-04 14:17:02 +12:00
$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);
});