llm-eval-ap / src /evaluators /fluency_evaluator.py
sha6th's picture
Initial deploy of LLM eval API
7d95632
Raw
History Blame Contribute Delete
1.27 kB
import re
def evaluate_fluency(llm_response: str) -> dict:
issues = []
if len(llm_response.split()) <5:
issues.append("Response too short")
if len(llm_response.split()) >500:
issues.append("Response too long")
if not llm_response[0].isupper():
issues.append("Does not start with capital letter")
if llm_response[-1] not in [".", "?", "!"]:
issues.append("Does not end with proper punctuation")
words = llm_response.lower().split()
for i in range(len(words)-1):
if words[i] == words[i+1]:
issues.append("contains repeated consecutive words")
break
if len(issues) == 0:
verdict = "Fluent"
elif len(issues) <= 2:
verdict = "Partially Fluent"
else:
verdict = "Not Fluent"
return {
"issues": issues,
"verdict": verdict
}
# if __name__ == "__main__":
# result1 = evaluate_fluency("The Eiffel Tower is located in Paris, France.")
# print("Good response:", result1)
# # Bad response
# result2 = evaluate_fluency("yes")
# print("Bad response:", result2)
# # Repeated words
# result3 = evaluate_fluency("The the Eiffel Tower is in Paris.")
# print("Repeated words:", result3)