Hub documentation
fenic
fenic
fenic adalah kerangka kerja DataFrame yang terinspirasi dari PySpark dan dirancang untuk membangun aplikasi AI dan agen produksi. fenic menyediakan dukungan untuk membaca dataset langsung dari Hugging Face Hub.

Memulai
Untuk memulai, instal fenic menggunakan pip:
pip install fenic
Buat Sesi
Instansiasi sesi fenic dengan konfigurasi default (cukup untuk membaca dataset dan operasi non-semantik lainnya):
import fenic as fc
session = fc.Session.get_or_create(fc.SessionConfig())Ikhtisar
fenic adalah kerangka kerja pemrosesan data yang memiliki opini yang kuat dan menggabungkan:
- API DataFrame: operasi terinspirasi PySpark untuk manipulasi data yang familiar
- Operasi Semantik: Operasi AI/LLM bawaan termasuk fungsi semantik, embeddings, dan clustering
- Integrasi Model: Dukungan native untuk penyedia AI (Anthropic, OpenAI, Cohere, Google)
- Optimasi Kueri: Optimasi otomatis melalui transformasi rencana logis
Baca dari Hugging Face Hub
fenic dapat membaca dataset langsung dari Hugging Face Hub menggunakan protokol hf://. Fungsi ini sudah terintegrasi ke dalam antarmuka DataFrameReader fenic.
Format yang Didukung
fenic mendukung pembacaan format berikut dari Hugging Face:
- Berkas Parquet (
.parquet) - Berkas CSV (
.csv)
Membaca Dataset
Untuk membaca dataset dari Hugging Face Hub:
import fenic as fc
session = fc.Session.get_or_create(fc.SessionConfig())
# Read a CSV file from a public dataset
df = session.read.csv("hf://datasets/datasets-examples/doc-formats-csv-1/data.csv")
# Read Parquet files using glob patterns
df = session.read.parquet("hf://datasets/cais/mmlu/astronomy/*.parquet")
# Read from a specific dataset revision
df = session.read.parquet("hf://datasets/datasets-examples/doc-formats-csv-1@~parquet/**/*.parquet")Membaca dengan Manajemen Skema
# Read multiple CSV files with schema merging
df = session.read.csv("hf://datasets/username/dataset_name/*.csv", merge_schemas=True)
# Read multiple Parquet files with schema merging
df = session.read.parquet("hf://datasets/username/dataset_name/*.parquet", merge_schemas=True)Catatan: Dalam fenic, skema adalah kumpulan nama kolom dan tipe datanya. Ketika Anda mengaktifkan
merge_schemas, fenic mencoba menyelaraskan perbedaan antar file dengan mengisi kolom yang hilang dengan null dan memperlebar tipe data sejauh memungkinkan. Beberapa tata letak tetap tidak dapat digabungkan—konsultasikan dokumentasi fenic untuk batasan penggabungan skema CSV dan batasan penggabungan skema Parquet.
Autentikasi
Untuk membaca dataset privat, Anda perlu mengatur token Hugging Face Anda sebagai variabel lingkungan:
export HF_TOKEN="your_hugging_face_token_here"
Format Path
Format jalur Hugging Face di fenic mengikuti struktur berikut:
hf://{repo_type}/{repo_id}/{path_to_file}Anda juga dapat merevisi atau menentukan versi dataset:
hf://{repo_type}/{repo_id}@{revision}/{path_to_file}Fitur:
- Mendukung pola glob (
*,**) - Revisi/versi dataset menggunakan
@notasi:- Commit spesifik:
@d50d8923b5934dc8e74b66e6e4b0e2cd85e9142e - Cabang:
@refs/convert/parquet - Alias cabang:
@~parquet
- Commit spesifik:
- Membutuhkan variabel lingkungan
HF_TOKENuntuk dataset privat
Mencampur Sumber Data
fenic memungkinkan Anda menggabungkan beberapa sumber data dalam satu operasi baca, termasuk mencampur protokol yang berbeda:
# Mix HF and local files in one read call
df = session.read.parquet([
"hf://datasets/cais/mmlu/astronomy/*.parquet",
"file:///local/data/*.parquet",
"./relative/path/data.parquet"
])Fleksibilitas ini memungkinkan Anda untuk menggabungkan data dari Hugging Face Hub dan file lokal secara mulus dalam pipeline pemrosesan data Anda.
Memproses Data dari Hugging Face
Setelah dimuat dari Hugging Face, Anda dapat menggunakan API DataFrame lengkap dari fenic:
Operasi Dasar DataFrame
import fenic as fc
session = fc.Session.get_or_create(fc.SessionConfig())
# Load IMDB dataset from Hugging Face
df = session.read.parquet("hf://datasets/imdb/plain_text/train-*.parquet")
# Filter and select
positive_reviews = df.filter(fc.col("label") == 1).select("text", "label")
# Group by and aggregate
label_counts = df.group_by("label").agg(
fc.count("*").alias("count")
)Operasi Berbasis AI
Untuk menggunakan operasi semantik dan embedding, konfigurasikan model bahasa dan embedding di SessionConfig Anda. Setelah dikonfigurasi:
import fenic as fc
# Requires OPENAI_API_KEY to be set for language and embedding calls
session = fc.Session.get_or_create(
fc.SessionConfig(
semantic=fc.SemanticConfig(
language_models={
"gpt-4o-mini": fc.OpenAILanguageModel(
model_name="gpt-4o-mini",
rpm=60,
tpm=60000,
)
},
embedding_models={
"text-embedding-3-small": fc.OpenAIEmbeddingModel(
model_name="text-embedding-3-small",
rpm=60,
tpm=60000,
)
},
)
)
)
# Load a text dataset from Hugging Face
df = session.read.parquet("hf://datasets/imdb/plain_text/train-00000-of-00001.parquet")
# Add embeddings to text columns
df_with_embeddings = df.select(
"*",
fc.semantic.embed(fc.col("text")).alias("embedding")
)
# Apply semantic functions for sentiment analysis
df_analyzed = df_with_embeddings.select(
"*",
fc.semantic.analyze_sentiment(
fc.col("text"),
model_alias="gpt-4o-mini", # Optional: specify model
).alias("sentiment")
)Contoh: Menganalisis Dataset MMLU
import fenic as fc
# Requires OPENAI_API_KEY to be set for semantic calls
session = fc.Session.get_or_create(
fc.SessionConfig(
semantic=fc.SemanticConfig(
language_models={
"gpt-4o-mini": fc.OpenAILanguageModel(
model_name="gpt-4o-mini",
rpm=60,
tpm=60000,
)
},
)
)
)
# Load MMLU astronomy subset from Hugging Face
df = session.read.parquet("hf://datasets/cais/mmlu/astronomy/*.parquet")
# Process the data
processed_df = (df
# Filter for specific criteria
.filter(fc.col("subject") == "astronomy")
# Select relevant columns
.select("question", "choices", "answer")
# Add difficulty analysis using semantic.map
.select(
"*",
fc.semantic.map(
"Rate the difficulty of this question from 1-5: {{question}}",
question=fc.col("question"),
model_alias="gpt-4o-mini" # Optional: specify model
).alias("difficulty")
)
)
# Show results
processed_df.show()