|
import os |
|
import streamlit as st |
|
import requests |
|
import json |
|
import math |
|
|
|
def get_completion_from_openai(prompt,model, max_tokens = None): |
|
url = os.getenv('OPENAI_COMPLETION_URL') |
|
|
|
headers = { |
|
"Content-Type": "application/json", |
|
"Authorization": "Bearer " + st.secrets["OPENAI_TOKEN"], |
|
} |
|
|
|
response = requests.post(url, |
|
json={ |
|
"model": model, |
|
"max_tokens": max_tokens, |
|
"messages": [ |
|
{ |
|
"role": "user", |
|
"content": prompt |
|
} |
|
] |
|
}, |
|
headers=headers, |
|
stream=False, |
|
) |
|
try: |
|
return response.json()['choices'][0]['message']['content'] |
|
except: |
|
print(response.json()) |
|
return "Произошла ошибка" |
|
|
|
def process_transcribation_with_assistant(prompt, transcript): |
|
baseUrl = os.getenv('OPENAI_BASE_URL') |
|
|
|
headers = { |
|
"Content-Type": "application/json", |
|
"Authorization": "Bearer " + st.secrets["OPENAI_TOKEN"], |
|
"OpenAI-Beta": "assistants=v2", |
|
} |
|
|
|
number_of_runs = math.ceil(len(transcript) / (4 * 4096)) |
|
output_text = '' |
|
|
|
thread_response = requests.post(baseUrl + '/threads', json={}, headers=headers) |
|
thread_id = thread_response.json()['id'] |
|
|
|
message_response = requests.post(baseUrl + '/threads/' + thread_id + '/messages', |
|
json={"role" : "user", "content": prompt + transcript}, |
|
headers=headers) |
|
|
|
run_response = requests.post(baseUrl + '/threads/' + thread_id + '/runs', |
|
json={ |
|
"assistant_id": st.secrets["OPENAI_ASSISTANT_ID"], |
|
"stream": True |
|
}, |
|
headers=headers, |
|
stream=True) |
|
|
|
st.write("Результат обработки:") |
|
text_container = st.empty() |
|
output_text = '' |
|
event_name = "" |
|
for line in run_response.iter_lines(decode_unicode=True): |
|
if line: |
|
if line.startswith("event:"): |
|
event_name = line.split(":")[1].strip() |
|
if event_name == 'done': |
|
break |
|
elif line.startswith("data:") and event_name == 'thread.message.delta': |
|
event_data = json.loads(line.split(":", 1)[1].strip()) |
|
output_text += event_data['delta']['content'][0]['text']['value'] |
|
text_container.text(output_text) |
|
|
|
for i in range(number_of_runs - 1): |
|
message_response = requests.post(baseUrl + '/threads/' + thread_id + '/messages', |
|
json={"role" : "user", "content": "Продолжай работать на текущей задачей"}, |
|
headers=headers) |
|
|
|
run_response = requests.post(baseUrl + '/threads/' + thread_id + '/runs', |
|
json={ |
|
"assistant_id": st.secrets["OPENAI_ASSISTANT_ID"], |
|
"stream": True |
|
}, |
|
headers=headers, |
|
stream=True) |
|
event_name = "" |
|
response = '' |
|
for line in run_response.iter_lines(decode_unicode=True): |
|
if line: |
|
if line.startswith("event:"): |
|
event_name = line.split(":")[1].strip() |
|
if event_name == 'done': |
|
break |
|
elif line.startswith("data:") and event_name == 'thread.message.delta': |
|
event_data = json.loads(line.split(":", 1)[1].strip()) |
|
output_text += event_data['delta']['content'][0]['text']['value'] |
|
text_container.text(output_text) |
|
|
|
return output_text |
|
|