If you only need the embeddings, you can set response_mode="no_text" to only retrieve the nodes, without sending to the LLM.
This still requires an embed model, but you could run that locally as linked above (it might still complain about an openai key, but just set that to a random string)
query_engine = index.as_query_engine(response_mode="no_text")
response = query_engine.query("query")
print(response.source_nodes)