File size: 4,073 Bytes
36599ed 052b859 36599ed 052b859 36599ed 052b859 36599ed 052b859 36599ed 052b859 36599ed 052b859 36599ed 052b859 36599ed 052b859 36599ed 052b859 36599ed |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
import time
import json
import streamlit as st
from categories.accuracy import *
from categories.fluency import *
import random
# Set the sidebar title
st.sidebar.title("DE-EN")
def load_translations():
try:
with open("./translations.json", "r") as f:
return json.loads(f.read())
except Exception as e:
print(e)
return None
if "translations" not in st.session_state:
st.session_state.translations = load_translations()
def response_generator(prompt):
source = st.session_state.german
acc = accuracy(source, prompt)
ppl = pseudo_perplexity(prompt)
gre = grammar_errors(prompt)
total_score = 0.5 * acc["score"] + 0.2 * gre["score"] + 0.3 * ppl["score"]
response = "Your total translation score is: " + str(total_score) + "\n"
acc_s = acc["score"]
response += f"\nYour accuracy score is {acc_s}:\n"
for error in acc["errors"]:
response += f" - {error['message']}\n"
gre_s = gre["score"]
ppl_s = ppl["score"]
response += f"\nYour fluency score is {0.4 * gre_s + 0.6 * ppl_s}:\n"
for error in gre["errors"]:
response += f" - {error['message']}\n"
for error in ppl["errors"]:
response += f" - {error['message']}\n"
lines = response.split("\n")
for line in lines:
for word in line.split():
yield word + " "
time.sleep(0.05)
# After each line, yield a newline character or trigger a line break in Markdown
yield "\n"
def translation_generator():
# Check if translations are available and not empty
if st.session_state.translations:
# Randomly select a translation from the list
st.session_state.german = random.choice(st.session_state.translations)["german"]
else:
st.error("No translations available.")
return
message = (
f"Please translate the following sentence into English:"
f" {st.session_state.german}"
)
lines = message.split("\n")
for line in lines:
for word in line.split():
yield word + " "
time.sleep(0.05)
# After each line, yield a newline character or trigger a line break in Markdown
yield "\n"
st.title("Translation bot")
# Initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = [
{
"role": "assistant",
"content": (
"Hello! I am a translation bot. Please translate the following"
" sentence into English: 'Das ist ein Test.'"
),
}
]
st.session_state.german = "Das ist ein Test."
if "translations" not in st.session_state:
try:
with open("translations.json", "r") as f:
st.session_state.translations = json.loads(f.read())
print(st.session_state.translations)
except (FileNotFoundError, json.JSONDecodeError):
st.session_state.translations = None
# Create an empty translations dictionary if none exists
st.error("No previous translations found. Starting with an empty translation history.")
# Display chat messages from history on app rerun
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Accept user input
if prompt := st.chat_input("What is up?"):
# Add user message to chat history
st.session_state.messages.append({"role": "user", "content": prompt})
# Display user message in chat message container
with st.chat_message("user"):
st.markdown(prompt)
# Display assistant response in chat message container
with st.chat_message("assistant"):
response = st.write_stream(response_generator(prompt))
st.session_state.messages.append({"role": "assistant", "content": response})
with st.chat_message("assistant"):
message = st.write_stream(translation_generator())
st.session_state.messages.append({"role": "assistant", "content": message})
# Add assistant response to chat history
|