File size: 3,975 Bytes
3073994
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import gradio as gr
from duckduckgo_search import DDGS
from transformers import pipeline
import torch

# 1. Загрузка сверхбыстрого движка для tinislm
# Используем LaMini-77M как базу за её невероятную скорость
model_name = "MBZUAI/LaMini-Flan-T5-77M"
pipe = pipeline("text2text-generation", model=model_name)

def tinislm_ai_logic(question):
    if not question:
        return "Введите вопрос, чтобы я мог начать поиск."
    
    # Поиск по доверенным источникам
    search_query = f"{question} site:wikipedia.org OR site:habr.com OR site:nplus1.ru"
    
    results_text = ""
    try:
        with DDGS() as ddgs:
            # Берем 2 самых свежих и релевантных результата
            search_results = [r for r in ddgs.text(search_query, max_results=2)]
            for r in search_results:
                results_text += r['body'] + " "
    except Exception as e:
        return f"Ошибка связи с интернетом: {e}"

    if not results_text:
        return "К сожалению, в доверенных источниках ничего не найдено."

    # Системный промпт, чтобы модель знала, кто она
    prompt = (
        f"System: You are tinislm-v1.0-mn, a lightning-fast SLM developed by GGsher. "
        f"Answer the question briefly based on the context provided.\n"
        f"Context: {results_text}\n"
        f"Question: {question}\n"
        f"Answer:"
    )
    
    # Генерация ответа
    response = pipe(prompt, max_length=128, do_sample=False)[0]['generated_text']
    return response

# --- СОЗДАНИЕ ИНТЕРФЕЙСА (UI) ---

# Выбираем современную тему "Soft"
with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="slate")) as demo:
    
    with gr.Column(elem_id="container"):
        # Заголовок и брендинг
        gr.Markdown(
            """
            # 🚀 tinislm-v1.0-mn
            ### [ Small Language Model | Mobile-Native ]
            
            **Разработчик:** GGsher  
            **Цель:** Мгновенный ответ по фактам из интернета.
            ---
            """
        )
        
        with gr.Row():
            input_text = gr.Textbox(
                label="Ваш вопрос", 
                placeholder="Например: Кто такой Стив Джобс?",
                lines=1
            )
        
        with gr.Row():
            submit_btn = gr.Button("Найти факт", variant="primary")
            clear_btn = gr.Button("Очистить", variant="secondary")
            
        output_text = gr.Textbox(
            label="Ответ tinislm", 
            interactive=False,
            lines=4
        )
        
        # Примеры для быстрого теста
        gr.Examples(
            examples=[
                ["В каком году запустили первый спутник?"],
                ["Кто создал язык Python?"],
                ["Что такое квантовый компьютер простыми словами?"]
            ],
            inputs=input_text
        )
        
        gr.Markdown(
            """
            ---
            *Примечание: tinislm-v1.0-mn оптимизирована для скорости. Ответ занимает около 1-2 секунд в зависимости от скорости интернета.*
            """
        )

    # Логика кнопок
    submit_btn.click(fn=tinislm_ai_logic, inputs=input_text, outputs=output_text)
    clear_btn.click(lambda: "", None, input_text)
    clear_btn.click(lambda: "", None, output_text)

# Запуск приложения
demo.launch()