forked from unconv/chat-wtf
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmessage.php
More file actions
92 lines (71 loc) · 2.2 KB
/
message.php
File metadata and controls
92 lines (71 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
header( "Cache-Control: no-cache" );
if( ob_get_level() ) ob_end_clean();
$settings = require( __DIR__ . "/settings.php" );
require( __DIR__ . "/database.php" );
require( __DIR__ . "/autoload.php" );
$db = get_db();
$conversation_class = get_conversation_class( $db );
// get chat history from session
$chat_id = intval( $_REQUEST['chat_id'] );
$conversation = $conversation_class->find( $chat_id, $db );
if( ! $conversation ) {
$conversation = new $conversation_class( $db );
$conversation->set_title( "Untitled chat" );
$conversation->save();
}
$context = $conversation->get_messages();
if( empty( $context ) && ! empty( $settings['system_message'] ) ) {
$system_message = [
"role" => "system",
"content" => $settings['system_message'],
];
$context[] = $system_message;
$conversation->add_message( $system_message );
}
if( isset( $_POST['message'] ) ) {
$message = [
"role" => "user",
"content" => $_POST['message'],
];
$conversation->add_message( $message );
echo $conversation->get_id();
exit;
}
header( "Content-type: text/event-stream" );
$error = null;
// create a new completion
try {
$chatgpt = new ChatGPT( $settings['api_key'] );
if( isset( $settings['model'] ) ) {
$chatgpt->set_model( $settings['model'] );
}
foreach( $context as $message ) {
switch( $message['role'] ) {
case "user":
$chatgpt->umessage( $message['content'] );
break;
case "assistant":
$chatgpt->amessage( $message['content'] );
break;
case "system":
$chatgpt->smessage( $message['content'] );
break;
}
}
$response_text = $chatgpt->stream( StreamType::Event )->content;
} catch ( Exception $e ) {
$error = "Sorry, there was an unknown error in the OpenAI request";
}
if( $error !== null ) {
$response_text = $error;
echo "data: " . json_encode( ["content" => $error] ) . "\n\n";
flush();
}
$assistant_message = [
"role" => "assistant",
"content" => $response_text,
];
$conversation->add_message( $assistant_message );
echo "event: stop\n";
echo "data: stopped\n\n";