Fusion Needle

Version 0.2.0

Fusion Needle is a fine-tune of Needle 3 by Cactus Compute for one job: turning one written modelling step ("ร˜6 hole at (10, 0)") into tool calls for Autodesk Fusion. It is the model behind the Fusion Needle desktop app, which sends each call to Fusion through the MCP server that Fusion itself provides.

  • Input: one feature in plain English, a one-line design state, and up to five tool schemas.
  • Output: 0 to 4 tool calls from a catalogue of 47 narrow tools (JSON, constrained by the engine's grammar).
  • Runs: on the CPU, through Cactus's needle engine. No cloud service is involved.
  • Files: fusion-mcp-20L.cact (63.4 MB), fusion-mcp-8L.cact (27.4 MB)

What is new in 0.2.0

47 tools instead of 33. The 14 added tools cover requests that 0.1.0 could not answer:

  • Whole shapes in one step: a box from width, depth and height; a cylinder from diameter and height.
  • Holes without coordinates: a hole in the centre of a face; a hole in each corner at a given margin; bolt holes by size, M3 to M12, as a clearance, counterbore or countersink hole.
  • Working on the body: split it in two, make copies in a row, set the thickness of a plate, scale it, rotate it, delete it, hide it, show it, give it a colour.
  • "Extrude down" and "extrude from the bottom" now mean the negative direction.

What got worse

Adding tools cost accuracy on the old ones, and the model is now too eager to call a tool.

  • On the 620 test cases that 0.1.0 was measured on, exact match fell from 75.0% to 70.6%.
  • On the requests among them that must produce no call (off-topic, a required value missing, a negated request), 0.2.0 calls a tool anyway in 37.8% of cases; 0.1.0 did so in 29.1% and base Needle 3 in 31.1%.

If you only need the original 33 tools, 0.1.0 is the better model. It stays available under the tag v0.1.0. Whichever version you use, check each call before it runs. The desktop app does part of this for you: it holds back calls whose numbers are not written in your request, but it cannot catch every wrong choice of tool.

Credit: Needle 3 by Cactus Compute

This model is not a new architecture and was not trained from scratch. It is derived from Needle 3, the tool-calling model by Cactus Compute, and it only runs on their engine. All credit for the base model, its architecture, the .cact format and the inference engine goes to them.

This project is independent. It is not affiliated with, sponsored by or endorsed by Cactus Compute or by Autodesk, Inc. Autodesk and Fusion are registered trademarks or trademarks of Autodesk, Inc.

Intended use

Driving Autodesk Fusion step by step from a written feature list, with a person watching:

plate 40x30x10 โ†’ ร˜6 hole at (10, 0) โ†’ polar pattern ร—6 โ†’ fillet the top edges R2

The companion app splits the goal into features, asks the model for the calls of one feature at a time, shows them, and runs vetted script templates in Fusion. The model never writes code.

Not intended for: general chat, free-form CAD scripting, tools outside the catalogue below, or unattended use on designs that matter.

Tools

The model was tuned for these 47 tools. Their full JSON schemas are in tools.json.

Tool Family What it does Arguments (required in bold)
create_sketch sketch Start a new sketch on an origin plane or on a face of the body. plane, face, offset
draw_rectangle sketch Draw a rectangle in the active sketch, centred on a point. width, height, center_x, center_y
draw_circle sketch Draw a circle in the active sketch. diameter, center_x, center_y
draw_line sketch Draw a straight line in the active sketch between two points. start_x, start_y, end_x, end_y
draw_slot sketch Draw a straight slot (obround) in the active sketch; 20x6 = length 20, width 6. length, width, center_x, center_y, angle
add_dimension sketch Add a driving dimension to entities of the active sketch. kind, value, entity_one, entity_two
add_constraint sketch Add a geometric constraint between entities of the active sketch. kind, entity_one, entity_two
extrude feature Extrude (pad) the active sketch profile into a solid, or cut it out of the body (pocket). distance, operation, direction, extent
create_hole feature Drill a hole into a face of the body. diameter, x, y, depth, face
circular_pattern feature Repeat a feature or body around an axis (polar pattern, circular array). count, axis, angle, target
rectangular_pattern feature Repeat a feature or body in a row or grid along X and Y (linear pattern). x_count, x_spacing, y_count, y_spacing, target
mirror feature Mirror a feature or body across an origin plane. plane, target
fillet feature Round edges of the body with a radius. radius, edges
chamfer feature Bevel edges of the body with an equal-distance chamfer. distance, edges
shell feature Hollow out the body, leaving walls of a given thickness and one face open. thickness, open_face
undo history Undo the most recent operation.
redo history Redo the most recently undone operation.
draw_polygon sketch Draw a regular polygon such as a hexagon in the active sketch. shape, size, measure, center_x, center_y, angle
draw_arc sketch Draw a circular arc in the active sketch, counter-clockwise from a start to an end angle. radius, start_angle, end_angle, center_x, center_y
revolve feature Revolve the active sketch profile around an origin axis into a solid (turned part). axis, angle, operation
combine body Boolean of bodies: join the other bodies to the first body, subtract them from it, or keep the overlap. operation
move_body body Move the body by a distance along X, Y and Z. x, y, z
set_material body Assign a physical material to the body. material
set_parameter parameter Create a named user parameter or change its value. name, value, unit
list_parameters parameter List the user parameters with their values.
measure_body inspect Report the size (bounding box), volume and mass of each body.
check_timeline inspect Check the timeline for features with errors or warnings.
capture_view view Take a screenshot of the model, optionally from a standard view direction. direction
fit_view view Zoom the view so the whole model fits the window.
export_model document Export the design to a file in a named format. format, name
new_document document Create a new empty design document.
save_document document Save the active document.
open_document document Find a saved document by name and open it. name
create_box body Create a box (block, cube) in one step, centred on the origin. width, depth, height
create_cylinder body Create a cylinder (rod, disc) in one step, standing on the origin. diameter, height
center_hole feature Drill a hole at the centre (middle) of a face of the body. diameter, depth, face
corner_holes feature Drill a hole near each corner of a face of the body. diameter, margin, depth, face
bolt_hole feature Drill a clearance hole for a metric screw such as M6. size, style, x, y
split_body body Split the body into two bodies at its middle (cut it in half). direction, offset
copy_body body Duplicate the body: make copies of it in a row. count, spacing, axis
set_thickness feature Change the thickness (height) of the existing body by editing its extrude. thickness
scale_body body Scale the body uniformly by a factor (resize, make bigger or smaller). factor
rotate_body body Rotate the body in place by an angle around an axis. angle, axis
delete_body body Delete the body from the design.
hide_body body Hide the body (make it invisible) without deleting it.
show_body body Show hidden bodies again (unhide).
set_color body Give the body a colour (appearance). color

How to use

With the app

Install Fusion Needle. It downloads manifest.json and the default weight file from this repository on its first start, checks the SHA-256, and works offline afterwards.

Directly, with the needle Python package

pip install cactus-needle==3.1.1
needle download CharlZKP/fusion-needle3/fusion-mcp-20L.cact --out .
import json
import needle

catalogue = json.load(open("tools.json", encoding="utf-8"))
offered = ["create_hole", "draw_circle", "extrude", "fillet", "undo"]          # at most five per turn
agent = needle.Needle(
    tools=[tool for tool in catalogue if tool["name"] in offered],
    system="units: mm; sketch: none; bodies: Body1; last_feature: Extrude1",    # facts about the design
    weights="fusion-mcp-20L.cact",
    auto_date=False,
)
answer = agent.complete("ร˜6 hole at (10, 0)")
print(answer["function_calls"])
# expected shape: [{"name": "create_hole", "arguments": {"diameter": 6, "x": 10, "y": 0}}]

The weight files are tied to the engine version (cactus-needle==3.1.1). The system line is a list of facts in exactly this form: units, sketch (none or <name> on <plane>), bodies, last_feature.

Evaluation

Numbers are measured on the built weight files through the shipped engine, on a held-out suite of hand-written single-step requests (calls, multi-call steps and requests that must produce no call) that were never used for tuning. A case counts as exact only when the tool names and every argument match. The suite has 844 cases.

Metric Fine-tuned, 20 layers Base Needle 3
Exact match (right tools and right arguments) 67.8% (n=844) 49.4% (n=844)
Tool selection (right set of tools) 76.5% 59.2%
Argument accuracy (given the right tools) 84.8% (n=488) 74.5% (n=325)
False-call rate on requests that need no call (lower is better) 42.1% (n=273) 35.9% (n=273)
Missed-call rate on requests that need a call (lower is better) 5.9% (n=571) 32.8% (n=571)

Bar chart: exact match, tool selection, argument accuracy and false-call rate of the fine-tuned model against base Needle 3

Bar chart: exact-match accuracy per tool family, fine-tuned model against base Needle 3

Bar chart: exact-match accuracy per wording variant, fine-tuned model against base Needle 3

Original cases and cases added in 0.2.0

The suite grew from 620 to 844 cases with this version. The 224 added cases cover the new tools and more requests that must produce no call. 0.1.0 has no figure for them because it does not have the new tools.

Cases 0.2.0 exact match 0.1.0 exact match Base Needle 3 exact match 0.2.0 false calls 0.1.0 false calls Base Needle 3 false calls
Original 620 cases 70.6% 75.0% 50.2% 37.8% (n=196) 29.1% (n=196) 31.1% (n=196)
224 cases added in 0.2.0 59.8% 47.3% 53.2% (n=77) 48.1% (n=77)
All 844 67.8% 49.4% 42.1% (n=273) 35.9% (n=273)

Against base Needle 3, the fine-tune is 18 points ahead on exact match, mostly because it calls a tool when one is needed (it misses about 6% of such requests, the base model about 33%). It is behind the base model at staying silent: it makes a call on 42.1% of the requests that need none, the base model on 35.9%. The added cases are harder than the original ones for both models.

All figures are for the 20-layer file. The 8-layer file has not been scored.

Limitations

  • Values must be written in the request. The model copies argument values from the text. It does not convert units, compute, or guess: "make a hole" has no diameter, so the answer is no call.
  • One feature per turn. A turn yields at most four calls and the model has no memory of earlier turns; the design state line is its only context.
  • At most five tools are visible per turn. The app chooses them with a keyword router; a request whose tool is not among the five cannot be answered correctly.
  • Millimetres and English. The tools take millimetres and the suite is English only.
  • No confidence score. Locally tuned Needle models do not report one; rely on the empty answer and on the calls the engine withholds.
  • Only lightly tried in a real Autodesk Fusion. The scores above compare the model's calls with expected calls. Whether every call produces the intended geometry in Fusion has been tried by hand for a handful of requests on Windows only; see the status section of the app's README.
  • Only the 47 tools above. Lofts, sweeps, threads, drawings, CAM and assemblies are out of scope.

Files

File Layers Size SHA-256
fusion-mcp-20L.cact 20 63.4 MB b0da36c0f9515c4e809f3717c634c0d75a6926a82a9c001f8db0a2778b4dafbd
fusion-mcp-8L.cact 8 27.4 MB b896dca4e603ed0d6695b5cda8f158f5cba5cec473acf26824eb20b4dd9d7776

manifest.json lists every weight file with its size and SHA-256; the app verifies a download against it.

Licence

Apache-2.0, the same licence as the Needle 3 base weights these are fine-tuned from. See LICENSE.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for CharlZKP/fusion-needle3

Finetuned
(5)
this model