{"feature_extractor_name":"passthrough_extractor","version":"v1","feature_extractor_id":"passthrough_extractor_v1","description":"Minimal passthrough extractor for simple object storage. No ML processing - just canonicalization and data preservation. Use when you need to store objects without feature extraction.","icon":"arrow-right","category":"utility","source":"builtin","type_mode":"multimodal","expected_input_types":null,"inference_type":"general","input_schema":{"description":"Input schema for passthrough extractor.\n\nAccepts any content type - just passes it through without processing.","properties":{"content":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL or path to content (any type supported).","title":"Content"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"Direct data payload to store.","title":"Data"}},"title":"PassthroughExtractorInput","type":"object"},"output_schema":{"description":"Output schema for passthrough extractor.\n\nPreserves original data with minimal transformation.","properties":{"content_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Canonicalized URL of stored content.","title":"Content Url"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Detected content type.","title":"Content Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Content size in bytes.","title":"Size Bytes"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"Preserved metadata from source object.","title":"Metadata"}},"title":"PassthroughExtractorOutput","type":"object"},"parameter_schema":{"$defs":{"VectorFieldSpec":{"description":"One precomputed vector carried on each row of a JSONL or Parquet object.","properties":{"field":{"description":"Key in each row that holds the vector, as a list of numbers. A row without this key, or with a vector of the wrong length, is reported as a failed row and the other rows are still written.","examples":["embedding"],"minLength":1,"title":"Field","type":"string"},"name":{"description":"Name of the vector index the vector is stored under. Use this name in a feature_search stage to search the rows with a raw query vector. Letters, digits and underscores, starting with a letter, at most 64 characters, and unique within vector_fields.","examples":["text_embedding"],"title":"Name","type":"string"},"dimensions":{"description":"Length of every vector in this field.","examples":[384,768,1536],"maximum":65536,"minimum":1,"title":"Dimensions","type":"integer"},"distance":{"default":"cosine","description":"Distance metric for the index. Use the metric the vectors were trained for.","enum":["cosine","dot","euclidean"],"title":"Distance","type":"string"}},"required":["field","name","dimensions"],"title":"VectorFieldSpec","type":"object"}},"description":"Parameters for passthrough extractor.\n\nMinimal configuration - just passes data through with canonicalization.\nWith ``vector_fields`` set, each row of a JSONL or Parquet object becomes\nits own document carrying the row's precomputed vectors.","properties":{"extractor_type":{"const":"passthrough_extractor","default":"passthrough_extractor","description":"Discriminator field for parameter type identification.","title":"Extractor Type","type":"string"},"preserve_metadata":{"default":true,"description":"Preserve source object metadata in output document.","title":"Preserve Metadata","type":"boolean"},"vector_fields":{"description":"Precomputed vectors to store from a JSONL or Parquet object. When set, every row of the object becomes its own document: the row's other fields are stored on the document, and each listed vector is stored under its own vector index, searchable with a raw vector in a feature_search stage. Leave empty to store one document per object.","examples":[[{"dimensions":384,"distance":"cosine","field":"embedding","name":"text_embedding"}]],"items":{"$ref":"#/$defs/VectorFieldSpec"},"title":"Vector Fields","type":"array"},"row_format":{"anyOf":[{"enum":["jsonl","parquet"],"type":"string"},{"type":"null"}],"default":null,"description":"Format of the object when vector_fields is set. Leave unset to read it from the object's file extension (.jsonl or .ndjson for JSONL, .parquet for Parquet).","title":"Row Format"}},"title":"PassthroughExtractorParams","type":"object"},"supported_input_types":["text","image","video","audio","pdf"],"max_inputs":{"text":1,"image":1,"video":1,"audio":1,"pdf":1},"default_parameters":{},"costs":{"tier":1,"tier_label":"MINIMAL","rates":[{"unit":"extraction","credits_per_unit":1.0,"description":"Passthrough processing (no ML, storage only)"}]},"required_vector_indexes":null,"required_payload_indexes":null,"position_fields":[],"capabilities":["batch"],"example_usage":{"namespace":{"feature_extractors":[{"name":"passthrough_extractor","version":"v1"}]},"collection":{"feature_extractor":{"name":"passthrough_extractor","version":"v1","input_mappings":{"content":"<your_content_field>","data":"<your_data_field>"},"parameters":{"preserve_metadata":true}}}},"realtime_available":null,"serve_apps":[]}