Skip to content

feat: add llama-index-tools-hvf for Hudson Valley Forestry API#20728

Open
sansscott wants to merge 4 commits intorun-llama:mainfrom
sansscott:add-hvf-tool-spec
Open

feat: add llama-index-tools-hvf for Hudson Valley Forestry API#20728
sansscott wants to merge 4 commits intorun-llama:mainfrom
sansscott:add-hvf-tool-spec

Conversation

@sansscott
Copy link

@sansscott sansscott commented Feb 18, 2026

Summary

  • Adds llama-index-tools-hvf under llama-index-integrations/tools/
  • Implements HVFToolSpec with 9 agent-callable tools wrapping the Hudson Valley Forestry public REST API
  • Covers three divisions: residential forestry, goat grazing (HVG), and commercial oil & gas (O&G)
  • Package structure mirrors llama-index-tools-openapi exactly

Tools provided

HVF Residential (Hudson Valley Forestry)

Tool Endpoint Description
hvf_get_services() GET /api/agent/services Service catalog with per-acre pricing
hvf_assess_property(lat, lng, acreage, service_type, vegetation_density?) POST /api/agent/assess Service area check + price estimate
hvf_submit_quote(email, name, acreage, service_type, property_description, ...) POST /api/agent/quote Submit residential quote → Odoo CRM

HVG Goat Grazing (Hudson Valley Goats)

Tool Endpoint Description
hvg_get_services() GET /api/agent/goat/services Goat grazing service catalog
hvg_assess_property(lat, lng, acreage, vegetation_type?) POST /api/agent/goat/assess Eligibility check + price estimate
hvg_submit_quote(email, name, acreage, service_type, property_description, ...) POST /api/agent/goat/quote Submit goat grazing quote → Odoo CRM

Commercial O&G (Oil & Gas Pipeline)

Tool Endpoint Description
og_get_services() GET /api/agent/commercial/services Commercial service catalog
og_assess_project(lat, lng, service_type?, project_description?, acreage?, corridor_miles?) POST /api/agent/commercial/assess Northeast US service area check
og_submit_quote(email, name, service_type, project_description, ...) POST /api/agent/commercial/quote Submit commercial quote → Odoo CRM

Package details

  • Package: llama-index-tools-hvf
  • Import: from llama_index.tools.hvf import HVFToolSpec
  • API base: https://app.hudsonvalleyforestry.com
  • OpenAPI spec: https://app.hudsonvalleyforestry.com/openapi.json
  • Interactive docs: https://app.hudsonvalleyforestry.com/api/docs
  • Dependencies: llama-index-core>=0.13.0,<0.15, requests>=2.28.0
  • Python: >=3.9,<4.0

Files added

llama-index-integrations/tools/llama-index-tools-hvf/
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── Makefile
├── README.md
├── examples/
│   └── hvf_tool_usage.ipynb
├── llama_index/tools/hvf/
│   ├── __init__.py
│   └── base.py          ← HVFToolSpec (9 tools, 3 divisions)
├── pyproject.toml
└── tests/
    ├── __init__.py
    └── test_tools_hvf.py  ← 18 mocked tests, no live API calls

Test plan

  • pytest llama-index-integrations/tools/llama-index-tools-hvf/tests/ passes (18 tests, all mocked)
  • Package installs cleanly: pip install -e llama-index-integrations/tools/llama-index-tools-hvf/
  • from llama_index.tools.hvf import HVFToolSpec imports successfully
  • HVFToolSpec().to_tool_list() returns 9 tools

🤖 Generated with Claude Code

Adds a new LlamaIndex tool spec integration for the Hudson Valley Forestry
public API (https://app.hudsonvalleyforestry.com/api). The HVFToolSpec
exposes four agent-callable tools: health_check, get_services,
submit_residential_inquiry, and submit_commercial_inquiry.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@review-notebook-app
Copy link

Check out this pull request on  ReviewNB

See visual diffs & provide feedback on Jupyter Notebooks.


Powered by ReviewNB

@dosubot dosubot bot added the size:XL This PR changes 500-999 lines, ignoring generated files. label Feb 18, 2026
@dosubot dosubot bot added size:XXL This PR changes 1000+ lines, ignoring generated files. and removed size:XL This PR changes 500-999 lines, ignoring generated files. labels Feb 18, 2026
f"{self._base}{path}", json=payload, timeout=self._timeout
)
resp.raise_for_status()
return resp.json()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you should probably serialized the returned payload as a string to return that (in my experience that's best for agents)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here and in other places

@dosubot dosubot bot added the lgtm This PR has been approved by a maintainer label Feb 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lgtm This PR has been approved by a maintainer size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments