{"full_name":"google/langextract","owner":"google","name":"langextract","url":"https://github.com/google/langextract","description":"A Python library for extracting structured information from unstructured text using LLMs with precise source grounding and interactive visualization.","homepage":"https://pypi.org/project/langextract/","topics":[],"language":"Python","license":"Apache-2.0","avatar":"https://avatars.githubusercontent.com/u/1342004?v=4","created_at":"2025-07-08T20:46:06Z","pushed_at":"2026-11-10T01:39:37Z","metrics":{"stars":39296,"forks":2750,"watchers":166,"issues":221,"prs":330,"releases":21,"issues_open":null,"issues_closed":null,"prs_open":null,"prs_closed":null,"prs_merged":null,"discussions":21},"growth":{"day":{"stars":7,"forks":0,"base_day":"2026-11-09"}},"history":{"dates":["2026-11-09","2026-11-10"],"stars":[39289,39296],"forks":[2750,2750],"watchers":[166,166],"issues_open":[null,null],"prs_open":[null,null]},"boards":{},"same_owner":[{"full_name":"google/EarlGrey","name":"EarlGrey","boards":{}},{"full_name":"google/ExoPlayer","name":"ExoPlayer","boards":{}},{"full_name":"google/WebFundamentals","name":"WebFundamentals","boards":{}},{"full_name":"google/adk-go","name":"adk-go","boards":{}},{"full_name":"google/agents-cli","name":"agents-cli","boards":{}},{"full_name":"google/artemis","name":"artemis","boards":{"new":28}},{"full_name":"google/ax","name":"ax","boards":{}},{"full_name":"google/bbr","name":"bbr","boards":{}},{"full_name":"google/bigframes","name":"bigframes","boards":{}},{"full_name":"google/bloaty","name":"bloaty","boards":{}},{"full_name":"google/cadvisor","name":"cadvisor","boards":{}},{"full_name":"google/clasp","name":"clasp","boards":{}},{"full_name":"google/clusterfuzz","name":"clusterfuzz","boards":{}},{"full_name":"google/elephant-goldfish-model","name":"elephant-goldfish-model","boards":{"daily":27,"weekly":114,"daily_rate":23,"weekly_rate":66,"new":29}},{"full_name":"google/flatbuffers","name":"flatbuffers","boards":{}},{"full_name":"google/flexbox-layout","name":"flexbox-layout","boards":{}},{"full_name":"google/gemma_pytorch","name":"gemma_pytorch","boards":{}},{"full_name":"google/go-cloud","name":"go-cloud","boards":{}},{"full_name":"google/googletest","name":"googletest","boards":{}},{"full_name":"google/guava","name":"guava","boards":{}}],"issues":[{"number":99,"title":"Plugin support for custom LLM providers now available","comments":35,"created_at":"2025-08-08T12:02:16Z"},{"number":184,"title":"Proposal: Add Docling Integration for End-to-End Document Extraction","comments":10,"created_at":"2025-08-24T11:37:48Z"},{"number":258,"title":"langextract.resolver.ResolverParsingError: Failed to parse JSON content: Expecting value: line 1 column 1 (char 0)","comments":7,"created_at":"2025-09-28T02:50:35Z"},{"number":78,"title":"tyscript / js port","comments":6,"created_at":"2025-08-06T00:46:35Z"},{"number":20,"title":"Difference between Gemini Extraction","comments":5,"created_at":"2025-08-02T23:54:19Z"},{"number":287,"title":"batch langextract: langextract.resolver.ResolverParsingError: Failed to parse JSON content: Unterminated string starting at","comments":4,"created_at":"2025-11-27T03:20:44Z"},{"number":125,"title":"Chinese Support   ?","comments":4,"created_at":"2025-08-12T09:47:34Z"},{"number":95,"title":"How to ensure reliability","comments":4,"created_at":"2025-08-08T07:31:14Z"}],"discussions":[{"number":559,"title":"RAG / embeddings, bounding boxes, output customization and non-text documents — what is supported (and what is the recommended pattern)?","comments":2,"category":"Q&A","created_at":"2026-10-06T10:25:16Z"},{"number":438,"title":"your-api-key (which api key, how to ask one?)","comments":1,"category":"Q&A","created_at":"2026-04-08T09:20:26Z"},{"number":415,"title":"Missing unit tests for download_text_from_url utility","comments":0,"category":"Ideas","created_at":"2026-03-17T08:51:26Z"},{"number":373,"title":"Langextract vs pydantic + API calls for no char_span use case","comments":0,"category":"General","created_at":"2026-02-14T16:42:01Z"},{"number":365,"title":"Parallelization with Ollama.","comments":0,"category":"Q&A","created_at":"2026-02-12T22:27:23Z"},{"number":363,"title":"2.5 vs 3 comparisons","comments":0,"category":"Q&A","created_at":"2026-02-12T20:38:39Z"},{"number":348,"title":"VLLM Support","comments":1,"category":"Q&A","created_at":"2026-02-09T11:20:54Z"},{"number":345,"title":"What is the next not reasoning model recommended?","comments":1,"category":"Q&A","created_at":"2026-02-07T22:04:49Z"}],"latest_release":{"name":"v1.7.2","tag":"v1.7.2","published_at":"2026-11-07T09:16:35Z","body":"## Highlights\n\n- Support `google-genai` 3.0, which replaced `httpx` with `httpx2`, so Gemini retries transient network errors again (#605).\n- Escape extraction data embedded in `visualize()` output (#573) and declare a UTF-8 charset in visualization HTML (#466).\n- Route `gpt-6` model IDs to the OpenAI provider (#599) and send `max_output_tokens` as `max_completion_tokens` to OpenAI (#600).\n- Stop `dict_to_annotated_document` from mutating its input (#577), load annotated documents saved with `null` extractions (#584), and retokenize a `Document` after its `text` changes (#583).\n- Preserve literal strings such as `NA` and `NULL` when loading CSV datasets (#556).\n- Apply explicit `temperature` consistently in `extract()` (#571) and skip empty extraction values that cannot be grounded (#567).\n- Fix URL fetching and file encoding in documentation and examples (#550, #572).\n- Add a pull request security check, harden CI workflows, pin GitHub Actions to commit SHAs, and update live API tests (CI only; #566, #569, #594, #595, #601, #606).\n\n## Compatibility notes\n\n- Requests to `api.openai.com` (including regional `*.api.openai.com` endpoints) now send `max_output_tokens` as `max_completion_tokens`. Other `base_url` endpoints still receive `max_tokens` (#600).\n- An explicit `extract(temperature=...)` now overrides a `temperature` in `language_model_params` or `config.provider_kwargs`, and is forwarded when `config` is used. With a pre-built `model`, it is ignored with a warning (#571).\n- CSV dataset loading now keeps values such as `\"NA\"`, `\"NULL\"`, and empty fields as strings instead of reading them as missing (`NaN`) values (#556).\n- Empty or whitespace-only extraction values are now skipped instead of producing ungrounded extractions (#567).\n\n**Full Changelog**: https://github.com/google/langextract/compare/v1.7.1...v1.7.2\n"},"readme":true,"readme_zh":false,"news":[],"stale":false,"snapshot_at":"2026-11-10T09:35:25Z","history_start":"2026-09-06"}