Skip to content

Commit

Permalink
chore: update token_limiter
Browse files Browse the repository at this point in the history
  • Loading branch information
PandorasActorMS committed Sep 17, 2024
1 parent 7be786b commit 87fd0d9
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 33 deletions.
86 changes: 53 additions & 33 deletions private/app/php/stream-api.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,9 @@
$requestPayload = json_decode($requestPayload, true);
$requestPayload['stream_options']['include_usage'] = true;
$requestPayload = json_encode($requestPayload);
//if environment variable = true
check_token_limit();
if ((isset($env) ? strtolower($env['TOKEN_DB']) : strtolower(getenv('TOKEN_DB'))) == "true") {
check_token_limit();
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
Expand All @@ -54,7 +55,10 @@
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $data) {
get_tokens($data);
if (strtolower(isset($env) ? $env['TOKEN_DB'] : getenv('TOKEN_DB')) == "true") {
get_tokens($data);
}

echo $data;
if (ob_get_level() > 0) {
ob_flush();
Expand All @@ -73,65 +77,70 @@


function get_tokens($data){
$pattern = '/"usage":\{"prompt_tokens":[0-9]+,"completion_tokens":[0-9]+,"total_tokens":[0-9]+\}/';
if (preg_match_all($pattern, $data, $matches)) {
$last_match = end($matches[0]);
$numberpattern = '/[0-9]+/';
if (preg_match_all($numberpattern, $last_match, $numbers)){

$prompt_tokens = $numbers[0][0];
$completion_tokens = $numbers[0][1];
$total_tokens = $numbers[0][2];

$host = getenv("DB_HOST");
$db = getenv("DB_DB");
$table = getenv('DB_TABLE');
$user = getenv("DB_USER");
$pass = getenv("DB_PASS");
$port = getenv("DB_PORT");
$dsn = "pgsql:host=$host;port=$port;dbname=$db";
$jsonstrings= explode("data: ", $data);
foreach ($jsonstrings as &$jsonstring) {
$json = json_decode($jsonstring, true);
if (!isset($json) || $json['usage'] == null) {
continue;
}

$prompt_tokens = $json['usage']['prompt_tokens'];
$completion_tokens = $json['usage']['completion_tokens'];
$total_tokens = $json['usage']['total_tokens'];

$host = getenv("DB_HOST");
$db = getenv("DB_DB");
$table = getenv('DB_TABLE');
$user = getenv("DB_USER");
$pass = getenv("DB_PASS");
$port = getenv("DB_PORT");
$dsn = "pgsql:host=$host;port=$port;dbname=$db";
try{
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO $table (username,datum,prompt_tokens,completion_tokens,total_tokens) VALUES(:username,:datum,:prompt,:completion,:total) ON CONFLICT (username,datum) DO UPDATE SET prompt_tokens = $table.prompt_tokens + EXCLUDED.prompt_tokens, completion_tokens = $table.completion_tokens + EXCLUDED.completion_tokens, total_tokens = $table.total_tokens + EXCLUDED.total_tokens;";
$sql = "INSERT INTO $table (username,datum,prompt_tokens,completion_tokens,total_tokens,model) VALUES(:username,:datum,:prompt,:completion,:total,:model) ON CONFLICT (username,datum,model) DO UPDATE SET prompt_tokens = $table.prompt_tokens + EXCLUDED.prompt_tokens, completion_tokens = $table.completion_tokens + EXCLUDED.completion_tokens, total_tokens = $table.total_tokens + EXCLUDED.total_tokens, model = $table.model;";
$stmt=$pdo->prepare($sql);

$stmt->bindParam(':username',$username);
$stmt->bindParam(':datum',$datum);
$stmt->bindParam(':prompt',$prompt);
$stmt->bindParam(':completion',$completion);
$stmt->bindParam(':total',$total);
$stmt->bindParam(':model',$model);

$username = $_SESSION['username'];
$datum = date("Y-m-d");
$prompt = $prompt_tokens;
$completion = $completion_tokens;
$total = $total_tokens;
global $requestPayload;
$model = json_decode($requestPayload, true)['model'];
$stmt->execute();

} catch (PDOException $e) {
error_log($e->getMessage(),0);
}
}

}
}
unset($jsonstring);
}

function check_token_limit(){
$max_tokens = getenv("TOKEN_LIMIT");
if ($max_tokens <= 0) {
return;
}

$host = getenv("DB_HOST");
$db = getenv("DB_DB");
$table = getenv('DB_TABLE');
$user = getenv("DB_USER");
$pass = getenv("DB_PASS");
$port = getenv("DB_PORT");
$dsn = "pgsql:host=$host;port=$port;dbname=$db";
$max_tokens = //environment variable


try {
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// TODO: change query; last 3days
$sql = "SELECT total_tokens FROM $table WHERE username = :username AND datum = :datum";
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT SUM(total_tokens) AS total_tokens FROM $table WHERE datum >= (:datum ::date - INTERVAL '2 day')::date AND username = :username GROUP BY username;";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':username', $username);
$stmt->bindParam(':datum', $datum);
Expand All @@ -141,13 +150,24 @@ function check_token_limit(){
$result = $stmt->fetch(PDO::FETCH_ASSOC);

if ($result && $result['total_tokens'] >= $max_tokens) {
error_log("Fehlermeldung: Die Gesamtzahl der Tokens überschreitet.");
$message = $_SESSION['translation']['tokenUsedMessage'];
$response = [
'error' => true,
'choices' => [['delta' => ['content' => $message]]]
];

echo "data: " . json_encode($response) . "\n\n";

if (ob_get_level() > 0) {
ob_flush();
}
flush();

exit;
}
} catch (PDOException $e) {
error_log($e->getMessage());
exit;
}


}
1 change: 1 addition & 0 deletions private/resources/language/de_DE.json
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@
"tableExpertiseMessage": "You are a helpful assistant working at a university in Germany and you are an expert in the field of organisation.",
"theme": "Theme",
"timeManagementAssistanceRequest": "Ich suche nach Unterstützung beim Zeitmanagement. Ich habe Schwierigkeiten, meine Zeit effektiv zu nutzen und meine Aufgaben in angemessener Zeit zu erledigen. Ich bin mir nicht sicher, wie ich meine Zeit besser organisieren kann, um meine Ziele zu erreichen und Stress zu vermeiden. Könntest du mir bitte helfen, meine aktuelle Zeitnutzung zu bewerten und mir Ratschläge und Tipps zur Verbesserung meines Zeitmanagements geben? Ich suche auch nach Strategien, um meine Prioritäten zu setzen und meine Zeit besser zu planen, um meine Produktivität zu steigern und meine Ziele zu erreichen.",
"tokenUsedMessage": "Sie haben alle ihre Token aufgebraucht.",
"unableToSaveRegistration": "<b>Ihre Anmeldung konnte nicht gespeichert werden.<br>Bitte versuchen Sie es erneut.</b>",
"usageNoticeTitle": "Nutzungshinweis",
"usage_guideline": "<p>Willkommen zum Leitfaden für den Umgang mit HM-KI, das auf der OpenAI API basiert. Dieser Leitfaden soll allen Hochschulangehörigen - Studierenden, Lehrenden und Mitarbeitenden - eine klare Richtlinie bieten, wie mit dieser Technologie verantwortungsbewusst umgegangen werden soll. Bitte beachten Sie, dass dieser Leitfaden die Nutzungsbedingungen von OpenAI ergänzt und keinen Anspruch auf Vollständigkeit erhebt. Es liegt in der Verantwortung der Nutzerinnen und Nutzer, die Nutzungsbedingungen einzuhalten.</p><h3>Allgemeine Bestimmungen</h3><p><b>Was verboten ist:</b></p><ul><li>Eingabe personenbezogener Daten über sich selbst oder über andere.</li><li>Nutzung der Dienste für illegale, schädliche oder missbräuchliche Aktivitäten.</li><li>Verletzung, Missbrauch oder Verstoß gegen die Rechte anderer.</li><li>Modifikation, Kopie, Vermietung, Verkauf oder Verteilung unserer Dienste.</li><li>Versuch der Rückentwicklung, Dekompilierung oder des Herausfindens von Quellcode oder zugrundeliegenden Komponenten.</li><li>Automatisches oder programmgesteuertes Extrahieren von Daten oder Output.</li><li>Behauptung, dass der Output von Menschen erstellt wurde, wenn dies nicht der Fall ist.</li><li>Beeinträchtigung oder Störung der Dienste oder Umgehung von Schutzmaßnahmen.</li><li>Verwendung von Output zur Entwicklung konkurrierender Modelle.</li></ul><p><b>Was zu beachten ist:</b></p><p>Sie sind verantwortlich für den von Ihnen bereitgestellten Input und den daraus resultierenden Output. Sie müssen sicherstellen, dass Ihr Input keine Rechte verletzt und dass Sie über alle notwendigen Rechte, Lizenzen und Genehmigungen für die Bereitstellung des Inputs verfügen.</p><b>Genauigkeit:</b><p>Die Nutzung der Dienste kann zu ungenauem oder fehlerhaftem Output führen. Es ist wichtig, dass Sie den Output kritisch prüfen und nicht als alleinige Quelle der Wahrheit verwenden.Ihre Eingaben werden nicht von der HM, aber von OpenAI für 30 Tage gespeichert, um einen eventuellen Missbrauch festzustellen. Nach 30 Tagen werden die Daten gelöscht. Ihre Eingaben werden nicht verwendet, um das Produkt sicherer oder besser zu machen.</p><h3>Spezifische Bestimmungen</h3><p><b>Für Studierende:</b></p><ul><li>Verwenden Sie HM-KI zur Unterstützung Ihres Lernprozesses, aber verlassen Sie sich nicht ausschließlich auf die generierten Antworten.</li><li>Teilen Sie keine persönlichen Daten oder Informationen über HM-KI. Auch nicht die personenbezogenen Daten anderer.</li><li>Sie übernehmen die Autorenschaft. Damit bürgen Sie für die Qualität der Antwort und übernehmen die Verantwortung für den Inhalt. Die Nutzung von KI und die Art ihres Beitrags sollte klargelegt werden.</li></ul> <p><b>Für Lehrende:</b></p><ul><li>HM-KI darf nicht verwendet werden, um studentische Arbeiten zu korrigieren, wenn diese Arbeiten persönliche Daten enthalten, die extrahierbar sind.</li><li>Nutzen Sie HM-KI als ergänzendes Werkzeug zur Vorbereitung von Lehrmaterialien, aber stellen Sie sicher, dass alle Inhalte auf ihre Richtigkeit und Relevanz überprüft werden.</li></ul><p><b>Für Mitarbeitende:</b></p><ul><li>Es ist strengstens untersagt, Geheimhaltungsverträge oder intern bestimmte Dokumente in HM-KI einzugeben. Auch keine Dokumente, die personenbezogene Daten über sich selbst oder über andere enthalten.</li><li>Nutzen Sie MH-KI zur Effizienzsteigerung und Unterstützung Ihrer täglichen Aufgaben, jedoch unter Beachtung der Datenschutzrichtlinien und Sicherheitsvorschriften der Hochschule. </li></ul><p>Dieser Leitfaden dient als Orientierungshilfe für den verantwortungsbewussten Umgang mit HM-KI. Es ist wichtig, dass alle Nutzer*innen die genannten Bestimmungen verstehen und befolgen, um einen sicheren und ethischen Einsatz dieser Technologie zu gewährleisten. Die Hochschule kann diesen Service nur anbieten, wenn Sie keine persönlichen Daten eingeben. Ungeachtet dieses Leitfadens gelten die <a class=\"accentText\" target=\"_blank\" href=\"https://openai.com/policies/business-terms\"><b>Nutzungsbedingungen von OpenAI</b>.</a></p>",
Expand Down
1 change: 1 addition & 0 deletions private/resources/language/en_US.json
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@
"tableExpertiseMessage": "You are a helpful assistant working at a university in Germany and you are an expert in the field of organisation.",
"theme": "Theme",
"timeManagementAssistanceRequest": "I am looking for support with time management. I struggle to use my time effectively and complete my tasks in a timely manner. I am not sure how I can better organize my time to achieve my goals and avoid stress. Could you please help me assess my current time usage and provide me with advice and tips for improving my time management? I am also looking for strategies to set my priorities and plan my time better in order to increase my productivity and reach my goals.",
"tokenUsedMessage": "You have used up all your tokens.",
"unableToSaveRegistration": "<b>Your registration could not be saved.<br>Please try again.</b>",
"usageNoticeTitle": "Usage Notice",
"usage_guideline": "<p>Welcome to the guide for using HM_AI, which is based on the OpenAI API. This guide is intended for all university affiliates - students, teachers, and staff - to provide a clear guideline on how to handle this technology responsibly. Please note that this guide supplements the terms of use of OpenAI and does not claim to be exhaustive. It is the users' responsibility to comply with these terms.</p><h3>General Provisions</h3><p><b>What is prohibited:</b></p><ul><li>Entering personal data about oneself or others.</li><li>Using the services for illegal, harmful, or abusive activities.</li><li>Infringement, abuse, or violation of others' rights.</li><li>Modification, copying, renting, selling, or distributing our services.</li><li>Attempt at reverse engineering, decompiling, or discovering source code or underlying components.</li><li>Automatic or programmed extraction of data or output.</li><li>Claiming that the output was created by humans when it was not.</li><li>Interfering with or disrupting the services or circumventing protective measures.</li><li>Using the output to develop competing models.</li></ul><p><b>What to consider:</b></p><p>You are responsible for the input you provide and the resulting output. You must ensure that your input does not infringe any rights and that you have all necessary rights, licenses, and permissions to provide it.</p><b>Accuracy:</b><p>Using the services can lead to inaccurate or incorrect output. It is important that you critically examine the output and not use it as the sole source of truth. Your inputs are not stored by HAWK, but by OpenAI for 30 days to detect any misuse. After 30 days, the data is deleted. Your inputs are not used to improve the product's safety or quality.</p><h3>Specific Provisions</h3><p><b>For students:</b></p><ul><li>Use HM-AI to support your learning process, but do not rely solely on the generated answers.</li><li>Do not share personal data or information through HM-AI. Not even others' personal data.</li><li>You take on authorship. This means you vouch for the quality of the answer and take responsibility for the content. The use of AI and the nature of its contribution should be clarified.</li></ul><p><b>For teachers:</b></p><ul><li>It is prohibited to use HM-AI to correct student papers if they contain personal data that can be extracted.</li><li>Use HM-AI as a supplementary tool to prepare teaching materials, but make sure all content is checked for accuracy and relevance.</li></ul><p><b>For staff:</b></p><ul><li>It is strictly prohibited to enter confidentiality agreements or internally specified documents into HM-AI. As well as documents containing personal data about oneself or others.</li><li>Use HM-AI to increase efficiency and support your daily tasks, while observing the university's privacy policies and security regulations.</li></ul><p>This guide serves as an orientation aid for the responsible handling of HM-AI. It is important that all users understand and follow these provisions to ensure safe and ethical use of this technology. The university can only offer this service if you do not enter personal data. Regardless of this guide, the <a class=\"accentText\" target=\"_blank\" href=\"https://openai.com/policies/business-terms\"><b>OpenAI Terms of Use</b></a> apply.</p>",
Expand Down

0 comments on commit 87fd0d9

Please sign in to comment.