add docking score calculation in chemist agent - #176
Conversation
| import logging | ||
| from pathlib import Path | ||
| import os | ||
| from ChemCoScientist.chemical_utils.ocr_pipeline import * |
There was a problem hiding this comment.
Можно ли перенести все утилиты, которые импортируются из ChemCoSci в папку с MCP, чтобы можно было создать изолированное окружение только для этого сервера.
There was a problem hiding this comment.
предлагаешь пока что скопировать все в папку с mcp?
There was a problem hiding this comment.
Все что требуется для самостоятельного запуска MCP сервера да. Будем пока так пробовать
|
|
||
|
|
||
| @mcp.tool() | ||
| def python_repl_tool( |
There was a problem hiding this comment.
Это тул для написания кода просто? Если это просто про возможность агентом писать код и через этот тул его вызывать - то можно упразднить здесь данный тулл, так как будет отдельный тулл для кодогенерации. А здесь он просто лишний контекст жрет и путаницу наводит.
There was a problem hiding this comment.
Общее замечание. Сформировать MCP сервера в отдельные директории и с отдельными pyproject.toml файлами и зависимостями. И отдебажить чтобы ставилось отдельное окружение через uv.
Вот пример из AutoMas как нужно организовать директории с MCP:
Adding a new MCP server
- Create a directory under
mcp-servers/:
mcp-servers/my-server/
pyproject.toml
src/
my_server/
server.py
- In
pyproject.toml, add the standard project metadata and a[tool.fedotmas.mcp]section:
[project]
name = "my-mcp-server"
version = "0.1.0"
dependencies = ["fastmcp>=2.14.5"]
[project.scripts]
my-mcp-server = "my_server.server:main"
[tool.fedotmas.mcp]
name = "my-server"
description = "Short description of what the server does — the meta-agent reads this to decide when to use it."
tags = ["relevant", "tags"]После этого, можно будет написать DockerFile для этого всего.
|
|
||
| Args: | ||
| smiles (str): The SMILES string representing the molecule to visualize. | ||
| config (RunnableConfig): Configuration object containing necessary settings, |
There was a problem hiding this comment.
Config нигде дальше не используется, там грузится стейт и он тоже не используется. Значит можно это удалить.
Более того, RunnableConfig для агента, когда он сделает запрос к MCP серверу, вернется просто как аргумент, без пояснения что это какой-то нужный формат конфига. Так что это нужно просто убрать, так как с точки зрения MCP сервера не дает информации.
There was a problem hiding this comment.
хорошо, убрал
| state = config["configurable"].get("state") | ||
| # tool_call_id: Annotated[str, InjectedToolCallId] = state['messages'][-1]["tool_calls"][0]['id'] | ||
|
|
||
| path_to_results = os.path.join( |
There was a problem hiding this comment.
Тут же путь сохраняется через переменную окружения.
Сделай пока на прямую агрумент с передачей пути сохранения изображения строкой, проверку на успешность сохранения, и при успешности сохранения - функция будет возвращать этот же путь, куда сохранена картинка.
В дальнейшем будем переводить все на S3.
PS Получается импорты langchain больше не нужны.
There was a problem hiding this comment.
убрал переменные окружения, когда переносил не было понимания, что это будет отдельный контейнер
| Returns: | ||
| response (dict): Dictionary containing docking score for the molecule and the HTML file. | ||
| """ | ||
| response = calculate_docking_score(smiles, pdb_id) |
There was a problem hiding this comment.
Расчет докинг скора в итоге в отдельном контейнере? И оно еще не работает?
There was a problem hiding this comment.
да, в отдельном, запущено на каком-то из серваков
| return data | ||
| except asyncio.CancelledError: | ||
| raise | ||
| except Exception: |
There was a problem hiding this comment.
Отдельный вопрос как ты это тестировал, тестировал ли через ClientMCP - https://gofastmcp.com/development/tests#clear-intent
Вот простейший пример как я лично тетсирую свой сервак на предмет его работоспособности и что он возвращает.
import asyncio
from fastmcp import Client, FastMCP
# In-memory server (ideal for testing)
server = FastMCP("TestServer")
client = Client(server)
# Local Python script
client = Client("http://10.32.2.2:8883/mcp")
async def main():
async with client:
# Basic server interaction
await client.ping()
# List available operations
tools = await client.list_tools()
resources = await client.list_resources()
prompts = await client.list_prompts()
print(tools,resources,prompts)
# Execute operations
result = await client.call_tool("generate_alzheimer_mols", {"num":2})
print(result)
asyncio.run(main())
| standardized affinity type filtering. | ||
|
|
||
| Args: | ||
| source (str): Name of data source ("bindingdb" or "chembl"). |
| or a "couldn't obtain smiles" message if the name is invalid. | ||
| """ | ||
| max_attempts = 3 | ||
| for attempts in range(max_attempts): |
There was a problem hiding this comment.
Нужны ли здесь попытки вообще? Если смайлс не конвертится - то он и за 3 попытки не сконвертится?
There was a problem hiding this comment.
есть шанс, что пабкем лагает, поэтому было добавлено, но писалось не мной изначально
|
@SoloWayG учел все правки, осталось только составить Dockerfile, решить вопрос по поводу того, копировать ли все utils из ChemCoScientist, а еще после заполню pyproject.toml |

ChemOCR tools were transferred to Chemist agent and docking score tool was added