version-2.24-sidebars.json
1 { 2 "docs": [ 3 { 4 "type": "doc", 5 "id": "intro", 6 "label": "Introduction" 7 }, 8 { 9 "type": "category", 10 "label": "Overview", 11 "items": [ 12 "overview/installation", 13 "overview/get-started", 14 "overview/faq", 15 "overview/telemetry", 16 "overview/breaking-change-policy", 17 "overview/migration", 18 "overview/migrating-from-langgraphlangchain-to-haystack" 19 ] 20 }, 21 { 22 "type": "category", 23 "label": "Haystack Concepts", 24 "items": [ 25 "concepts/concepts-overview", 26 { 27 "type": "category", 28 "label": "Agents", 29 "link": { 30 "type": "doc", 31 "id": "concepts/agents" 32 }, 33 "items": [ 34 "concepts/agents/state" 35 ] 36 }, 37 { 38 "type": "category", 39 "label": "Components", 40 "link": { 41 "type": "doc", 42 "id": "concepts/components" 43 }, 44 "items": [ 45 "concepts/components/custom-components", 46 "concepts/components/supercomponents" 47 ] 48 }, 49 { 50 "type": "category", 51 "label": "Pipelines", 52 "link": { 53 "type": "doc", 54 "id": "concepts/pipelines" 55 }, 56 "items": [ 57 "concepts/pipelines/creating-pipelines", 58 "concepts/pipelines/serialization", 59 "concepts/pipelines/visualizing-pipelines", 60 "concepts/pipelines/debugging-pipelines", 61 "concepts/pipelines/pipeline-breakpoints", 62 "concepts/pipelines/pipeline-loops", 63 "concepts/pipelines/pipeline-templates", 64 "concepts/pipelines/asyncpipeline", 65 "concepts/pipelines/smart-pipeline-connections" 66 ] 67 }, 68 { 69 "type": "category", 70 "label": "Data Classes", 71 "link": { 72 "type": "doc", 73 "id": "concepts/data-classes" 74 }, 75 "items": [ 76 "concepts/data-classes/chatmessage" 77 ] 78 }, 79 { 80 "type": "category", 81 "label": "Document Store", 82 "link": { 83 "type": "doc", 84 "id": "concepts/document-store" 85 }, 86 "items": [ 87 "concepts/document-store/choosing-a-document-store", 88 "concepts/document-store/creating-custom-document-stores" 89 ] 90 }, 91 "concepts/metadata-filtering", 92 "concepts/device-management", 93 "concepts/secret-management", 94 "concepts/jinja-templates", 95 "concepts/integrations", 96 "concepts/experimental-package" 97 ] 98 }, 99 { 100 "type": "category", 101 "label": "Document Stores", 102 "items": [ 103 "document-stores/inmemorydocumentstore", 104 "document-stores/astradocumentstore", 105 "document-stores/azureaisearchdocumentstore", 106 "document-stores/chromadocumentstore", 107 { 108 "type": "link", 109 "label": "CouchbaseDocumentStore", 110 "href": "https://haystack.deepset.ai/integrations/couchbase-document-store" 111 }, 112 "document-stores/elasticsearch-document-store", 113 { 114 "type": "link", 115 "label": "LanceDBDocumentStore", 116 "href": "https://haystack.deepset.ai/integrations/lancedb/" 117 }, 118 { 119 "type": "link", 120 "label": "MilvusDocumentStore", 121 "href": "https://haystack.deepset.ai/integrations/milvus-document-store" 122 }, 123 "document-stores/mongodbatlasdocumentstore", 124 { 125 "type": "link", 126 "label": "Neo4jDocumentStore", 127 "href": "https://haystack.deepset.ai/integrations/neo4j-document-store" 128 }, 129 "document-stores/opensearch-document-store", 130 "document-stores/pgvectordocumentstore", 131 "document-stores/pinecone-document-store", 132 "document-stores/qdrant-document-store", 133 "document-stores/valkeydocumentstore", 134 "document-stores/weaviatedocumentstore" 135 ] 136 }, 137 { 138 "type": "category", 139 "label": "Pipeline Components", 140 "items": [ 141 { 142 "type": "category", 143 "label": "Agents", 144 "items": [ 145 "pipeline-components/agents-1/agent", 146 "pipeline-components/agents-1/human-in-the-loop" 147 ] 148 }, 149 { 150 "type": "category", 151 "label": "Audio", 152 "link": { 153 "type": "doc", 154 "id": "pipeline-components/audio" 155 }, 156 "items": [ 157 "pipeline-components/audio/localwhispertranscriber", 158 "pipeline-components/audio/remotewhispertranscriber", 159 "pipeline-components/audio/external-integrations-audio" 160 ] 161 }, 162 { 163 "type": "category", 164 "label": "Builders", 165 "link": { 166 "type": "doc", 167 "id": "pipeline-components/builders" 168 }, 169 "items": [ 170 "pipeline-components/builders/answerbuilder", 171 "pipeline-components/builders/chatpromptbuilder", 172 "pipeline-components/builders/promptbuilder" 173 ] 174 }, 175 { 176 "type": "category", 177 "label": "Caching", 178 "items": [ 179 "pipeline-components/caching/cachechecker" 180 ] 181 }, 182 { 183 "type": "category", 184 "label": "Classifiers", 185 "link": { 186 "type": "doc", 187 "id": "pipeline-components/classifiers" 188 }, 189 "items": [ 190 "pipeline-components/classifiers/documentlanguageclassifier", 191 "pipeline-components/classifiers/transformerszeroshotdocumentclassifier" 192 ] 193 }, 194 { 195 "type": "category", 196 "label": "Connectors", 197 "link": { 198 "type": "doc", 199 "id": "pipeline-components/connectors" 200 }, 201 "items": [ 202 "pipeline-components/connectors/githubfileeditor", 203 "pipeline-components/connectors/githubissuecommenter", 204 "pipeline-components/connectors/githubissueviewer", 205 "pipeline-components/connectors/githubprcreator", 206 "pipeline-components/connectors/githubrepoforker", 207 "pipeline-components/connectors/githubrepoviewer", 208 "pipeline-components/connectors/jinareaderconnector", 209 "pipeline-components/connectors/langfuseconnector", 210 "pipeline-components/connectors/openapiconnector", 211 "pipeline-components/connectors/openapiserviceconnector", 212 "pipeline-components/connectors/weaveconnector", 213 "pipeline-components/connectors/external-integrations-connectors" 214 ] 215 }, 216 { 217 "type": "category", 218 "label": "Converters", 219 "link": { 220 "type": "doc", 221 "id": "pipeline-components/converters" 222 }, 223 "items": [ 224 "pipeline-components/converters/azuredocumentintelligenceconverter", 225 "pipeline-components/converters/azureocrdocumentconverter", 226 "pipeline-components/converters/csvtodocument", 227 "pipeline-components/converters/documenttoimagecontent", 228 "pipeline-components/converters/docxtodocument", 229 "pipeline-components/converters/htmltodocument", 230 "pipeline-components/converters/imagefiletodocument", 231 "pipeline-components/converters/imagefiletoimagecontent", 232 "pipeline-components/converters/jsonconverter", 233 "pipeline-components/converters/markdowntodocument", 234 "pipeline-components/converters/mistralocrdocumentconverter", 235 "pipeline-components/converters/msgtodocument", 236 "pipeline-components/converters/multifileconverter", 237 "pipeline-components/converters/openapiservicetofunctions", 238 "pipeline-components/converters/outputadapter", 239 "pipeline-components/converters/paddleocrvldocumentconverter", 240 "pipeline-components/converters/pdfminertodocument", 241 "pipeline-components/converters/pdftoimagecontent", 242 "pipeline-components/converters/pptxtodocument", 243 "pipeline-components/converters/pypdftodocument", 244 "pipeline-components/converters/textfiletodocument", 245 "pipeline-components/converters/tikadocumentconverter", 246 "pipeline-components/converters/unstructuredfileconverter", 247 "pipeline-components/converters/xlsxtodocument", 248 "pipeline-components/converters/external-integrations-converters" 249 ] 250 }, 251 { 252 "type": "category", 253 "label": "Downloaders", 254 "items": [ 255 "pipeline-components/downloaders/s3downloader" 256 ] 257 }, 258 { 259 "type": "category", 260 "label": "Embedders", 261 "link": { 262 "type": "doc", 263 "id": "pipeline-components/embedders" 264 }, 265 "items": [ 266 "pipeline-components/embedders/choosing-the-right-embedder", 267 "pipeline-components/embedders/amazonbedrockdocumentembedder", 268 "pipeline-components/embedders/amazonbedrockdocumentimageembedder", 269 "pipeline-components/embedders/amazonbedrocktextembedder", 270 "pipeline-components/embedders/azureopenaidocumentembedder", 271 "pipeline-components/embedders/azureopenaitextembedder", 272 "pipeline-components/embedders/coheredocumentembedder", 273 "pipeline-components/embedders/coheredocumentimageembedder", 274 "pipeline-components/embedders/coheretextembedder", 275 "pipeline-components/embedders/fastembeddocumentembedder", 276 "pipeline-components/embedders/fastembedsparsedocumentembedder", 277 "pipeline-components/embedders/fastembedsparsetextembedder", 278 "pipeline-components/embedders/fastembedtextembedder", 279 "pipeline-components/embedders/googlegenaidocumentembedder", 280 "pipeline-components/embedders/googlegenaitextembedder", 281 "pipeline-components/embedders/huggingfaceapidocumentembedder", 282 "pipeline-components/embedders/huggingfaceapitextembedder", 283 "pipeline-components/embedders/jinadocumentembedder", 284 "pipeline-components/embedders/jinadocumentimageembedder", 285 "pipeline-components/embedders/jinatextembedder", 286 "pipeline-components/embedders/mistraldocumentembedder", 287 "pipeline-components/embedders/mistraltextembedder", 288 "pipeline-components/embedders/nvidiadocumentembedder", 289 "pipeline-components/embedders/nvidiatextembedder", 290 "pipeline-components/embedders/ollamadocumentembedder", 291 "pipeline-components/embedders/ollamatextembedder", 292 "pipeline-components/embedders/openaidocumentembedder", 293 "pipeline-components/embedders/openaitextembedder", 294 "pipeline-components/embedders/optimumdocumentembedder", 295 "pipeline-components/embedders/optimumtextembedder", 296 "pipeline-components/embedders/sentencetransformersdocumentembedder", 297 "pipeline-components/embedders/sentencetransformersdocumentimageembedder", 298 "pipeline-components/embedders/sentencetransformerssparsedocumentembedder", 299 "pipeline-components/embedders/sentencetransformerssparsetextembedder", 300 "pipeline-components/embedders/sentencetransformerstextembedder", 301 "pipeline-components/embedders/stackitdocumentembedder", 302 "pipeline-components/embedders/stackittextembedder", 303 "pipeline-components/embedders/vertexaidocumentembedder", 304 "pipeline-components/embedders/vertexaitextembedder", 305 "pipeline-components/embedders/watsonxdocumentembedder", 306 "pipeline-components/embedders/watsonxtextembedder", 307 "pipeline-components/embedders/external-integrations-embedders" 308 ] 309 }, 310 { 311 "type": "category", 312 "label": "Evaluators", 313 "link": { 314 "type": "doc", 315 "id": "pipeline-components/evaluators" 316 }, 317 "items": [ 318 "pipeline-components/evaluators/answerexactmatchevaluator", 319 "pipeline-components/evaluators/contextrelevanceevaluator", 320 "pipeline-components/evaluators/deepevalevaluator", 321 "pipeline-components/evaluators/documentmapevaluator", 322 "pipeline-components/evaluators/documentmrrevaluator", 323 "pipeline-components/evaluators/documentndcgevaluator", 324 "pipeline-components/evaluators/documentrecallevaluator", 325 "pipeline-components/evaluators/faithfulnessevaluator", 326 "pipeline-components/evaluators/llmevaluator", 327 "pipeline-components/evaluators/ragasevaluator", 328 "pipeline-components/evaluators/sasevaluator", 329 "pipeline-components/evaluators/external-integrations-evaluators" 330 ] 331 }, 332 { 333 "type": "category", 334 "label": "Extractors", 335 "link": { 336 "type": "doc", 337 "id": "pipeline-components/extractors" 338 }, 339 "items": [ 340 "pipeline-components/extractors/llmdocumentcontentextractor", 341 "pipeline-components/extractors/llmmetadataextractor", 342 "pipeline-components/extractors/namedentityextractor", 343 "pipeline-components/extractors/regextextextractor" 344 ] 345 }, 346 { 347 "type": "category", 348 "label": "Fetchers", 349 "link": { 350 "type": "doc", 351 "id": "pipeline-components/fetchers" 352 }, 353 "items": [ 354 "pipeline-components/fetchers/linkcontentfetcher", 355 "pipeline-components/fetchers/external-integrations-fetchers" 356 ] 357 }, 358 { 359 "type": "category", 360 "label": "Generators", 361 "link": { 362 "type": "doc", 363 "id": "pipeline-components/generators" 364 }, 365 "items": [ 366 { 367 "type": "category", 368 "label": "Guides to Generators", 369 "items": [ 370 "pipeline-components/generators/guides-to-generators/choosing-the-right-generator", 371 "pipeline-components/generators/guides-to-generators/function-calling", 372 "pipeline-components/generators/guides-to-generators/generators-vs-chat-generators" 373 ] 374 }, 375 "pipeline-components/generators/amazonbedrockchatgenerator", 376 "pipeline-components/generators/amazonbedrockgenerator", 377 "pipeline-components/generators/aimllapichatgenerator", 378 "pipeline-components/generators/anthropicchatgenerator", 379 "pipeline-components/generators/anthropicgenerator", 380 "pipeline-components/generators/anthropicvertexchatgenerator", 381 "pipeline-components/generators/azureopenaichatgenerator", 382 "pipeline-components/generators/azureopenaigenerator", 383 "pipeline-components/generators/azureopenairesponseschatgenerator", 384 "pipeline-components/generators/coherechatgenerator", 385 "pipeline-components/generators/coheregenerator", 386 "pipeline-components/generators/cometapichatgenerator", 387 "pipeline-components/generators/dalleimagegenerator", 388 "pipeline-components/generators/fallbackchatgenerator", 389 "pipeline-components/generators/googleaigeminichatgenerator", 390 "pipeline-components/generators/googleaigeminigenerator", 391 "pipeline-components/generators/googlegenaichatgenerator", 392 "pipeline-components/generators/huggingfaceapichatgenerator", 393 "pipeline-components/generators/huggingfaceapigenerator", 394 "pipeline-components/generators/huggingfacelocalchatgenerator", 395 "pipeline-components/generators/huggingfacelocalgenerator", 396 "pipeline-components/generators/llamacppchatgenerator", 397 "pipeline-components/generators/llamacppgenerator", 398 "pipeline-components/generators/llamastackchatgenerator", 399 "pipeline-components/generators/metallamachatgenerator", 400 "pipeline-components/generators/mistralchatgenerator", 401 "pipeline-components/generators/nvidiachatgenerator", 402 "pipeline-components/generators/nvidiagenerator", 403 "pipeline-components/generators/ollamachatgenerator", 404 "pipeline-components/generators/ollamagenerator", 405 "pipeline-components/generators/openaichatgenerator", 406 "pipeline-components/generators/openaigenerator", 407 "pipeline-components/generators/openairesponseschatgenerator", 408 "pipeline-components/generators/openrouterchatgenerator", 409 "pipeline-components/generators/sagemakergenerator", 410 "pipeline-components/generators/stackitchatgenerator", 411 "pipeline-components/generators/togetheraichatgenerator", 412 "pipeline-components/generators/togetheraigenerator", 413 "pipeline-components/generators/vertexaicodegenerator", 414 "pipeline-components/generators/vertexaigeminichatgenerator", 415 "pipeline-components/generators/vertexaigeminigenerator", 416 "pipeline-components/generators/vertexaiimagecaptioner", 417 "pipeline-components/generators/vertexaiimagegenerator", 418 "pipeline-components/generators/vertexaiimageqa", 419 "pipeline-components/generators/vertexaitextgenerator", 420 "pipeline-components/generators/watsonxchatgenerator", 421 "pipeline-components/generators/watsonxgenerator", 422 "pipeline-components/generators/external-integrations-generators" 423 ] 424 }, 425 { 426 "type": "category", 427 "label": "Joiners", 428 "link": { 429 "type": "doc", 430 "id": "pipeline-components/joiners" 431 }, 432 "items": [ 433 "pipeline-components/joiners/answerjoiner", 434 "pipeline-components/joiners/branchjoiner", 435 "pipeline-components/joiners/documentjoiner", 436 "pipeline-components/joiners/listjoiner", 437 "pipeline-components/joiners/stringjoiner" 438 ] 439 }, 440 { 441 "type": "category", 442 "label": "Preprocessors", 443 "link": { 444 "type": "doc", 445 "id": "pipeline-components/preprocessors" 446 }, 447 "items": [ 448 "pipeline-components/preprocessors/chinesedocumentsplitter", 449 "pipeline-components/preprocessors/csvdocumentcleaner", 450 "pipeline-components/preprocessors/csvdocumentsplitter", 451 "pipeline-components/preprocessors/documentcleaner", 452 "pipeline-components/preprocessors/documentpreprocessor", 453 "pipeline-components/preprocessors/documentsplitter", 454 "pipeline-components/preprocessors/hierarchicaldocumentsplitter", 455 "pipeline-components/preprocessors/recursivesplitter", 456 "pipeline-components/preprocessors/textcleaner" 457 ] 458 }, 459 { 460 "type": "category", 461 "label": "Query", 462 "items": [ 463 "pipeline-components/query/queryexpander" 464 ] 465 }, 466 { 467 "type": "category", 468 "label": "Rankers", 469 "link": { 470 "type": "doc", 471 "id": "pipeline-components/rankers" 472 }, 473 "items": [ 474 "pipeline-components/rankers/choosing-the-right-ranker", 475 "pipeline-components/rankers/amazonbedrockranker", 476 "pipeline-components/rankers/cohereranker", 477 "pipeline-components/rankers/fastembedranker", 478 "pipeline-components/rankers/huggingfaceteiranker", 479 "pipeline-components/rankers/jinaranker", 480 "pipeline-components/rankers/lostinthemiddleranker", 481 "pipeline-components/rankers/metafieldgroupingranker", 482 "pipeline-components/rankers/metafieldranker", 483 "pipeline-components/rankers/nvidiaranker", 484 "pipeline-components/rankers/pyversityranker", 485 "pipeline-components/rankers/sentencetransformersdiversityranker", 486 "pipeline-components/rankers/sentencetransformerssimilarityranker", 487 "pipeline-components/rankers/transformerssimilarityranker", 488 "pipeline-components/rankers/external-integrations-rankers" 489 ] 490 }, 491 { 492 "type": "category", 493 "label": "Readers", 494 "link": { 495 "type": "doc", 496 "id": "pipeline-components/readers" 497 }, 498 "items": [ 499 "pipeline-components/readers/extractivereader" 500 ] 501 }, 502 { 503 "type": "category", 504 "label": "Retrievers", 505 "link": { 506 "type": "doc", 507 "id": "pipeline-components/retrievers" 508 }, 509 "items": [ 510 "pipeline-components/retrievers/astraretriever", 511 "pipeline-components/retrievers/automergingretriever", 512 "pipeline-components/retrievers/azureaisearchbm25retriever", 513 "pipeline-components/retrievers/azureaisearchembeddingretriever", 514 "pipeline-components/retrievers/azureaisearchhybridretriever", 515 "pipeline-components/retrievers/chromaembeddingretriever", 516 "pipeline-components/retrievers/chromaqueryretriever", 517 "pipeline-components/retrievers/elasticsearchbm25retriever", 518 "pipeline-components/retrievers/elasticsearchembeddingretriever", 519 "pipeline-components/retrievers/filterretriever", 520 "pipeline-components/retrievers/inmemorybm25retriever", 521 "pipeline-components/retrievers/inmemoryembeddingretriever", 522 "pipeline-components/retrievers/mongodbatlasembeddingretriever", 523 "pipeline-components/retrievers/mongodbatlasfulltextretriever", 524 "pipeline-components/retrievers/multiqueryembeddingretriever", 525 "pipeline-components/retrievers/multiquerytextretriever", 526 "pipeline-components/retrievers/opensearchbm25retriever", 527 "pipeline-components/retrievers/opensearchembeddingretriever", 528 "pipeline-components/retrievers/opensearchhybridretriever", 529 "pipeline-components/retrievers/pgvectorembeddingretriever", 530 "pipeline-components/retrievers/pgvectorkeywordretriever", 531 "pipeline-components/retrievers/pineconedenseretriever", 532 "pipeline-components/retrievers/qdrantembeddingretriever", 533 "pipeline-components/retrievers/qdranthybridretriever", 534 "pipeline-components/retrievers/qdrantsparseembeddingretriever", 535 "pipeline-components/retrievers/sentencewindowretrieval", 536 "pipeline-components/retrievers/snowflaketableretriever", 537 "pipeline-components/retrievers/valkeyembeddingretriever", 538 "pipeline-components/retrievers/weaviatebm25retriever", 539 "pipeline-components/retrievers/weaviateembeddingretriever", 540 "pipeline-components/retrievers/weaviatehybridretriever" 541 ] 542 }, 543 { 544 "type": "category", 545 "label": "Routers", 546 "link": { 547 "type": "doc", 548 "id": "pipeline-components/routers" 549 }, 550 "items": [ 551 "pipeline-components/routers/conditionalrouter", 552 "pipeline-components/routers/documentlengthrouter", 553 "pipeline-components/routers/documenttyperouter", 554 "pipeline-components/routers/filetyperouter", 555 "pipeline-components/routers/llmmessagesrouter", 556 "pipeline-components/routers/metadatarouter", 557 "pipeline-components/routers/textlanguagerouter", 558 "pipeline-components/routers/transformerstextrouter", 559 "pipeline-components/routers/transformerszeroshottextrouter" 560 ] 561 }, 562 { 563 "type": "category", 564 "label": "Samplers", 565 "items": [ 566 "pipeline-components/samplers/toppsampler" 567 ] 568 }, 569 { 570 "type": "category", 571 "label": "Tools", 572 "items": [ 573 "pipeline-components/tools/toolinvoker" 574 ] 575 }, 576 { 577 "type": "category", 578 "label": "Validators", 579 "items": [ 580 "pipeline-components/validators/jsonschemavalidator" 581 ] 582 }, 583 { 584 "type": "category", 585 "label": "Websearch", 586 "link": { 587 "type": "doc", 588 "id": "pipeline-components/websearch" 589 }, 590 "items": [ 591 "pipeline-components/websearch/searchapiwebsearch", 592 "pipeline-components/websearch/serperdevwebsearch", 593 "pipeline-components/websearch/external-integrations-websearch" 594 ] 595 }, 596 { 597 "type": "category", 598 "label": "Writers", 599 "items": [ 600 "pipeline-components/writers/documentwriter" 601 ] 602 } 603 ] 604 }, 605 { 606 "type": "category", 607 "label": "Tools", 608 "items": [ 609 "tools/tool", 610 "tools/componenttool", 611 "tools/pipelinetool", 612 "tools/toolset", 613 "tools/mcptool", 614 "tools/mcptoolset", 615 { 616 "type": "category", 617 "label": "Ready-made Tools", 618 "items": [ 619 "tools/ready-made-tools/githubfileeditortool", 620 "tools/ready-made-tools/githubissuecommentertool", 621 "tools/ready-made-tools/githubissueviewertool", 622 "tools/ready-made-tools/githubprcreatortool", 623 "tools/ready-made-tools/githubrepoviewertool" 624 ] 625 } 626 ] 627 }, 628 { 629 "type": "category", 630 "label": "Optimization", 631 "items": [ 632 { 633 "type": "category", 634 "label": "Evaluation", 635 "link": { 636 "type": "doc", 637 "id": "optimization/evaluation" 638 }, 639 "items": [ 640 "optimization/evaluation/model-based-evaluation", 641 "optimization/evaluation/statistical-evaluation" 642 ] 643 }, 644 { 645 "type": "category", 646 "label": "Advanced RAG Techniques", 647 "link": { 648 "type": "doc", 649 "id": "optimization/advanced-rag-techniques" 650 }, 651 "items": [ 652 "optimization/advanced-rag-techniques/hypothetical-document-embeddings-hyde" 653 ] 654 } 655 ] 656 }, 657 { 658 "type": "category", 659 "label": "Development", 660 "items": [ 661 "development/logging", 662 "development/tracing", 663 "development/enabling-gpu-acceleration", 664 "development/hayhooks", 665 { 666 "type": "category", 667 "label": "Deployment", 668 "link": { 669 "type": "doc", 670 "id": "development/deployment" 671 }, 672 "items": [ 673 "development/deployment/docker", 674 "development/deployment/kubernetes", 675 "development/deployment/openshift" 676 ] 677 }, 678 "development/external-integrations-development" 679 ] 680 } 681 ] 682 }