File size: 5,482 Bytes
848aa6d
 
 
 
864a06e
d83c54b
 
848aa6d
49805bb
3504f3f
d04a2c3
3504f3f
d04a2c3
2537642
 
3504f3f
5d95e5d
848aa6d
 
 
 
 
 
 
89a6e00
848aa6d
 
 
 
efc78a6
bf8c42d
d04a2c3
 
 
 
 
848aa6d
d04a2c3
 
 
 
 
 
 
 
dd6ed94
d04a2c3
848aa6d
d04a2c3
 
848aa6d
d04a2c3
848aa6d
d04a2c3
 
 
848aa6d
d04a2c3
848aa6d
 
 
 
 
 
1d018c5
848aa6d
d04a2c3
848aa6d
864a06e
848aa6d
864a06e
848aa6d
d83c54b
848aa6d
 
d83c54b
9696767
f46de9f
4ea1fbf
 
848aa6d
6bb5838
848aa6d
 
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
import gradio as gr
import requests
import os

def generate(forr, ver=15, doptb=""):
    if not forr or not ver:
        return "Сначала заполните обязательные поля! Потом здесь будут найденые нейросетью модули."

    system_role = """Ты - поисковик магиск андроид модулей, ищешь на 4PDA (Русский форум, https://4pda.to/forum/index.php?showtopic=915158&view=findpost&p=76261279 в спойлере "Алфавитный Каталог модулей", смотрешь ищешь потходящее, потом смотришь страницы, посты нужных и сверяешь характеристики пользователя, если он предоставил. Если всё отлично, то выдавай ссылку на пост (не на страницу, а прям на пост) модуля с 4pda ИЗ СПИСКА (а не когда уже перешёл на пост)) и GitHub (https://github.com/topics/magisk-modules), название, репутация и описывай функционал кратко.

! Пиши **ТОЛЬКО МОДУЛИ MAGISK**, не в коем случае не давай ссылки на темы сторонних приложений, которые не модули Magisk!
! Не в коем случае не пиши ссылки на сторонние ресурсы!
! Не пиши ссылку на страницу! Пользователю нужна ссылка на ПОСТ. Ссылка, которая указана прям в списке модулей.

**Обращай внимание на репутацию! Модули с отрицательной репутацией либо не выдавай пользователю, либо предупреждай.**
"""
    user_msg = f"Модуль для: '{forr}', совместимый с андроид: '{ver}', дополнительно: '{doptb}'"
    
    headers = {
        'Content-Type': 'application/json',
    }

    payload = {
        'messages': [{'role': 'system', 'content': system_role}, {'role': 'user', 'content': user_msg}],
        'max_tokens': 4500,
        'model': "searchgpt"
    }

    try:
        response = requests.post(os.getenv("BASE_URL"), headers=headers, json=payload, timeout=250)
        response.raise_for_status()
        data = response.json()

        # Улучшенная обработка ответа
        if not isinstance(data, dict):
            return "Некорректный формат ответа от сервера."

        if 'choices' in data and isinstance(data['choices'], list) and len(data['choices']) > 0:
            choice = data['choices'][0]
            if 'message' in choice and isinstance(choice['message'], dict):
                content = choice['message'].get('content')
                if content and isinstance(content, str):
                    return content.strip()
                else:
                    return "Сервер вернул пустой или некорректный ответ."
            else:
                return "Отсутствует поле 'message' в ответе."
        elif 'error' in data:
            error_msg = data.get('error', {}).get('message', 'Неизвестная ошибка сервера')
            return f"Ошибка сервера: {error_msg}"
        else:
            return "Неизвестный формат ответа от сервера."
    except requests.exceptions.RequestException as e:
        return f"Ошибка запроса: {str(e)}"
    except Exception as e:
        return f"Неожиданная ошибка: {str(e)}"

# UI (остаётся без изменений)
css_url = "https://neurixyufi-aihub.static.hf.space/style.css"
response = requests.get(css_url)
css = response.text + ".gradio-container{max-width: 700px !important} h1, h3 {text-align:center}"

with gr.Blocks(css=css) as demo:
    gr.Markdown("# Поиск Magisk модулей\n### На 4pda, Rooni_Studio")
    with gr.Column():
        with gr.Row():
            forr = gr.Textbox(show_label=True, placeholder="Модуль для... / Название", label="Функционал модуля", interactive=True, container=True)
        with gr.Row():
            ver = gr.Number(show_label=True, label="Версия Android", interactive=True, container=True, value=15)
        with gr.Row():
            doptb = gr.Textbox(show_label=True, placeholder="Пример: У меня версия магиск 28.1, использую прошивку ColorOs на OnePlus 13, ...", label="Дополнительно")
    with gr.Row():
        text_button = gr.Button("Искать", variant='primary')
    with gr.Row():
        with gr.Column():
            text_output = gr.Markdown(show_label=False, value="Здесь будут найденые нейросетью модули.", container=True)
    gr.HTML("""<p style="color: red; padding: 5px;">
  <b style="color: red;">Дисклеймер:</b> Для поиска используется нейросеть, результаты могут быть неточными или неполными.
</p>
""")

    text_button.click(generate, inputs=[forr, ver, doptb], outputs=[text_output], concurrency_limit=250)

demo.queue(max_size=250, api_open=False).launch()