Skip to content

foggyTeam/aiservice

Repository files navigation

AIService - Сервис анализа досок

AIService - это сервис на Go, предназначенный для обработки данных цифровых досок с помощью ИИ. Сервис принимает данные доски (содержащие элементы такие как прямоугольники, текст, эллипсы, линии) и обрабатывает их с использованием ИИ для суммаризации или структуризации содержимого.

API Эндпоинты

GET запрос /health

Проверка работоспособности сервиса

  • Request: пустой
  • Response:
{
  "status": "ok",
  "time": "2026-02-16T10:30:00Z"
}
  • Виды ошибок: нет

POST запрос /summarize

Обработка доски и возврат резюме содержимого

  • Request:
{
  "requestId": "req-simple-sum-001",
  "userId": "user-simple-123",
  "requestType": "summarize",
  "board": {
    "boardId": "simple-board-001",
    "imageUrl": "",
    "elements": [
      {
        "id": "elem-title",
        "type": "text",
        "x": 50.0,
        "y": 50.0,
        "width": 200.0,
        "height": 40.0,
        "rotation": 0.0,
        "content": "Project Overview"
      }
    ]
  }
}
  • Response (при успешной синхронной обработке):
{
  "requestId": "req-simple-sum-001",
  "userId": "user-simple-123",
  "requestType": "summarize",
  "text": {
    "id": "generated-id",
    "type": "text",
    "x": 100.0,
    "y": 300.0,
    "width": 250.0,
    "height": 60.0,
    "rotation": 0.0,
    "content": "Краткое описание выводов пользователей на доске..."
  }
}
  • Response (при асинхронной обработке):
"job-id-string"
  • Виды ошибок, status codes:
    • 400: Неверные входные данные (пустой boardID, userID, слишком много элементов)
    • 500: Внутренняя ошибка сервера
    • 202: Задача принята в очередь на обработку

POST запрос /structurize

Обработка доски и возврат иерархии структуры файлов

  • Request:
{
  "requestId": "req-simple-struct-001",
  "userId": "user-simple-789",
  "requestType": "structurize",
  "board": {
    "boardId": "simple-struct-board-001",
    "imageUrl": "",
    "elements": [
      {
        "id": "elem-title",
        "type": "text",
        "x": 50.0,
        "y": 50.0,
        "width": 200.0,
        "height": 40.0,
        "rotation": 0.0,
        "content": "Simple Project Structure"
      }
    ]
  },
  "file": {
    "name": "simple-project",
    "type": "doc",
    "children": [
      {
        "name": "main.js",
        "type": "doc"
      },
      {
        "name": "README.md",
        "type": "doc"
      }
    ]
  }
}
  • Response (при успешной синхронной обработке):
{
  "requestId": "req-simple-struct-001",
  "userId": "user-simple-789",
  "requestType": "structurize",
  "aiTreeResponse": "simple-project─┬─main.js\n               └───README.md",
  "file": {
    "name": "simple-project",
    "type": "doc",
    "children": [
      {
        "name": "main.js",
        "type": "doc"
      },
      {
        "name": "README.md",
        "type": "doc"
      }
    ]
  }
}
  • Response (при асинхронной обработке):
"job-id-string"
  • Виды ошибок, status codes:
    • 400: Неверные входные данные (пустой файл, userID, слишком много элементов)
    • 500: Внутренняя ошибка сервера
    • 202: Задача принята в очередь на обработку

GET запрос /jobs/:id

Получение статуса задачи по ID

  • Request: пустой
  • Response:
{
  "ID": "job-id-string",
  "Request": {
    "RequestType": "summarize",
    "SummarizeRequest": {
      "RequestID": "req-simple-sum-001",
      "UserID": "user-simple-123",
      "RequestType": "summarize",
      "Board": {
        "BoardID": "simple-board-001",
        "ImageURL": "",
        "Elements": [...]
      }
    }
  },
  "CreatedAt": 1234567890,
  "Retries": 0,
  "Status": "completed"
}
  • Виды ошибок, status codes:
    • 404: Задача не найдена
    • 200: Информация о задаче успешно получена

PUT запрос /jobs/:id/abort

Отмена задачи по ID

  • Request: пустой
  • Response: пустой
  • Виды ошибок, status codes:
    • 404: Задача не найдена
    • 200: Задача успешно отменена

Swagger документация

Проект включает в себя Swagger документацию, которую можно посмотреть перейдя по адресу: http://localhost:8080/swagger/index.html после запуска сервиса.

Конфигурация

Переменные окружения

Откройте .env и настройте переменные:

Основные переменные

  • PORT: порт для запуска сервера (по умолчанию: "8080")
  • ENV: тип окружения ("dev" или "prod") - влияет на поведение кэширования
  • LLM_PROVIDER: провайдер ИИ ("ollama", "gemini", "yandex") (по умолчанию: "ollama")

LLM Provider переменные

  • OLLAMA_BASE_URL: URL Ollama сервера (по умолчанию: "http://ollama:11434")
  • GEMINI_API_KEY: ключ API для Google Gemini
  • LLM_MODEL: модель ИИ (по умолчанию: "gemma3" для Ollama)

Database переменные

  • DB_TYPE: тип базы данных ("memory" или "sqlite") (по умолчанию: "memory")
  • SQLITE_FILE_PATH: путь к файлу SQLite базы данных (по умолчанию: "./aiservice.db")

Image Configuration

  • IMAGES_DIR: директория для временных изображений (по умолчанию: "/app/images")

Запуск

Локальная разработка

# Ollama (default)
go run cmd/server/main.go

# Gemini
go run cmd/server/main.go --provider gemini

# Yandex
go run cmd/server/main.go --provider yandex

Docker Compose

Запуск с Ollama (локальная модель):

docker-compose --profile ollama up -d

Запуск с Gemini (требуется API ключ):

LLM_PROVIDER=gemini GEMINI_API_KEY=your_key docker-compose up -d

Запуск с Yandex:

LLM_PROVIDER=yandex docker-compose up -d

Особенности

  • Поддержка нескольких LLM провайдеров (Ollama, Gemini, Yandex)
  • Поддержка очереди заданий для асинхронной обработки
  • Многоуровневое кэширование для уменьшения обращений к API ИИ
  • Анализ digital ink (рукописного ввода) через Google Handwriting API
  • Автоматическая загрузка и очистка изображений для локальных моделей
  • Pipeline архитектура для обработки запросов

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors