125 lines
4.1 KiB
Python
125 lines
4.1 KiB
Python
###
|
|
# Copyright (c) 2023, John Burwell
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are met:
|
|
#
|
|
# * Redistributions of source code must retain the above copyright notice,
|
|
# this list of conditions, and the following disclaimer.
|
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
|
# this list of conditions, and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
# * Neither the name of the author of this software nor the name of
|
|
# contributors to this software may be used to endorse or promote products
|
|
# derived from this software without specific prior written consent.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
# POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
###
|
|
|
|
from supybot import conf, registry
|
|
try:
|
|
from supybot.i18n import PluginInternationalization
|
|
_ = PluginInternationalization('Chat')
|
|
except ImportError:
|
|
# Placeholder that allows the plugin to run without the i18n module
|
|
_ = lambda x: x
|
|
|
|
|
|
def configure(advanced):
|
|
# This will be called by supybot to configure this module. advanced is
|
|
# a bool that specifies whether the user identified themself as an advanced
|
|
# user or not. You should effect your configuration by manipulating the
|
|
# registry as appropriate.
|
|
from supybot.questions import expect, anything, something, yn
|
|
conf.registerPlugin('Chat', True)
|
|
|
|
|
|
Chat = conf.registerPlugin('Chat')
|
|
|
|
# Configuration Parameters
|
|
|
|
# API key for OpenAI
|
|
conf.registerGlobalValue(
|
|
Chat,
|
|
"api_key",
|
|
registry.String(
|
|
"",
|
|
_("""Your ChatGPT API key. This must be set for the plugin to work."""),
|
|
private=True,
|
|
)
|
|
)
|
|
|
|
# Default model to use
|
|
conf.registerGlobalValue(
|
|
Chat,
|
|
"model",
|
|
registry.String(
|
|
"gpt-4",
|
|
_("""The OpenAI model to use for generating responses. Default is 'gpt-4'."""),
|
|
)
|
|
)
|
|
|
|
# Maximum tokens for responses
|
|
conf.registerGlobalValue(
|
|
Chat,
|
|
"max_tokens",
|
|
registry.Integer(
|
|
256,
|
|
_("""The maximum number of tokens to include in the response. Default is 256."""),
|
|
)
|
|
)
|
|
|
|
# System prompt for the assistant
|
|
conf.registerGlobalValue(
|
|
Chat,
|
|
"system_prompt",
|
|
registry.String(
|
|
"You are an IRC bot participating in a channel conversation. Keep your responses brief, informal, and conversational. Avoid overly technical language unless asked, and ensure your tone matches the casual nature of IRC discussions.",
|
|
_("""The system prompt to guide the assistant's behavior. Default provides context about being an IRC bot and guidance on interaction style."""),
|
|
)
|
|
)
|
|
|
|
# Number of lines to include from scrollback
|
|
conf.registerGlobalValue(
|
|
Chat,
|
|
"scrollback_lines",
|
|
registry.Integer(
|
|
10,
|
|
_("""The number of recent lines from the channel to include as context. Default is 10."""),
|
|
)
|
|
)
|
|
|
|
# String to join multi-line responses
|
|
conf.registerGlobalValue(
|
|
Chat,
|
|
"join_string",
|
|
registry.String(
|
|
" / ",
|
|
_("""The string used to join multi-line responses into a single line. Default is ' / '."""),
|
|
)
|
|
)
|
|
|
|
# Logging level for the plugin
|
|
conf.registerGlobalValue(
|
|
Chat,
|
|
'log_level',
|
|
registry.String(
|
|
'INFO',
|
|
_("""The logging level for the Chat plugin. Options: DEBUG, INFO, WARNING, ERROR, CRITICAL.""")
|
|
)
|
|
)
|
|
|
|
# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:
|