AI Server
ai-server-sdk is a python client SDK to connect to the AI Server
Using this package you can:
- Inference with Models you have acces to within the server
- Create Pandas DataFrame from Databases connections
- Pull Storage objects
- Run pixel and get the direct output or full json response.
- Pull data products from an existing insight using REST API.
Install
pip install ai-server-sdk
or
pip install ai-server-sdk[full]
Note: The full
option installs optional dependencies for langchain support.
Usage
To interract with an ai-server instance, import the ai_server
package and connect via RESTServer.
Note: secret and access keys are required
Setup
>>> from ai_server import ServerClient
>>> loginKeys = {"secretKey":"<your_secret_key>","accessKey":"<your_access_key>"}
>>> server_connection = ServerClient(
... base='<Your deployed server Monolith URL>',
... access_key=loginKeys['accessKey'],
... secret_key=loginKeys['secretKey']
... )
Inference with different Model Engines
>>> from ai_server import ModelEngine
>>> model = ModelEngine(
... engine_id="2c6de0ff-62e0-4dd0-8380-782ac4d40245",
... insight_id=server_connection.cur_insight
... )
>>> model.ask(question = 'What is the capital of France?')
{'response': 'The capital of France is Paris.',
'messageId': '0a80c2ce-76f9-4466-b2a2-8455e4cab34a',
'roomId': '28261853-0e41-49b0-8a50-df34e8c62a19',
'numberOfTokensInResponse': 6, 'numberOfTokensInPrompt': 6}
>>> model = ModelEngine(
... engine_id="e4449559-bcff-4941-ae72-0e3f18e06660",
... insight_id=server_connection.cur_insight
... )
>>> model.embeddings(strings_to_embed=['text1','text2'])
{'response': [[0.007663827, -0.030877046, ... -0.035327386]], 'numberOfTokensInPrompt': 8, 'numberOfTokensInResponse': 0}
Interact with a Vector Database by adding document(s), querying, and removing document(s)
>>> from ai_server import VectorEngine
>>> vectorEngine = VectorEngine(
... engine_id="221a50a4-060c-4aa8-8b7c-e2bc97ee3396",
... insight_id=server_connection.cur_insight
... )
>>> vectorEngine.addDocument(file_paths = ['fileName1.pdf', 'fileName2.pdf', ..., 'fileNameX.pdf'])
>>> vectorEngine.addVectorCSVFile(file_paths = ['fileName1.csv', 'fileName2csv', ..., 'fileNameX.csv'])
>>> vectorEngine.nearestNeighbor(search_statement = 'Sample Search Statement', limit = 5)
>>> vectorEngine.listDocuments()
>>> vectorEngine.removeDocument(file_names = ['fileName1.pdf', 'fileName2.pdf', ..., 'fileNameX.pdf'])
Connect to Databases and execute create, read, and delete operations
Run the passed string query against the engine. The query passed must be in the structure that the specific engine implementation.
>>> from ai_server import DatabaseEngine
>>> database = DatabaseEngine(
... engine_id="4a1f9466-4e6d-49cd-894d-7d22182344cd",
... insight_id=server_connection.cur_insight
... )
>>> database.execQuery(query='SELECT PATIENT, HEIGHT, WEIGHT FROM diab LIMIT 4')
| PATIENT | HEIGHT | WEIGHT |
---|
0 | 20337 | 64 | 114 |
1 | 3750 | 64 | 161 |
2 | 40785 | 67 | 187 |
3 | 12778 | 72 | 145 |
Run the passed string query against the engine as an insert query. Query must be in the structure that the specific engine implementation
>>> database.insertData(query = 'INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...)')
Run an update query on the database
>>> database.updateData(query = 'UPDATE table_name set column1=value1 where age=19')
Run a delete query on the database
>>> database.removeData(query='DELETE FROM diab WHERE age=19;')
Run Function Engines
>>> from ai_server import FunctionEngine
>>> function = FunctionEngine(
... engine_id="f3a4c8b2-7f3e-4d04-8c1f-2b0e3dabf5e9",
... insight_id=server_connection.cur_insight
... )
>>> function.execute({"lat":"37.540","lon":"77.4360"})
'{"cloud_pct": 2, "temp": 28, "feels_like": 27, "humidity": 20, "min_temp": 28, "max_temp": 28, "wind_speed": 5, "wind_degrees": 352, "sunrise": 1716420915, "sunset": 1716472746}'
Using REST API to pull data product from an Insight
>>> projectId = '30991037-1e73-49f5-99d3-f28210e6b95c'
>>> inishgtId = '26b373b3-cd52-452c-a987-0adb8817bf73'
>>> sql = 'select * FROM DATA_PRODUCT_123'
>>> diabetes_df = server_connection.import_data_product(project_id = projectId, insight_id = inishgtId, sql = sql)
>>> diabetes_df.head()
| AGE | PATIENT | WEIGHT |
---|
0 | 19 | 4823 | 119 |
1 | 19 | 17790 | 135 |
2 | 20 | 1041 | 159 |
3 | 20 | 2763 | 274 |
4 | 20 | 3750 | 161 |
Get the output or JSON response of any pixel
>>> server_connection.run_pixel('1+1')
2
>>> server_connection.run_pixel('1+1', full_response=True)
{'insightID': '8b419eaf-df7d-4a7f-869e-8d7d59bbfde8',
'sessionTimeRemaining': '7196',
'pixelReturn': [{'pixelId': '3',
'pixelExpression': '1 + 1 ;',
'isMeta': False,
'output': 2,
'operationType': ['OPERATION']}]}
Upload files to an Insight
>>> from ai_server import ServerClient
>>> loginKeys = {"secretKey":"<your_secret_key>","accessKey":"<your_access_key>"}
>>> server_connection = ServerClient(
... access_key=loginKeys['accessKey'],
... secret_key=loginKeys['secretKey'],
... base='<Your deployed server Monolith URL>'
... )
server_connection.upload_files(files=["path_to_local_file1", "path_to_local_file2"], project_id="your_project_id", insight_id="your_insight_id", path="path_to_upload_files_in_insight")