You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.2 KiB
74 lines
2.2 KiB
from typing import Dict, List, Optional
|
|
from dataclass import dataclass
|
|
|
|
from swarms.models import OpenAI
|
|
|
|
|
|
@dataclass
|
|
class OpenAIAssistant:
|
|
name: str = "OpenAI Assistant"
|
|
instructions: str = None
|
|
tools: List[Dict] = None
|
|
model: str = None
|
|
openai_api_key: str = None
|
|
temperature: float = 0.5
|
|
max_tokens: int = 100
|
|
stop: List[str] = None
|
|
echo: bool = False
|
|
stream: bool = False
|
|
log: bool = False
|
|
presence: bool = False
|
|
dashboard: bool = False
|
|
debug: bool = False
|
|
max_loops: int = 5
|
|
stopping_condition: Optional[str] = None
|
|
loop_interval: int = 1
|
|
retry_attempts: int = 3
|
|
retry_interval: int = 1
|
|
interactive: bool = False
|
|
dynamic_temperature: bool = False
|
|
state: Dict = None
|
|
response_filters: List = None
|
|
response_filter: Dict = None
|
|
response_filter_name: str = None
|
|
response_filter_value: str = None
|
|
response_filter_type: str = None
|
|
response_filter_action: str = None
|
|
response_filter_action_value: str = None
|
|
response_filter_action_type: str = None
|
|
response_filter_action_name: str = None
|
|
client = OpenAI()
|
|
role: str = "user"
|
|
instructions: str = None
|
|
|
|
def create_assistant(self, task: str):
|
|
assistant = self.client.create_assistant(
|
|
name=self.name,
|
|
instructions=self.instructions,
|
|
tools=self.tools,
|
|
model=self.model,
|
|
)
|
|
return assistant
|
|
|
|
def create_thread(self):
|
|
thread = self.client.beta.threads.create()
|
|
return thread
|
|
|
|
def add_message_to_thread(self, thread_id: str, message: str):
|
|
message = self.client.beta.threads.add_message(thread_id=thread_id,
|
|
role=self.user,
|
|
content=message)
|
|
return message
|
|
|
|
def run(self, task: str):
|
|
run = self.client.beta.threads.runs.create(
|
|
thread_id=self.create_thread().id,
|
|
assistant_id=self.create_assistant().id,
|
|
instructions=self.instructions,
|
|
)
|
|
|
|
out = self.client.beta.threads.runs.retrieve(thread_id=run.thread_id,
|
|
run_id=run.id)
|
|
|
|
return out
|