soilsidekick 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +9 -0
  3. data/README.md +267 -0
  4. data/Rakefile +10 -0
  5. data/docs/AIAnalysis.md +22 -0
  6. data/docs/AIAnalysisRecommendationsInner.md +22 -0
  7. data/docs/AIServicesApi.md +327 -0
  8. data/docs/BeginnerGuidance.md +34 -0
  9. data/docs/BeginnerGuidanceDetailedExplanation.md +24 -0
  10. data/docs/BeginnerGuidanceMetadata.md +22 -0
  11. data/docs/BeginnerGuidanceRequest.md +24 -0
  12. data/docs/BeginnerGuidanceRequestLocation.md +20 -0
  13. data/docs/BeginnerGuidanceRequestPlantContext.md +20 -0
  14. data/docs/CalculateCarbonCreditsRequest.md +26 -0
  15. data/docs/CalculateEnvironmentalImpactRequest.md +26 -0
  16. data/docs/CalculateEnvironmentalImpactRequestProposedTreatmentsInner.md +18 -0
  17. data/docs/CalculateEnvironmentalImpactRequestSoilData.md +28 -0
  18. data/docs/CalculateEnvironmentalImpactRequestWaterBodyData.md +18 -0
  19. data/docs/CarbonApi.md +79 -0
  20. data/docs/CarbonCreditCalculation.md +22 -0
  21. data/docs/CarbonCreditCalculationCalculationDetails.md +28 -0
  22. data/docs/CarbonCreditCalculationCalculationDetailsMetadata.md +22 -0
  23. data/docs/CarbonCreditCalculationCreditRecord.md +26 -0
  24. data/docs/ConsumerPlantCareApi.md +247 -0
  25. data/docs/County.md +26 -0
  26. data/docs/CountyLookup200Response.md +18 -0
  27. data/docs/CountyLookupRequest.md +18 -0
  28. data/docs/DynamicCare.md +28 -0
  29. data/docs/DynamicCareCareRecommendations.md +24 -0
  30. data/docs/DynamicCareCareRecommendationsHumidity.md +22 -0
  31. data/docs/DynamicCareCareRecommendationsLight.md +22 -0
  32. data/docs/DynamicCareCareRecommendationsWatering.md +24 -0
  33. data/docs/DynamicCareCurrentConditions.md +26 -0
  34. data/docs/DynamicCareMetadata.md +22 -0
  35. data/docs/DynamicCarePlant.md +22 -0
  36. data/docs/DynamicCareRequest.md +28 -0
  37. data/docs/DynamicCareRequestContainerDetails.md +22 -0
  38. data/docs/DynamicCareRequestEnvironment.md +20 -0
  39. data/docs/DynamicCareRequestLocation.md +22 -0
  40. data/docs/EnvironmentalApi.md +87 -0
  41. data/docs/EnvironmentalImpact.md +22 -0
  42. data/docs/EnvironmentalImpactDetailedAnalysis.md +26 -0
  43. data/docs/EnvironmentalImpactDetailedAnalysisEcoAlternatives.md +18 -0
  44. data/docs/EnvironmentalImpactDetailedAnalysisEcoAlternativesAlternativesInner.md +26 -0
  45. data/docs/EnvironmentalImpactDetailedAnalysisRunoffRisk.md +22 -0
  46. data/docs/EnvironmentalImpactImpactAssessment.md +26 -0
  47. data/docs/Error.md +22 -0
  48. data/docs/GenerateSmartReportSummaryRequest.md +20 -0
  49. data/docs/GenerateVRTPrescriptionRequest.md +22 -0
  50. data/docs/GeographicApi.md +79 -0
  51. data/docs/GetAgriculturalIntelligenceRequest.md +20 -0
  52. data/docs/GetLiveAgriculturalDataRequest.md +24 -0
  53. data/docs/GetPlantingCalendarRequest.md +20 -0
  54. data/docs/GetSatelliteDataRequest.md +20 -0
  55. data/docs/GetSeasonalPlanningAssistantRequest.md +26 -0
  56. data/docs/GetSeasonalPlanningAssistantRequestLocation.md +22 -0
  57. data/docs/GetSoilDataRequest.md +18 -0
  58. data/docs/GetTerritorialWaterAnalyticsRequest.md +22 -0
  59. data/docs/GetTerritorialWaterAnalyticsRequestDateRange.md +20 -0
  60. data/docs/LeafEnginesApi.md +87 -0
  61. data/docs/LeafEnginesCompatibility.md +22 -0
  62. data/docs/LeafEnginesCompatibilityData.md +32 -0
  63. data/docs/LeafEnginesCompatibilityDataBreakdown.md +22 -0
  64. data/docs/LeafEnginesCompatibilityDataBreakdownSoil.md +22 -0
  65. data/docs/LeafEnginesCompatibilityDataMetadata.md +22 -0
  66. data/docs/LeafEnginesCompatibilityUsage.md +20 -0
  67. data/docs/LeafenginesQueryRequest.md +22 -0
  68. data/docs/LeafenginesQueryRequestLocation.md +24 -0
  69. data/docs/LeafenginesQueryRequestOptions.md +22 -0
  70. data/docs/LeafenginesQueryRequestPlant.md +24 -0
  71. data/docs/LeafenginesQueryRequestPlantCareRequirements.md +22 -0
  72. data/docs/LeafenginesQueryRequestPlantCareRequirementsSoilPhRange.md +20 -0
  73. data/docs/LiveAgriculturalData.md +30 -0
  74. data/docs/LiveAgriculturalDataData.md +24 -0
  75. data/docs/PlantingCalendar.md +26 -0
  76. data/docs/SafeIdentification.md +26 -0
  77. data/docs/SafeIdentificationConfidenceBreakdown.md +24 -0
  78. data/docs/SafeIdentificationIdentification.md +22 -0
  79. data/docs/SafeIdentificationIdentificationPrimaryMatch.md +24 -0
  80. data/docs/SafeIdentificationMetadata.md +22 -0
  81. data/docs/SafeIdentificationRequest.md +22 -0
  82. data/docs/SafeIdentificationRequestContext.md +22 -0
  83. data/docs/SafeIdentificationRequestLocation.md +22 -0
  84. data/docs/SafeIdentificationRequestLocationCoordinates.md +20 -0
  85. data/docs/SafeIdentificationSafetyAnalysis.md +24 -0
  86. data/docs/SafeIdentificationSafetyAnalysisLookalikesInner.md +24 -0
  87. data/docs/SatelliteData.md +26 -0
  88. data/docs/SatelliteDataApi.md +79 -0
  89. data/docs/SeasonalPlanningResponse.md +24 -0
  90. data/docs/SeasonalPlanningResponseRecommendations.md +22 -0
  91. data/docs/SeasonalPlanningResponseWeatherData.md +28 -0
  92. data/docs/SmartReportSummary.md +22 -0
  93. data/docs/SmartReportSummarySummary.md +24 -0
  94. data/docs/SoilAnalysisApi.md +231 -0
  95. data/docs/SoilData.md +38 -0
  96. data/docs/TerritorialWaterAnalytics.md +22 -0
  97. data/docs/TerritorialWaterAnalyticsAnalytics.md +24 -0
  98. data/docs/TurboQuantApi.md +87 -0
  99. data/docs/TurboQuantCapabilities.md +30 -0
  100. data/docs/TurboQuantCapabilitiesEstimatedLatencyMs.md +20 -0
  101. data/docs/TurboQuantCapabilitiesRequest.md +22 -0
  102. data/docs/VRTApi.md +79 -0
  103. data/docs/VRTPrescription.md +24 -0
  104. data/docs/VRTPrescriptionZonesInner.md +22 -0
  105. data/docs/VisualCropAnalysis.md +24 -0
  106. data/docs/VisualCropAnalysisAnalysis.md +26 -0
  107. data/docs/VisualCropAnalysisRequest.md +24 -0
  108. data/docs/VisualCropAnalysisRequestLocation.md +22 -0
  109. data/docs/WaterQuality.md +30 -0
  110. data/docs/WaterQualityApi.md +151 -0
  111. data/git_push.sh +57 -0
  112. data/lib/soilsidekick/api/ai_services_api.rb +378 -0
  113. data/lib/soilsidekick/api/carbon_api.rb +90 -0
  114. data/lib/soilsidekick/api/consumer_plant_care_api.rb +289 -0
  115. data/lib/soilsidekick/api/environmental_api.rb +111 -0
  116. data/lib/soilsidekick/api/geographic_api.rb +90 -0
  117. data/lib/soilsidekick/api/leaf_engines_api.rb +111 -0
  118. data/lib/soilsidekick/api/satellite_data_api.rb +90 -0
  119. data/lib/soilsidekick/api/soil_analysis_api.rb +247 -0
  120. data/lib/soilsidekick/api/turbo_quant_api.rb +111 -0
  121. data/lib/soilsidekick/api/vrt_api.rb +90 -0
  122. data/lib/soilsidekick/api/water_quality_api.rb +158 -0
  123. data/lib/soilsidekick/api_client.rb +397 -0
  124. data/lib/soilsidekick/api_error.rb +58 -0
  125. data/lib/soilsidekick/api_model_base.rb +88 -0
  126. data/lib/soilsidekick/configuration.rb +312 -0
  127. data/lib/soilsidekick/models/ai_analysis.rb +167 -0
  128. data/lib/soilsidekick/models/ai_analysis_recommendations_inner.rb +199 -0
  129. data/lib/soilsidekick/models/beginner_guidance.rb +228 -0
  130. data/lib/soilsidekick/models/beginner_guidance_detailed_explanation.rb +179 -0
  131. data/lib/soilsidekick/models/beginner_guidance_metadata.rb +165 -0
  132. data/lib/soilsidekick/models/beginner_guidance_request.rb +229 -0
  133. data/lib/soilsidekick/models/beginner_guidance_request_location.rb +156 -0
  134. data/lib/soilsidekick/models/beginner_guidance_request_plant_context.rb +158 -0
  135. data/lib/soilsidekick/models/calculate_carbon_credits_request.rb +264 -0
  136. data/lib/soilsidekick/models/calculate_environmental_impact_request.rb +247 -0
  137. data/lib/soilsidekick/models/calculate_environmental_impact_request_proposed_treatments_inner.rb +181 -0
  138. data/lib/soilsidekick/models/calculate_environmental_impact_request_soil_data.rb +238 -0
  139. data/lib/soilsidekick/models/calculate_environmental_impact_request_water_body_data.rb +147 -0
  140. data/lib/soilsidekick/models/carbon_credit_calculation.rb +165 -0
  141. data/lib/soilsidekick/models/carbon_credit_calculation_calculation_details.rb +192 -0
  142. data/lib/soilsidekick/models/carbon_credit_calculation_calculation_details_metadata.rb +167 -0
  143. data/lib/soilsidekick/models/carbon_credit_calculation_credit_record.rb +217 -0
  144. data/lib/soilsidekick/models/county.rb +183 -0
  145. data/lib/soilsidekick/models/county_lookup200_response.rb +149 -0
  146. data/lib/soilsidekick/models/county_lookup_request.rb +183 -0
  147. data/lib/soilsidekick/models/dynamic_care.rb +196 -0
  148. data/lib/soilsidekick/models/dynamic_care_care_recommendations.rb +175 -0
  149. data/lib/soilsidekick/models/dynamic_care_care_recommendations_humidity.rb +165 -0
  150. data/lib/soilsidekick/models/dynamic_care_care_recommendations_light.rb +165 -0
  151. data/lib/soilsidekick/models/dynamic_care_care_recommendations_watering.rb +208 -0
  152. data/lib/soilsidekick/models/dynamic_care_current_conditions.rb +183 -0
  153. data/lib/soilsidekick/models/dynamic_care_metadata.rb +165 -0
  154. data/lib/soilsidekick/models/dynamic_care_plant.rb +199 -0
  155. data/lib/soilsidekick/models/dynamic_care_request.rb +262 -0
  156. data/lib/soilsidekick/models/dynamic_care_request_container_details.rb +199 -0
  157. data/lib/soilsidekick/models/dynamic_care_request_environment.rb +203 -0
  158. data/lib/soilsidekick/models/dynamic_care_request_location.rb +194 -0
  159. data/lib/soilsidekick/models/environmental_impact.rb +167 -0
  160. data/lib/soilsidekick/models/environmental_impact_detailed_analysis.rb +183 -0
  161. data/lib/soilsidekick/models/environmental_impact_detailed_analysis_eco_alternatives.rb +149 -0
  162. data/lib/soilsidekick/models/environmental_impact_detailed_analysis_eco_alternatives_alternatives_inner.rb +183 -0
  163. data/lib/soilsidekick/models/environmental_impact_detailed_analysis_runoff_risk.rb +199 -0
  164. data/lib/soilsidekick/models/environmental_impact_impact_assessment.rb +183 -0
  165. data/lib/soilsidekick/models/error.rb +165 -0
  166. data/lib/soilsidekick/models/generate_smart_report_summary_request.rb +215 -0
  167. data/lib/soilsidekick/models/generate_vrt_prescription_request.rb +223 -0
  168. data/lib/soilsidekick/models/get_agricultural_intelligence_request.rb +225 -0
  169. data/lib/soilsidekick/models/get_live_agricultural_data_request.rb +277 -0
  170. data/lib/soilsidekick/models/get_planting_calendar_request.rb +201 -0
  171. data/lib/soilsidekick/models/get_satellite_data_request.rb +226 -0
  172. data/lib/soilsidekick/models/get_seasonal_planning_assistant_request.rb +245 -0
  173. data/lib/soilsidekick/models/get_seasonal_planning_assistant_request_location.rb +165 -0
  174. data/lib/soilsidekick/models/get_soil_data_request.rb +176 -0
  175. data/lib/soilsidekick/models/get_territorial_water_analytics_request.rb +201 -0
  176. data/lib/soilsidekick/models/get_territorial_water_analytics_request_date_range.rb +156 -0
  177. data/lib/soilsidekick/models/leaf_engines_compatibility.rb +165 -0
  178. data/lib/soilsidekick/models/leaf_engines_compatibility_data.rb +247 -0
  179. data/lib/soilsidekick/models/leaf_engines_compatibility_data_breakdown.rb +165 -0
  180. data/lib/soilsidekick/models/leaf_engines_compatibility_data_breakdown_soil.rb +169 -0
  181. data/lib/soilsidekick/models/leaf_engines_compatibility_data_metadata.rb +167 -0
  182. data/lib/soilsidekick/models/leaf_engines_compatibility_usage.rb +156 -0
  183. data/lib/soilsidekick/models/leafengines_query_request.rb +199 -0
  184. data/lib/soilsidekick/models/leafengines_query_request_location.rb +174 -0
  185. data/lib/soilsidekick/models/leafengines_query_request_options.rb +165 -0
  186. data/lib/soilsidekick/models/leafengines_query_request_plant.rb +174 -0
  187. data/lib/soilsidekick/models/leafengines_query_request_plant_care_requirements.rb +211 -0
  188. data/lib/soilsidekick/models/leafengines_query_request_plant_care_requirements_soil_ph_range.rb +156 -0
  189. data/lib/soilsidekick/models/live_agricultural_data.rb +237 -0
  190. data/lib/soilsidekick/models/live_agricultural_data_data.rb +174 -0
  191. data/lib/soilsidekick/models/planting_calendar.rb +185 -0
  192. data/lib/soilsidekick/models/safe_identification.rb +184 -0
  193. data/lib/soilsidekick/models/safe_identification_confidence_breakdown.rb +174 -0
  194. data/lib/soilsidekick/models/safe_identification_identification.rb +200 -0
  195. data/lib/soilsidekick/models/safe_identification_identification_primary_match.rb +175 -0
  196. data/lib/soilsidekick/models/safe_identification_metadata.rb +167 -0
  197. data/lib/soilsidekick/models/safe_identification_request.rb +183 -0
  198. data/lib/soilsidekick/models/safe_identification_request_context.rb +223 -0
  199. data/lib/soilsidekick/models/safe_identification_request_location.rb +205 -0
  200. data/lib/soilsidekick/models/safe_identification_request_location_coordinates.rb +156 -0
  201. data/lib/soilsidekick/models/safe_identification_safety_analysis.rb +215 -0
  202. data/lib/soilsidekick/models/safe_identification_safety_analysis_lookalikes_inner.rb +177 -0
  203. data/lib/soilsidekick/models/satellite_data.rb +185 -0
  204. data/lib/soilsidekick/models/seasonal_planning_response.rb +174 -0
  205. data/lib/soilsidekick/models/seasonal_planning_response_recommendations.rb +169 -0
  206. data/lib/soilsidekick/models/seasonal_planning_response_weather_data.rb +192 -0
  207. data/lib/soilsidekick/models/smart_report_summary.rb +165 -0
  208. data/lib/soilsidekick/models/smart_report_summary_summary.rb +178 -0
  209. data/lib/soilsidekick/models/soil_data.rb +239 -0
  210. data/lib/soilsidekick/models/territorial_water_analytics.rb +165 -0
  211. data/lib/soilsidekick/models/territorial_water_analytics_analytics.rb +174 -0
  212. data/lib/soilsidekick/models/turbo_quant_capabilities.rb +253 -0
  213. data/lib/soilsidekick/models/turbo_quant_capabilities_estimated_latency_ms.rb +156 -0
  214. data/lib/soilsidekick/models/turbo_quant_capabilities_request.rb +201 -0
  215. data/lib/soilsidekick/models/visual_crop_analysis.rb +174 -0
  216. data/lib/soilsidekick/models/visual_crop_analysis_analysis.rb +219 -0
  217. data/lib/soilsidekick/models/visual_crop_analysis_request.rb +234 -0
  218. data/lib/soilsidekick/models/visual_crop_analysis_request_location.rb +165 -0
  219. data/lib/soilsidekick/models/vrt_prescription.rb +176 -0
  220. data/lib/soilsidekick/models/vrt_prescription_zones_inner.rb +165 -0
  221. data/lib/soilsidekick/models/water_quality.rb +235 -0
  222. data/lib/soilsidekick/version.rb +15 -0
  223. data/lib/soilsidekick.rb +146 -0
  224. data/soilsidekick.gemspec +39 -0
  225. data/spec/api/ai_services_api_spec.rb +95 -0
  226. data/spec/api/carbon_api_spec.rb +47 -0
  227. data/spec/api/consumer_plant_care_api_spec.rb +80 -0
  228. data/spec/api/environmental_api_spec.rb +50 -0
  229. data/spec/api/geographic_api_spec.rb +47 -0
  230. data/spec/api/leaf_engines_api_spec.rb +50 -0
  231. data/spec/api/satellite_data_api_spec.rb +47 -0
  232. data/spec/api/soil_analysis_api_spec.rb +74 -0
  233. data/spec/api/turbo_quant_api_spec.rb +50 -0
  234. data/spec/api/vrt_api_spec.rb +47 -0
  235. data/spec/api/water_quality_api_spec.rb +59 -0
  236. data/spec/models/ai_analysis_recommendations_inner_spec.rb +52 -0
  237. data/spec/models/ai_analysis_spec.rb +48 -0
  238. data/spec/models/beginner_guidance_detailed_explanation_spec.rb +54 -0
  239. data/spec/models/beginner_guidance_metadata_spec.rb +48 -0
  240. data/spec/models/beginner_guidance_request_location_spec.rb +42 -0
  241. data/spec/models/beginner_guidance_request_plant_context_spec.rb +42 -0
  242. data/spec/models/beginner_guidance_request_spec.rb +58 -0
  243. data/spec/models/beginner_guidance_spec.rb +84 -0
  244. data/spec/models/calculate_carbon_credits_request_spec.rb +64 -0
  245. data/spec/models/calculate_environmental_impact_request_proposed_treatments_inner_spec.rb +40 -0
  246. data/spec/models/calculate_environmental_impact_request_soil_data_spec.rb +74 -0
  247. data/spec/models/calculate_environmental_impact_request_spec.rb +60 -0
  248. data/spec/models/calculate_environmental_impact_request_water_body_data_spec.rb +36 -0
  249. data/spec/models/carbon_credit_calculation_calculation_details_metadata_spec.rb +48 -0
  250. data/spec/models/carbon_credit_calculation_calculation_details_spec.rb +66 -0
  251. data/spec/models/carbon_credit_calculation_credit_record_spec.rb +64 -0
  252. data/spec/models/carbon_credit_calculation_spec.rb +48 -0
  253. data/spec/models/county_lookup200_response_spec.rb +36 -0
  254. data/spec/models/county_lookup_request_spec.rb +36 -0
  255. data/spec/models/county_spec.rb +60 -0
  256. data/spec/models/dynamic_care_care_recommendations_humidity_spec.rb +48 -0
  257. data/spec/models/dynamic_care_care_recommendations_light_spec.rb +48 -0
  258. data/spec/models/dynamic_care_care_recommendations_spec.rb +54 -0
  259. data/spec/models/dynamic_care_care_recommendations_watering_spec.rb +58 -0
  260. data/spec/models/dynamic_care_current_conditions_spec.rb +60 -0
  261. data/spec/models/dynamic_care_metadata_spec.rb +48 -0
  262. data/spec/models/dynamic_care_plant_spec.rb +52 -0
  263. data/spec/models/dynamic_care_request_container_details_spec.rb +52 -0
  264. data/spec/models/dynamic_care_request_environment_spec.rb +50 -0
  265. data/spec/models/dynamic_care_request_location_spec.rb +48 -0
  266. data/spec/models/dynamic_care_request_spec.rb +70 -0
  267. data/spec/models/dynamic_care_spec.rb +66 -0
  268. data/spec/models/environmental_impact_detailed_analysis_eco_alternatives_alternatives_inner_spec.rb +60 -0
  269. data/spec/models/environmental_impact_detailed_analysis_eco_alternatives_spec.rb +36 -0
  270. data/spec/models/environmental_impact_detailed_analysis_runoff_risk_spec.rb +52 -0
  271. data/spec/models/environmental_impact_detailed_analysis_spec.rb +60 -0
  272. data/spec/models/environmental_impact_impact_assessment_spec.rb +60 -0
  273. data/spec/models/environmental_impact_spec.rb +48 -0
  274. data/spec/models/error_spec.rb +48 -0
  275. data/spec/models/generate_smart_report_summary_request_spec.rb +46 -0
  276. data/spec/models/generate_vrt_prescription_request_spec.rb +52 -0
  277. data/spec/models/get_agricultural_intelligence_request_spec.rb +46 -0
  278. data/spec/models/get_live_agricultural_data_request_spec.rb +58 -0
  279. data/spec/models/get_planting_calendar_request_spec.rb +42 -0
  280. data/spec/models/get_satellite_data_request_spec.rb +42 -0
  281. data/spec/models/get_seasonal_planning_assistant_request_location_spec.rb +48 -0
  282. data/spec/models/get_seasonal_planning_assistant_request_spec.rb +64 -0
  283. data/spec/models/get_soil_data_request_spec.rb +36 -0
  284. data/spec/models/get_territorial_water_analytics_request_date_range_spec.rb +42 -0
  285. data/spec/models/get_territorial_water_analytics_request_spec.rb +52 -0
  286. data/spec/models/leaf_engines_compatibility_data_breakdown_soil_spec.rb +48 -0
  287. data/spec/models/leaf_engines_compatibility_data_breakdown_spec.rb +48 -0
  288. data/spec/models/leaf_engines_compatibility_data_metadata_spec.rb +48 -0
  289. data/spec/models/leaf_engines_compatibility_data_spec.rb +82 -0
  290. data/spec/models/leaf_engines_compatibility_spec.rb +48 -0
  291. data/spec/models/leaf_engines_compatibility_usage_spec.rb +42 -0
  292. data/spec/models/leafengines_query_request_location_spec.rb +54 -0
  293. data/spec/models/leafengines_query_request_options_spec.rb +48 -0
  294. data/spec/models/leafengines_query_request_plant_care_requirements_soil_ph_range_spec.rb +42 -0
  295. data/spec/models/leafengines_query_request_plant_care_requirements_spec.rb +56 -0
  296. data/spec/models/leafengines_query_request_plant_spec.rb +54 -0
  297. data/spec/models/leafengines_query_request_spec.rb +48 -0
  298. data/spec/models/live_agricultural_data_data_spec.rb +54 -0
  299. data/spec/models/live_agricultural_data_spec.rb +76 -0
  300. data/spec/models/planting_calendar_spec.rb +60 -0
  301. data/spec/models/safe_identification_confidence_breakdown_spec.rb +54 -0
  302. data/spec/models/safe_identification_identification_primary_match_spec.rb +54 -0
  303. data/spec/models/safe_identification_identification_spec.rb +52 -0
  304. data/spec/models/safe_identification_metadata_spec.rb +48 -0
  305. data/spec/models/safe_identification_request_context_spec.rb +60 -0
  306. data/spec/models/safe_identification_request_location_coordinates_spec.rb +42 -0
  307. data/spec/models/safe_identification_request_location_spec.rb +48 -0
  308. data/spec/models/safe_identification_request_spec.rb +48 -0
  309. data/spec/models/safe_identification_safety_analysis_lookalikes_inner_spec.rb +54 -0
  310. data/spec/models/safe_identification_safety_analysis_spec.rb +58 -0
  311. data/spec/models/safe_identification_spec.rb +60 -0
  312. data/spec/models/satellite_data_spec.rb +60 -0
  313. data/spec/models/seasonal_planning_response_recommendations_spec.rb +48 -0
  314. data/spec/models/seasonal_planning_response_spec.rb +54 -0
  315. data/spec/models/seasonal_planning_response_weather_data_spec.rb +66 -0
  316. data/spec/models/smart_report_summary_spec.rb +48 -0
  317. data/spec/models/smart_report_summary_summary_spec.rb +54 -0
  318. data/spec/models/soil_data_spec.rb +96 -0
  319. data/spec/models/territorial_water_analytics_analytics_spec.rb +54 -0
  320. data/spec/models/territorial_water_analytics_spec.rb +48 -0
  321. data/spec/models/turbo_quant_capabilities_estimated_latency_ms_spec.rb +42 -0
  322. data/spec/models/turbo_quant_capabilities_request_spec.rb +52 -0
  323. data/spec/models/turbo_quant_capabilities_spec.rb +80 -0
  324. data/spec/models/visual_crop_analysis_analysis_spec.rb +64 -0
  325. data/spec/models/visual_crop_analysis_request_location_spec.rb +48 -0
  326. data/spec/models/visual_crop_analysis_request_spec.rb +58 -0
  327. data/spec/models/visual_crop_analysis_spec.rb +54 -0
  328. data/spec/models/vrt_prescription_spec.rb +54 -0
  329. data/spec/models/vrt_prescription_zones_inner_spec.rb +48 -0
  330. data/spec/models/water_quality_spec.rb +76 -0
  331. data/spec/spec_helper.rb +111 -0
  332. metadata +543 -0
@@ -0,0 +1,90 @@
1
+ =begin
2
+ #SoilSidekick Pro API
3
+
4
+ #Agricultural intelligence and soil analysis API with tier-based access control. ## What's New in 1.2.0 - **Consumer Plant Care APIs**: Three new endpoints addressing top pain points in plant ID apps: - `/safe-identification`: Toxic lookalike warnings and environmental context - `/dynamic-care`: Hyper-localized, real-time care recommendations - `/beginner-guidance`: Judgment-free, jargon-free plant guidance ## Authentication All endpoints require an API key passed via the `x-api-key` header: ``` x-api-key: ak_your_api_key_here ``` API keys are generated through the dashboard and use the `ak_*` format. ## Rate Limiting Rate limits are enforced based on your subscription tier: - **Free**: 10 req/min, 100 req/hour, 1,000 req/day - **Starter**: 30 req/min, 500 req/hour, 5,000 req/day - **Pro**: 100 req/min, 2,000 req/hour, 25,000 req/day - **Enterprise**: 500 req/min, 10,000 req/hour, 100,000 req/day Rate limit information is returned in response headers: - `X-RateLimit-Limit`: Maximum requests in window - `X-RateLimit-Remaining`: Remaining requests in window - `X-RateLimit-Reset`: Unix timestamp when limit resets ## Response Time SLAs All endpoints return response time headers for performance monitoring: - `X-Response-Time`: Human-readable response time (e.g., \"245ms\") - `X-Response-Time-Ms`: Response time in milliseconds - `X-Response-Time-Target`: Target response time for this endpoint - `X-Response-Time-Max`: Maximum acceptable response time - `X-Response-Time-Status`: Performance status (`optimal`, `acceptable`, `exceeded`) ### Response Time Targets by Category | Category | Target | Maximum | Endpoints | |----------|--------|---------|-----------| | **Fast** | 200ms | 500ms | county-lookup, check-subscription | | **Standard** | 500ms | 1,500ms | get-soil-data, territorial-water-quality | | **Complex** | 2,000ms | 5,000ms | agricultural-intelligence, gpt5-chat, visual-crop-analysis | | **Heavy** | 5,000ms | 15,000ms | live-agricultural-data, generate-vrt-prescription |
5
+
6
+ The version of the OpenAPI document: 3.0.0
7
+ Contact: support@soilsidekickpro.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.23.0
10
+
11
+ =end
12
+
13
+ require 'cgi'
14
+
15
+ module SoilSidekick
16
+ class SatelliteDataApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Get satellite environmental data
23
+ # AlphaEarth satellite intelligence integration
24
+ # @param get_satellite_data_request [GetSatelliteDataRequest]
25
+ # @param [Hash] opts the optional parameters
26
+ # @return [SatelliteData]
27
+ def get_satellite_data(get_satellite_data_request, opts = {})
28
+ data, _status_code, _headers = get_satellite_data_with_http_info(get_satellite_data_request, opts)
29
+ data
30
+ end
31
+
32
+ # Get satellite environmental data
33
+ # AlphaEarth satellite intelligence integration
34
+ # @param get_satellite_data_request [GetSatelliteDataRequest]
35
+ # @param [Hash] opts the optional parameters
36
+ # @return [Array<(SatelliteData, Integer, Hash)>] SatelliteData data, response status code and response headers
37
+ def get_satellite_data_with_http_info(get_satellite_data_request, opts = {})
38
+ if @api_client.config.debugging
39
+ @api_client.config.logger.debug 'Calling API: SatelliteDataApi.get_satellite_data ...'
40
+ end
41
+ # verify the required parameter 'get_satellite_data_request' is set
42
+ if @api_client.config.client_side_validation && get_satellite_data_request.nil?
43
+ fail ArgumentError, "Missing the required parameter 'get_satellite_data_request' when calling SatelliteDataApi.get_satellite_data"
44
+ end
45
+ # resource path
46
+ local_var_path = '/alpha-earth-environmental-enhancement'
47
+
48
+ # query parameters
49
+ query_params = opts[:query_params] || {}
50
+
51
+ # header parameters
52
+ header_params = opts[:header_params] || {}
53
+ # HTTP header 'Accept' (if needed)
54
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
55
+ # HTTP header 'Content-Type'
56
+ content_type = @api_client.select_header_content_type(['application/json'])
57
+ if !content_type.nil?
58
+ header_params['Content-Type'] = content_type
59
+ end
60
+
61
+ # form parameters
62
+ form_params = opts[:form_params] || {}
63
+
64
+ # http body (model)
65
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(get_satellite_data_request)
66
+
67
+ # return_type
68
+ return_type = opts[:debug_return_type] || 'SatelliteData'
69
+
70
+ # auth_names
71
+ auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
72
+
73
+ new_options = opts.merge(
74
+ :operation => :"SatelliteDataApi.get_satellite_data",
75
+ :header_params => header_params,
76
+ :query_params => query_params,
77
+ :form_params => form_params,
78
+ :body => post_body,
79
+ :auth_names => auth_names,
80
+ :return_type => return_type
81
+ )
82
+
83
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
84
+ if @api_client.config.debugging
85
+ @api_client.config.logger.debug "API called: SatelliteDataApi#get_satellite_data\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
86
+ end
87
+ return data, status_code, headers
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,247 @@
1
+ =begin
2
+ #SoilSidekick Pro API
3
+
4
+ #Agricultural intelligence and soil analysis API with tier-based access control. ## What's New in 1.2.0 - **Consumer Plant Care APIs**: Three new endpoints addressing top pain points in plant ID apps: - `/safe-identification`: Toxic lookalike warnings and environmental context - `/dynamic-care`: Hyper-localized, real-time care recommendations - `/beginner-guidance`: Judgment-free, jargon-free plant guidance ## Authentication All endpoints require an API key passed via the `x-api-key` header: ``` x-api-key: ak_your_api_key_here ``` API keys are generated through the dashboard and use the `ak_*` format. ## Rate Limiting Rate limits are enforced based on your subscription tier: - **Free**: 10 req/min, 100 req/hour, 1,000 req/day - **Starter**: 30 req/min, 500 req/hour, 5,000 req/day - **Pro**: 100 req/min, 2,000 req/hour, 25,000 req/day - **Enterprise**: 500 req/min, 10,000 req/hour, 100,000 req/day Rate limit information is returned in response headers: - `X-RateLimit-Limit`: Maximum requests in window - `X-RateLimit-Remaining`: Remaining requests in window - `X-RateLimit-Reset`: Unix timestamp when limit resets ## Response Time SLAs All endpoints return response time headers for performance monitoring: - `X-Response-Time`: Human-readable response time (e.g., \"245ms\") - `X-Response-Time-Ms`: Response time in milliseconds - `X-Response-Time-Target`: Target response time for this endpoint - `X-Response-Time-Max`: Maximum acceptable response time - `X-Response-Time-Status`: Performance status (`optimal`, `acceptable`, `exceeded`) ### Response Time Targets by Category | Category | Target | Maximum | Endpoints | |----------|--------|---------|-----------| | **Fast** | 200ms | 500ms | county-lookup, check-subscription | | **Standard** | 500ms | 1,500ms | get-soil-data, territorial-water-quality | | **Complex** | 2,000ms | 5,000ms | agricultural-intelligence, gpt5-chat, visual-crop-analysis | | **Heavy** | 5,000ms | 15,000ms | live-agricultural-data, generate-vrt-prescription |
5
+
6
+ The version of the OpenAPI document: 3.0.0
7
+ Contact: support@soilsidekickpro.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.23.0
10
+
11
+ =end
12
+
13
+ require 'cgi'
14
+
15
+ module SoilSidekick
16
+ class SoilAnalysisApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Get live agricultural data
23
+ # Fetch real-time agricultural data from multiple federal sources (NOAA, USDA, EPA)
24
+ # @param get_live_agricultural_data_request [GetLiveAgriculturalDataRequest]
25
+ # @param [Hash] opts the optional parameters
26
+ # @return [LiveAgriculturalData]
27
+ def get_live_agricultural_data(get_live_agricultural_data_request, opts = {})
28
+ data, _status_code, _headers = get_live_agricultural_data_with_http_info(get_live_agricultural_data_request, opts)
29
+ data
30
+ end
31
+
32
+ # Get live agricultural data
33
+ # Fetch real-time agricultural data from multiple federal sources (NOAA, USDA, EPA)
34
+ # @param get_live_agricultural_data_request [GetLiveAgriculturalDataRequest]
35
+ # @param [Hash] opts the optional parameters
36
+ # @return [Array<(LiveAgriculturalData, Integer, Hash)>] LiveAgriculturalData data, response status code and response headers
37
+ def get_live_agricultural_data_with_http_info(get_live_agricultural_data_request, opts = {})
38
+ if @api_client.config.debugging
39
+ @api_client.config.logger.debug 'Calling API: SoilAnalysisApi.get_live_agricultural_data ...'
40
+ end
41
+ # verify the required parameter 'get_live_agricultural_data_request' is set
42
+ if @api_client.config.client_side_validation && get_live_agricultural_data_request.nil?
43
+ fail ArgumentError, "Missing the required parameter 'get_live_agricultural_data_request' when calling SoilAnalysisApi.get_live_agricultural_data"
44
+ end
45
+ # resource path
46
+ local_var_path = '/live-agricultural-data'
47
+
48
+ # query parameters
49
+ query_params = opts[:query_params] || {}
50
+
51
+ # header parameters
52
+ header_params = opts[:header_params] || {}
53
+ # HTTP header 'Accept' (if needed)
54
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
55
+ # HTTP header 'Content-Type'
56
+ content_type = @api_client.select_header_content_type(['application/json'])
57
+ if !content_type.nil?
58
+ header_params['Content-Type'] = content_type
59
+ end
60
+
61
+ # form parameters
62
+ form_params = opts[:form_params] || {}
63
+
64
+ # http body (model)
65
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(get_live_agricultural_data_request)
66
+
67
+ # return_type
68
+ return_type = opts[:debug_return_type] || 'LiveAgriculturalData'
69
+
70
+ # auth_names
71
+ auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
72
+
73
+ new_options = opts.merge(
74
+ :operation => :"SoilAnalysisApi.get_live_agricultural_data",
75
+ :header_params => header_params,
76
+ :query_params => query_params,
77
+ :form_params => form_params,
78
+ :body => post_body,
79
+ :auth_names => auth_names,
80
+ :return_type => return_type
81
+ )
82
+
83
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
84
+ if @api_client.config.debugging
85
+ @api_client.config.logger.debug "API called: SoilAnalysisApi#get_live_agricultural_data\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
86
+ end
87
+ return data, status_code, headers
88
+ end
89
+
90
+ # Get planting calendar recommendations
91
+ # Multi-parameter planting calendar with climate and soil factors
92
+ # @param get_planting_calendar_request [GetPlantingCalendarRequest]
93
+ # @param [Hash] opts the optional parameters
94
+ # @option opts [Integer] :x_tq_context_mode TurboQuant extended context window size (tokens). With 3-bit KV cache, context windows up to 24K tokens are feasible within the same memory budget as standard 4K. (default to 4096)
95
+ # @option opts [String] :x_tq_kv_cache_hint KV cache management hint. - &#x60;none&#x60;: No caching (default) - &#x60;reuse&#x60;: Reuse KV cache from previous request in same session (40-60% compute savings) - &#x60;persist&#x60;: Persist cache to disk for cross-session reuse (default to 'none')
96
+ # @option opts [String] :x_tq_model_tier Preferred model tier for inference. - &#x60;auto&#x60;: Server selects optimal model based on device capabilities - &#x60;gemma-2b&#x60;: Lightweight model (~0.5GB KV with TQ) - &#x60;gemma-7b&#x60;: Full model, standard KV cache - &#x60;gemma-7b-tq&#x60;: Full model with TurboQuant 3-bit KV cache (~1.3GB) (default to 'auto')
97
+ # @return [PlantingCalendar]
98
+ def get_planting_calendar(get_planting_calendar_request, opts = {})
99
+ data, _status_code, _headers = get_planting_calendar_with_http_info(get_planting_calendar_request, opts)
100
+ data
101
+ end
102
+
103
+ # Get planting calendar recommendations
104
+ # Multi-parameter planting calendar with climate and soil factors
105
+ # @param get_planting_calendar_request [GetPlantingCalendarRequest]
106
+ # @param [Hash] opts the optional parameters
107
+ # @option opts [Integer] :x_tq_context_mode TurboQuant extended context window size (tokens). With 3-bit KV cache, context windows up to 24K tokens are feasible within the same memory budget as standard 4K. (default to 4096)
108
+ # @option opts [String] :x_tq_kv_cache_hint KV cache management hint. - &#x60;none&#x60;: No caching (default) - &#x60;reuse&#x60;: Reuse KV cache from previous request in same session (40-60% compute savings) - &#x60;persist&#x60;: Persist cache to disk for cross-session reuse (default to 'none')
109
+ # @option opts [String] :x_tq_model_tier Preferred model tier for inference. - &#x60;auto&#x60;: Server selects optimal model based on device capabilities - &#x60;gemma-2b&#x60;: Lightweight model (~0.5GB KV with TQ) - &#x60;gemma-7b&#x60;: Full model, standard KV cache - &#x60;gemma-7b-tq&#x60;: Full model with TurboQuant 3-bit KV cache (~1.3GB) (default to 'auto')
110
+ # @return [Array<(PlantingCalendar, Integer, Hash)>] PlantingCalendar data, response status code and response headers
111
+ def get_planting_calendar_with_http_info(get_planting_calendar_request, opts = {})
112
+ if @api_client.config.debugging
113
+ @api_client.config.logger.debug 'Calling API: SoilAnalysisApi.get_planting_calendar ...'
114
+ end
115
+ # verify the required parameter 'get_planting_calendar_request' is set
116
+ if @api_client.config.client_side_validation && get_planting_calendar_request.nil?
117
+ fail ArgumentError, "Missing the required parameter 'get_planting_calendar_request' when calling SoilAnalysisApi.get_planting_calendar"
118
+ end
119
+ allowable_values = [4096, 8192, 16384, 24576]
120
+ if @api_client.config.client_side_validation && opts[:'x_tq_context_mode'] && !allowable_values.include?(opts[:'x_tq_context_mode'])
121
+ fail ArgumentError, "invalid value for \"x_tq_context_mode\", must be one of #{allowable_values}"
122
+ end
123
+ allowable_values = ["none", "reuse", "persist"]
124
+ if @api_client.config.client_side_validation && opts[:'x_tq_kv_cache_hint'] && !allowable_values.include?(opts[:'x_tq_kv_cache_hint'])
125
+ fail ArgumentError, "invalid value for \"x_tq_kv_cache_hint\", must be one of #{allowable_values}"
126
+ end
127
+ allowable_values = ["auto", "gemma-2b", "gemma-7b", "gemma-7b-tq"]
128
+ if @api_client.config.client_side_validation && opts[:'x_tq_model_tier'] && !allowable_values.include?(opts[:'x_tq_model_tier'])
129
+ fail ArgumentError, "invalid value for \"x_tq_model_tier\", must be one of #{allowable_values}"
130
+ end
131
+ # resource path
132
+ local_var_path = '/multi-parameter-planting-calendar'
133
+
134
+ # query parameters
135
+ query_params = opts[:query_params] || {}
136
+
137
+ # header parameters
138
+ header_params = opts[:header_params] || {}
139
+ # HTTP header 'Accept' (if needed)
140
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
141
+ # HTTP header 'Content-Type'
142
+ content_type = @api_client.select_header_content_type(['application/json'])
143
+ if !content_type.nil?
144
+ header_params['Content-Type'] = content_type
145
+ end
146
+ header_params[:'x-tq-context-mode'] = opts[:'x_tq_context_mode'] if !opts[:'x_tq_context_mode'].nil?
147
+ header_params[:'x-tq-kv-cache-hint'] = opts[:'x_tq_kv_cache_hint'] if !opts[:'x_tq_kv_cache_hint'].nil?
148
+ header_params[:'x-tq-model-tier'] = opts[:'x_tq_model_tier'] if !opts[:'x_tq_model_tier'].nil?
149
+
150
+ # form parameters
151
+ form_params = opts[:form_params] || {}
152
+
153
+ # http body (model)
154
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(get_planting_calendar_request)
155
+
156
+ # return_type
157
+ return_type = opts[:debug_return_type] || 'PlantingCalendar'
158
+
159
+ # auth_names
160
+ auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
161
+
162
+ new_options = opts.merge(
163
+ :operation => :"SoilAnalysisApi.get_planting_calendar",
164
+ :header_params => header_params,
165
+ :query_params => query_params,
166
+ :form_params => form_params,
167
+ :body => post_body,
168
+ :auth_names => auth_names,
169
+ :return_type => return_type
170
+ )
171
+
172
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
173
+ if @api_client.config.debugging
174
+ @api_client.config.logger.debug "API called: SoilAnalysisApi#get_planting_calendar\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
175
+ end
176
+ return data, status_code, headers
177
+ end
178
+
179
+ # Get soil analysis data
180
+ # Retrieve comprehensive soil analysis for a specific county
181
+ # @param get_soil_data_request [GetSoilDataRequest]
182
+ # @param [Hash] opts the optional parameters
183
+ # @return [SoilData]
184
+ def get_soil_data(get_soil_data_request, opts = {})
185
+ data, _status_code, _headers = get_soil_data_with_http_info(get_soil_data_request, opts)
186
+ data
187
+ end
188
+
189
+ # Get soil analysis data
190
+ # Retrieve comprehensive soil analysis for a specific county
191
+ # @param get_soil_data_request [GetSoilDataRequest]
192
+ # @param [Hash] opts the optional parameters
193
+ # @return [Array<(SoilData, Integer, Hash)>] SoilData data, response status code and response headers
194
+ def get_soil_data_with_http_info(get_soil_data_request, opts = {})
195
+ if @api_client.config.debugging
196
+ @api_client.config.logger.debug 'Calling API: SoilAnalysisApi.get_soil_data ...'
197
+ end
198
+ # verify the required parameter 'get_soil_data_request' is set
199
+ if @api_client.config.client_side_validation && get_soil_data_request.nil?
200
+ fail ArgumentError, "Missing the required parameter 'get_soil_data_request' when calling SoilAnalysisApi.get_soil_data"
201
+ end
202
+ # resource path
203
+ local_var_path = '/get-soil-data'
204
+
205
+ # query parameters
206
+ query_params = opts[:query_params] || {}
207
+
208
+ # header parameters
209
+ header_params = opts[:header_params] || {}
210
+ # HTTP header 'Accept' (if needed)
211
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
212
+ # HTTP header 'Content-Type'
213
+ content_type = @api_client.select_header_content_type(['application/json'])
214
+ if !content_type.nil?
215
+ header_params['Content-Type'] = content_type
216
+ end
217
+
218
+ # form parameters
219
+ form_params = opts[:form_params] || {}
220
+
221
+ # http body (model)
222
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(get_soil_data_request)
223
+
224
+ # return_type
225
+ return_type = opts[:debug_return_type] || 'SoilData'
226
+
227
+ # auth_names
228
+ auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
229
+
230
+ new_options = opts.merge(
231
+ :operation => :"SoilAnalysisApi.get_soil_data",
232
+ :header_params => header_params,
233
+ :query_params => query_params,
234
+ :form_params => form_params,
235
+ :body => post_body,
236
+ :auth_names => auth_names,
237
+ :return_type => return_type
238
+ )
239
+
240
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
241
+ if @api_client.config.debugging
242
+ @api_client.config.logger.debug "API called: SoilAnalysisApi#get_soil_data\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
243
+ end
244
+ return data, status_code, headers
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,111 @@
1
+ =begin
2
+ #SoilSidekick Pro API
3
+
4
+ #Agricultural intelligence and soil analysis API with tier-based access control. ## What's New in 1.2.0 - **Consumer Plant Care APIs**: Three new endpoints addressing top pain points in plant ID apps: - `/safe-identification`: Toxic lookalike warnings and environmental context - `/dynamic-care`: Hyper-localized, real-time care recommendations - `/beginner-guidance`: Judgment-free, jargon-free plant guidance ## Authentication All endpoints require an API key passed via the `x-api-key` header: ``` x-api-key: ak_your_api_key_here ``` API keys are generated through the dashboard and use the `ak_*` format. ## Rate Limiting Rate limits are enforced based on your subscription tier: - **Free**: 10 req/min, 100 req/hour, 1,000 req/day - **Starter**: 30 req/min, 500 req/hour, 5,000 req/day - **Pro**: 100 req/min, 2,000 req/hour, 25,000 req/day - **Enterprise**: 500 req/min, 10,000 req/hour, 100,000 req/day Rate limit information is returned in response headers: - `X-RateLimit-Limit`: Maximum requests in window - `X-RateLimit-Remaining`: Remaining requests in window - `X-RateLimit-Reset`: Unix timestamp when limit resets ## Response Time SLAs All endpoints return response time headers for performance monitoring: - `X-Response-Time`: Human-readable response time (e.g., \"245ms\") - `X-Response-Time-Ms`: Response time in milliseconds - `X-Response-Time-Target`: Target response time for this endpoint - `X-Response-Time-Max`: Maximum acceptable response time - `X-Response-Time-Status`: Performance status (`optimal`, `acceptable`, `exceeded`) ### Response Time Targets by Category | Category | Target | Maximum | Endpoints | |----------|--------|---------|-----------| | **Fast** | 200ms | 500ms | county-lookup, check-subscription | | **Standard** | 500ms | 1,500ms | get-soil-data, territorial-water-quality | | **Complex** | 2,000ms | 5,000ms | agricultural-intelligence, gpt5-chat, visual-crop-analysis | | **Heavy** | 5,000ms | 15,000ms | live-agricultural-data, generate-vrt-prescription |
5
+
6
+ The version of the OpenAPI document: 3.0.0
7
+ Contact: support@soilsidekickpro.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.23.0
10
+
11
+ =end
12
+
13
+ require 'cgi'
14
+
15
+ module SoilSidekick
16
+ class TurboQuantApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Query TurboQuant device capabilities
23
+ # Returns hardware-specific model recommendations and estimated performance based on detected device capabilities. Use this to determine the optimal local inference configuration for the end-user's device. **Tier requirement:** Pro or Enterprise
24
+ # @param turbo_quant_capabilities_request [TurboQuantCapabilitiesRequest]
25
+ # @param [Hash] opts the optional parameters
26
+ # @option opts [Integer] :x_tq_context_mode TurboQuant extended context window size (tokens). With 3-bit KV cache, context windows up to 24K tokens are feasible within the same memory budget as standard 4K. (default to 4096)
27
+ # @option opts [String] :x_tq_kv_cache_hint KV cache management hint. - &#x60;none&#x60;: No caching (default) - &#x60;reuse&#x60;: Reuse KV cache from previous request in same session (40-60% compute savings) - &#x60;persist&#x60;: Persist cache to disk for cross-session reuse (default to 'none')
28
+ # @option opts [String] :x_tq_model_tier Preferred model tier for inference. - &#x60;auto&#x60;: Server selects optimal model based on device capabilities - &#x60;gemma-2b&#x60;: Lightweight model (~0.5GB KV with TQ) - &#x60;gemma-7b&#x60;: Full model, standard KV cache - &#x60;gemma-7b-tq&#x60;: Full model with TurboQuant 3-bit KV cache (~1.3GB) (default to 'auto')
29
+ # @return [TurboQuantCapabilities]
30
+ def turbo_quant_capabilities(turbo_quant_capabilities_request, opts = {})
31
+ data, _status_code, _headers = turbo_quant_capabilities_with_http_info(turbo_quant_capabilities_request, opts)
32
+ data
33
+ end
34
+
35
+ # Query TurboQuant device capabilities
36
+ # Returns hardware-specific model recommendations and estimated performance based on detected device capabilities. Use this to determine the optimal local inference configuration for the end-user&#39;s device. **Tier requirement:** Pro or Enterprise
37
+ # @param turbo_quant_capabilities_request [TurboQuantCapabilitiesRequest]
38
+ # @param [Hash] opts the optional parameters
39
+ # @option opts [Integer] :x_tq_context_mode TurboQuant extended context window size (tokens). With 3-bit KV cache, context windows up to 24K tokens are feasible within the same memory budget as standard 4K. (default to 4096)
40
+ # @option opts [String] :x_tq_kv_cache_hint KV cache management hint. - &#x60;none&#x60;: No caching (default) - &#x60;reuse&#x60;: Reuse KV cache from previous request in same session (40-60% compute savings) - &#x60;persist&#x60;: Persist cache to disk for cross-session reuse (default to 'none')
41
+ # @option opts [String] :x_tq_model_tier Preferred model tier for inference. - &#x60;auto&#x60;: Server selects optimal model based on device capabilities - &#x60;gemma-2b&#x60;: Lightweight model (~0.5GB KV with TQ) - &#x60;gemma-7b&#x60;: Full model, standard KV cache - &#x60;gemma-7b-tq&#x60;: Full model with TurboQuant 3-bit KV cache (~1.3GB) (default to 'auto')
42
+ # @return [Array<(TurboQuantCapabilities, Integer, Hash)>] TurboQuantCapabilities data, response status code and response headers
43
+ def turbo_quant_capabilities_with_http_info(turbo_quant_capabilities_request, opts = {})
44
+ if @api_client.config.debugging
45
+ @api_client.config.logger.debug 'Calling API: TurboQuantApi.turbo_quant_capabilities ...'
46
+ end
47
+ # verify the required parameter 'turbo_quant_capabilities_request' is set
48
+ if @api_client.config.client_side_validation && turbo_quant_capabilities_request.nil?
49
+ fail ArgumentError, "Missing the required parameter 'turbo_quant_capabilities_request' when calling TurboQuantApi.turbo_quant_capabilities"
50
+ end
51
+ allowable_values = [4096, 8192, 16384, 24576]
52
+ if @api_client.config.client_side_validation && opts[:'x_tq_context_mode'] && !allowable_values.include?(opts[:'x_tq_context_mode'])
53
+ fail ArgumentError, "invalid value for \"x_tq_context_mode\", must be one of #{allowable_values}"
54
+ end
55
+ allowable_values = ["none", "reuse", "persist"]
56
+ if @api_client.config.client_side_validation && opts[:'x_tq_kv_cache_hint'] && !allowable_values.include?(opts[:'x_tq_kv_cache_hint'])
57
+ fail ArgumentError, "invalid value for \"x_tq_kv_cache_hint\", must be one of #{allowable_values}"
58
+ end
59
+ allowable_values = ["auto", "gemma-2b", "gemma-7b", "gemma-7b-tq"]
60
+ if @api_client.config.client_side_validation && opts[:'x_tq_model_tier'] && !allowable_values.include?(opts[:'x_tq_model_tier'])
61
+ fail ArgumentError, "invalid value for \"x_tq_model_tier\", must be one of #{allowable_values}"
62
+ end
63
+ # resource path
64
+ local_var_path = '/turbo-quant-capabilities'
65
+
66
+ # query parameters
67
+ query_params = opts[:query_params] || {}
68
+
69
+ # header parameters
70
+ header_params = opts[:header_params] || {}
71
+ # HTTP header 'Accept' (if needed)
72
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
73
+ # HTTP header 'Content-Type'
74
+ content_type = @api_client.select_header_content_type(['application/json'])
75
+ if !content_type.nil?
76
+ header_params['Content-Type'] = content_type
77
+ end
78
+ header_params[:'x-tq-context-mode'] = opts[:'x_tq_context_mode'] if !opts[:'x_tq_context_mode'].nil?
79
+ header_params[:'x-tq-kv-cache-hint'] = opts[:'x_tq_kv_cache_hint'] if !opts[:'x_tq_kv_cache_hint'].nil?
80
+ header_params[:'x-tq-model-tier'] = opts[:'x_tq_model_tier'] if !opts[:'x_tq_model_tier'].nil?
81
+
82
+ # form parameters
83
+ form_params = opts[:form_params] || {}
84
+
85
+ # http body (model)
86
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(turbo_quant_capabilities_request)
87
+
88
+ # return_type
89
+ return_type = opts[:debug_return_type] || 'TurboQuantCapabilities'
90
+
91
+ # auth_names
92
+ auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
93
+
94
+ new_options = opts.merge(
95
+ :operation => :"TurboQuantApi.turbo_quant_capabilities",
96
+ :header_params => header_params,
97
+ :query_params => query_params,
98
+ :form_params => form_params,
99
+ :body => post_body,
100
+ :auth_names => auth_names,
101
+ :return_type => return_type
102
+ )
103
+
104
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
105
+ if @api_client.config.debugging
106
+ @api_client.config.logger.debug "API called: TurboQuantApi#turbo_quant_capabilities\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
107
+ end
108
+ return data, status_code, headers
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,90 @@
1
+ =begin
2
+ #SoilSidekick Pro API
3
+
4
+ #Agricultural intelligence and soil analysis API with tier-based access control. ## What's New in 1.2.0 - **Consumer Plant Care APIs**: Three new endpoints addressing top pain points in plant ID apps: - `/safe-identification`: Toxic lookalike warnings and environmental context - `/dynamic-care`: Hyper-localized, real-time care recommendations - `/beginner-guidance`: Judgment-free, jargon-free plant guidance ## Authentication All endpoints require an API key passed via the `x-api-key` header: ``` x-api-key: ak_your_api_key_here ``` API keys are generated through the dashboard and use the `ak_*` format. ## Rate Limiting Rate limits are enforced based on your subscription tier: - **Free**: 10 req/min, 100 req/hour, 1,000 req/day - **Starter**: 30 req/min, 500 req/hour, 5,000 req/day - **Pro**: 100 req/min, 2,000 req/hour, 25,000 req/day - **Enterprise**: 500 req/min, 10,000 req/hour, 100,000 req/day Rate limit information is returned in response headers: - `X-RateLimit-Limit`: Maximum requests in window - `X-RateLimit-Remaining`: Remaining requests in window - `X-RateLimit-Reset`: Unix timestamp when limit resets ## Response Time SLAs All endpoints return response time headers for performance monitoring: - `X-Response-Time`: Human-readable response time (e.g., \"245ms\") - `X-Response-Time-Ms`: Response time in milliseconds - `X-Response-Time-Target`: Target response time for this endpoint - `X-Response-Time-Max`: Maximum acceptable response time - `X-Response-Time-Status`: Performance status (`optimal`, `acceptable`, `exceeded`) ### Response Time Targets by Category | Category | Target | Maximum | Endpoints | |----------|--------|---------|-----------| | **Fast** | 200ms | 500ms | county-lookup, check-subscription | | **Standard** | 500ms | 1,500ms | get-soil-data, territorial-water-quality | | **Complex** | 2,000ms | 5,000ms | agricultural-intelligence, gpt5-chat, visual-crop-analysis | | **Heavy** | 5,000ms | 15,000ms | live-agricultural-data, generate-vrt-prescription |
5
+
6
+ The version of the OpenAPI document: 3.0.0
7
+ Contact: support@soilsidekickpro.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.23.0
10
+
11
+ =end
12
+
13
+ require 'cgi'
14
+
15
+ module SoilSidekick
16
+ class VRTApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Generate VRT prescription map
23
+ # Generate variable rate technology prescription maps
24
+ # @param generate_vrt_prescription_request [GenerateVRTPrescriptionRequest]
25
+ # @param [Hash] opts the optional parameters
26
+ # @return [VRTPrescription]
27
+ def generate_vrt_prescription(generate_vrt_prescription_request, opts = {})
28
+ data, _status_code, _headers = generate_vrt_prescription_with_http_info(generate_vrt_prescription_request, opts)
29
+ data
30
+ end
31
+
32
+ # Generate VRT prescription map
33
+ # Generate variable rate technology prescription maps
34
+ # @param generate_vrt_prescription_request [GenerateVRTPrescriptionRequest]
35
+ # @param [Hash] opts the optional parameters
36
+ # @return [Array<(VRTPrescription, Integer, Hash)>] VRTPrescription data, response status code and response headers
37
+ def generate_vrt_prescription_with_http_info(generate_vrt_prescription_request, opts = {})
38
+ if @api_client.config.debugging
39
+ @api_client.config.logger.debug 'Calling API: VRTApi.generate_vrt_prescription ...'
40
+ end
41
+ # verify the required parameter 'generate_vrt_prescription_request' is set
42
+ if @api_client.config.client_side_validation && generate_vrt_prescription_request.nil?
43
+ fail ArgumentError, "Missing the required parameter 'generate_vrt_prescription_request' when calling VRTApi.generate_vrt_prescription"
44
+ end
45
+ # resource path
46
+ local_var_path = '/generate-vrt-prescription'
47
+
48
+ # query parameters
49
+ query_params = opts[:query_params] || {}
50
+
51
+ # header parameters
52
+ header_params = opts[:header_params] || {}
53
+ # HTTP header 'Accept' (if needed)
54
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
55
+ # HTTP header 'Content-Type'
56
+ content_type = @api_client.select_header_content_type(['application/json'])
57
+ if !content_type.nil?
58
+ header_params['Content-Type'] = content_type
59
+ end
60
+
61
+ # form parameters
62
+ form_params = opts[:form_params] || {}
63
+
64
+ # http body (model)
65
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(generate_vrt_prescription_request)
66
+
67
+ # return_type
68
+ return_type = opts[:debug_return_type] || 'VRTPrescription'
69
+
70
+ # auth_names
71
+ auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
72
+
73
+ new_options = opts.merge(
74
+ :operation => :"VRTApi.generate_vrt_prescription",
75
+ :header_params => header_params,
76
+ :query_params => query_params,
77
+ :form_params => form_params,
78
+ :body => post_body,
79
+ :auth_names => auth_names,
80
+ :return_type => return_type
81
+ )
82
+
83
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
84
+ if @api_client.config.debugging
85
+ @api_client.config.logger.debug "API called: VRTApi#generate_vrt_prescription\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
86
+ end
87
+ return data, status_code, headers
88
+ end
89
+ end
90
+ end