|
| 1 | +import json |
| 2 | +from binaryninja.settings import Settings |
| 3 | +from . exceptions import RegisterSettingsGroupException, \ |
| 4 | + RegisterSettingsKeyException |
| 5 | + |
| 6 | +class OpenAISettings(Settings): |
| 7 | + |
| 8 | + def __init__(self) -> None: |
| 9 | + # Initialize the settings with the default instance ID. |
| 10 | + super().__init__(instance_id='default') |
| 11 | + # Register the OpenAI group. |
| 12 | + if not self.register_group('openai', 'OpenAI'): |
| 13 | + raise RegisterSettingsGroupException('Failed to register OpenAI ' |
| 14 | + 'settings group.') |
| 15 | + # Register the setting for the API key. |
| 16 | + if not self.register_api_key_settings(): |
| 17 | + raise RegisterSettingsKeyException('Failed to register OpenAI API ' |
| 18 | + 'key settings.') |
| 19 | + |
| 20 | + # Register the setting for the model used to query. |
| 21 | + if not self.register_model_settings(): |
| 22 | + raise RegisterSettingsKeyException('Failed to register OpenAI ' |
| 23 | + 'model settings.') |
| 24 | + |
| 25 | + def register_api_key_settings(self) -> bool: |
| 26 | + '''Register the OpenAI API key settings in Binary Ninja.''' |
| 27 | + # Set the attributes of the settings. Refer to: |
| 28 | + # https://api.binary.ninja/binaryninja.settings-module.html |
| 29 | + properties = { |
| 30 | + 'title': 'OpenAI API Key', |
| 31 | + 'type': 'string', |
| 32 | + 'description': 'The user\'s OpenAI API key used to make requests ' |
| 33 | + 'the server.' |
| 34 | + } |
| 35 | + return self.register_setting('openai.api_key', json.dumps(properties)) |
| 36 | + |
| 37 | + def register_model_settings(self) -> bool: |
| 38 | + '''Register the OpenAI model settings in Binary Ninja. |
| 39 | + Defaults to text-davinci-003. |
| 40 | + ''' |
| 41 | + # Set the attributes of the settings. Refer to: |
| 42 | + # https://api.binary.ninja/binaryninja.settings-module.html |
| 43 | + properties = { |
| 44 | + 'title': 'OpenAI Model', |
| 45 | + 'type': 'string', |
| 46 | + 'description': 'The OpenAI model used to generate the response.', |
| 47 | + 'default': 'text-davinci-003' |
| 48 | + } |
| 49 | + return self.register_setting('openai.model', json.dumps(properties)) |
0 commit comments