Created
March 4, 2025 19:50
-
-
Save TimelessP/01ddce51e5c5549db0f6e8c6feca2dfd to your computer and use it in GitHub Desktop.
LMStudio tool calling using act()
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import lmstudio as lms | |
import time | |
import random | |
import math | |
# ----------------- Functions for LLM to Call ----------------- | |
def get_time() -> str: | |
"""Returns the current time.""" | |
return time.strftime("%Y-%m-%d %H:%M:%S") | |
def convert_units(value: float, unit: str) -> str: | |
""" | |
Converts between common units. | |
Supported conversions: | |
- "km" → Converts kilometers to miles (default assumption). | |
- "miles" → Converts miles to kilometers (default assumption). | |
- "km_to_miles" → Explicitly converts kilometers to miles. | |
- "miles_to_km" → Explicitly converts miles to kilometers. | |
- "c_to_f" → Converts Celsius to Fahrenheit. | |
If only "km" or "miles" is given, the function assumes "km_to_miles" or "miles_to_km". | |
Example: | |
>>> convert_units(100, "km") | |
"100 km to miles = 62.14" | |
>>> convert_units(50, "miles") | |
"50 miles to km = 80.47" | |
""" | |
conversions = { | |
"c_to_f": lambda c: c * 9/5 + 32, | |
"km_to_miles": lambda km: km * 0.621371, | |
"miles_to_km": lambda miles: miles / 0.621371 | |
} | |
# Normalize user input | |
unit = unit.lower().replace(" ", "_").replace("-", "_") | |
# Handle ambiguous input by defaulting to common conversions | |
if unit == "km": | |
unit = "km_to_miles" | |
elif unit == "miles": | |
unit = "miles_to_km" | |
if unit in conversions: | |
return f"{value} {unit.replace('_', ' ')} = {conversions[unit](value):.2f}" | |
return f"Unsupported unit conversion: {unit}" | |
def is_prime(n: int) -> bool: | |
"""Returns True if a number is prime.""" | |
if n < 2: | |
return False | |
for i in range(2, int(math.sqrt(n)) + 1): | |
if n % i == 0: | |
return False | |
return True | |
def random_number(start: int, end: int) -> int: | |
"""Returns a random number between start and end.""" | |
return random.randint(start, end) | |
# ----------------- Load LM Studio Model ----------------- | |
model = lms.llm("phi-4@q3_k_l") | |
# ----------------- Example Query Using Function Calling ----------------- | |
model.act( | |
"What is the current time? Also, convert 100 km to miles and check if 97 is prime.", | |
tools=[get_time, convert_units, is_prime, random_number], # Pass tools as a list | |
on_message=print, | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment