/
Skuperday
/
Pushka-project
Обзор
Документация
Войти
/
Skuperday
/
Pushka-project
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
tmp..py
506 строк
16 KB
ENikolaev
added vectors
25 мар 2025, 08:04
25 мар 2025, 08:04
7a63c81
Код
Авторство
О чём код?
from langchain_gigachat.chat_models import GigaChat from langchain_gigachat.embeddings import GigaChatEmbeddings from langchain_community.document_loaders import DirectoryLoader from langchain_community.document_loaders import TextLoader from langchain_gigachat.embeddings import GigaChatEmbeddings # from langchain_community.vectorstores import FAISS from chromadb.config import Settings from langchain_chroma import Chroma from langchain.chains import RetrievalQA from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain.prompts import PromptTemplate from chromadb.utils import embedding_functions from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnablePassthrough giga = GigaChat( credentials="NjQ4ZTFiZWMtY2JkOC00NWQyLWJhNDUtMTk2MTkyMjliNzY0OjdkMWNmMWEwLTBhYjYtNGZiZS1iNzZjLWU0NGM4M2NiYTg5NQ==", model="GigaChat-2-Max", profanity_check=False, timeout=600, scope="GIGACHAT_API_PERS", max_tokens=8000, verify_ssl_certs=False, streaming=False, temperature=0.0, # Фиксируем температуру top_p=1.0, # Фиксируем top_p seed=42 # Фиксируем seed, если поддерживается ) # existing_code = """ # import React, { useState } from "react"; # import { # UnorderedListOutlined, # FileOutlined, # HomeOutlined, # TeamOutlined, # } from "@ant-design/icons"; # import type { MenuProps } from "antd"; # import { Avatar, Breadcrumb, Layout, Menu, Table, Tag, theme } from "antd"; # const { Content, Footer, Sider } = Layout; # type MenuItem = Required<MenuProps>["items"][number]; # // Типы задач # type TaskType = "Баг" | "Фича" | "Улучшение"; # // Статусы задач # type TaskStatus = "Новая" | "В работе" | "Ревью" | "Завершена"; # // Приоритеты задач # type TaskPriority = "Высокий" | "Средний" | "Низкий"; # // Маппинг цветов для типов задач # const typeColorMap: Record<TaskType, string> = { # Баг: "error", # Фича: "geekblue", # Улучшение: "purple", # }; # // Маппинг цветов для статусов задач # const statusColorMap: Record<TaskStatus, string> = { # Новая: "cyan", # "В работе": "processing", # Ревью: "warning", # Завершена: "success", # }; # // Интерфейс для исполнителя # interface Assignee { # id: number; # name: string; # initials: string; # } # // Список исполнителей # const assignees: Assignee[] = [ # { id: 1, name: "Иванов И.И.", initials: "ИИ" }, # { id: 2, name: "Петров П.П.", initials: "ПП" }, # { id: 3, name: "Сидоров С.С.", initials: "СС" }, # ]; # // Интерфейс для данных задачи # interface TaskData { # key: string; # id: number; # type: TaskType; # address: string; # status: TaskStatus; # priority: TaskPriority; # assigneeId: number; # } # const dataSource: TaskData[] = [ # { # key: "1", # id: 1, # type: "Баг", # address: "Исправить ошибку авторизации", # status: "В работе", # priority: "Высокий", # assigneeId: 1, # }, # { # key: "2", # id: 2, # type: "Фича", # address: "Добавить фильтрацию в таблицу", # status: "Новая", # priority: "Средний", # assigneeId: 2, # }, # { # key: "3", # id: 3, # type: "Улучшение", # address: "Оптимизировать загрузку данных", # status: "Завершена", # priority: "Низкий", # assigneeId: 3, # }, # { # key: "4", # id: 4, # type: "Баг", # address: "Исправить верстку на мобильных устройствах", # status: "В работе", # priority: "Высокий", # assigneeId: 1, # }, # { # key: "5", # id: 5, # type: "Фича", # address: "Добавить экспорт в Excel", # status: "Новая", # priority: "Средний", # assigneeId: 2, # }, # { # key: "6", # id: 6, # type: "Улучшение", # address: "Обновить руководство пользователя", # status: "Ревью", # priority: "Низкий", # assigneeId: 3, # }, # ]; # const columns = [ # { # title: "#", # dataIndex: "id", # key: "id", # }, # { # title: "Тип", # dataIndex: "type", # key: "type", # render: (type: TaskType) => ( # <Tag color={typeColorMap[type] || "default"}>{type}</Tag> # ), # }, # { # title: "Название", # dataIndex: "address", # key: "address", # }, # { # title: "Статус", # dataIndex: "status", # key: "status", # render: (status: TaskStatus) => ( # <Tag color={statusColorMap[status] || "default"}>{status}</Tag> # ), # }, # { # title: "Приоритет", # dataIndex: "priority", # key: "priority", # }, # { # title: "Исполнитель", # dataIndex: "assigneeId", # key: "assignee", # render: (assigneeId: number) => { # const assignee = assignees.find((a) => a.id === assigneeId); # if (!assignee) return null; # return ( # <div style={{ display: "flex", alignItems: "center" }}> # <Avatar # style={{ # backgroundColor: stringToColor(assignee.name), # marginRight: "8px", # }} # > # {assignee.initials} # </Avatar> # {assignee.name} # </div> # ); # }, # }, # ]; # function getItem( # label: React.ReactNode, # key: React.Key, # icon?: React.ReactNode, # children?: MenuItem[] # ): MenuItem { # return { # key, # icon, # children, # label, # } as MenuItem; # } # const items: MenuItem[] = [ # getItem("Главная", "1", <HomeOutlined />), # getItem("Задачи", "2", <UnorderedListOutlined />), # getItem("Команда", "sub2", <TeamOutlined />, [ # getItem("Команда 1", "6"), # getItem("Команда 2", "8"), # ]), # getItem("Докумениы", "9", <FileOutlined />), # ]; # const stringToColor = (str: string) => { # let hash = 0; # for (let i = 0; i < str.length; i++) { # hash = str.charCodeAt(i) + ((hash << 5) - hash); # } # let color = "#"; # for (let i = 0; i < 3; i++) { # const value = (hash >> (i * 8)) & 0xff; # color += ("00" + value.toString(16)).substr(-2); # } # return color; # }; # const App: React.FC = () => { # const [collapsed, setCollapsed] = useState(false); # const { # token: { colorBgContainer, borderRadiusLG }, # } = theme.useToken(); # return ( # <Layout style={{ minHeight: "100vh" }}> # <Sider # collapsible # collapsed={collapsed} # onCollapse={(value) => setCollapsed(value)} # > # <div className="demo-logo-vertical" /> # <Menu # theme="dark" # defaultSelectedKeys={["1"]} # mode="inline" # items={items} # /> # </Sider> # <Layout> # <Content style={{ margin: "0 16px" }}> # <Breadcrumb style={{ margin: "16px 0" }}> # <Breadcrumb.Item>Главная</Breadcrumb.Item> # <Breadcrumb.Item>Задачи</Breadcrumb.Item> # </Breadcrumb> # <div # style={{ # padding: 24, # minHeight: 360, # background: colorBgContainer, # borderRadius: borderRadiusLG, # }} # > # <Table dataSource={dataSource} columns={columns} /> # </div> # </Content> # <Footer style={{ textAlign: "center" }}> # Платформа управления командой и процессами{new Date().getFullYear()}{" "} # </Footer> # </Layout> # </Layout> # ); # }; # export default App; # """ user_story=""" # Pushka-project Репозиторий решения по задаче 8, трек 1 Добавление задачи Шаг 1: Инициация добавления задачи Пользователь: Заходит на сайт и видит страницу "Задачи". Действие: Кликает на кнопку "Добавить задачу" вверху страницы. Реакция системы: Плавно открывается модальное окно для добавления новой задачи. Пользователь видит: Первый шаг: "Выбор типа задачи". Три варианта задачи: Фича (обычная задача, например, выполнение какого-то действия). Баг (ошибка или проблема, которую нужно исправить). Улучшение (предложение по улучшению или изменению функционала). Краткое описание каждого типа задачи. Кнопки "Далее" и "Отмена". Шаг 2: Ввод основной информации Пользователь: Выбирает тип задачи и нажимает "Далее". Реакция системы: Открывается второй шаг: "Название и описание задачи". Пользователь видит: Поле для ввода названия задачи. Поле для ввода описания задачи. Если выбран тип "Баг": Дополнительное поле "Как воспроизвести" (текстовое поле для описания шагов воспроизведения ошибки). Если выбран тип "Запрос на изменение": Дополнительное поле "Что нужно изменить" (текстовое поле для описания изменений). Поле "Причина изменения" (текстовое поле для обоснования запроса). Кнопки: "Назад" (вернуться к выбору типа задачи). "Далее" (перейти к следующему шагу). Шаг 3: Выбор исполнителя, дедлайна и приоритета Пользователь: Заполняет основную информацию и нажимает "Далее". Реакция системы: Открывается третий шаг: "Исполнитель и дедлайн и приоритет". Пользователь видит: Выпадающий список для выбора исполнителя (например, из списка сотрудников). Поле для выбора дедлайна (календарь для выбора даты). Выпадающий список для выбора приоритета задачи: Низкий Средний Высокий Кнопки: "Назад" (вернуться к предыдущему шагу). "Далее" (перейти к финальному шагу). Шаг 4: Подтверждение и завершение Пользователь: Выбирает исполнителя, дедлайн и приоритет, затем нажимает "Далее". Реакция системы: Открывается финальный шаг: "Подтверждение". Пользователь видит: Сводка всех введенных данных: Тип задачи. Название и описание задачи. Дополнительные поля (если применимо). Исполнитель, дедлайн и приоритет. Сообщение: "Задача успешно создана! Окно закроется через 3 секунды." Реакция системы через 3 секунды: Модальное окно автоматически закрывается. Новая задача добавляется в список задач на странице "Мои задачи". Шаг 5: Отображение задачи в списке Пользователь: Видит обновленный список задач. Реакция системы: Новая задача отображается с названием, статусом "Новая", исполнителем и дедлайном. """ db3 = Chroma(persist_directory="./chroma_db") promptTemplate = """ Ты фпронтенд разработчик. У тебя есть исходный код: {existing_code} Пользовательская история: {user_story} Пожалуйста измени существующий код так, что бы он соответствоал пользовательской истории, добавив новый функционал. Результатом верни только готовый код, без пояснений. """ docs = db3.get(include=['metadatas', 'documents']) array_docs = '' counter = 0 curFile = '' for doc in docs['documents']: source = docs['metadatas'][counter]['source'] if('.tsx' in source): if(curFile == source): array_docs += '\n' + doc; else: print(source) array_docs += '\n' + source + '\n' + doc; curFile = source; # print(docs['metadatas'][counter]['source']) counter +=1 # print(array_docs) # array_docs.append(doc) # print(collection.get(include=['embeddings', 'documents', 'metadatas'])) # print({'\n'.join([doc for doc in docs['documents']])}) # print(len(docs['documents'])) # raise Exception(); existing_code = array_docs # print(collection.get(include=['embeddings', 'documents', 'metadatas'])) prompt = PromptTemplate(template=promptTemplate, input_variables=['existing_code', 'user_story']) # print(docs[0]) # raise Exception(); context = array_docs formattedPrompt = prompt.format(existing_code=context, user_story=user_story) newCode = giga.invoke(formattedPrompt) # for chunk in giga.stream("Расскажи о себе подробно"): # print(chunk.choices[0].delta.content, end="", flush=True) print("------------") print(newCode) print(newCode.content) # print(newCode['messages'][-1].content) print("------------") # print(formattedPrompt) # loader = DirectoryLoader('./platform', glob="**/*.*", loader_cls=TextLoader) # docs = loader.load() # text_splitter = RecursiveCharacterTextSplitter( # chunk_size=500, # chunk_overlap=50 # ) # docs_splited = text_splitter.split_documents(docs) # print(len(docs_splited)) # embeddings = GigaChatEmbeddings(credentials="NjQ4ZTFiZWMtY2JkOC00NWQyLWJhNDUtMTk2MTkyMjliNzY0OjdkMWNmMWEwLTBhYjYtNGZiZS1iNzZjLWU0NGM4M2NiYTg5NQ==", # profanity_check=False, # timeout=600, # model="Embeddings", # verify_ssl_certs=False, # streaming=True) # vectorstore = Chroma.from_documents( # docs_splited, # embeddings, # persist_directory="./chroma_db", # client_settings=Settings(anonymized_telemetry=False) # ) # retriever = vectorstore.as_retriever(search_type="similarity") # # db3 = Chroma(collection_name='v_db', persist_directory="./chroma_db", embedding_function=embeddings) # # vectorstore.persist() # retrieved_docs = retriever.invoke("Я хочу получить только номер версии библиотеки antd из файла package.json") # print(len(retrieved_docs)) # print('\n'.join([doc.page_content for doc in retrieved_docs])) # while(True): # try: # response = giga.get_models() # print(response) # user_input = input("Пользователь: ") # #if user_input == "пока": # # break # messages.append(HumanMessage(content=user_input)) # res = giga.invoke(messages) # messages.append(res) # print("GigaChat: ", res.content) # except Exception as e: # print("Error: ", e)