Spaces:
Runtime error
Runtime error
| import codecs | |
| import json | |
| import time | |
| import openai | |
| import os | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| class Llm: | |
| def __init__(self): | |
| print("### Step 1: Get the Assistant's ID ###") | |
| # OpenAI API キーの設定 | |
| self.client = openai.OpenAI() | |
| openai.api_key = os.getenv('OPENAI_API_KEY') | |
| self.assistant_id = os.getenv('OPENAI_ASSISTANT_ID') | |
| self.assistant = self.client.beta.assistants.retrieve(self.assistant_id) | |
| print(self.assistant) | |
| assistant_description = self.assistant.description | |
| assistant_model = self.assistant.model | |
| if assistant_description is None: | |
| assistant_description = f"このアシスタントは、OpenAI APIで {assistant_model} を使用して作成されました。" | |
| def setup(self): | |
| load_dotenv() | |
| self.api_key = os.getenv('OPENAI_API_KEY') | |
| self.assistant_id = os.getenv('OPENAI_ASSISTANT_ID') | |
| self.client = openai.OpenAI() | |
| def retrieve_assistant(self): | |
| self.assistant = self.client.beta.assistants.retrieve(self.assistant_id) | |
| return self.assistant | |
| # def openai_completion(self, prompt): | |
| # import random | |
| # import csv | |
| # with open('flagged/log.csv', 'r') as file: | |
| # reader = csv.DictReader(file) | |
| # logs = [row for row in reader] | |
| # random_log = random.choice(logs) | |
| # answer = random_log['output'] | |
| # return answer | |
| def chatcompletion(self, prompt): | |
| try: | |
| "### Step 2: Create a Thread ###" | |
| empty_thread = self.client.beta.threads.create() | |
| thread_id = empty_thread.id | |
| print(empty_thread) | |
| print("### Step 3: Add a Message to the Thread ###") | |
| thread = self.client.beta.threads.retrieve(thread_id) | |
| print(thread) | |
| print("### Step 4: Add a Message to the Thread ###") | |
| thread_message = self.client.beta.threads.messages.create( | |
| thread_id, | |
| role="user", | |
| content=prompt, | |
| ) | |
| message_id = thread_message.id | |
| print(thread_message) | |
| print("### Step 5: Retrieve the Message ###") | |
| message = self.client.beta.threads.messages.retrieve( | |
| message_id=message_id, | |
| thread_id=thread_id, | |
| ) | |
| print(message) | |
| print("### Step 6: Run the Assistant ###") | |
| run = self.client.beta.threads.runs.create( | |
| thread_id=thread.id, | |
| assistant_id=self.assistant.id, | |
| ) | |
| print("### Step 7: Wait for the Assistant to Finish ###") | |
| def wait_on_run(run, thread): | |
| while run.status == "queued" or run.status == "in_progress": | |
| run = self.client.beta.threads.runs.retrieve( | |
| thread_id=thread.id, | |
| run_id=run.id, | |
| ) | |
| time.sleep(0.5) | |
| return run | |
| run = wait_on_run(run, thread) | |
| print(run) | |
| print("### Step 8: Retrieve the Messages ###") | |
| messages = self.client.beta.threads.messages.list( | |
| thread_id=thread.id | |
| ) | |
| messages_str = json.dumps(messages.dict(), indent=2) | |
| print(codecs.decode(messages_str, 'unicode-escape')) | |
| print("### Step 9: Retrieve the Assistant's Response ###") | |
| answers = [] | |
| for message in messages.data: | |
| if message.role == "assistant": | |
| if message.content[0].type == "text": | |
| answers.append(message.content[0].text.value + "\n\n") | |
| else: | |
| answers.append("Content is not text.\n\n") | |
| elif message.role == "user": | |
| break | |
| # answersを逆順にする | |
| answers.reverse() | |
| return "".join(answers) | |
| except Exception as e: | |
| print(f"スレッドの作成中にエラーが発生しました: {e}") | |
| raise |