mirror of
https://github.com/aljazceru/chatgpt-telegram-bot.git
synced 2025-12-19 05:35:20 +01:00
56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
import json
|
|
|
|
from plugins.images import ImageSearchPlugin
|
|
from plugins.translate import TranslatePlugin
|
|
from plugins.spotify import SpotifyPlugin
|
|
from plugins.crypto import CryptoPlugin
|
|
from plugins.weather import WeatherPlugin
|
|
from plugins.web_search import WebSearchPlugin
|
|
from plugins.wolfram_alpha import WolframAlphaPlugin
|
|
|
|
|
|
class PluginManager:
|
|
"""
|
|
A class to manage the plugins and call the correct functions
|
|
"""
|
|
def __init__(self, config):
|
|
enabled_plugins = config.get('plugins', [])
|
|
plugin_mapping = {
|
|
'wolfram': WolframAlphaPlugin(),
|
|
'weather': WeatherPlugin(),
|
|
'crypto': CryptoPlugin(),
|
|
'web_search': WebSearchPlugin(),
|
|
'spotify': SpotifyPlugin(),
|
|
'translate': TranslatePlugin(),
|
|
'image_search': ImageSearchPlugin(),
|
|
}
|
|
self.plugins = [plugin_mapping[plugin] for plugin in enabled_plugins]
|
|
|
|
def get_functions_specs(self):
|
|
"""
|
|
Return the list of function specs that can be called by the model
|
|
"""
|
|
return [spec for specs in map(lambda plugin: plugin.get_spec(), self.plugins) for spec in specs]
|
|
|
|
async def call_function(self, function_name, arguments):
|
|
"""
|
|
Call a function based on the name and parameters provided
|
|
"""
|
|
plugin = self.__get_plugin_by_function_name(function_name)
|
|
if not plugin:
|
|
return json.dumps({'error': f'Function {function_name} not found'})
|
|
return json.dumps(await plugin.execute(function_name, **json.loads(arguments)))
|
|
|
|
def get_plugin_source_name(self, function_name) -> str:
|
|
"""
|
|
Return the source name of the plugin
|
|
"""
|
|
plugin = self.__get_plugin_by_function_name(function_name)
|
|
if not plugin:
|
|
return ''
|
|
return plugin.get_source_name()
|
|
|
|
def __get_plugin_by_function_name(self, function_name):
|
|
return next((plugin for plugin in self.plugins
|
|
if function_name in map(lambda spec: spec.get('name'), plugin.get_spec())), None)
|