Documentation

Change Log

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning .

0.10.23 (2025-04-11)

Bug Fixes

  • allow internal ip address to pass ( a5b4c09 )
  • authenticate the request ( cf44aa4 )
  • broken import for BlockSensitiveFilesMiddleware ( eca10cf )
  • broken import for BlockSensitiveFilesMiddleware ( 57f226f )
  • chatbot_id and chatbot_name are removed ( 1d8ada5 )
  • chatbot_id was removed ( 93feac2 )
  • chatbot_name was removed ( 730a944 )
  • config view does not require an input prompt ( 6e1ca0e )
  • don't import HTTPStatus ( 1308526 )
  • handle case where user is not an instance of User ( 1f070a3 )
  • handle case where user is not an instance of User ( 03e593d )
  • reposition .kube to /home/smarter_user/data/.kube ( d92fb41 )
  • smarter is the default account ( 123f17f )
  • smarter is the default account ( 00f9a64 )

0.10.22 (2025-04-08)

Bug Fixes

0.10.21 (2025-04-02)

Bug Fixes

  • convert welcome_dict to a tuple so that it is iterable ( 9c58011 )

0.10.20 (2025-03-28)

Bug Fixes

  • snuff out insert attempt to Chat when there is no session_key ( b2eae13 )

0.10.19 (2025-03-28)

Bug Fixes

  • add a SmarterConfigurationError to the stack trace ( 19143d3 )
  • avoid unnecessarily attempting to create a new chat session unless we have a session_key ( 1a4e86d )
  • only log and send django signal if we know that this is a chatbot. ( 3478390 )
  • wait 10 seconds before attempting health check ( 1c647f8 )

0.10.18 (2025-03-21)

Bug Fixes

  • csrf exceptions for chatbots ( 5a47e77 )
  • pass request object to ChatBotHelper ( 62af264 )

0.10.17 (2025-03-21)

Bug Fixes

0.10.16 (2025-03-19)

Bug Fixes

  • bug fix where environment url was initializing as a chatbot ( 51273a8 )
  • csrf exempt ApiV1CliChatApiView and ApiV1CliChatConfigApiView ( cb812f1 )
  • if there's no chatbot then return None ( 31724a4 )
  • remove authentication requirement ( 6cff04e )
  • request object sometimes is not set. use self.url ( 5e981f4 )

0.10.15 (2025-03-18)

Bug Fixes

  • environment api domain is hosted from root domain ( fd4f930 )
  • parent domain should be root domain ( f54fb14 )
  • wrap the entire load process in a try block ( 7509b7b )

0.10.14 (2025-03-17)

Bug Fixes

  • Add chatbot deploy, undeploy and delete signals and receivers. Add KubernetesHelper functions to delete ingress resources. Refactor chatbot task logging ( 3c4a7db )
  • add ChatBot.tls_certificate_issuance_status ( e771c22 )
  • add ChatBot.tls_certificate_issuance_status ( 39bf944 )
  • add mysql root credentials ( 08db79c )
  • add verifications for ingress, certificate, secret ( 07b655d )
  • CSRF_TRUSTED_ORIGINS = [smarter_settings.environment_domain, smarter_settings.api_domain, smarter_settings.customer_api_domain] ( 31541b0 )
  • don't wait if the tls cert is already verified ( bc997ec )
  • enable the dismiss button on the password reset confirmation modal ( 3ac954b )
  • environment_api_domain should reside inside platform domain ( 7ce6a8e )
  • exempt known benign file extensions ( dfaf2b5 )
  • explicitly initialize AccountMixin() in init () ( 46da800 )
  • namespace ( e5e4d8a )
  • only send deployment emails to primary point of contact for account ( d5ceba7 )
  • only wait if the tls cert is not yet verified ( 99a9b2e )
  • override call () ( 5d7b115 )
  • override call () ( 4691899 )
  • split user creation from password update ( 72a0b4e )
  • user is not longer 1:1 with user_profile ( 862fa85 )
  • user is not longer 1:1 with user_profile ( ba145f0 )

0.10.13 (2025-02-14)

Bug Fixes

0.10.12 (2025-02-14)

Bug Fixes

  • add a logged in receiver to verify UserProfile for authenticated user ( fb35a97 )
  • set SOCIAL_AUTH_LINKEDIN_OAUTH2_SCOPE ( 563bc8e )
  • stop echoing the new pwd to the console ( d1836ee )
  • whoami, status, version don't have a manifest kind ( c01d841 )

0.10.11 (2025-02-11)

Bug Fixes

  • back-peddle on blending Smarter account bots with other accounts ( 715e237 )
  • remove functionality to combine Smarter account chatbots ( 9f58f8a )

0.10.10 (2025-02-11)

Bug Fixes

  • check for SAMPluginSpecSelectorKeyDirectiveValues.ALWAYS in selected() ( b841915 )
  • consider that user_profile might be NoneType ( ee51324 )
  • search_terms must allow nulls and blanks ( f4f71f3 )
  • set SOCIAL_AUTH_LINKEDIN_OAUTH2_SCOPE ( 39a91e1 )

0.10.9 (2025-02-10)

Bug Fixes

  • if we have both plugin_meta AND manifest, then the manifest takes precedence ( ddfd25a )

0.10.8 (2025-02-09)

Bug Fixes

  • convert url params into valid strings ( f12346a )
  • get_model_titles() should return titles in underscored lower case ( 6a31bb6 )
  • send all table output in camelCase ( 81a49bb )

0.10.7 (2025-02-09)

Bug Fixes

  • check isinstance(request, WSGIRequest) ( 8e2492e )
  • fully inspect request before attempting to do anything with it ( 19f9ace )
  • initialize the admin for the account when we only have an account number ( 7770406 )
  • look for mysql db errors ( c41e21f )
  • set api keys for googleai and metaai ( 26596fb )
  • SmarterRequestMixin should ignore paths for django /admin/ and /docs/ ( cb777f7 )

0.10.6 (2025-02-04)

This is a major low-level refactoring of business logic for Account and WSGI request objects. Summarizing the nature of changes:

  • moved most db insert/update/delete operations to asynchronous background tasks.
  • refactor all account logic into AccountMixin to standardize business logic and to improve db caching
  • refactor all WSGI request analysis into SmarterRequestMixin to standardize identification of chat and chatbot requests and to improve cache performance.

Bug Fixes

  • add a generic Exception handler for cases where Python doesn't catch AttributeError ( 42a757b )
  • add account to Chat.objects.create() ( 9cb4e0c )
  • bad user attribute. changed 'user' to 'email' ( 8fa4156 )
  • catch any exception on SAMJournal.objects.create() ( e2e3746 )
  • chatbot_id initialization from /chat/config/ ( 2ed7f77 )
  • ChatBotHelper and ChatBotApiBaseViewSet handling of named urls - https://example.3141-5926-5359.api.smarter.sh ( 2bc5877 )
  • cleanup json dump ( 24e62b5 )
  • ensure that ChatBotHelper still works with sandbox urls ( 6bca39a )
  • ensure that the url path includes /api/ ( 4bfebb9 )
  • ensure that thing and command are present in journaled json error responses ( 1110ef3 )
  • ensure that thing and command are present in journaled json error responses ( e0cf9c3 )
  • ensure that we can journal commands w no manifest ( 5de8a5e )
  • fail more gracefully is we don't find the chatbot ( 04f674c )
  • get the journal working with anonymous users ( ceb1d6b )
  • handle /smarter/ ( de979e0 )
  • handle cases where properties are unset after initialization ( 188b72b )
  • handle cases where properties are unset after initialization ( 785d1e8 )
  • handle cases where properties are unset after initialization ( 84abe52 )
  • initialize user_profile from user and account properties instead of local variables ( ececf82 )
  • instantiations from chatbot id ( e0bf9f1 )
  • is_named_url ( 423eae8 )
  • journaled json error responses ( d6a1599 )
  • make bool defaults serializable ( 3e88a43 )
  • only cache if we actually have an object. duhgit add . ( 1dc01b2 )
  • only create a new chat session if we have all of the data ( e96fc6f )
  • race condition when tearing down ( 27a8729 )
  • recursion problems in self.cache due introduced by early read attempts ( 25edb2a )
  • remove /smarter/ endpoint ( 0e12955 )
  • send a 403 response on auth failure ( 7df3489 )
  • set db password on each deployment, in case it changes ( df09b48 )
  • url_chatbot should take the form /api/v1/chatbots/{self.id}/ ( fc1662e )

0.10.5 (2025-01-24)

Bug Fixes

  • add smarter demo bots to ChatBotHelper. init () ( 52e7cdd )
  • ChatConfigView() should always return json ( e1274bb )
  • ChatConfigView() should always return json ( bbb04b4 )
  • ensure that we can fall back to a smarter chatbot if it exists ( a221491 )

0.10.4 (2025-01-23)

Bug Fixes

  • add first_name, last_name ( 8ff338a )
  • give celery time to create records before making assertions ( 0948076 )
  • move PluginSelectorHistory.objects.create() to celery ( 4dd28de )
  • provide a user_profile to Plugin whenever possible ( ab2a5fc )
  • providers should not be singletons ( 5d210fa )

0.10.3 (2025-01-22)

Bug Fixes

  • broken favicon link ( 80c22ef )
  • broken link media/illustrations/sigma-1/17-dark.png ( bbce490 )
  • only show django admin, wagtail, changelog to superusers ( 65183dd )

0.10.2 (2025-01-22)

Bug Fixes

0.10.1 (2025-01-22)

Bug Fixes

0.10.0 (2025-01-22)

Bug Fixes

  • add toggle switch to display/hide system messages ( 0d2e5dd )
  • add toggle switch to display/hide system messages ( 979c586 )
  • ensure that all django objects are created via Celery ( 9b4812b )
  • make verbose logging a function of a waffle switch ( 8e90ee5 )
  • send user credentials by email ( 07d4dad )
  • sign in url should be a valid url instead of only a domain ( d37d30b )

Features

  • add an html welcome email for new accounts. ( 310e137 )
  • add DailyBillingRecord model ( 8f29565 )
  • cache chat instances by session_key ( 9fb97e9 )
  • create ProviderDbMixin as middleware for all async db operations ( 1e5c964 )
  • echo tool return values to the chat console ( 1b43c97 )
  • log any cache hits ( 35e04d3 )

0.10.1 (2025-01-22)

Bug Fixes

0.10.0 (2025-01-22)

Bug Fixes

  • add toggle switch to display/hide system messages ( 0d2e5dd )
  • add toggle switch to display/hide system messages ( 979c586 )
  • ensure that all django objects are created via Celery ( 9b4812b )
  • make verbose logging a function of a waffle switch ( 8e90ee5 )
  • send user credentials by email ( 07d4dad )
  • sign in url should be a valid url instead of only a domain ( d37d30b )

Features

  • add an html welcome email for new accounts. ( 310e137 )
  • add DailyBillingRecord model ( 8f29565 )
  • cache chat instances by session_key ( 9fb97e9 )
  • create ProviderDbMixin as middleware for all async db operations ( 1e5c964 )
  • echo tool return values to the chat console ( 1b43c97 )
  • log any cache hits ( 35e04d3 )

0.9.0 (2025-01-14)

Bug Fixes

  • all docs paths should be relative to the ubuntu smarter_user home folder ( b7de813 )
  • chatbot_requests_serializer is many=False ( 419825d )
  • check whether user is authenticated before setting dashboard context ( b0f7d7a )
  • clean messages on 2nd pass ( 8e1ab22 )
  • developer doc paths ( b459d4d )
  • developer doc paths ( 8793dea )
  • redirect to login page on 403 error ( b3f0240 )
  • trouble shoot smarter dict first_iteration and second_iteration dicts ( 2388b86 )
  • we only want the most recent batch of requests ( a90a4d8 )

Features

  • add more smarter dashboard widgets ( a9d66f7 )
  • add smarter meta prompts for function calling and token charges ( 357b576 )
  • code dashboard widgets ( 3967b7a )
  • create and style smarter dashboard widgets ( 9d059e7 )
  • ensure that message history is not duplicated ( 7421540 )
  • finesse component state management ( b9916b3 )
  • get Console working with ChatApp config as a prop ( 2c087c0 )

0.8.0 (2025-01-12)

Bug Fixes

Features

  • add ability to create a new chat session. ( 0b749cc )
  • add context managed config to ChatApp ( b00845b )
  • add custom styling for smarter message items ( 3303476 )
  • add fontwesome state icons to app title ( ce1c37e )
  • code menu item click handler ( 2d45979 )
  • code state-based, formatted console output ( 78a8e45 )
  • create a react context for managing config inside of state ( 05db6f0 )
  • scaffold new console output window pane ( f45e6c4 )
  • scaffold new console output window pane ( 9eaec6b )
  • scaffold tabbed window ( d58d25c )
  • simulate an ubuntu pod shell environment ( 4496107 )
  • style console window and make responsive ( 19c1862 )
  • style the console json log data ( a837dad )
  • style the new log console ( 98bf303 )
  • style the smarter system chat items ( 680d4bc )

0.7.9 (2025-01-09)

Bug Fixes

  • add chat_tool_call_history, chat_plugin_usage_history, chatbot_request_history ( 2c07e4c )
  • add session_key to PluginSelectorHistory ( 10e903a )
  • add session_key to PluginSelectorHistory ( 96c2eef )
  • ChatHelper should return the entire chat object rather than only id ( 523b8fe )
  • finesse api error handling of ChatConfigView ( 8850c4a )

0.7.8 (2025-01-09)

Bug Fixes

  • add remaining history tables to chatapp config ( dadb9bd )

0.7.7 (2025-01-08)

Bug Fixes

0.7.6 (2025-01-08)

Bug Fixes

  • add SMARTER_WAFFLE_SWITCH_SUPPRESS_FOR_CHATBOTS, SMARTER_WAFFLE_SWITCH_CHATAPP_VIEW_LOGGING, SMARTER_WAFFLE_MANIFEST_LOGGING ( 0bebf2f )
  • cleanup logger entries ( f550259 )
  • cookie expirations ( f3f59f9 )
  • CSRF_COOKIE_DOMAIN ( ca7d611 )
  • SMARTER_WAFFLE_REACTAPP_DEBUG_MODE ( efd7402 )

0.7.5 (2025-01-08)

Bug Fixes

  • use a trimmed, cleaned url for Chat() instances ( 262d7fa )

0.7.4 (2025-01-08)

Bug Fixes

  • add session_key url param and ensure that session_key is unique to chatbot url path ( 60acb6f )
  • make combination of session_key and url unique ( a074976 )
  • parameterize all cookie names and set 24 hour cookie expirations ( c652240 )

0.7.3 (2025-01-08)

Bug Fixes

0.7.2 (2025-01-07)

Bug Fixes

  • api/v1/chatbots/, api/v1/chats/ ( edfa1ed )
  • change logo anchor to '/' for authenticated users ( 6954eb5 )
  • fix all broken dashboard urls ( c85c2d3 )
  • fixup legal links in console menu ( 4da3b3e )
  • keep authenticated users on the platform ( b9dc50c )
  • reorganize dashboard sidebar menu ( c0238c8 )
  • restructure console sidebar menu ( ebfcc38 )
  • revert chats to chat ( 1274813 )
  • sidebar menu active on clicked item ( 1c543ab )

0.7.1 (2025-01-06)

Bug Fixes

  • ensure that csrftoken is not included in 'Cookies' ( 840fef1 )
  • ensure that http response is a json object ( 9338cab )
  • ensure that only one csrftoken cookie exists ( c12bddb )
  • ensure that only one csrftoken cookie exists ( affbcc8 )

0.7.0 (2025-01-03)

Features

Bug Fixes

  • add chat llm providers for MetaAI and GoogleAI
  • refactor: create a OpenAICompatibleChatProvider abstract base class and a default…
  • refactor Dockerfile and docker-compose.yml to build and run as non-root user
  • refactor build/deploy workflows
  • add LinkedIn oauth configuration
  • monthly Dependabot version bumps

0.6.0 (2024-11-21)

Features

  • version bump all requirements and upgrade default model to gpt-4-turbo ( fa6def4 )

0.5.4 (2024-07-12)

Bug Fixes

  • account_for_user() should ensure that user is not AnonymousUser ( 35f08f7 )
  • add ampersands ( be04891 )
  • add ampersands ( 39a8c0c )
  • add assistant response and tool calls to message list history ( 793cb8b )
  • docker-compose-install ( 2522bf8 )
  • dumbass mistake ( 9d3513d )
  • dumbass mistake ( 9308977 )
  • dumbass mistake ( e2c0311 )
  • evaluate data type of kwargs['name'] and warn if not str ( 3957fb1 )
  • make syntax errors ( 7afa0c5 )
  • make syntax errors ( f9432b5 )
  • rewrite file instead of append ( 9ec807b )
  • add ChatBot.default_system_role migration ( 5246cc4 )
  • add default_system_role to the chat and chatbot models ( 266d873 )
  • add sensible defaults for all error response attributes ( ecd9d2d )
  • ensure internal error stack traces flow back to cli output ( dafd736 )
  • ensure that the error description at the bottom of the stack trace echos to cli console output ( c60a7ae )

0.5.3 (2024-07-05)

Bug Fixes

0.5.2 (2024-07-01)

  • add authentication backend to login(). now required bc of social_core ( b8daf55 )
  • fix indentation of 1st line ( f4e2a73 )
  • fix path assets/media/illustrations/sigma-1/17-dark.png ( 201c72f )
  • remove wagtail userbar tag ( 1407756 )

0.5.1 (2024-06-27)

Bug Fixes

  • limit openapi documentation generation to /api/ ( 94d35cd )

0.5.0 (2024-06-15)

Features

0.4.1 (2024-06-11)

Bug Fixes in /api/docs

  • fix code element styling in docs django templates ( 7d3763d )
  • create unit tests for brokered api end point data sets: example-manifest, json-schema
  • refactor urls.py to use SAMKinds to distinguish all manifest and json-schema urls endpoints
  • refactor api/docs/ cli menu item

0.4.0 (2024-06-10)

Features

  • add /api/docs/
  • add /api/v1/cli/schema/ / ( fd583b6 )

0.3.9 (2024-06-09)

Bug Fixes

  • create and assign a ChatBot to the test Chat session ( 005491a )
  • create and assign a ChatBot to the test Chat session ( 0cddf38 )
  • ensure that ChatBot flows to smarter handler() via the chat_helper ( 85288dc )
  • force a new release ( ab96126 )
  • whatchmedo directory ( df5971d )

0.3.8 (2024-06-05)

Features

  • added a complete suite of unit tests for /smarter/apps/api/v1/cli
  • added unit tests for smarter/lib/manifest/broker/

0.3.7 (2024-06-01)

Bug Fixes

  • misc patches related to 0.3.x release
  • add unit tests

0.3.2 (2024-05-31)

Bug Fixes

  • set url_chatbot() to urljoin(self.url, /api/v1/chatbots/smarter/) ( ad8036b )
  • set url_chatbot() to urljoin(self.url, /api/v1/chatbots/smarter/) ( 7d2eb0c )

0.3.1 (2024-05-31)

Bug Fixes

  • url_chatbot should be urljoin(self.hostname, /api/v1/chatbots/smarter/) ( a794fdf )

0.3.6 (2024-06-01)

Bug Fixes

  • ensure that we fail gracefully ( 3d4ab45 )
  • make the error response match api/v1/cli error format ( c7f9f72 )

0.3.5 (2024-06-01)

Bug Fixes

  • RecursionError cause by self.user ( 4362f84 )

0.3.4 (2024-06-01)

Bug Fixes

  • add protocol to ChatBot.url_chatbot() ( 4c146aa )

0.3.3 (2024-06-01)

Bug Fixes

0.3.2 (2024-05-31)

Bug Fixes

  • set url_chatbot() to urljoin(self.url, /api/v1/chatbots/smarter/) ( ad8036b )
  • set url_chatbot() to urljoin(self.url, /api/v1/chatbots/smarter/) ( 7d2eb0c )

0.3.1 (2024-05-31)

Bug Fixes

  • url_chatbot should be urljoin(self.hostname, /api/v1/chatbots/smarter/) ( a794fdf )

0.3.0 (2024-05-31)

Features

  • create a universal journal to log all api request/response pairs ( 2d2fbaa )
  • create SmarterJournaledJsonErrorResponse() ( bb1ab3b )
  • pass prompt to broker via kwargs ( e4efb09 )
  • code ApiV1CliChatApiView and refactor chatapp to make it work with journaled json responses ( 8e500a7 )
  • scaffold ApiV1CliChatApiView() ( 31cfd1d )
  • scaffold ApiV1CliChatApiView() ( 6f127bb )
  • create SmarterTokenAuthenticationMiddleware to automate api key authentication

0.2.1 (2024-05-19)

A refactor of the Django chatbot app.

Feature

  • add ChatBot.dns_verification_status
  • add Django signals:
  • chatbot_dns_verification_initiated
  • chatbot_dns_verified
  • chatbot_dns_failed
  • chatbot_dns_verification_status_changed
  • refactor aws route53 processes for asynchronous request handling
  • add task to Undeploy a ChatBot
  • add unit tests for tasks and manage.py commands
  • refactor Dockerfile to improve layer caching
  • refactor docker-compose.yaml and Helm chart to enable multiple worker threads

0.2.0 (2024-05-16)

Introduces remote Sql server integration to the Plugin class. New Django ORMs PluginDataSql and PluginDataSqlConnection have been added for persinsting remote sql server connections, and parameterized sql queries. SAMPluginDataSqlConnectionBroker is added to fully integrate these models to /api/v1/cli.

Features

  • add SAMPluginDataSqlConnectionBroker to api/v1/cli ( f120cfd )
  • add SAMPluginDataSqlConnectionBroker to api/v1/cli ( 54fa4da )
  • add unit tests ( 2c9e355 )
  • scaffold PluginSql and Pydantic model ( e1bb076 )
  • scaffold PluginSql models ( 17daf61 )

0.1.2 (2024-05-14)

Introduces a powerful new architecture for processing Kubernetes-style manifests for managing Smarter resources. The new Broker class architecture facilitates lightweight implementations of the smarter command-line implementation and the REST API that backs it.

New features

  • add /api/v1/cli rest api backing services for Go lang command-line interface
  • add Pydantic to formally model cli manifests. Enforces manifest structural integrity as well as data and business rule validations.
  • add SAMLoader, a generic yaml manifest loader for Pydantic
  • add Broker class to abstract cli services implementations
  • implement all Plugin cli services
  • add a Controller class to Plugin, facilitating the future introduction of new data classes to support remote SQl databases and REST API data sources.

0.1.1 (2024-04-02)

New features

  • add Helm charts
  • add GitHub Actions CI/CD workflows
  • add Makefile commands to automate local developer setup
  • implement final chat REST API, referenced as http://{host}/admin/chat/chathistory/config/ which returns a context dict for a chat session. Enables a single authenticated Smarter user to manage multiple chat sessions in the sandbox.

0.1.0 (2024-04-01)

New features

  • add FQDM's to CSRF_TRUSTED_ORIGINS ( 6d6bd92 )
  • pass user to function_calling_plugin() ( 0e6b1fa )
  • remove custom login.html ( b4f091f )
  • set CSRF_TRUSTED_ORIGINS = ALLOWED_HOSTS ( 62a8ca3 )
  • STATIC_URL = '/static/' ( 277fff3 )
  • STATIC_URL = '/static/' ( 89a2e0c )
  • values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme ( dc9ca5e )
  • add api-key authentication ( 491927f )
  • add chat history models and signals ( 07e5f82 )
  • automate build/deploy by environment ( f808ed5 )
  • restore most recent chat history when app starts up ( 118d884 )

0.0.1 (2024-02-21)

Django based REST API and ReactJS web app hosting an MVP plugin platform for OpenAI API Function Calling. This release implements the following features:

New features

  • Docker-based local development environment with MySQL and Redis
  • Celery worker and beat support
  • an integrated ReactJS web app for interacting with LLM chatbots.
  • a multi-environment conf module based on Pydantic, that resolves automated parameter initializations using any combination of command line assignments, environment variables, .env and/or terraform.tfvars files.
  • Django REST Framework driven API for accounts and Plugins
  • Django backed Plugin class that can be initialized from either yaml or json files
  • Django Account class that facilitate a team approach to managing Plugins
  • Python unit tests for all modules
  • Github Action CI/CD for automated unit testing on merges to staging and main, and automated Docker build/push to AWS ECR
  • Terraform based AWS cloud infrastructure management of Kubernetes resources
  • Pain-free onboarding of new developers, including a complete Makefile and pre-commit code formatting, code linting and misc security validation checks.

We're


Hiring!

Let's do something amazing, together! We're currently hiring for Full Stack and React developers, devops, and prompt engineering positions.

Requirements

Pass an online skills assessment exam
Communication and time-management skills
Intellectual curiosity and a passion for learning
Willingness and ability to dedicate yourself full time to this position

Our Achievements

Patented technology
Developers of Stepwise AI technology
U.S. Dept of Education grant recipient
Explore More

Stay
Connected