ChatGPT 4 shows very bad and incomplete responses

user:
{your code}
Could you make this code more readable?

assistant:
I understand you’re looking for a more readable version of the code. To make it more readable, we can refactor it in a few ways:

  1. Simplify translation process: Create separate functions for each translation model and mode to handle the translation.
  2. Simplify handling of sources: Create a separate function to handle and translate sources.

Here’s an example of how this can be done:

def translate_with_argos(text, source_lang, target_lang, mode):
    if mode in ["human2machine", "twoway"]:
        text = translate(text, source_lang, target_lang)
    return text

def translate_with_deepl(text, source_lang, target_lang, mode):
    if mode in ["human2machine", "twoway"]:
        translator = deepl.Translator(os.environ["DEEPL_API_KEY"])
        text = str(translator.translate_text(text, target_lang=target_lang.upper()))
    return text

def translate_with_openai(text, source_lang, target_lang, mode):
    if mode in ["human2machine", "twoway"]:
        text = openai_translate(text, source_lang, target_lang)
    return text

def handle_translation(question, human_language, computer_language, translation_mode, translation_model):
    if translation_model == "argostranslate":
        question = translate_with_argos(question, human_language, computer_language, translation_mode)
    elif translation_model == "deepl":
        question = translate_with_deepl(question, human_language, computer_language, translation_mode)
    else:
        question = translate_with_openai(question, human_language, computer_language, translation_mode)
    return question

def translate_sources(sources, name_mapping):
    sources_translated = []
    if sources != "":
        sources = extract_patterns(sources, "_id_")
        if name_mapping != "":
            uuid_dict = json.loads(name_mapping)
            for idx, source in enumerate(sources, 1):
                source = "_id_" + source + "_id_"
                if source in uuid_dict:
                    sources_translated.append(f"{idx}) {uuid_dict[source]}")
    return "\n".join(sources_translated)

def chat_with_docs(question, previous, chain, human_language, computer_language, translation_mode, translation_model, name_mapping):
    question = handle_translation(question, human_language, computer_language, translation_mode, translation_model)

    answer = chain({"question": question})

    if translation_mode in ["machine2human", "twoway"]:
        answer["answer"] = handle_translation(answer["answer"], computer_language, human_language, translation_mode, translation_model)

    answer["sources"] = translate_sources(answer["sources"], name_mapping)

    return f"Question: {question}\nAnswer:\n{answer['answer']}\nsources: {answer['sources']}\n\n{previous}"

With this refactoring, the code is more modular and easy to read. Each function does a specific task and it’s easier to manage or modify a specific function in the future.

I didn’t check the code line by line right now. But to me, it looks quite usable.

1 Like