adiom commited on
Commit
5f0bb70
·
1 Parent(s): 7686d31
Files changed (8) hide show
  1. .gitignore +1 -0
  2. .gradio/certificate.pem +31 -0
  3. .gradio/flagged/dataset1.csv +2 -0
  4. app.py +23 -64
  5. data.json +32 -109
  6. finetune.py +113 -0
  7. test.py +29 -0
  8. train.py +3 -3
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ *.json
.gradio/certificate.pem ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
31
+ -----END CERTIFICATE-----
.gradio/flagged/dataset1.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ query,output,timestamp
2
+ Что Тимур делаем,"['Разрабатываем проекты, которые стремятся освободить разум и дать чувствам новое дыхание.', 'Разрабатываем философские публикации, исследующие субъективный идеализм и солипсизм через примеры, такие как кино.', 'Мечтаем объединить технологии, науку и искусство для изменения мира к лучшему.', 'Создаем комиксы о футуристическом мире с марксистской философией в легкой, доброй форме.', 'Разрабатываем текстовые работы под псевдонимом Тим Ад и рассматриваем возможность издания этих работ в качестве книги.']",2025-02-28 15:46:18.553450
app.py CHANGED
@@ -1,66 +1,25 @@
1
- import json
2
- import faiss
3
- import torch
4
- from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
5
- from sentence_transformers import SentenceTransformer
6
- from deep_translator import GoogleTranslator # Для перевода
7
-
8
- # Загружаем TinyLlama
9
- model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
10
- tokenizer = AutoTokenizer.from_pretrained(model_name)
11
- model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
12
- tokenizer = AutoTokenizer.from_pretrained(model_name)
13
- # Убираем 4-битную квантизацию и используем float32
14
- model = AutoModelForCausalLM.from_pretrained(
15
- model_name,
16
- torch_dtype=torch.float32, # Используем обычные веса без квантизации
17
- device_map="auto"
18
- )
19
-
20
- # Загружаем Sentence Transformer
21
- embedder = SentenceTransformer("all-MiniLM-L6-v2") # Легкий, работает на Free Tier
22
-
23
- # Загружаем базу знаний
24
- with open("data.json", "r", encoding="utf-8") as f:
25
- knowledge_base = json.load(f)
26
-
27
- # Превращаем вопросы в векторы
28
- instructions = [item["instruction"] for item in knowledge_base]
29
- responses = [item["response"] for item in knowledge_base]
30
- instruction_vectors = embedder.encode(instructions)
31
-
32
- # Создаем FAISS индекс
33
- dimension = instruction_vectors.shape[1]
34
- index = faiss.IndexFlatL2(dimension)
35
- index.add(instruction_vectors)
36
-
37
- # Функция поиска по смыслу с переводом
38
- def search_knowledge_base(query, top_k=1):
39
- if not query.isascii(): # Если текст НЕ на английском
40
- query_ru = query # Оставляем как есть
41
- else:
42
- query_ru = GoogleTranslator(source='en', target='ru').translate(query) # Переводим на русский
43
-
44
- query_vector = embedder.encode([query_ru])
45
- distances, indices = index.search(query_vector, top_k)
46
- response_ru = responses[indices[0][0]] if indices[0][0] < len(responses) else "Ответ не найден."
47
-
48
- if query.isascii(): # Если изначально вопрос был на английском, переводим обратно
49
- response_en = GoogleTranslator(source='ru', target='en').translate(response_ru)
50
- return response_en
51
- return response_ru
52
-
53
- # Функция чата
54
- def chat(message):
55
- fact = search_knowledge_base(message)
56
- message = f"{message}\nИнформация: {fact}"
57
-
58
- inputs = tokenizer(message, return_tensors="pt").to("cpu")
59
- outputs = model.generate(**inputs, max_new_tokens=100)
60
- response = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0]
61
- return response
62
-
63
- # Gradio UI
64
  import gradio as gr
65
- iface = gr.Interface(fn=chat, inputs="text", outputs="text", title="Canfly Tiny-Inna (с переводом)")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  iface.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ from datasets import load_dataset
3
+ from transformers import pipeline
4
+
5
+ # Загружаем твой dataset
6
+ dataset = load_dataset("adiom/ai-dataset")
7
+ data = dataset['train']
8
+
9
+ # Загружаем модель для вопросов и ответов
10
+ qa_pipeline = pipeline("question-answering", model="deepset/roberta-base-squad2")
11
+
12
+ # Функция для обработки запросов
13
+ def answer_question(query):
14
+ best_answer = ""
15
+ for item in data:
16
+ context = item['output'] # Пример: извлекаем ответ из поля 'output'
17
+ result = qa_pipeline(question=query, context=context)
18
+ if result["score"] > 0.1: # Порог уверенности
19
+ best_answer = result["answer"]
20
+ break
21
+ return best_answer
22
+
23
+ # Интерфейс Gradio
24
+ iface = gr.Interface(fn=answer_question, inputs="text", outputs="text")
25
  iface.launch()
data.json CHANGED
@@ -1,110 +1,33 @@
1
  [
2
- {
3
- "instruction": "Что разрабатывает Тимур?",
4
- "response": "Тимур разрабатывает множество проектов, включая децентрализованный блокчейн-проект Amalgama с DAO, систему Proof of Contribution и токенами $AMALGAMA, $PDC, $AMT. Также он работает над созданием AI-моделей, чат-ботов, комиксов Aurora Comics, арт-проекта VZM и учебника по механико-логическим процессорам."
5
- },
6
- {
7
- "instruction": "Кто такой Ricoch?",
8
- "response": "ИИ-исследователь, психолог, специалист по NMDA"
9
- },
10
- {
11
- "instruction": "Какие проекты у Тимура?",
12
- "response": "Среди его проектов Amalgama (блокчейн-платформа), Canfly (организация, разрабатывающая Amalgama), Ingria (автономный ИИ с гибкими экранами), Discord-бот для Ingria, Telegram-боты, модель социалистической деревни для монографии 'Социализм и ИИ - Симуляция общества', веб-сервисы с использованием DeepSpeech и Express.js, а также благотворительный фонд 'Летать вместе'."
13
- },
14
- {
15
- "instruction": "Чем занимается Тимур?",
16
- "response": "Тимур занимается разработкой программного обеспечения, изучением биоинформатики, созданием музыки в стиле dark hip-hop trap под псевдонимом DOGtheGOD, рисованием граффити, управлением кафе, исследованием технологий блокчейна, Web3.0 и смарт-контрактов, а также благотворительностью и созданием интерактивных арт-объектов."
17
- },
18
- {
19
- "instruction": "Какие технологии использует Тимур?",
20
- "response": "Тимур использует Node.js, Nuxt.js, NestJS, Docker, WordPress, смарт-контракты, NFT, Web3.0, PyMOL, TensorFlow, ESP32, FastAPI, PostgreSQL, Swift, Assembler, RISC-V, Verilog и другие современные технологии."
21
- },
22
- {
23
- "instruction": "Какие увлечения у Тимура?",
24
- "response": "Тимур увлекается музыкой, играми, уходом за растениями, саморазвитием, рисованием граффити, приготовлением пищи (пицца, вок, паста, хумус), китайской чайной церемонией и изучением биоинформатики."
25
- },
26
- {
27
- "instruction": "Какие животные у Тимура?",
28
- "response": Тимура четыре кота: Глафира, Масёк, Мелкий и Хабиб, а также две собаки породы алабай — Арго (старая) и Гюрза (молодая)."
29
- },
30
- {
31
- "instruction": "Что планирует Тимур?",
32
- "response": "Тимур планирует переезд в Санкт-Петербург, создание благотворительного фонда 'Летать вместе', разработку веб-сервисов с авторизацией через MetaMask и WalletConnect, изучение квантового программирования, создание механико-логического процессора (PLP) и написание книги."
33
- },
34
- {
35
- "instruction": "Какие цели у Тимура?",
36
- "response": "Тимур стремится объединить технологии, науку и искусство, изменить мир к лучшему, исследовать новые возможности взаимодействия и создавать уникальные проекты. Он также хочет удочерить ребенка и стать хорошим отцом."
37
- },
38
- {
39
- "instruction": "Какие творческие проекты у Тимура?",
40
- "response": "Тимур создает музыку под псевдонимом DOGtheGOD, пишет тексты и стихи под псевдонимом Тим Ад, рисует граффити, разрабатывает комиксы Aurora Comics и арт-проект VZM, а также создает милых существ под названием Куленёчки."
41
- },
42
- {
43
- "instruction": "Какие научные интересы у Тимура?",
44
- "response": "Тимур изучает биоинформатику, молекулярную биологию, органическую химию, квантовую физику и влияние ИИ на общество. Он также интересуется марксизмом, неомарксизмом и философскими концепциями, такими как субъективный идеализм и солипсизм."
45
- },
46
- {
47
- "instruction": "Какие бизнес-проекты у Тимура?",
48
- "response": "Тимур управляет небольшим кафе, продает парфюмерию через бренд 'Perfume by K&M', разрабатывает маркетплейс MART CAT для зоо-бизнеса и создает видеохостинг BRUTALBABY с поддержкой web3.0 и прямых эфиров."
49
- },
50
- {
51
- "instruction": "Какие технологии блокчейна использует Тимур?",
52
- "response": "Тимур работает с Polygon, интеграцией WalletConnect/MetaMask, смарт-контрактами, NFT и системой Proof of Contribution. Он также разрабатывает проект Worm для поиска узлов в множестве сетей для обеспечения отказоустойчивости блокчейна Amalgam."
53
- },
54
- {
55
- "instruction": "Какие планы у Тимура на будущее?",
56
- "response": "Тимур планирует углубиться в изучение квантового программирования, создать учебник по механико-логическим процессорам, разработать сервис для отслеживания цен криптовалют и продолжить работу над проектами, связанными с AI, блокчейном и благотворительностью."
57
- },
58
- {
59
- "instruction": "Какие личные качества Тимура?",
60
- "response": "Тимур — амбициозный, творческий и трудолюбивый человек. Он ценит семейные ценности, поддерживает социальные связи и стремится менять мир к лучшему через свои проекты."
61
- },
62
- {
63
- "instruction": "Что такое проект Canfly?",
64
- "response": "Canfly — это некоммерческая организация, основанная Адиомом Тимуром, которая занимается разработкой искусственного интеллекта и блокчейн-платформы Amalgam. Проект фокусируется на создании децентрализованных решений, благотворительности и интеграции передовых технологий."
65
- },
66
- {
67
- "instruction": "Какие цели у проекта Canfly?",
68
- "response": "Canfly стремится объединить технологии, науку и искусство для изменения мира к лучшему. Ключевые цели включают разработку блокчейн-платформы Amalgam, создание DAO, поддержку благотворительных инициатив (например, фонда 'Летать вместе'), а также продвижение открытых исследований в области ИИ, биоинформатики и квантовых технологий."
69
- },
70
- {
71
- "instruction": "Какие технологии использует Canfly?",
72
- "response": "Canfly использует технологии Web3.0, смарт-контракты, NFT, Polygon, интеграцию WalletConnect/MetaMask, а также разрабатывает AI-модели и голосовые интерфейсы. Для разработки применяются Node.js, Nuxt.js, NestJS, Docker, PostgreSQL и другие инструменты."
73
- },
74
- {
75
- "instruction": "Что такое Canfly DAO?",
76
- "response": "Canfly DAO — децентрализованная автономная организация, созданная в рамках проекта. Она управляет процессами на платформе Amalgam, распределяет токены ($PDC, $AMT, $CFT) и координирует вклад участников через систему Proof of Contribution (PoC)."
77
- },
78
- {
79
- "instruction": "Какие токены связаны с Canfly?",
80
- "response": "Canfly использует три токена: $AMALGAMA (основной токен платформы), $PDC (вознаграждение за вклад в контент) и $AMT (вознаграждение за предоставление аппаратных ресурсов). Также планируется $CFT для управления DAO."
81
- },
82
- {
83
- "instruction": "Как связаны Canfly и Amalgam?",
84
- "response": "Canfly — организация, которая разрабатывает блокчейн-платформу Amalgam. Amalgam представляет собой децентрализованную систему с DAO, уникальной системой Proof of Contribution и интеграцией Web3.0, предназначенную для создания контента через пользовательские группы (NFT) и распределения платежей через смарт-контракты."
85
- },
86
- {
87
- "instruction": "Какие проекты входят в экосистему Canfly?",
88
- "response": "В экосистему Canfly входят: Amalgam (блокчейн-платформа), Ingria (автономный ИИ с эмоциональными экранами), фонд 'Летать вместе' (благотворительность), вики-сайт по биоинформатике, учебник по механико-логическим процессорам (PLP) и другие исследовательские и образовательные инициативы."
89
- },
90
- {
91
- "instruction": "Как Canfly поддерживает благотворительность?",
92
- "response": "Canfly разрабатывает фонд 'Летать вместе', который поможет людям в сложных жизненных ситуациях, включая детей-сирот. Платформа будет open-source, чтобы любой мог развернуть её на бесплатном хостинге (например, Vercel), обеспечивая безопасность и доступность для активистов."
93
- },
94
- {
95
- "instruction": "Какие планы у Canfly на будущее?",
96
- "response": "Canfly планирует развивать Amalgam, интегрировать ИИ-модели (например, Ingria), запустить квантовые исследования, создать виртуальные выставочные пространства и расширить благотворительные программы. Также в планах — издание научных работ и учебников."
97
- },
98
- {
99
- "instruction": "Кто участвует в разработке Canfly?",
100
- "response": "Основатель и генеральный директор — Адиом Тимур. В разработке участвуют разработчики, исследователи и энтузиасты блокчейна, ИИ и биоинформатики. Canfly сотрудничает с сообществами в Twitter, GitHub и другими open-source проектами."
101
- },
102
- {
103
- "instruction": "Как Canfly связан с искусственным интеллектом?",
104
- "response": "Canfly разрабатывает AI-модели, такие как Ingria (автономный ИИ с эмоциональными экранами), голосовые боты для Telegram и Discord, а также системы анализа данных для блокчейна. Используются технологии DeepSpeech, TensorFlow и Hugging Face."
105
- },
106
- {
107
- "instruction": "Как Canfly использует блокчейн?",
108
- "response": "Canfly применяет блокчейн для создания децентрализованных приложений (Amalgam), управления DAO, хранения контента через NFT и обеспечения прозрачности в благотворительных проектах. Система Proof of Contribution стимулирует активность пользователей."
109
- }
110
- ]
 
1
  [
2
+ "Компания разрабатывает инновационные решения в области искусственного интеллекта.",
3
+ "Мы используем технологии, такие как глубокое обучение, нейронные сети и обработка естественного языка.",
4
+ "Наши проекты охватывают области медицины, финансов, образования и искусства.",
5
+ "Разрабатываем решения для автоматизации бизнес-процессов с использованием AI и Big Data.",
6
+ "Проект AI Health анализирует данные о здоровье и предлагает персонализированные рекомендации.",
7
+ "Мы работаем над созданием систем, которые помогают диагностировать болезни на ранних стадиях.",
8
+ "Проект AI Finance предоставляет решения для автоматической оценки рисков и прогнозирования финансовых потоков.",
9
+ "Разрабатываем умные роботы для промышленности, способные работать в сложных условиях.",
10
+ "Проект AI Art использует генеративные нейросети для создания уникальных произведений искусства.",
11
+ "Компания работает над созданием AI-решений для автоматизации документооборота.",
12
+ "Мы разрабатываем роботов, которые могут взаимодействовать с людьми и помогать в обучении.",
13
+ "Создаем систему для анализа социальных сетей с использованием NLP для выявления трендов и фальшивых новостей.",
14
+ "Используем методы машинного обучения для анализа больших данных и предсказания будущих событий.",
15
+ "Разрабатываем системы, которые помогают людям с инвалидностью общаться с окружающим миром.",
16
+ "Мы разрабатываем интеграции для IoT-устройств и облачные сервисы для хранения и обработки данных.",
17
+ "Проект AI for Education разрабатывает технологии для автоматического анализа успеваемости студентов.",
18
+ "Создаем проекты для улучшения системы здравоохранения с помощью AI и интернета вещей.",
19
+ "Используем AI для создания персонализированных обучающих курсов и тренажеров.",
20
+ "Работаем над созданием новых систем для эффективного управления городским транспортом.",
21
+ "Разрабатываем технологии для улучшения безопасности в городской инфраструктуре с использованием нейросетей.",
22
+ "Компания использует передовые технологии, такие как Blockchain и AI, для создания безопасных платформ.",
23
+ "Мы разрабатываем системы для обнаружения и предотвращения кибератак с помощью методов машинного обучения.",
24
+ "Проект AI Robotics разрабатывает роботов, способных выполнять сложные задачи на производстве.",
25
+ "Мы создаем AI-решения для оптимизации сельского хозяйства и повышения урожайности.",
26
+ "Используем глубокое обучение для анализа геномных данных и разработки новых методов лечения.",
27
+ "Разрабатываем нейросетевые модели для прогнозирования рыночных трендов в финансовой сфере.",
28
+ "Проект AI for Environment помогает отслеживать состояние экосистем и предсказывать экологические катастрофы.",
29
+ "Компания разрабатывает инструменты для анализа и обработки данных с помощью технологии машинного обучения.",
30
+ "Мы создаем системы для прогнозирования успеха стартапов с использованием AI и больших данных.",
31
+ "Проект AI for Law помогает юристам анализировать судебные решения и предсказывать исходы дел.",
32
+ "Разрабатываем системы для повышения эффективности логистики с помощью машинного обучения и IoT."
33
+ ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
finetune.py ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoTokenizer, AutoModel
2
+ import torch
3
+ import faiss
4
+ import numpy as np
5
+ import gradio as gr
6
+
7
+
8
+ # Загружаем токенизатор и модель
9
+ MODEL_NAME = "distilbert-base-multilingual-cased"
10
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
11
+ model = AutoModel.from_pretrained(MODEL_NAME)
12
+
13
+ # Тестовая фраза
14
+ text = "Привет, как дела?"
15
+
16
+ # Токенизация
17
+ tokens = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
18
+
19
+ # Генерация эмбеддингов
20
+ with torch.no_grad():
21
+ output = model(**tokens)
22
+
23
+ # Вывод размера эмбеддингов
24
+ embedding = output.last_hidden_state[:, 0, :] # Берём CLS-токен
25
+ print("Размер эмбеддинга:", embedding.shape)
26
+
27
+
28
+ # Размерность эмбеддинга (768, как у DistilBERT)
29
+ D = 768
30
+
31
+ # Создаём FAISS-индекс (L2 - евклидово расстояние)
32
+ index = faiss.IndexFlatL2(D)
33
+
34
+ # Проверяем, пуст ли индекс
35
+ print("Индекс создан. Количество векторов:", index.ntotal)
36
+
37
+ import json
38
+
39
+ # Загрузка данных из файла
40
+ with open('data.json', 'r', encoding='utf-8') as f:
41
+ documents = json.load(f)
42
+
43
+ # Проверим данные
44
+ print(documents[:5]) # Печатаем первые 5 элементов
45
+
46
+
47
+ # Кодируем тексты в эмбеддинги
48
+ doc_embeddings = []
49
+ for doc in documents:
50
+ tokens = tokenizer(doc, return_tensors="pt", padding=True, truncation=True)
51
+ with torch.no_grad():
52
+ embedding = model(**tokens).last_hidden_state[:, 0, :].numpy() # Берём CLS-токен
53
+ doc_embeddings.append(embedding)
54
+
55
+ # Превращаем список в numpy-массив
56
+ doc_embeddings = np.vstack(doc_embeddings)
57
+
58
+ # Добавляем в FAISS
59
+ index.add(doc_embeddings)
60
+
61
+ # Проверяем, сколько векторов в базе
62
+ print("Векторов в индексе:", index.ntotal)
63
+
64
+ def search_query(query, index, top_k=3):
65
+ # Токенизация запроса
66
+ tokens = tokenizer(query, return_tensors="pt", padding=True, truncation=True)
67
+
68
+ # Генерация эмбеддинга для запроса
69
+ with torch.no_grad():
70
+ query_embedding = model(**tokens).last_hidden_state[:, 0, :].numpy()
71
+
72
+ # Поиск ближайших векторов
73
+ D, I = index.search(query_embedding, top_k)
74
+
75
+ return D, I
76
+
77
+ # Пример запроса
78
+ query = "веб-сервис"
79
+
80
+ # Получаем результаты поиска
81
+ distances, indices = search_query(query, index)
82
+
83
+ # Печатаем результаты
84
+ print("Результаты поиска:")
85
+ for dist, idx in zip(distances[0], indices[0]):
86
+ print(f"Текст: {documents[idx]} | Расстояние: {dist}")
87
+
88
+
89
+ def search_in_faiss(query: str):
90
+ # Преобразуем запрос в эмбеддинг
91
+ tokens = tokenizer(query, return_tensors="pt", padding=True, truncation=True)
92
+ with torch.no_grad():
93
+ query_embedding = model(**tokens).last_hidden_state[:, 0, :].numpy()
94
+
95
+ # Находим ближайшие векторы в FAISS
96
+ distances, indices = index.search(query_embedding, k=5)
97
+
98
+ # Формируем результаты
99
+ results = [documents[idx] for idx in indices[0]]
100
+ return results
101
+
102
+ iface = gr.Interface(
103
+ fn=search_in_faiss, # Функция для поиска в FAISS
104
+ inputs="text", # Ввод текста
105
+ outputs="text", # Вывод результата (тексты документов)
106
+ title="Поиск по проектам",
107
+ description="Введите запрос, и система найдет наиболее подходящие ответы из базы знаний."
108
+ )
109
+
110
+ # Запуск интерфейса
111
+ iface.launch(
112
+ share=True
113
+ )
test.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
2
+
3
+ # Путь к сохранённой модели
4
+ model_name = "./results"
5
+
6
+ try:
7
+ # Попытка загрузить модель и токенизатор
8
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
9
+ model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
10
+ except Exception as e:
11
+ print(f"Ошибка при загрузке модели: {e}")
12
+ print("Проверьте содержимое папки './results'.")
13
+ exit()
14
+
15
+ # Функция для генерации ответов
16
+ def generate_answer(input_text):
17
+ inputs = tokenizer(input_text, return_tensors="pt", max_length=128, truncation=True)
18
+ outputs = model.generate(**inputs, max_length=128)
19
+ return tokenizer.decode(outputs[0], skip_special_tokens=True)
20
+
21
+ # Тестирование модели
22
+ if __name__ == "__main__":
23
+ while True:
24
+ question = input("Введите вопрос (или 'exit' для выхода): ")
25
+ if question.lower() in ["exit", "quit"]:
26
+ print("Завершение работы.")
27
+ break
28
+ answer = generate_answer(question)
29
+ print(f"Ответ модели: {answer}")
train.py CHANGED
@@ -17,12 +17,12 @@ model = get_peft_model(model, config)
17
 
18
  # Загружаем данные (пример из data.json)
19
  train_data = [
20
- {"instruction": "Что такое Canfly Inna?", "response": "Canfly Inna — это FastAPI сервер с RAG."},
21
- {"instruction": "Как работает FAISS?", "response": "FAISS — это быстрый поиск ближайших соседей."}
22
  ]
23
 
24
  # Преобразуем в формат для обучения
25
- train_texts = [f"Q: {d['instruction']}\nA: {d['response']}" for d in train_data]
26
  train_encodings = tokenizer(train_texts, padding=True, truncation=True, return_tensors="pt")
27
 
28
  # Настройки обучения
 
17
 
18
  # Загружаем данные (пример из data.json)
19
  train_data = [
20
+ {"input": "Что такое Canfly Inna?", "output": "Canfly Inna — это FastAPI сервер с RAG."},
21
+ {"input": "Как работает FAISS?", "output": "FAISS — это быстрый поиск ближайших соседей."}
22
  ]
23
 
24
  # Преобразуем в формат для обучения
25
+ train_texts = [f"Q: {d['input']}\nA: {d['output']}" for d in train_data]
26
  train_encodings = tokenizer(train_texts, padding=True, truncation=True, return_tensors="pt")
27
 
28
  # Настройки обучения