metadata
tags:
- sentence-transformers
- sentence-similarity
- feature-extraction
- dense
- generated_from_trainer
- dataset_size:15565
- loss:MultipleNegativesRankingLoss
base_model: google/embeddinggemma-300m
widget:
- source_sentence: >-
I need to lock an object in my model so I can work on other parts without
accidentally selecting it. How can I do that?
sentences:
- >-
You cannot use the following methods IsObjectLocked, LockObjects,
UnlockObject, SelectObject, SelectObjects, UnlockObjects,
IsObjectSelectable, ShowObject, IsObjectNormal
- object
- "You can use the following methods to complete the task.\nmethod: LockObject\ndescription: Locks a single object. Locked objects are visible, and they can be\r\n snapped to. But, they cannot be selected.\nsyntax: LockObject(object_id)\nparameters: object_id (guid): The identifier of an object\nreturns: bool: True or False indicating success or failure\n\nFollowing is the code that uses this method to complete the task as per user query.\n\n```python\nimport rhinoscriptsyntax as rs\n\n# Lock an object in the model to prevent accidental selection\nid = rs.GetObject(\"Select object to lock\")\nif id:\n rs.LockObject(id)\n print(\"Object locked successfully.\")\nelse:\n print(\"No object selected.\")\n```"
- source_sentence: >-
I want to create a cloud of points in my Rhino model. Can you show me how
to do that?
sentences:
- "You can use the following methods to complete the task.\nmethod: AddPointCloud\ndescription: Adds point cloud object to the document\nsyntax: AddPointCloud(points, colors=None)\nparameters: \npoints ([point, ....]): list of values where every multiple of three represents a point\r\ncolors ([color, ...]): list of colors to apply to each point\n\nreturns: \nguid: identifier of point cloud on success\n\n\nFollowing is the code that uses this method to complete the task as per user query.\n\n```python\nimport rhinoscriptsyntax as rs\n\n# Create a cloud of points in Rhino\npoints = [(0, 0, 0), (1, 1, 1), (2, 2, 2), (3, 3, 3)] # Define points\nrs.AddPointCloud(points) # Add the point cloud to the model\n```"
- geometry
- >-
You cannot use the following methods PointCloudPoints, AddPoints,
CreatePoint, PointCloudCount, AddPoint, AddLine, PointCloudHidePoints,
CreateVector, PointCoordinates
- source_sentence: >-
I need to find out which vertices make up each face of my mesh. Can you
help me with that?
sentences:
- >-
You can use the following methods to complete the task.
method: MeshFaces
description: Returns face vertices of a mesh
syntax: MeshFaces(object_id, face_type=True)
parameters: object_id (guid): identifier of a mesh object
face_type (bool, optional): The face type to be returned. True = both
triangles and quads. False = only triangles
returns: list([point, point, point, point], ...): 3D points that define
the face vertices of the mesh. If face_type is True, then faces are
returned as both quads and triangles (4 3D points). For triangles, the
third and fourth vertex will be identical. If face_type is False, then
faces are returned as only triangles(3 3D points). Quads will be
converted to triangles.
Following is the code that uses this method to complete the task as per
user query.
```python
import rhinoscriptsyntax as rs
# Get the mesh object from the user
obj = rs.GetObject("Select mesh", rs.filter.mesh)
# Retrieve the vertex indices for each face of the mesh
faces = rs.MeshFaces(obj, True)
if faces:
rs.EnableRedraw(False)
i = 0
while i < len(faces):
# Each face can be a triangle or a quad
face = faces[i:i+4] if len(faces) > i + 3 else faces[i:i+3]
print("Face vertices:", face)
i += 3 if len(face) == 3 else 4
rs.EnableRedraw(True)
```
- >-
You cannot use the following methods MeshVertexFaces, MeshFaceVertices,
MeshVertices, MeshVertexCount, MeshFaceCenters, MeshTriangleCount,
MeshQuadCount, MeshFaceCount, MeshNakedEdgePoints
- mesh
- source_sentence: >-
Can you show me how to check if two transformation matrices are the same
in Rhino?
sentences:
- "You can use the following methods to complete the task.\nmethod: XformChangeBasis2\ndescription: Returns a change of basis transformation matrix of None on error\nsyntax: XformChangeBasis2(x0,y0,z0,x1,y1,z1)\nparameters: \nx0,y0,z0 (vector): initial basis\r\nx1,y1,z1 (vector): final basis\n\nreturns: \ntransform: The 4x4 transformation matrix if successful\r\nNone: if not successful\n\n\nFollowing is the code that uses this method to complete the task as per user query.\n\n```python\nimport rhinoscriptsyntax as rs\n\n# Function to check if two transformation matrices are the same\n# Parameters: mat1, mat2 - transformation matrices to compare\n# Returns: True if they are the same, False otherwise\ndef are_matrices_equal(mat1, mat2):\n return rs.XformCompare(mat1, mat2) == 0\n\n# Example usage\nmatrix1 = rs.XformChangeBasis2(1, 0, 0, 0, 1, 0)\nmatrix2 = rs.XformChangeBasis2(1, 0, 0, 0, 1, 0)\nresult = are_matrices_equal(matrix1, matrix2)\nprint(\"Matrices are equal:\" , result)\n```"
- >-
You cannot use the following methods XformCompare, IsXformSimilarity,
IsXformIdentity, IsXformZero, CompareGeometry, CreateXform,
VectorTransform, XformTranslation, TransformObject, XformDeterminant
- transformation
- source_sentence: >-
I need to find where a flat surface meets a sphere. How can I do that in
Rhino?
sentences:
- plane
- >-
You cannot use the following methods LineSphereIntersection, IsSphere,
AddSphere, LinePlaneIntersection, Angle, CircleCenterPoint,
CurveCurveIntersection, CurveSurfaceIntersection, AddCircle3Pt
- >-
You can use the following methods to complete the task.
method: PlaneSphereIntersection
description: Calculates the intersection of a plane and a sphere.
syntax: PlaneSphereIntersection(plane, sphere_plane, sphere_radius)
parameters: plane (plane): The plane to intersect; sphere_plane (plane):
Equatorial plane of the sphere (origin is center); sphere_radius
(float): Radius of the sphere.
returns: list: [type, point/plane, radius] where type=0 for point, 1 for
circle. None on error.
Following is the code that uses this method to complete the task as per
user query.
```python
import rhinoscriptsyntax as rs
# Define a flat surface as a plane
plane = rs.WorldXYPlane()
# Define the radius of the sphere
radius = 10
# Calculate the intersection between the plane and the sphere
results = rs.PlaneSphereIntersection(plane, plane, radius)
# Check if there are results and handle them accordingly
if results:
if results[0] == 0:
# If the intersection is a point, add it to the document
rs.AddPoint(results[1])
else:
# If the intersection is a circle, add it to the document
rs.AddCircle(results[1], results[2])
```
datasets:
- deebak14/embedding_tuple_data_v1
- deebak14/embedding_triplet_data_v1
pipeline_tag: sentence-similarity
library_name: sentence-transformers
metrics:
- cosine_accuracy
model-index:
- name: SentenceTransformer based on google/embeddinggemma-300m
results:
- task:
type: triplet
name: Triplet
dataset:
name: base eval
type: base-eval
metrics:
- type: cosine_accuracy
value: 1
name: Cosine Accuracy
SentenceTransformer based on google/embeddinggemma-300m
This is a sentence-transformers model finetuned from google/embeddinggemma-300m on the embedding_tuple_data_v1 dataset. It maps sentences & paragraphs to a 768-dimensional dense vector space and can be used for semantic textual similarity, semantic search, paraphrase mining, text classification, clustering, and more.
Model Details
Model Description
- Model Type: Sentence Transformer
- Base model: google/embeddinggemma-300m
- Maximum Sequence Length: 2048 tokens
- Output Dimensionality: 768 dimensions
- Similarity Function: Cosine Similarity
- Training Dataset:
Model Sources
- Documentation: Sentence Transformers Documentation
- Repository: Sentence Transformers on GitHub
- Hugging Face: Sentence Transformers on Hugging Face
Full Model Architecture
SentenceTransformer(
(0): Transformer({'max_seq_length': 2048, 'do_lower_case': False, 'architecture': 'Gemma3TextModel'})
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
(2): Dense({'in_features': 768, 'out_features': 3072, 'bias': False, 'activation_function': 'torch.nn.modules.linear.Identity'})
(3): Dense({'in_features': 3072, 'out_features': 768, 'bias': False, 'activation_function': 'torch.nn.modules.linear.Identity'})
(4): Normalize()
)
Usage
Direct Usage (Sentence Transformers)
First install the Sentence Transformers library:
pip install -U sentence-transformers
Then you can load this model and run inference.
from sentence_transformers import SentenceTransformer
# Download from the 🤗 Hub
model = SentenceTransformer("deebak14/embedding_gemma_ft_v1")
# Run inference
queries = [
"I need to find where a flat surface meets a sphere. How can I do that in Rhino?",
]
documents = [
'You can use the following methods to complete the task.\nmethod: PlaneSphereIntersection\ndescription: Calculates the intersection of a plane and a sphere.\nsyntax: PlaneSphereIntersection(plane, sphere_plane, sphere_radius)\nparameters: plane (plane): The plane to intersect; sphere_plane (plane): Equatorial plane of the sphere (origin is center); sphere_radius (float): Radius of the sphere.\nreturns: list: [type, point/plane, radius] where type=0 for point, 1 for circle. None on error.\n\nFollowing is the code that uses this method to complete the task as per user query.\n\n```python\nimport rhinoscriptsyntax as rs\n\n# Define a flat surface as a plane\nplane = rs.WorldXYPlane()\n# Define the radius of the sphere\nradius = 10\n# Calculate the intersection between the plane and the sphere\nresults = rs.PlaneSphereIntersection(plane, plane, radius)\n\n# Check if there are results and handle them accordingly\nif results:\n if results[0] == 0:\n # If the intersection is a point, add it to the document\n rs.AddPoint(results[1])\n else:\n # If the intersection is a circle, add it to the document\n rs.AddCircle(results[1], results[2])\n```',
'You cannot use the following methods LineSphereIntersection, IsSphere, AddSphere, LinePlaneIntersection, Angle, CircleCenterPoint, CurveCurveIntersection, CurveSurfaceIntersection, AddCircle3Pt',
'plane',
]
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings.shape)
# [1, 768] [3, 768]
# Get the similarity scores for the embeddings
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[ 0.6658, 0.4819, -0.1617]])
Evaluation
Metrics
Triplet
- Dataset:
base-eval - Evaluated with
TripletEvaluator
| Metric | Value |
|---|---|
| cosine_accuracy | 1.0 |
Training Details
Training Dataset
embedding_tuple_data_v1
- Dataset: embedding_tuple_data_v1 at b592a1a
- Size: 15,565 training samples
- Columns:
anchorandpositive - Approximate statistics based on the first 1000 samples:
anchor positive type string string details - min: 9 tokens
- mean: 15.98 tokens
- max: 50 tokens
- min: 42 tokens
- mean: 177.53 tokens
- max: 810 tokens
- Samples:
anchor positive Provide an example of using AddRectangle.import rhinoscriptsyntax as rs
plane = rs.WorldXYPlane()
plane = rs.RotatePlane(plane, 45.0, [0,0,1])
rs.AddRectangle(plane, 5.0, 15.0)
Metadata:
Name: AddRectangle
Category: curve
Function Signature: rs.AddRectangle(plane: plane, width: number, height: number) -> guid
Description: Add a rectangular curve to the documentHow do I search for the total number of linetypes in my document?
You can use the following method:
Name: LinetypeCount
Category: linetype
Function Signature: rs.LinetypeCount() -> int
Description: Description: Returns the number of linetypes in the document.
Parameters:
None
Returns:
int: The number of linetypes in the document.How do I maintain the shape of a curve while fitting it?
You can use the following method:
Name: FitCurve
Category: curve
Function Signature: rs.FitCurve(curve_id: guid, degree: int = 3, distance_tolerance: float = -1, angle_tolerance: float = -1) -> guid
Description: Description: Reduces the number of control points of a curve while maintaining its general shape. This function is useful for replacing curves with many control points. For more information, see the Rhino help for the FitCrv command.
Parameters:
curve_id (guid): Identifier of the curve object to be fitted.
eg: '3D4F5A6B-7C8D-9E0F-1A2B-3C4D5E6F7A8B'
degree (int, optional): The degree of the curve, which must be greater than 1. The default is 3.
eg: 3
distance_tolerance (float, optional): The fitting tolerance. If not specified or <= 0.0, the document absolute tolerance is used.
eg: 0.01
angle_tolerance (float, optional): The kink smoothing tolerance in degrees. If 0.0, all kinks are smoothed. If > 0.0, kinks smaller than this value are smoothed. If ... - Loss:
MultipleNegativesRankingLosswith these parameters:{ "scale": 20.0, "similarity_fct": "cos_sim", "gather_across_devices": false }
Evaluation Dataset
embedding_triplet_data_v1
- Dataset: embedding_triplet_data_v1 at 71ea1de
- Size: 476 evaluation samples
- Columns:
anchor,positive, andnegative - Approximate statistics based on the first 476 samples:
anchor positive negative type string string string details - min: 15 tokens
- mean: 23.13 tokens
- max: 38 tokens
- min: 111 tokens
- mean: 252.44 tokens
- max: 1015 tokens
- min: 32 tokens
- mean: 42.48 tokens
- max: 55 tokens
- Samples:
anchor positive negative I need to flatten a curved surface for laser cutting. How can I do that?You can use the following methods to complete the task.
method: UnrollSurface
description: Flattens a developable surface or polysurface
syntax: UnrollSurface(surface_id, explode=False, following_geometry=None, absolute_tolerance=None, relative_tolerance=None)
parameters:
surface_id (guid): the surface's identifier
explode (bool, optional): If True, the resulting surfaces ar not joined
following_geometry ({guid, ...]): List of curves, dots, and points which
should be unrolled with the surface
returns:
list(guid, ...): of unrolled surface ids
tuple((guid, ...),(guid, ...)): if following_geometry is not None, a tuple
[1] is the list of unrolled surface ids
[2] is the list of unrolled following geometry
Following is the code that uses this method to complete the task as per user query.
```python
import rhinoscriptsyntax as rs
# Flatten a curved surface for laser cutting
surface = rs.GetObject("Select curved surface to flatten", rs.filter.surface)
if surface:
# Unrol...You cannot use the following methods ConvertCurveToPolyline, MeshOutline, PullCurveToMesh, ExplodeText, MeshToNurb, IsCurvePlanar, Angle, AddFilletCurve, MeshVolumeCan you show me how to rotate a plane by 30 degrees around its normal axis?You can use the following methods to complete the task.
method: PlaneTransform
description: Transforms a plane.
syntax: PlaneTransform(plane, xform)
parameters: plane (plane): Plane to transform; xform (transform): Transformation to apply.
returns: plane: Resulting plane if successful, otherwise None.
Following is the code that uses this method to complete the task as per user query.python<br>import rhinoscriptsyntax as rs<br><br># Get the current construction plane<br>plane = rs.ViewCPlane()<br><br># Create a rotation transformation of 30 degrees around the normal axis (Z-axis)<br>xform = rs.XformRotation(30.0, plane.ZAxis, plane.Origin)<br><br># Apply the transformation to the plane<br>plane = rs.PlaneTransform(plane, xform)<br><br># Set the new construction plane<br>rs.ViewCPlane(None, plane)<br>You cannot use the following methods RotatePlane, XformRotation1, PlaneFromNormal, VectorRotate, Angle, PlaneFromFrame, LinePlane, MovePlane, CreatePlaneI want to change the height of a text dot I just created. How can I do that?You can use the following methods to complete the task.
method: TextDotHeight
description: Returns or modified the font height of a text dot
syntax: TextDotHeight(object_id, height=None)
parameters:
object_id (guid): identifier of a text dot object
height (number, optional) new font height
returns:
number: If height is not specified, the current text dot height
number: If height is specified, the previous text dot height
None: on error
Following is the code that uses this method to complete the task as per user query.python<br>import rhinoscriptsyntax as rs<br># Change the height of a text dot<br>obj = rs.GetObject("Select text dot")<br>if rs.IsTextDot(obj):<br> previous_height = rs.TextDotHeight(obj, 15.0) # Set new height to 15.0<br> print(f"Previous height was: {previous_height}")<br>You cannot use the following methods TextDotPoint, TextDotFont, TextDotText, TextObjectHeight, IsTextDot, AddTextDot, TextObjectFont, PointCoordinates, ExplodeText - Loss:
MultipleNegativesRankingLosswith these parameters:{ "scale": 20.0, "similarity_fct": "cos_sim", "gather_across_devices": false }
Training Hyperparameters
Non-Default Hyperparameters
eval_strategy: stepsper_device_train_batch_size: 16per_device_eval_batch_size: 16learning_rate: 2e-05warmup_ratio: 0.1bf16: Trueprompts: task: sentence similarity | query:batch_sampler: no_duplicates
All Hyperparameters
Click to expand
overwrite_output_dir: Falsedo_predict: Falseeval_strategy: stepsprediction_loss_only: Trueper_device_train_batch_size: 16per_device_eval_batch_size: 16per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 1eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 2e-05weight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 3max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: {}warmup_ratio: 0.1warmup_steps: 0log_level: passivelog_level_replica: warninglog_on_each_node: Truelogging_nan_inf_filter: Truesave_safetensors: Truesave_on_each_node: Falsesave_only_model: Falserestore_callback_states_from_checkpoint: Falseno_cuda: Falseuse_cpu: Falseuse_mps_device: Falseseed: 42data_seed: Nonejit_mode_eval: Falseuse_ipex: Falsebf16: Truefp16: Falsefp16_opt_level: O1half_precision_backend: autobf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonelocal_rank: 0ddp_backend: Nonetpu_num_cores: Nonetpu_metrics_debug: Falsedebug: []dataloader_drop_last: Falsedataloader_num_workers: 0dataloader_prefetch_factor: Nonepast_index: -1disable_tqdm: Falseremove_unused_columns: Truelabel_names: Noneload_best_model_at_end: Falseignore_data_skip: Falsefsdp: []fsdp_min_num_params: 0fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}fsdp_transformer_layer_cls_to_wrap: Noneaccelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}parallelism_config: Nonedeepspeed: Nonelabel_smoothing_factor: 0.0optim: adamw_torch_fusedoptim_args: Noneadafactor: Falsegroup_by_length: Falselength_column_name: lengthddp_find_unused_parameters: Noneddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falsedataloader_pin_memory: Truedataloader_persistent_workers: Falseskip_memory_metrics: Trueuse_legacy_prediction_loop: Falsepush_to_hub: Falseresume_from_checkpoint: Nonehub_model_id: Nonehub_strategy: every_savehub_private_repo: Nonehub_always_push: Falsehub_revision: Nonegradient_checkpointing: Falsegradient_checkpointing_kwargs: Noneinclude_inputs_for_metrics: Falseinclude_for_metrics: []eval_do_concat_batches: Truefp16_backend: autopush_to_hub_model_id: Nonepush_to_hub_organization: Nonemp_parameters:auto_find_batch_size: Falsefull_determinism: Falsetorchdynamo: Noneray_scope: lastddp_timeout: 1800torch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Noneinclude_tokens_per_second: Falseinclude_num_input_tokens_seen: Falseneftune_noise_alpha: Noneoptim_target_modules: Nonebatch_eval_metrics: Falseeval_on_start: Falseuse_liger_kernel: Falseliger_kernel_config: Noneeval_use_gather_object: Falseaverage_tokens_across_devices: Falseprompts: task: sentence similarity | query:batch_sampler: no_duplicatesmulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}
Training Logs
| Epoch | Step | Training Loss | Validation Loss | base-eval_cosine_accuracy |
|---|---|---|---|---|
| -1 | -1 | - | - | 0.0147 |
| 0.1028 | 100 | 0.1601 | - | - |
| 0.2055 | 200 | 0.0474 | 0.2296 | 0.8971 |
| 0.3083 | 300 | 0.0749 | - | - |
| 0.4111 | 400 | 0.1037 | 0.1457 | 0.9265 |
| 0.5139 | 500 | 0.0564 | - | - |
| 0.6166 | 600 | 0.0706 | 0.3362 | 0.9475 |
| 0.7194 | 700 | 0.0549 | - | - |
| 0.8222 | 800 | 0.0427 | 0.2154 | 0.9538 |
| 0.9250 | 900 | 0.0599 | - | - |
| 1.0277 | 1000 | 0.0656 | 0.2439 | 0.9706 |
| 1.1305 | 1100 | 0.0409 | - | - |
| 1.2333 | 1200 | 0.0283 | 0.2422 | 0.9727 |
| 1.3361 | 1300 | 0.0336 | - | - |
| 1.4388 | 1400 | 0.0338 | 0.2397 | 0.9664 |
| 1.5416 | 1500 | 0.0384 | - | - |
| 1.6444 | 1600 | 0.0271 | 0.1048 | 0.9832 |
| 1.7472 | 1700 | 0.0305 | - | - |
| 1.8499 | 1800 | 0.024 | 0.1172 | 0.9916 |
| 1.9527 | 1900 | 0.014 | - | - |
| 2.0555 | 2000 | 0.018 | 0.0898 | 0.9958 |
| 2.1583 | 2100 | 0.0091 | - | - |
| 2.2610 | 2200 | 0.0154 | 0.0721 | 0.9916 |
| 2.3638 | 2300 | 0.0123 | - | - |
| 2.4666 | 2400 | 0.0119 | 0.0876 | 0.9937 |
| 2.5694 | 2500 | 0.0173 | - | - |
| 2.6721 | 2600 | 0.0091 | 0.0482 | 1.0 |
| 2.7749 | 2700 | 0.0211 | - | - |
| 2.8777 | 2800 | 0.0146 | 0.0550 | 1.0 |
| 2.9805 | 2900 | 0.0101 | - | - |
| -1 | -1 | - | - | 1.0 |
Framework Versions
- Python: 3.12.11
- Sentence Transformers: 5.1.0
- Transformers: 4.56.1
- PyTorch: 2.8.0+cu126
- Accelerate: 1.10.1
- Datasets: 4.0.0
- Tokenizers: 0.22.0
Citation
BibTeX
Sentence Transformers
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/1908.10084",
}
MultipleNegativesRankingLoss
@misc{henderson2017efficient,
title={Efficient Natural Language Response Suggestion for Smart Reply},
author={Matthew Henderson and Rami Al-Rfou and Brian Strope and Yun-hsuan Sung and Laszlo Lukacs and Ruiqi Guo and Sanjiv Kumar and Balint Miklos and Ray Kurzweil},
year={2017},
eprint={1705.00652},
archivePrefix={arXiv},
primaryClass={cs.CL}
}