This add-on provides helper functions for working with ChatGPT.
It allows you to set an API key for add-ons that work with ChatGPT and avoid loading duplicate dependencies.
Developer usage guide
Get the OpenAI API key
PHP:
<span>$apiKey</span> <span>=</span> \<span>XF</span><span>:</span><span>:</span><span>options</span><span>(</span><span>)</span><span>-</span><span>></span><span>bsChatGptApiKey</span><span>;</span>
Get OpenAI API
Code:
<span>/** \Orhanerday\OpenAi\OpenAi $api */</span><br><span>$api</span> <span>=</span> \<span>XF</span><span>:</span><span>:</span><span>app</span><span>(</span><span>)</span><span>-</span><span>></span><span>container</span><span>(</span><span>'chatGPT'</span><span>)</span><span>;</span>
Get reply from ChatGPT
PHP:
<span>use</span> <span>BS<span>\</span>ChatGPTBots<span>\</span>Response</span><span>;</span><br><br><span>/** \Orhanerday\OpenAi\OpenAi $api */</span><br><span>$api</span> <span>=</span> \<span>XF</span><span>:</span><span>:</span><span>app</span><span>(</span><span>)</span><span>-</span><span>></span><span>container</span><span>(</span><span>'chatGPT'</span><span>)</span><span>;</span><br><br><span>$messages</span> <span>=</span> <span>[</span><br><span>[</span><span>'role'</span> <span>=</span><span>></span> <span>'user'</span><span>,</span> <span>'content'</span> <span>=</span><span>></span> <span>'Hello!'</span><span>]</span><br><span>]</span><span>;</span><br><span>$reply</span> <span>=</span> Response<span>:</span><span>:</span><span>getReply</span><span>(</span><br><span>$api</span><span>-</span><span>></span><span>chat</span><span>(</span><span>[</span><br><span>'model'</span> <span>=</span><span>></span> <span>'gpt-3.5-turbo'</span><span>,</span><br><span>'messages'</span> <span>=</span><span>></span> <span>$messages</span><span>,</span><br><span>'temperature'</span> <span>=</span><span>></span> <span>1.0</span><span>,</span><br><span>'max_tokens'</span> <span>=</span><span>></span> <span>420</span><span>,</span><br><span>'frequency_penalty'</span> <span>=</span><span>></span> <span>0</span><span>,</span><br><span>'presence_penalty'</span> <span>=</span><span>></span> <span>0</span><span>,</span><br> <span>]</span><span>)</span><br><span>)</span><span>;</span>
Message repository
fetchMessagesFromThread – Loads the context for the bot from the topic. Bot quotes are transformed into his messages for the correct context.
PHP:
<span>public</span> <span>function</span> <span>fetchMessagesFromThread</span><span>(</span><br>Thread <span>$thread</span><span>,</span><br>int <span>$stopPosition</span> <span>=</span> <span>null</span><span>,</span> <span>// Thread post position to which to load the context</span><br><span>?</span>User <span>$assistant</span> <span>=</span> <span>null</span><span>,</span> <span>// Bot user to mark his messages in context</span><br>bool <span>$transformAssistantQuotesToMessages</span> <span>=</span> <span>true</span><span>,</span> <span>// If false, bot message quote messages will not be transformed into his messages</span><br>int <span>$startPosition</span> <span>=</span> <span>null</span><span>,</span> <span>// Thread post position from which to load the context</span><br>bool <span>$removeQuotesFromAssistantMessages</span> <span>=</span> <span>true</span> <span>// Removes user post quotes from bot posts</span><br><span>)</span>
wrapMessage – Generates a message array, preparing content for the bot (removes unnecessary BB codes).
PHP:
<span>public</span> <span>function</span> <span>wrapMessage</span><span>(</span>string <span>$content</span><span>,</span> string <span>$role</span> <span>=</span> <span>'user'</span><span>)</span><span>:</span> <span>array</span><br> <br><span>/*<br>returns [<br> 'content' => $preparedContent,<br> 'role' => $role<br>]<br>*/</span>
prepareContent – Prepare message content for the bot (removes unnecessary BB codes).
getQuotes – Parses quotes from the text, bringing it to a convenient form.
PHP:
<span>public</span> <span>function</span> <span>getQuotes</span><span>(</span><br>string <span>$text</span><span>,</span><br>int <span>$userId</span> <span>=</span> <span>null</span><span>,</span> <span>// filter quotes by user id</span><br>int <span>$postId</span> <span>=</span> <span>null</span><span>,</span> <span>// filter quotes by post id</span><br>string <span>$postType</span> <span>=</span> <span>'post'</span> <span>// post type in quotes</span><br><span>)</span><span>:</span> <span>array</span><br><span>/*<br>returns [<br> [<br> 'post_id' => int|null,<br> 'user_id' => int|null,<br> 'content' => string|null, (quote content)<br> 'message' => string|null, (reply on quote, text which located below quote)<br> 'match' => string (full quote match)<br> ]<br>]<br>*/</span>
removeQuotes – Remove quotes from the text. Can be remove quotes for specific posts or users.
PHP:
<span>public</span> <span>function</span> <span>removeQuotes</span><span>(</span><br>string <span>$text</span><span>,</span><br>int <span>$userId</span> <span>=</span> <span>null</span><span>,</span><br>int <span>$postId</span> <span>=</span> <span>null</span><span>,</span><br>string <span>$postType</span> <span>=</span> <span>'post'</span><br><span>)</span><span>:</span> string
Attachments