@@ -83,6 +83,9 @@ interface ToolSet1 : ToolSet1BaseInterface, ToolSet {
8383 @LLMDescription(" int argument overridden" )
8484 intArg : Int
8585 ): String
86+
87+ @Tool(" customName" )
88+ fun toolWithCustomName (): String
8689}
8790
8891open class ToolSet1Impl : ToolSet1 {
@@ -117,6 +120,10 @@ open class ToolSet1Impl : ToolSet1 {
117120 override fun toolBase2OverriddenInInterface (intArg : Int ): String {
118121 return " toolBase2OverriddenInInterface called: $intArg "
119122 }
123+
124+ override fun toolWithCustomName (): String {
125+ return " toolWithCustomName called"
126+ }
120127}
121128
122129class DerivedToolSet1Impl : ToolSet1Impl () {
@@ -280,6 +287,7 @@ class ToolsFromCallableTest {
280287#2: ToolDescriptor(name=tool4, description=Perfect tool 4, requiredParameters=[ToolParameterDescriptor(name=arg, description=int argument, type=Integer)], optionalParameters=[])
281288#3: ToolDescriptor(name=toolBase1, description=Base tool 1, requiredParameters=[], optionalParameters=[])
282289#4: ToolDescriptor(name=toolBase2OverriddenInInterface, description=Base tool 2 description overridden, requiredParameters=[ToolParameterDescriptor(name=intArg, description=int argument overridden, type=Integer)], optionalParameters=[])
290+ #5: ToolDescriptor(name=customName, description=toolWithCustomName, requiredParameters=[], optionalParameters=[])
283291""" .trim()
284292 ),
285293 Arguments .of(
@@ -291,6 +299,7 @@ class ToolsFromCallableTest {
291299#3: ToolDescriptor(name=tool4, description=Perfect tool 4, requiredParameters=[ToolParameterDescriptor(name=arg, description=int argument, type=Integer)], optionalParameters=[])
292300#4: ToolDescriptor(name=toolBase1, description=Base tool 1, requiredParameters=[], optionalParameters=[])
293301#5: ToolDescriptor(name=toolBase2OverriddenInInterface, description=Base tool 2 description overridden, requiredParameters=[ToolParameterDescriptor(name=intArg, description=int argument overridden, type=Integer)], optionalParameters=[])
302+ #6: ToolDescriptor(name=customName, description=toolWithCustomName, requiredParameters=[], optionalParameters=[])
294303""" .trim()
295304 ),
296305 Arguments .of(
@@ -299,6 +308,7 @@ class ToolsFromCallableTest {
299308#0: ToolDescriptor(name=tool1, description=The best tool number 1, requiredParameters=[ToolParameterDescriptor(name=arg, description=int argument, type=Integer)], optionalParameters=[])
300309#1: ToolDescriptor(name=toolBase1, description=Base tool 1, requiredParameters=[], optionalParameters=[])
301310#2: ToolDescriptor(name=toolBase2OverriddenInInterface, description=Base tool 2 description overridden, requiredParameters=[ToolParameterDescriptor(name=intArg, description=int argument overridden, type=Integer)], optionalParameters=[])
311+ #3: ToolDescriptor(name=customName, description=toolWithCustomName, requiredParameters=[], optionalParameters=[])
302312""" .trim()
303313 ),
304314 )
@@ -335,4 +345,25 @@ class ToolsFromCallableTest {
335345 }.trim()
336346 assertEquals(expectedDescription, rendered)
337347 }
348+
349+ @Test
350+ fun testToolPropertiesOnClasses () {
351+ val tools = ToolSet1Impl ().asTools(json)
352+ val rendered = buildString {
353+ for ((i, tool) in tools.withIndex()) {
354+ appendLine(" #$i : name=${tool.name} description=${tool.description} " )
355+ }
356+ }.trim()
357+ assertEquals(
358+ """
359+ #0: name=tool1 description=The best tool number 1
360+ #1: name=tool2 description=Wonderful tool number 2
361+ #2: name=tool4 description=Perfect tool 4
362+ #3: name=toolBase1 description=Base tool 1
363+ #4: name=toolBase2OverriddenInInterface description=Base tool 2 description overridden
364+ #5: name=customName description=toolWithCustomName
365+ """ .trim(),
366+ rendered
367+ )
368+ }
338369}
0 commit comments