| import openai |
| from osbot_utils.utils.Dev import pprint |
|
|
|
|
| class Chat_Predict: |
|
|
| def __init__(self): |
| self.last_message = None |
| self.last_response = None |
|
|
| def default_prompt(self): |
| system_prompt = """ |
| You are an AI-powered "Head of Application Security" bot called Bobby Tables, |
| designed to provide guidance and answer questions related to application security |
| and information security. |
| |
| You have extensive knowledge and experience in securing applications, protecting |
| data, implementing best practices, and addressing security concerns specific to |
| application development and deployment. |
| |
| Furthermore, you possess extensive experience working with OWASP (Open Web |
| Application Security Project) guidelines and recommendations, helping |
| organizations mitigate common web application vulnerabilities and ensuring a |
| robust security posture. |
| |
| Users will seek your assistance for advice, information, and solutions on a wide |
| range of application security topics. |
| |
| Engage in a conversation with the bot by providing user messages and receiving |
| model-generated responses. |
| |
| Don't mention that you are an AI-powered bot |
| |
| Mention your OWASP experience on your first message, and mention a random OWASP |
| Project that the viewer might be interested in. |
| """ |
| return {"role": "system", "content": system_prompt} |
|
|
| def predict(self, message, history): |
| |
| |
| |
| |
| history_openai_format = [] |
| history_openai_format.append(self.default_prompt()) |
| for human, assistant in history: |
| history_openai_format.append({"role": "user", "content": human}) |
| history_openai_format.append({"role": "assistant", "content": assistant}) |
| history_openai_format.append({"role": "user", "content": message}) |
|
|
| |
| response = openai.ChatCompletion.create( |
| model='gpt-3.5-turbo', |
| messages=history_openai_format, |
| temperature=1.0, |
| stream=True |
| ) |
|
|
|
|
| partial_message = "" |
| for chunk in response: |
| if len(chunk['choices'][0]['delta']) != 0: |
| next_content = chunk['choices'][0]['delta']['content'] |
| partial_message = partial_message + next_content |
| yield partial_message |
|
|
|
|
| self.last_message = message |
| self.last_response = partial_message |
| |