import requests
import json
import openai
import random  # Pentru a genera valori aleatoare

# Configurații OpenAI
openai.api_base = "http://localhost:4891/v1"
openai.api_key = "not needed for a local LLM"
model_openai = "GPT4All Falcon"

# Configurații LLaMA
url_llama = "http://localhost:11434/api/generate"
headers_llama = {"Content-Type": "application/json"}

def get_response_from_openai(prompt):
    # Generăm valori aleatoare pentru temperatura și numărul de tokeni
    temperature_random = round(random.uniform(0, 1), 2)  # Temperatura între 0 și 1 cu două zecimale
    max_tokens_random = random.randint(100, 200)  # Tokeni între 100 și 200

    response = openai.Completion.create(
        model=model_openai,
        prompt=prompt,
        max_tokens=max_tokens_random,  # Folosim valoarea aleatoare pentru max_tokens
        temperature=temperature_random,  # Folosim valoarea aleatoare pentru temperatura
        top_p=0.95,
        n=1,
        echo=True,
        stream=False
    )
    return response.choices[0].text.strip()

def get_response_from_llama(prompt):
    payload = json.dumps({
        "model": "llama2-uncensored",
        "prompt": prompt
    })
    response = requests.post(url_llama, data=payload, headers=headers_llama)
    if response.status_code == 200:
        full_response = ""
        for line in response.text.splitlines():
            try:
                line_data = json.loads(line)
                full_response += line_data.get("response", "")
            except json.JSONDecodeError as e:
                print(f"Eroare la decodarea liniei JSON: {e}")
        return full_response.strip()
    else:
        print("A apărut o eroare:", response.status_code)
        return None

def ask_question_interactive():
    initial_question = input("Scrie o întrebare inițială: ")
    num_cycles = int(input("Câte cicluri să facă între modele? (introduceți un număr): "))
    current_prompt = initial_question

    for cycle in range(num_cycles):
        print(f"\nCiclu {cycle + 1}")
        # Obține răspunsul de la OpenAI
        openai_response = get_response_from_openai(current_prompt)
        print("Răspuns de la OpenAI:", openai_response)
        
        # Trimite răspunsul de la OpenAI către LLaMA
        llama_response = get_response_from_llama(openai_response)
        if llama_response:
            print("Răspuns de la LLaMA:", llama_response)
            # Reintroducem prompt-ul inițial ajustat cu un rezumat al discuției anterioare pentru a menține subiectul principal
            current_prompt = f"{initial_question} Având în vedere discuția anterioară, {llama_response}"

if __name__ == "__main__":
    ask_question_interactive()
