diff --git a/config/config.go b/config/config.go index b5f3783e1ba5b95a340b23b24547c5faf68999a9..4419a7ee70dbd4d2f6fcf57172023bd2a40ae961 100644 --- a/config/config.go +++ b/config/config.go @@ -27,15 +27,15 @@ type ServerConfig struct { } type DBConfig struct { - hostname string `env:"HOSTNAME, default=localhost"` - port int `env:"PORT, default=5435"` - user string `env:"USER, default=postgres"` - password string `env:"PASSWORD, default=secret"` - dbname string `env:"DBNAME, default=products_db"` + Hostname string `env:"HOSTNAME, default=localhost"` + Port int `env:"PORT, default=5435"` + User string `env:"USER, default=postgres"` + Password string `env:"PASSWORD, default=secret"` + Dbname string `env:"DBNAME, default=products_db"` } func (c *DBConfig) ConnectionString() string { - return fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=disable", c.hostname, c.user, c.password, c.dbname, c.port) + return fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=disable", c.Hostname, c.User, c.Password, c.Dbname, c.Port) } // LLMConfig содержит настройки для работы с LLM (модель, API-ключ, endpoint). diff --git a/deployment/docker-compose.yml b/deployment/docker-compose.yml index 59f8144b978aa171bddf1d7ce7810f1a1ac495d0..53be48698852a3c68d6f71ec65da2d8c27373555 100644 --- a/deployment/docker-compose.yml +++ b/deployment/docker-compose.yml @@ -85,6 +85,8 @@ services: - "11434:11434" volumes: - ollama-models:/models + - ./ollama-entrypoint.sh:/entrypoint.sh:ro + entrypoint: [ "/entrypoint.sh" ] app: build: diff --git a/deployment/front.html b/deployment/front.html deleted file mode 100644 index 2e10068642bb6635415cbf525b6551d3e0b9f7f8..0000000000000000000000000000000000000000 --- a/deployment/front.html +++ /dev/null @@ -1,37 +0,0 @@ -<!DOCTYPE html> -<html lang="ru"> -<head> - <meta charset="UTF-8"> - <title>Тест Telegram Login Widget</title> - <!-- Подключаем скрипт виджета Telegram --> - <script async src="https://telegram.org/js/telegram-widget.js?15" - data-telegram-login="technodil_bot" - data-size="large" - data-userpic="false" - data-request-access="write" - data-onauth="onTelegramAuth(user)"> - </script> - <script> - // Функция обратного вызова, которая вызывается после успешного логина - function onTelegramAuth(user) { - console.log("Полученные данные от Telegram:", user); - - // Пример отправки данных на ваш backend методом POST - fetch("http://localhost:8080/auth/telegram", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify(user) - }) - .then(response => response.json()) - .then(data => console.log("Ответ сервера:", data)) - .catch(error => console.error("Ошибка:", error)); - } - </script> -</head> -<body> - <h1>Тест виджета Telegram Login</h1> - <p>Нажмите на кнопку ниже, чтобы войти через Telegram.</p> -</body> -</html> \ No newline at end of file diff --git a/deployment/ollama-entrypoint.sh b/deployment/ollama-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..eda7a3111791b5210e7c881fbceab8c835e8d2bd --- /dev/null +++ b/deployment/ollama-entrypoint.sh @@ -0,0 +1,18 @@ +#!/bin/sh +set -e + +# Запускаем сервер Ollama в фоновом режиме +echo "Starting Ollama server..." +ollama serve & + +# Ждем несколько секунд, чтобы сервер успел запуститься +echo "Waiting for Ollama server to initialize..." +sleep 10 + +# Подтягиваем модель bge-m3 +echo "Pulling model bge-m3..." +ollama pull bge-m3 + +# Выводим сообщение и держим контейнер запущенным +echo "Model bge-m3 pulled successfully. Ollama server is running." +tail -f /dev/null diff --git a/internal/productassistant/server.go b/internal/productassistant/server.go index 37128badb7ba4baaa71a698de5829354277d6bce..09db905eda0cdeb2825c1f85e4041d75f144e44b 100644 --- a/internal/productassistant/server.go +++ b/internal/productassistant/server.go @@ -161,7 +161,7 @@ func (s *Server) GetFavouritesGet(ctx context.Context, req GetFavouritesGetReque return GetFavouritesGet400Response{}, err } var content map[string]interface{} - if err := json.Unmarshal([]byte(prod.Content), &content); err != nil { + if err := json.Unmarshal([]byte(prod.PriorityData), &content); err != nil { return GetFavouritesGet400Response{}, fmt.Errorf("failed to parse product content: %w", err) } productResp := struct { @@ -210,7 +210,7 @@ func (s *Server) GetFavouritesList(ctx context.Context, _ GetFavouritesListReque } for _, p := range products { var cnt map[string]interface{} - if err := json.Unmarshal([]byte(p.Content), &cnt); err != nil { + if err := json.Unmarshal([]byte(p.PriorityData), &cnt); err != nil { cnt = make(map[string]interface{}) } list = append(list, struct { @@ -242,7 +242,7 @@ func (s *Server) GetGetAbstractProduct(ctx context.Context, request GetGetAbstra return GetGetAbstractProduct400Response{}, err } var content map[string]interface{} - if err := json.Unmarshal([]byte(prod.Content), &content); err != nil { + if err := json.Unmarshal([]byte(prod.PriorityData), &content); err != nil { return GetGetAbstractProduct400Response{}, fmt.Errorf("failed to parse product content: %w", err) } productResp := struct { @@ -330,7 +330,7 @@ func (s *Server) PostLlmRequest(ctx context.Context, req PostLlmRequestRequestOb } for _, p := range products { var cnt map[string]interface{} - if err := json.Unmarshal([]byte(p.Content), &cnt); err != nil { + if err := json.Unmarshal([]byte(p.PriorityData), &cnt); err != nil { cnt = make(map[string]interface{}) } parsedProducts, _ := s.ProductService.GetParsedProductsByAbstractID(ctx, p.ID) diff --git a/internal/service/llm_service.go b/internal/service/llm_service.go index ae86cceaed4f7a0a716e2db4a2d8e6fdb341c264..65ae98406b89f275d0eca531b961ce549f732902 100644 --- a/internal/service/llm_service.go +++ b/internal/service/llm_service.go @@ -45,10 +45,10 @@ func (s *llmService) ProcessQuery(ctx context.Context, query string, limit int) productsContext := "" for _, p := range products { - productsContext += fmt.Sprintf("\n%s: %s", p.ID, p.Content) + productsContext += fmt.Sprintf("\n(%s,%s): %s", p.ID, p.Name, p.PriorityData) } - prompt := "Ты ассистент по поиску товаров. Верни JSON: {\"Ids\":[\"uuid1\",...], \"comment\":\"текст\"}\nПродукты:" + productsContext + prompt := "Ты ассистент по поиску товаров. Верни JSON: {\"(Id,name)\":[\"uuid1\",...], \"comment\":\"текст\"}\nПродукты:" + productsContext response, err := s.client.GenerateContent(ctx, prompt, query) if err != nil {