# Rust PaLM 2.0 SDK The Rust PaLM 2.0 SDK is a software development kit that allows developers to easily access the PALM 2.0 API without having to manage induvidual API calls. This library is a wrapper of the ```reqwest``` library. ## Installation ### Command Line In your cargo project run the command: ```bash cargo add palm2_sdk ``` ### Cargo.toml In your cargo.toml add the following line: ```toml palm2_sdk = "0.1.0" ``` Then run the following command: ```bash cargo build ``` ## Usage First inialize the client: ```rust let client = Client::new( |_resource| String::from("$API_KEY"), None, None, None, None, ); ``` This library handels api_keys in a different way. API Keys are provided in the form a callback function or a closure. This allows keys to be provided on a per-resource level. This library allows organizations to build and add custom business logic to the application in the form of call back functions that are specified to the client. Otherwise, a None should be specified. Specifically the library allows the client to inject a function that customizes the Http Method based on the resource fetched, a function that specificies a global header map at a resource level, a function that generates the URL to query from based on the query and path parameters, api token, and method. Additionally, an optional ```reqwest::Client``` can be provided to the application to customize the client used to fetch the resource. In order to query data use the function ```query``` of ```Client``` to generate a ```Query```. First generate the Input Data for the Query. All request, response, and core entities are located in ```use palm2_sdk::entities```. ```rust let input: GenerateTextRequest = GenerateTextRequest { prompt: TextPrompt { text: String::from("Write a story from the perspective of Mickey Mouse") }, temperature: None, candidate_count: None, top_p: None, top_k: None, max_output_tokens: None, safety_settings: None, stop_sequences: None }; ``` Then create the ```Query``` ```rust let query = client .query(Resource::GenerateText) .add_path_parameter(String::from("model"), String::from("text-bison-001")) .body(input) .build(); ``` In order to fetch the resource and obtain the response use the ```execute``` and ```execute_raw``` functions (which are ```async```). ```rust let response: Response = execute(query).await?; println!("Generated Ouput: {}", response.value.candidates[0].output); ``` ```rust let response: Response = execute_raw(query).await?; println!("Raw Output: {}", response.value); ``` ```execute``` deseializes the response data into a struct allowing its values to be used by the program. ```execute_raw``` keeps the response data in a string representation. Use this function over the ```execute``` function when the library is being it used in a reverse proxy since proxies do not need to deserialize and reserialize the data. Essentially, ```execute_raw``` reduces the overheat and improves performance of the library in a proxy enviornment. ## Credits (c) NovX Education (uninc) and its affiliates Written by Neil Shirsat (CTO, CIO, CPO, Cheif Architect of NovX Education) Credits to Aniruddh Anand (CEO of NovX Education) for managing the API that this library was tested on. Please report any security vunrabilities to security@novxedu.com