aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjwansek <eddie.atten.ea29@gmail.com>2024-02-27 12:43:15 +0000
committerjwansek <eddie.atten.ea29@gmail.com>2024-02-27 12:43:15 +0000
commitb5e7a1d7d2adb3670824d726573cc08157a02b69 (patch)
treefa2f8f00435468a36e6705cd696648991b599d89
parenta398252b0dfe3c112e5643104aaf22c411a15b1d (diff)
downloadnoetic-llama-b5e7a1d7d2adb3670824d726573cc08157a02b69.tar.gz
noetic-llama-b5e7a1d7d2adb3670824d726573cc08157a02b69.zip
Added the ROS servicecall API
-rw-r--r--.devcontainer/Dockerfile (renamed from noetic-llama/.devcontainer/Dockerfile)0
-rw-r--r--.devcontainer/devcontainer.json (renamed from noetic-llama/.devcontainer/devcontainer.json)0
-rw-r--r--.gitignore1
-rw-r--r--noetic-llama/.catkin_workspace1
-rw-r--r--noetic-llama/src/ollamamessages/CMakeLists.txt206
-rw-r--r--noetic-llama/src/ollamamessages/package.xml70
-rwxr-xr-xnoetic-llama/src/ollamamessages/srv/OllamaCall.srv (renamed from noetic-llama/src/ollamawrapper/srv/OllamaCall.srv)3
-rw-r--r--noetic-llama/src/ollamawrapper/CMakeLists.txt26
-rwxr-xr-x[-rw-r--r--]noetic-llama/src/ollamawrapper/package.xml0
-rw-r--r--noetic-llama/src/ollamawrapper/src/capabilities/weather.py6
-rw-r--r--noetic-llama/src/ollamawrapper/src/ollamawrapper.py21
11 files changed, 317 insertions, 17 deletions
diff --git a/noetic-llama/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 6992623..6992623 100644
--- a/noetic-llama/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
diff --git a/noetic-llama/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 53bcc43..53bcc43 100644
--- a/noetic-llama/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
diff --git a/.gitignore b/.gitignore
index 47f393a..22110b7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
*.env
devel/
+install/
# Byte-compiled / optimized / DLL files
__pycache__/
diff --git a/noetic-llama/.catkin_workspace b/noetic-llama/.catkin_workspace
new file mode 100644
index 0000000..52fd97e
--- /dev/null
+++ b/noetic-llama/.catkin_workspace
@@ -0,0 +1 @@
+# This file currently only serves to mark the location of a catkin workspace for tool integration
diff --git a/noetic-llama/src/ollamamessages/CMakeLists.txt b/noetic-llama/src/ollamamessages/CMakeLists.txt
new file mode 100644
index 0000000..b397131
--- /dev/null
+++ b/noetic-llama/src/ollamamessages/CMakeLists.txt
@@ -0,0 +1,206 @@
+cmake_minimum_required(VERSION 3.0.2)
+project(ollamamessages)
+
+## Compile as C++11, supported in ROS Kinetic and newer
+# add_compile_options(-std=c++11)
+
+## Find catkin macros and libraries
+## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
+## is used, also find other catkin packages
+find_package(catkin REQUIRED COMPONENTS
+ roscpp
+ rospy
+ std_msgs
+ message_generation
+)
+
+## System dependencies are found with CMake's conventions
+# find_package(Boost REQUIRED COMPONENTS system)
+
+
+## Uncomment this if the package has a setup.py. This macro ensures
+## modules and global scripts declared therein get installed
+## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
+# catkin_python_setup()
+
+################################################
+## Declare ROS messages, services and actions ##
+################################################
+
+## To declare and build messages, services or actions from within this
+## package, follow these steps:
+## * Let MSG_DEP_SET be the set of packages whose message types you use in
+## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
+## * In the file package.xml:
+## * add a build_depend tag for "message_generation"
+## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
+## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
+## but can be declared for certainty nonetheless:
+## * add a exec_depend tag for "message_runtime"
+## * In this file (CMakeLists.txt):
+## * add "message_generation" and every package in MSG_DEP_SET to
+## find_package(catkin REQUIRED COMPONENTS ...)
+## * add "message_runtime" and every package in MSG_DEP_SET to
+## catkin_package(CATKIN_DEPENDS ...)
+## * uncomment the add_*_files sections below as needed
+## and list every .msg/.srv/.action file to be processed
+## * uncomment the generate_messages entry below
+## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
+
+## Generate messages in the 'msg' folder
+# add_message_files(
+# FILES
+# Message1.msg
+# Message2.msg
+# )
+
+## Generate services in the 'srv' folder
+add_service_files(
+ FILES
+ OllamaCall.srv
+)
+
+## Generate actions in the 'action' folder
+# add_action_files(
+# FILES
+# Action1.action
+# Action2.action
+# )
+
+## Generate added messages and services with any dependencies listed here
+generate_messages(
+ DEPENDENCIES
+ std_msgs
+)
+
+################################################
+## Declare ROS dynamic reconfigure parameters ##
+################################################
+
+## To declare and build dynamic reconfigure parameters within this
+## package, follow these steps:
+## * In the file package.xml:
+## * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
+## * In this file (CMakeLists.txt):
+## * add "dynamic_reconfigure" to
+## find_package(catkin REQUIRED COMPONENTS ...)
+## * uncomment the "generate_dynamic_reconfigure_options" section below
+## and list every .cfg file to be processed
+
+## Generate dynamic reconfigure parameters in the 'cfg' folder
+# generate_dynamic_reconfigure_options(
+# cfg/DynReconf1.cfg
+# cfg/DynReconf2.cfg
+# )
+
+###################################
+## catkin specific configuration ##
+###################################
+## The catkin_package macro generates cmake config files for your package
+## Declare things to be passed to dependent projects
+## INCLUDE_DIRS: uncomment this if your package contains header files
+## LIBRARIES: libraries you create in this project that dependent projects also need
+## CATKIN_DEPENDS: catkin_packages dependent projects also need
+## DEPENDS: system dependencies of this project that dependent projects also need
+catkin_package(
+# INCLUDE_DIRS include
+ LIBRARIES ollamamessages
+ CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
+ DEPENDS system_lib
+)
+
+###########
+## Build ##
+###########
+
+## Specify additional locations of header files
+## Your package locations should be listed before other locations
+include_directories(
+# include
+ ${catkin_INCLUDE_DIRS}
+)
+
+## Declare a C++ library
+# add_library(${PROJECT_NAME}
+# src/${PROJECT_NAME}/ollamamessages.cpp
+# )
+
+## Add cmake target dependencies of the library
+## as an example, code may need to be generated before libraries
+## either from message generation or dynamic reconfigure
+# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+## Declare a C++ executable
+## With catkin_make all packages are built within a single CMake context
+## The recommended prefix ensures that target names across packages don't collide
+# add_executable(${PROJECT_NAME}_node src/ollamamessages_node.cpp)
+
+## Rename C++ executable without prefix
+## The above recommended prefix causes long target names, the following renames the
+## target back to the shorter version for ease of user use
+## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
+# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
+
+## Add cmake target dependencies of the executable
+## same as for the library above
+# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+## Specify libraries to link a library or executable target against
+# target_link_libraries(${PROJECT_NAME}_node
+# ${catkin_LIBRARIES}
+# )
+
+#############
+## Install ##
+#############
+
+# all install targets should use catkin DESTINATION variables
+# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
+
+## Mark executable scripts (Python etc.) for installation
+## in contrast to setup.py, you can choose the destination
+# catkin_install_python(PROGRAMS
+# scripts/my_python_script
+# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# )
+
+## Mark executables for installation
+## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
+# install(TARGETS ${PROJECT_NAME}_node
+# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# )
+
+## Mark libraries for installation
+## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
+# install(TARGETS ${PROJECT_NAME}
+# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
+# )
+
+## Mark cpp header files for installation
+# install(DIRECTORY include/${PROJECT_NAME}/
+# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
+# FILES_MATCHING PATTERN "*.h"
+# PATTERN ".svn" EXCLUDE
+# )
+
+## Mark other files for installation (e.g. launch and bag files, etc.)
+# install(FILES
+# # myfile1
+# # myfile2
+# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
+# )
+
+#############
+## Testing ##
+#############
+
+## Add gtest based cpp test target and link libraries
+# catkin_add_gtest(${PROJECT_NAME}-test test/test_ollamamessages.cpp)
+# if(TARGET ${PROJECT_NAME}-test)
+# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
+# endif()
+
+## Add folders to be run by python nosetests
+# catkin_add_nosetests(test)
diff --git a/noetic-llama/src/ollamamessages/package.xml b/noetic-llama/src/ollamamessages/package.xml
new file mode 100644
index 0000000..8e6c9b6
--- /dev/null
+++ b/noetic-llama/src/ollamamessages/package.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0"?>
+<package format="2">
+ <name>ollamamessages</name>
+ <version>0.0.0</version>
+ <description>The ollamamessages package</description>
+
+ <!-- One maintainer tag required, multiple allowed, one person per tag -->
+ <!-- Example: -->
+ <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
+ <maintainer email="eden@todo.todo">eden</maintainer>
+
+
+ <!-- One license tag required, multiple allowed, one license per tag -->
+ <!-- Commonly used license strings: -->
+ <!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
+ <license>TODO</license>
+
+
+ <!-- Url tags are optional, but multiple are allowed, one per tag -->
+ <!-- Optional attribute type can be: website, bugtracker, or repository -->
+ <!-- Example: -->
+ <!-- <url type="website">http://wiki.ros.org/ollamamessages</url> -->
+
+
+ <!-- Author tags are optional, multiple are allowed, one per tag -->
+ <!-- Authors do not have to be maintainers, but could be -->
+ <!-- Example: -->
+ <!-- <author email="jane.doe@example.com">Jane Doe</author> -->
+
+
+ <!-- The *depend tags are used to specify dependencies -->
+ <!-- Dependencies can be catkin packages or system dependencies -->
+ <!-- Examples: -->
+ <!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
+ <!-- <depend>roscpp</depend> -->
+ <!-- Note that this is equivalent to the following: -->
+ <!-- <build_depend>roscpp</build_depend> -->
+ <!-- <exec_depend>roscpp</exec_depend> -->
+ <!-- Use build_depend for packages you need at compile time: -->
+ <!-- <build_depend>message_generation</build_depend> -->
+ <!-- Use build_export_depend for packages you need in order to build against this package: -->
+ <!-- <build_export_depend>message_generation</build_export_depend> -->
+ <!-- Use buildtool_depend for build tool packages: -->
+ <!-- <buildtool_depend>catkin</buildtool_depend> -->
+ <!-- Use exec_depend for packages you need at runtime: -->
+ <!-- <exec_depend>message_runtime</exec_depend> -->
+ <!-- Use test_depend for packages you need only for testing: -->
+ <!-- <test_depend>gtest</test_depend> -->
+ <!-- Use doc_depend for packages you need only for building documentation: -->
+ <!-- <doc_depend>doxygen</doc_depend> -->
+ <build_depend>message_generation</build_depend>
+ <exec_depend>message_runtime</exec_depend>
+ <buildtool_depend>catkin</buildtool_depend>
+ <build_depend>roscpp</build_depend>
+ <build_depend>rospy</build_depend>
+ <build_depend>std_msgs</build_depend>
+ <build_export_depend>roscpp</build_export_depend>
+ <build_export_depend>rospy</build_export_depend>
+ <build_export_depend>std_msgs</build_export_depend>
+ <exec_depend>roscpp</exec_depend>
+ <exec_depend>rospy</exec_depend>
+ <exec_depend>std_msgs</exec_depend>
+
+
+ <!-- The export tag contains other, unspecified, tags -->
+ <export>
+ <!-- Other tools can request additional information be placed here -->
+
+ </export>
+</package>
diff --git a/noetic-llama/src/ollamawrapper/srv/OllamaCall.srv b/noetic-llama/src/ollamamessages/srv/OllamaCall.srv
index 872a74b..aedae15 100755
--- a/noetic-llama/src/ollamawrapper/srv/OllamaCall.srv
+++ b/noetic-llama/src/ollamamessages/srv/OllamaCall.srv
@@ -1,8 +1,7 @@
-text input
+string input
---
int64 total_duration
int64 load_duration
-int64 prompt_eval_count
int64 prompt_eval_duration
int64 eval_count
int64 eval_duration
diff --git a/noetic-llama/src/ollamawrapper/CMakeLists.txt b/noetic-llama/src/ollamawrapper/CMakeLists.txt
index c94424b..4533887 100644
--- a/noetic-llama/src/ollamawrapper/CMakeLists.txt
+++ b/noetic-llama/src/ollamawrapper/CMakeLists.txt
@@ -55,10 +55,10 @@ find_package(catkin REQUIRED COMPONENTS
# )
## Generate services in the 'srv' folder
-add_service_files(
- FILES
- OllamaCall.srv
-)
+#add_service_files(
+# FILES
+# OllamaCall.srv
+#)
## Generate actions in the 'action' folder
# add_action_files(
@@ -104,9 +104,9 @@ generate_messages(
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
# INCLUDE_DIRS include
-# LIBRARIES ollamawrapper
-# CATKIN_DEPENDS roscpp rospy std_msgs
-# DEPENDS system_lib
+ LIBRARIES ollamawrapper
+ CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
+ DEPENDS system_lib
)
###########
@@ -164,6 +164,18 @@ catkin_install_python(PROGRAMS
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
+install(
+ DIRECTORY src/capabilities/
+ DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}/capabilities
+)
+
+install(FILES
+ src/Modelfile.jinja2
+ src/ollamafunctiongrammar.ppeg
+ src/parser.py
+ DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+)
+
## Mark executables for installation
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
# install(TARGETS ${PROJECT_NAME}_node
diff --git a/noetic-llama/src/ollamawrapper/package.xml b/noetic-llama/src/ollamawrapper/package.xml
index cfad2a4..cfad2a4 100644..100755
--- a/noetic-llama/src/ollamawrapper/package.xml
+++ b/noetic-llama/src/ollamawrapper/package.xml
diff --git a/noetic-llama/src/ollamawrapper/src/capabilities/weather.py b/noetic-llama/src/ollamawrapper/src/capabilities/weather.py
index 0108ee5..4d6e073 100644
--- a/noetic-llama/src/ollamawrapper/src/capabilities/weather.py
+++ b/noetic-llama/src/ollamawrapper/src/capabilities/weather.py
@@ -3,8 +3,10 @@ import dotenv
import geocoder
import requests
-if os.path.exists(os.path.join(os.path.dirname(__file__), "..", "..", "..", "apikeys.env")):
- dotenv.load_dotenv(os.path.join(os.path.dirname(__file__), "..", "..", "..", "apikeys.env"))
+APIKEYS_PATH = "/home/eden/Documents/noetic-llama/noetic-llama/apikeys.env"
+# APIKEYS_PATH = os.path.join(os.path.dirname(__file__), "..", "..", "..", "apikeys.env")
+if os.path.exists(APIKEYS_PATH):
+ dotenv.load_dotenv(APIKEYS_PATH)
if "BINGMAPS" not in os.environ:
raise Exception("'BINGMAPS' API key environment variable not found")
diff --git a/noetic-llama/src/ollamawrapper/src/ollamawrapper.py b/noetic-llama/src/ollamawrapper/src/ollamawrapper.py
index f7abec1..f344299 100644
--- a/noetic-llama/src/ollamawrapper/src/ollamawrapper.py
+++ b/noetic-llama/src/ollamawrapper/src/ollamawrapper.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
from dataclasses import dataclass
-from ollamawrapper.srv import OllamaCall, OllamaCallResponse
+from ollamamessages.srv import OllamaCall, OllamaCallResponse
import inspect
import typing
import jinja2
@@ -53,7 +53,7 @@ def getfunctioncapabilities():
def get_functions(ollama_output):
return [f.strip() for f in ollama_output[8:].strip().split(";") if f != ""]
-def main():
+def main(prompt):
functioncapabilities = getfunctioncapabilities()
modelfile = functioncapabilities.to_modelfile("nexusraven:13b-v2-q3_K_S")
@@ -63,18 +63,27 @@ def main():
# with open("Modelfile", "r") as f:
# ollama.create(model = "temp", modelfile= f.read())
- ollama_output = client.generate(model='temp', prompt='What\'s the weather like in Lincoln right now? What\'s 2 + 2?', options={"stop": ["Thought:"]})
- print(ollama_output)
+ ollama_output = client.generate(model='temp', prompt = prompt, options={"stop": ["Thought:"]})
+ #print(ollama_output)
for func_str in get_functions(ollama_output["response"]):
print(func_str + ":")
exec(func_str)
client.delete("temp")
+ return ollama_output
def handle_ollama_call(req):
- print("Recieved ollama request %s" % req.input)
- return OllamaCallResponse(1, 2, 3, 4, 5, 6)
+ print("Recieved ollama request '%s'" % req.input)
+ o = main(req.input)
+ # print(o.keys())
+ return OllamaCallResponse(
+ o["total_duration"],
+ o["load_duration"],
+ o["prompt_eval_duration"],
+ o["eval_count"],
+ o["eval_duration"]
+ )
def handle_ollama_server():
rospy.init_node("ollama_wrapper_server")