Webscout / webscout /AIbase.py
Abhaykoul's picture
Upload 85 files
9e7090f verified
raw
history blame contribute delete
No virus
4.71 kB
from abc import ABC
from abc import abstractmethod
class Provider(ABC):
"""Base class for providers"""
@abstractmethod
def ask(
self,
prompt: str,
stream: bool = False,
raw: bool = False,
optimizer: str = None,
conversationally: bool = False,
) -> dict:
"""Chat with AI
Args:
prompt (str): Prompt to be sent
stream (bool, optional): Flag for streaming response. Defaults to False.
raw (bool, optional): Stream back raw response as received
optimizer (str, optional): Prompt optimizer name - `[code, shell_command]`
conversationally (bool, optional): Chat conversationally when using optimizer. Defaults to False.
Returns:
dict : {}
```json
{
"completion": "\nNext: domestic cat breeds with short hair >>",
"stop_reason": null,
"truncated": false,
"stop": null,
"model": "llama-2-13b-chat",
"log_id": "cmpl-3kYiYxSNDvgMShSzFooz6t",
"exception": null
}
```
"""
raise NotImplementedError("Method needs to be implemented in subclass")
@abstractmethod
def chat(
self,
prompt: str,
stream: bool = False,
optimizer: str = None,
conversationally: bool = False,
) -> str:
"""Generate response `str`
Args:
prompt (str): Prompt to be sent
stream (bool, optional): Flag for streaming response. Defaults to False.
optimizer (str, optional): Prompt optimizer name - `[code, shell_command]`
conversationally (bool, optional): Chat conversationally when using optimizer. Defaults to False.
Returns:
str: Response generated
"""
raise NotImplementedError("Method needs to be implemented in subclass")
@abstractmethod
def get_message(self, response: dict) -> str:
"""Retrieves message only from response
Args:
response (dict): Response generated by `self.ask`
Returns:
str: Message extracted
"""
raise NotImplementedError("Method needs to be implemented in subclass")
class AsyncProvider(ABC):
"""Asynchronous base class for providers"""
@abstractmethod
async def ask(
self,
prompt: str,
stream: bool = False,
raw: bool = False,
optimizer: str = None,
conversationally: bool = False,
) -> dict:
"""Asynchronously chat with AI
Args:
prompt (str): Prompt to be sent
stream (bool, optional): Flag for streaming response. Defaults to False.
raw (bool, optional): Stream back raw response as received
optimizer (str, optional): Prompt optimizer name - `[code, shell_command]`
conversationally (bool, optional): Chat conversationally when using optimizer. Defaults to False.
Returns:
dict : {}
```json
{
"completion": "\nNext: domestic cat breeds with short hair >>",
"stop_reason": null,
"truncated": false,
"stop": null,
"model": "llama-2-13b-chat",
"log_id": "cmpl-3kYiYxSNDvgMShSzFooz6t",
"exception": null
}
```
"""
raise NotImplementedError("Method needs to be implemented in subclass")
@abstractmethod
async def chat(
self,
prompt: str,
stream: bool = False,
optimizer: str = None,
conversationally: bool = False,
) -> str:
"""Asynchronously generate response `str`
Args:
prompt (str): Prompt to be sent
stream (bool, optional): Flag for streaming response. Defaults to False.
optimizer (str, optional): Prompt optimizer name - `[code, shell_command]`
conversationally (bool, optional): Chat conversationally when using optimizer. Defaults to False.
Returns:
str: Response generated
"""
raise NotImplementedError("Method needs to be implemented in subclass")
@abstractmethod
async def get_message(self, response: dict) -> str:
"""Asynchronously retrieves message only from response
Args:
response (dict): Response generated by `self.ask`
Returns:
str: Message extracted
"""
raise NotImplementedError("Method needs to be implemented in subclass")