Add configurable production machine constraints

This commit is contained in:
2026-09-26 10:47:53 +02:00
parent e6a7d4da72
commit 3e13d24405
12 changed files with 904 additions and 3 deletions
+36
View File
@@ -14,12 +14,15 @@ from roll_calculation import (
)
from rollcalc_mcp_tools import (
analyze_transport_capacity_result,
check_production_feasibility_result,
calculate_material_weight_result,
calculate_product_length_result,
calculate_roll_diameter_result,
get_article_result,
get_machine_result,
search_articles_result,
)
from machine_constraints import check_production_feasibility, get_machine
from transport_calculation import analyze_transport, transport_presets
@@ -76,6 +79,25 @@ class McpAdapterTests(unittest.TestCase):
"candidates": [],
})
def test_machine_adapters_delegate_to_the_shared_domain(self):
arguments = {
"machine": "B1",
"roll_weight_kg": 2500.0,
"average_diameter_mm": 876.0,
"maximum_diameter_mm": 876.1,
"core_diameter_mm": 168.0,
"product_width_m": 5.0,
}
self.assertEqual(get_machine_result("B1"), get_machine("B1"))
self.assertEqual(
check_production_feasibility_result(**arguments),
check_production_feasibility(arguments),
)
self.assertEqual(
check_production_feasibility_result(**arguments)["feasibility"],
"feasible_with_warnings",
)
def test_material_weight_adapter_delegates_without_a_core_diameter(self):
arguments = {
"roll_length_m": 60.0,
@@ -196,6 +218,8 @@ class McpAdapterTests(unittest.TestCase):
[
"get_article",
"search_articles",
"get_machine",
"check_production_feasibility",
"calculate_material_weight",
"calculate_product_length",
"calculate_roll_diameter",
@@ -207,6 +231,8 @@ class McpAdapterTests(unittest.TestCase):
instance = mcp_server.create_server()
tools = instance._tool_manager._tools
search_tool = tools["search_articles"]
machine_tool = tools["get_machine"]
feasibility_tool = tools["check_production_feasibility"]
material_weight_tool = tools["calculate_material_weight"]
product_length_tool = tools["calculate_product_length"]
roll_schema = tools["calculate_roll_diameter"].parameters
@@ -214,6 +240,16 @@ class McpAdapterTests(unittest.TestCase):
transport_schema = transport_tool.parameters
self.assertEqual(search_tool.parameters["required"], ["query"])
self.assertEqual(machine_tool.parameters["required"], ["machine"])
self.assertEqual(
feasibility_tool.parameters["required"], ["machine"]
)
self.assertIn("average_diameter_mm", feasibility_tool.parameters["properties"])
self.assertIn("maximum_diameter_mm", feasibility_tool.parameters["properties"])
self.assertIn("tool, not the LLM, decides", feasibility_tool.description)
self.assertIn("never override failed constraints", feasibility_tool.description)
self.assertIn("warnings", feasibility_tool.description)
self.assertIn("Missing configured V1 roll inputs", feasibility_tool.description)
self.assertEqual(
search_tool.parameters["properties"]["query"]["type"], "string"
)