Skip to main content

AI Service with FastAPI

Project description

MCP Server - Model Context Protocol API

FastAPI Python Poetry Prometheus GraphQL

MCP Server - это реализация Model Context Protocol (MCP) на базе FastAPI, предоставляющая стандартизированный интерфейс для взаимодействия между LLM-моделями и приложениями.

Особенности

  • 🚀 Высокопроизводительный API на базе FastAPI и асинхронных операций
  • 🔄 Полная поддержка MCP с ресурсами, инструментами, промптами и сэмплированием
  • 📊 Мониторинг и метрики через Prometheus и Grafana
  • 🧩 Расширяемость через простые интерфейсы для добавления новых инструментов
  • 📝 GraphQL API для гибкой работы с данными
  • 💬 WebSocket поддержка для реал-тайм взаимодействия
  • 🔍 Семантический поиск через интеграцию с Elasticsearch
  • 🗃️ Кэширование через Redis для улучшения производительности
  • 📦 Управление зависимостями через Poetry для надежного управления пакетами

Начало работы

Установка

  1. Клонировать репозиторий:

    git clone https://github.com/yourusername/myaiserv.git
    cd myaiserv
    
  2. Установить Poetry (если еще не установлен):

    curl -sSL https://install.python-poetry.org | python3 -
    
  3. Установить зависимости через Poetry:

    poetry install
    

Запуск сервера

poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

Или через утилиту just:

just run

После запуска API доступен по адресу: http://localhost:8000

Документация API

Структура проекта

myaiserv/
├── app/
│   ├── core/             # Базовые компоненты MCP
│   │   ├── base_mcp.py   # Абстрактные классы MCP
│   │   └── base_sampling.py  # Базовые классы для сэмплирования
│   ├── models/           # Pydantic модели
│   │   ├── mcp.py        # Модели данных MCP
│   │   └── graphql.py    # GraphQL схема
│   ├── services/         # Бизнес-логика
│   │   └── mcp_service.py # Сервис MCP
│   ├── storage/          # Хранилище данных
│   ├── tools/            # Инструменты MCP
│   │   ├── example_tool.py   # Примеры инструментов
│   │   └── text_processor.py # Инструмент обработки текста
│   ├── utils/            # Утилиты
│   └── main.py           # Точка входа FastAPI
├── app/tests/            # Тесты
├── docs/                 # Документация
│   └── MCP_API.md        # Описание API
├── pyproject.toml        # Конфигурация Poetry и инструментов
└── .justfile             # Задачи для утилиты just

Доступные инструменты

File System Tool

Инструмент для работы с файловой системой, поддерживающий операции чтения, записи, удаления и листинга файлов.

curl -X POST "http://localhost:8000/tools/file_operations" \
     -H "Content-Type: application/json" \
     -d '{"operation": "list", "path": "."}'

Weather Tool

Инструмент для получения погодных данных по координатам.

curl -X POST "http://localhost:8000/tools/weather" \
     -H "Content-Type: application/json" \
     -d '{"latitude": 37.7749, "longitude": -122.4194}'

Text Analysis Tool

Инструмент для анализа текста, включая определение тональности и суммаризацию.

curl -X POST "http://localhost:8000/tools/text_analysis" \
     -H "Content-Type: application/json" \
     -d '{"text": "Example text for analysis", "analysis_type": "sentiment"}'

Text Processor Tool

Инструмент для обработки текста, включая форматирование, расчет статистики, извлечение сущностей.

curl -X POST "http://localhost:8000/tools/text_processor" \
     -H "Content-Type: application/json" \
     -d '{"operation": "statistics", "text": "Example text", "stat_options": ["chars", "words"]}'

Image Processing Tool

Инструмент для обработки изображений, поддерживающий изменение размера, обрезку и применение фильтров.

curl -X POST "http://localhost:8000/tools/image_processing" \
     -H "Content-Type: application/json" \
     -d '{"operation": "resize", "image_data": "base64...", "params": {"width": 800, "height": 600}}'

WebSocket API

Для подключения к WebSocket API:

const socket = new WebSocket("ws://localhost:8000/ws");

socket.onopen = () => {
  socket.send(JSON.stringify({
    type: "initialize",
    id: "my-request-id"
  }));
};

socket.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log("Received:", data);
};

GraphQL API

Примеры запросов через GraphQL:

# Получение списка всех инструментов
query {
  getTools {
    name
    description
  }
}

# Выполнение инструмента
mutation {
  executeTool(input: {
    name: "text_processor",
    parameters: {
      operation: "statistics",
      text: "Example text for analysis"
    }
  }) {
    content {
      type
      text
    }
    is_error
  }
}

Запуск тестов

Для запуска тестов используйте Poetry:

poetry run pytest

Или через утилиту just:

just test

Docker

Сборка и запуск через Docker Compose

docker compose up -d

Для запуска отдельных сервисов:

docker compose up -d web redis elasticsearch

Интеграция с LLM

MCP Server предоставляет стандартизированный интерфейс для интеграции с LLM-моделями различных поставщиков:

import httpx

async def query_mcp_with_llm(prompt: str):
    async with httpx.AsyncClient() as client:
        # Запрос к MCP для получения контекста и инструментов
        tools_response = await client.get("http://localhost:8000/tools")
        tools = tools_response.json()["tools"]

        # Отправка запроса к LLM с включением MCP контекста
        llm_response = await client.post(
            "https://api.example-llm.com/v1/chat",
            json={
                "messages": [
                    {"role": "system", "content": "You have access to the following tools:"},
                    {"role": "user", "content": prompt}
                ],
                "tools": tools,
                "tool_choice": "auto"
            }
        )

        return llm_response.json()

Метрики и мониторинг

MCP Server предоставляет метрики в формате Prometheus по эндпоинту /metrics. Метрики включают:

  • Количество запросов к каждому инструменту
  • Время выполнения запросов
  • Ошибки и исключения

Разработка

Для форматирования кода и проверки линтерами:

just fmt
just lint

Лицензия

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mseep_myaiserv-0.1.1.tar.gz (52.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mseep_myaiserv-0.1.1-py3-none-any.whl (83.5 kB view details)

Uploaded Python 3

File details

Details for the file mseep_myaiserv-0.1.1.tar.gz.

File metadata

  • Download URL: mseep_myaiserv-0.1.1.tar.gz
  • Upload date:
  • Size: 52.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.12

File hashes

Hashes for mseep_myaiserv-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c41a0ed558416683f23c72acab95c93b842ac773680b295022994f0eaaa390db
MD5 434523d12d8798c0fed7595702c74de3
BLAKE2b-256 c01e153594a52f987da8aec57d5cc13bface6bd92b87cf3e4ffa61581698ee55

See more details on using hashes here.

File details

Details for the file mseep_myaiserv-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: mseep_myaiserv-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 83.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.12

File hashes

Hashes for mseep_myaiserv-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0e7f5a6c25dbf38b1a31a3dc866b82c3b9a357c17c8006df273d6a401a10295a
MD5 601a2857dcc0220a323e5771e7ccfab1
BLAKE2b-256 0a2d538b48f2c5afb6ea6bf834231ad43043e5ee3304425ae0d90bb672887ed8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page