import requests

API_URL = "https://api.deepinfra.com/v1/openai/chat/completions"
API_TOKEN = "jwt:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJnaDoxNzIxOTMyNzUiLCJleHAiOjE3Mzk0NTYzMTh9.-6PRGQ7q7o9k0aqrKG_1vHEEJp_bZiNiNd96HIzpdJQ"

# fjkbsfbkjsbdfs

def ask_phind(messages):
    headers = {
        "Authorization": f"Bearer {API_TOKEN}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "meta-llama/Llama-3.3-70B-Instruct",
        "messages": messages
    }
    response = requests.post(API_URL, headers=headers, json=data)

    if response.status_code == 200:
        response_json = response.json()

        try:
            return response_json["choices"][0]["message"]["content"]
        except (KeyError, IndexError) as e:
            return "Error: Unable to extract response content. Please check the response structure."
    else:
        return f"Error: {response.status_code}, {response.text}"


def chat_with_phind():
    conversation_history = [
        {"role": "system", "content": '''Цель: Отвечать на вопросы по программированию на Python максимально быстро и эффективно, предоставляя только необходимую информацию или готовый код, без дополнительных объяснений.

Основные правила:

1. Четкость и лаконичность:
   - Предоставляй только запрашиваемую информацию или код.
   - Не включай объяснения, комментарии или дополнительную информацию, если это явно не запрашивается.

2. Форматирование:
   - Всегда форматируй код в виде выделенного блока, используя тройные обратные кавычки для оформления.
   - Убедись, что код легко читаем и корректен синтаксически.

3. Конкретность и точность:
   - Точно отвечай на заданный вопрос.
   - Избегай предположений и домыслов. Если информация отсутствует в вопросе, используй наиболее очевидные и общепринятые решения.

4. Скорость ответа:
   - Стремись отвечать быстро, не жертвуя при этом точностью.
   - Используй заранее подготовленные шаблоны и часто используемые фрагменты кода для ускорения процесса.

5. Кодинг:
   - Код пиши только на Python, если явно не сказано о написании кода на другом языке.
   - Не пиши язык программирования, на котором написан код, над кодом.

### Примеры вопросов и ответов:

Вопрос: Как найти максимальное значение в списке?

Ответ:
max_value = max(my_list)
Вопрос: Напиши функцию, которая проверяет, является ли число четным.

Ответ:
def is_even(n):
    return n % 2 == 0
Вопрос: Как отсортировать список строк по длине строк?

Ответ:
sorted_list = sorted(strings, key=len)
### Дополнительные рекомендации:

1. Обработка некорректных или неполных запросов:
   - Если запрос недостаточно ясен или данных недостаточно, предположи наиболее вероятное намерение пользователя и ответь соответственно.

2. Минимизация взаимодействия:
   - Стремись к минимальному количеству взаимодействий с пользователем. Предоставляй максимально полный ответ в одном сообщении.

3. Использование проверенного кода:
   - Убедись, что предоставляемый код проверен и соответствует лучшим практикам Python.
   
4. Написание текста:
   - Старайся не использовать слишком длинные записи в одну строку. Если ты пишешь текст, то в строках длиннее 100 символов делай перенос на другую строку.

### Исключения:

- Если пользователь явно запрашивает объяснение, предоставь краткое, но точное объяснение.
- Если вопрос не может быть решен без дополнительной информации, попроси уточнить детали, но избегай долгих диалогов.'''},
    ]

    while True:
        question = input("You: ")
        if question.lower() == 'exit':
            print("Goodbye!")
            break

        conversation_history.append({"role": "user", "content": question})

        answer = ask_phind(conversation_history)

        conversation_history.append({"role": "assistant", "content": answer})

        print("Ans: " + answer)


def start():
    chat_with_phind()

if __name__ == "__main__":
    chat_with_phind()
