{"id":42370207,"url":"https://github.com/genkit-ai/genkit-java","last_synced_at":"2026-01-27T19:23:18.887Z","repository":{"id":329986963,"uuid":"1121210153","full_name":"genkit-ai/genkit-java","owner":"genkit-ai","description":"Unofficial port of Genkit in Java - Work in Progress","archived":false,"fork":false,"pushed_at":"2026-01-26T10:27:40.000Z","size":23418,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-27T00:25:58.499Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://genkit-ai.github.io/genkit-java/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/genkit-ai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-22T16:01:31.000Z","updated_at":"2026-01-26T10:17:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/genkit-ai/genkit-java","commit_stats":null,"previous_names":["genkit-ai/genkit-java"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/genkit-ai/genkit-java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genkit-ai%2Fgenkit-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genkit-ai%2Fgenkit-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genkit-ai%2Fgenkit-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genkit-ai%2Fgenkit-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/genkit-ai","download_url":"https://codeload.github.com/genkit-ai/genkit-java/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genkit-ai%2Fgenkit-java/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28819281,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T18:44:20.126Z","status":"ssl_error","status_checked_at":"2026-01-27T18:44:09.161Z","response_time":168,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-27T19:23:13.687Z","updated_at":"2026-01-27T19:23:18.878Z","avatar_url":"https://github.com/genkit-ai.png","language":"Java","funding_links":[],"categories":["人工智能","Follow"],"sub_categories":["LLM框架","Java (Unofficial) - Community"],"readme":"# Genkit for Java\n\nGenkit for Java is the Java implementation of the Genkit framework for building AI-powered applications.\n\nSee: https://genkit.dev\n\n\u003e **Status**: Currently in active development (1.0.0-SNAPSHOT). Requires Java 21+.\n\u003e \n\u003e **Note**: The Java SDK supports OpenAI, Google GenAI (Gemini), Anthropic (Claude), AWS Bedrock, Azure AI Foundry, XAI (Grok), DeepSeek, Cohere, Mistral, Groq, Ollama (local models), any OpenAI-compatible endpoint (via compat-oai), Firebase (Firestore vector search, Cloud Functions, telemetry), vector databases (Weaviate, PostgreSQL, Pinecone), MCP, and pre-built evaluators. See [Modules](#modules) for the full list.\n\n\u003c!-- TOC --\u003e\n\n- [Genkit for Java](#genkit-for-java)\n  - [Installation](#installation)\n  - [Quick Start](#quick-start)\n  - [Defining Flows](#defining-flows)\n  - [Using Tools](#using-tools)\n  - [DotPrompt Support](#dotprompt-support)\n  - [Structured Output](#structured-output)\n  - [RAG (Retrieval Augmented Generation)](#rag-retrieval-augmented-generation)\n  - [Firebase Integration](#firebase-integration)\n    - [Firestore Vector Search](#firestore-vector-search)\n    - [Cloud Functions](#cloud-functions)\n    - [Firebase Telemetry](#firebase-telemetry)\n  - [Evaluations](#evaluations)\n    - [Pre-built Evaluators Plugin](#pre-built-evaluators-plugin)\n  - [Streaming](#streaming)\n  - [Embeddings](#embeddings)\n  - [Modules](#modules)\n  - [Observability](#observability)\n    - [Tracing](#tracing)\n    - [Metrics](#metrics)\n    - [Usage Tracking](#usage-tracking)\n    - [Session Context](#session-context)\n  - [Samples](#samples)\n    - [Running Samples](#running-samples)\n  - [Development](#development)\n    - [Prerequisites](#prerequisites)\n    - [Installing Genkit CLI](#installing-genkit-cli)\n    - [Building](#building)\n    - [Running Tests](#running-tests)\n    - [Running Samples](#running-samples-1)\n  - [CLI Integration](#cli-integration)\n  - [Dev UI](#dev-ui)\n  - [Architecture](#architecture)\n  - [License](#license)\n\n\u003c!-- /TOC --\u003e\n\n## Installation\n\nAdd the following dependencies to your Maven `pom.xml`:\n\n```xml\n\u003c!-- Core Genkit framework --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- OpenAI plugin (models and embeddings) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-openai\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Google GenAI plugin (Gemini models and Imagen) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-google-genai\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Anthropic plugin (Claude models) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-anthropic\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Ollama plugin (local models) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-ollama\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- XAI plugin (Grok models) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-xai\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- DeepSeek plugin (DeepSeek models) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-deepseek\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Cohere plugin (Command models) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-cohere\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Mistral plugin (Mistral AI models) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-mistral\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Groq plugin (ultra-fast inference) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-groq\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- compat-oai plugin (any OpenAI-compatible endpoint) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-compat-oai\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- HTTP server plugin with Jetty --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-jetty\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- HTTP server plugin with Spring Boot --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-spring\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Local vector store plugin (for RAG development) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-localvec\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- MCP plugin (Model Context Protocol) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-mcp\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Firebase plugin (Firestore vector search, Cloud Functions, telemetry) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-firebase\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Weaviate plugin (vector database) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-weaviate\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- PostgreSQL plugin (pgvector) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-postgresql\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Pinecone plugin (vector database) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-pinecone\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Evaluators plugin (RAGAS-style metrics) --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.genkit\u003c/groupId\u003e\n    \u003cartifactId\u003egenkit-plugin-evaluators\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## Quick Start\n\n```java\nimport com.google.genkit.Genkit;\nimport com.google.genkit.GenkitOptions;\nimport com.google.genkit.ai.GenerateOptions;\nimport com.google.genkit.ai.GenerationConfig;\nimport com.google.genkit.ai.ModelResponse;\nimport com.google.genkit.plugins.openai.OpenAIPlugin;\nimport com.google.genkit.plugins.jetty.JettyPlugin;\nimport com.google.genkit.plugins.jetty.JettyPluginOptions;\n\npublic class Main {\n    public static void main(String[] args) {\n        // Create Genkit with plugins\n        Genkit genkit = Genkit.builder()\n            .options(GenkitOptions.builder()\n                .devMode(true)\n                .reflectionPort(3100)\n                .build())\n            .plugin(OpenAIPlugin.create())\n            .plugin(new JettyPlugin(JettyPluginOptions.builder()\n                .port(8080)\n                .build()))\n            .build();\n\n        // Generate text\n        ModelResponse response = genkit.generate(\n            GenerateOptions.builder()\n                .model(\"openai/gpt-4o-mini\")\n                .prompt(\"Tell me a fun fact!\")\n                .config(GenerationConfig.builder()\n                    .temperature(0.9)\n                    .maxOutputTokens(200)\n                    .build())\n                .build());\n\n        System.out.println(response.getText());\n    }\n}\n```\n\n## Defining Flows\n\nFlows are observable, traceable AI workflows that can be exposed as HTTP endpoints:\n\n```java\n// Simple flow with typed input/output\nFlow\u003cString, String, Void\u003e greetFlow = genkit.defineFlow(\n    \"greeting\",\n    String.class,\n    String.class,\n    name -\u003e \"Hello, \" + name + \"!\");\n\n// AI-powered flow with context access\nFlow\u003cString, String, Void\u003e jokeFlow = genkit.defineFlow(\n    \"tellJoke\",\n    String.class,\n    String.class,\n    (ctx, topic) -\u003e {\n        ModelResponse response = genkit.generate(\n            GenerateOptions.builder()\n                .model(\"openai/gpt-4o-mini\")\n                .prompt(\"Tell me a short, funny joke about: \" + topic)\n                .build());\n        return response.getText();\n    });\n\n// Run a flow programmatically\nString result = genkit.runFlow(\"greeting\", \"World\");\n```\n\n## Using Tools\n\nDefine tools that models can call during generation:\n\n```java\n@SuppressWarnings(\"unchecked\")\nTool\u003cMap\u003cString, Object\u003e, Map\u003cString, Object\u003e\u003e weatherTool = genkit.defineTool(\n    \"getWeather\",\n    \"Gets the current weather for a location\",\n    Map.of(\n        \"type\", \"object\",\n        \"properties\", Map.of(\n            \"location\", Map.of(\"type\", \"string\", \"description\", \"The city name\")\n        ),\n        \"required\", new String[]{\"location\"}\n    ),\n    (Class\u003cMap\u003cString, Object\u003e\u003e) (Class\u003c?\u003e) Map.class,\n    (ctx, input) -\u003e {\n        String location = (String) input.get(\"location\");\n        return Map.of(\n            \"location\", location,\n            \"temperature\", \"72°F\",\n            \"conditions\", \"sunny\"\n        );\n    });\n\n// Use tool in generation - tool execution is handled automatically\nModelResponse response = genkit.generate(\n    GenerateOptions.builder()\n        .model(\"openai/gpt-4o\")\n        .prompt(\"What's the weather in Paris?\")\n        .tools(List.of(weatherTool))\n        .build());\n```\n\n## DotPrompt Support\n\nLoad and use `.prompt` files with Handlebars templating:\n\n```java\n// Load a prompt from resources/prompts/recipe.prompt\nExecutablePrompt\u003cRecipeInput\u003e recipePrompt = genkit.prompt(\"recipe\", RecipeInput.class);\n\n// Execute with typed input\nModelResponse response = recipePrompt.generate(new RecipeInput(\"pasta carbonara\"));\n\n// Prompts support variants (e.g., recipe.robot.prompt)\nExecutablePrompt\u003cRecipeInput\u003e robotPrompt = genkit.prompt(\"recipe\", RecipeInput.class, \"robot\");\n```\n\n## Structured Output\n\nGenerate type-safe outputs with automatic JSON schema generation using Jackson annotations:\n\n```java\n// Define your output class with annotations\npublic class MenuItem {\n  @JsonProperty(required = true)\n  @JsonPropertyDescription(\"The name of the menu item\")\n  private String name;\n  \n  @JsonProperty(required = true)\n  @JsonPropertyDescription(\"A detailed description\")\n  private String description;\n  \n  @JsonProperty(required = true)\n  @JsonPropertyDescription(\"Price in dollars\")\n  private double price;\n  \n  @JsonPropertyDescription(\"Preparation time in minutes\")\n  private int prepTimeMinutes;\n  \n  @JsonPropertyDescription(\"Dietary information (e.g., vegan, gluten-free)\")\n  private List\u003cString\u003e dietaryInfo;\n  \n  // getters/setters...\n}\n\n// Generate with structured output - returns typed object\nMenuItem item = genkit.generate(\n    GenerateOptions.\u003cMenuItem\u003ebuilder()\n        .model(\"openai/gpt-4o-mini\")\n        .prompt(\"Suggest a fancy French menu item\")\n        .outputClass(MenuItem.class)\n        .build()\n);\n\n// Works with flows too - fully type-safe\ngenkit.defineFlow(\n    \"generateMenuItem\",\n    MenuItemRequest.class,\n    MenuItem.class,\n    (ctx, request) -\u003e {\n        return genkit.generate(\n            GenerateOptions.\u003cMenuItem\u003ebuilder()\n                .model(\"openai/gpt-4o-mini\")\n                .prompt(request.getDescription())\n                .outputClass(MenuItem.class)\n                .build()\n        );\n    }\n);\n\n// Works with DotPrompt\nExecutablePrompt\u003cDishRequest\u003e prompt = genkit.prompt(\"italian-dish\", DishRequest.class);\nMenuItem dish = prompt.generate(new DishRequest(\"Italian\"), MenuItem.class);\n\n// Works with tools\nTool\u003cRecipeRequest, MenuItem\u003e recipeGen = genkit.defineTool(\n    \"generateRecipe\",\n    \"Generates a recipe\",\n    (ctx, request) -\u003e new MenuItem(...),\n    RecipeRequest.class,\n    MenuItem.class\n);\n```\n\nSee [samples/structured-output](samples/structured-output) for complete examples.\n\n## RAG (Retrieval Augmented Generation)\n\nBuild RAG applications with retrievers and indexers:\n\n```java\n// Define a retriever\nRetriever myRetriever = genkit.defineRetriever(\"myStore/docs\", (ctx, request) -\u003e {\n    List\u003cDocument\u003e docs = findSimilarDocs(request.getQuery());\n    return new RetrieverResponse(docs);\n});\n\n// Define an indexer\nIndexer myIndexer = genkit.defineIndexer(\"myStore/docs\", (ctx, request) -\u003e {\n    indexDocuments(request.getDocuments());\n    return new IndexerResponse();\n});\n\n// Index documents\nList\u003cDocument\u003e docs = List.of(\n    Document.fromText(\"Paris is the capital of France.\"),\n    Document.fromText(\"Berlin is the capital of Germany.\")\n);\ngenkit.index(\"myStore/docs\", docs);\n\n// Retrieve and generate\nList\u003cDocument\u003e relevantDocs = genkit.retrieve(\"myStore/docs\", \"What is the capital of France?\");\nModelResponse response = genkit.generate(GenerateOptions.builder()\n    .model(\"openai/gpt-4o-mini\")\n    .prompt(\"Answer based on context: What is the capital of France?\")\n    .docs(relevantDocs)\n    .build());\n```\n\n## Firebase Integration\n\nThe Firebase plugin provides Firestore vector search, Cloud Functions integration, and Google Cloud telemetry:\n\n### Firestore Vector Search\n\n```java\nimport com.google.genkit.plugins.firebase.FirebasePlugin;\nimport com.google.genkit.plugins.firebase.retriever.FirestoreRetrieverConfig;\n\nGenkit genkit = Genkit.builder()\n    .plugin(GoogleGenAIPlugin.create(apiKey))\n    .plugin(FirebasePlugin.builder()\n        .projectId(\"my-project\")\n        .enableTelemetry(true)\n        .addRetriever(FirestoreRetrieverConfig.builder()\n            .name(\"my-docs\")\n            .collection(\"documents\")\n            .embedderName(\"googleai/text-embedding-004\")\n            .vectorField(\"embedding\")\n            .contentField(\"content\")\n            .distanceMeasure(FirestoreRetrieverConfig.DistanceMeasure.COSINE)\n            .defaultLimit(5)\n            .build())\n        .build())\n    .build();\n\n// Index documents (embeddings generated automatically)\nList\u003cDocument\u003e docs = List.of(\n    Document.fromText(\"Genkit is a framework for building AI apps\"),\n    Document.fromText(\"Firebase provides cloud services for apps\")\n);\ngenkit.index(\"firebase/my-docs\", docs);\n\n// Retrieve with vector similarity search\nList\u003cDocument\u003e results = genkit.retrieve(\"firebase/my-docs\", \"What is Genkit?\");\n```\n\n### Cloud Functions\n\nExpose Genkit flows as Firebase Cloud Functions. The `FirebasePlugin` is optional for simple functions that don't need Firestore:\n\n```java\nimport com.google.genkit.plugins.firebase.functions.OnCallGenkit;\n\npublic class MyFunction implements HttpFunction {\n    private final OnCallGenkit genkitFunction;\n\n    public MyFunction() {\n        Genkit genkit = Genkit.builder()\n            .plugin(GoogleGenAIPlugin.create(System.getenv(\"GEMINI_API_KEY\")))\n            .plugin(FirebasePlugin.builder().build())  // Optional - no project ID needed\n            .build();\n\n        genkit.defineFlow(\"generatePoem\", String.class, String.class, (ctx, topic) -\u003e {\n            return genkit.generate(GenerateOptions.builder()\n                .model(\"googleai/gemini-2.0-flash\")\n                .prompt(\"Write a poem about: \" + topic)\n                .build()).getText();\n        });\n\n        this.genkitFunction = OnCallGenkit.fromFlow(genkit, \"generatePoem\");\n    }\n\n    @Override\n    public void service(HttpRequest request, HttpResponse response) throws IOException {\n        genkitFunction.service(request, response);\n    }\n}\n```\n\n### Firebase Telemetry\n\nEnable automatic export to Google Cloud observability:\n\n```java\nFirebasePlugin.builder()\n    .projectId(\"my-project\")\n    .enableTelemetry(true)      // Export to Cloud Trace, Monitoring, Logging\n    .forceDevExport(true)       // Also export in dev mode\n    .build()\n```\n\n## Evaluations\n\nDefine custom evaluators to assess AI output quality:\n\n```java\ngenkit.defineEvaluator(\"accuracyCheck\", \"Accuracy Check\", \"Checks factual accuracy\",\n    (dataPoint, options) -\u003e {\n        double score = calculateAccuracyScore(dataPoint.getOutput());\n        return EvalResponse.builder()\n            .testCaseId(dataPoint.getTestCaseId())\n            .evaluation(Score.builder().score(score).build())\n            .build();\n    });\n\n// Run evaluation\nEvalRunKey result = genkit.evaluate(RunEvaluationRequest.builder()\n    .datasetId(\"my-dataset\")\n    .evaluators(List.of(\"accuracyCheck\"))\n    .actionRef(\"/flow/myFlow\")\n    .build());\n```\n\n### Pre-built Evaluators Plugin\n\nUse the evaluators plugin for RAGAS-style metrics without writing custom evaluators:\n\n```java\nimport com.google.genkit.plugins.evaluators.EvaluatorsPlugin;\nimport com.google.genkit.plugins.evaluators.EvaluatorsPluginOptions;\nimport com.google.genkit.plugins.evaluators.GenkitMetric;\n\nGenkit genkit = Genkit.builder()\n    .plugin(OpenAIPlugin.create())\n    .plugin(EvaluatorsPlugin.create(\n        EvaluatorsPluginOptions.builder()\n            .judge(\"openai/gpt-4o-mini\")  // LLM for judging\n            .metrics(List.of(\n                GenkitMetric.FAITHFULNESS,      // Factual accuracy against context\n                GenkitMetric.ANSWER_RELEVANCY,  // Answer pertains to question\n                GenkitMetric.ANSWER_ACCURACY,   // Matches reference answer\n                GenkitMetric.MALICIOUSNESS,     // Detects harmful content\n                GenkitMetric.REGEX,             // Pattern matching\n                GenkitMetric.DEEP_EQUAL,        // JSON deep equality\n                GenkitMetric.JSONATA            // JSONata expressions\n            ))\n            .build()))\n    .build();\n```\n\n## Streaming\n\nGenerate responses with streaming for real-time output:\n\n```java\nStringBuilder result = new StringBuilder();\nModelResponse response = genkit.generateStream(\n    GenerateOptions.builder()\n        .model(\"openai/gpt-4o\")\n        .prompt(\"Tell me a story\")\n        .build(),\n    chunk -\u003e {\n        System.out.print(chunk.getText());\n        result.append(chunk.getText());\n    });\n```\n\n## Embeddings\n\nGenerate vector embeddings for semantic search:\n\n```java\nList\u003cDocument\u003e documents = List.of(\n    Document.fromText(\"Hello world\"),\n    Document.fromText(\"Goodbye world\")\n);\nEmbedResponse response = genkit.embed(\"openai/text-embedding-3-small\", documents);\n```\n\n## Modules\n\n| Module | Description |\n|--------|-------------|\n| **genkit-core** | Core framework: actions, flows, registry, tracing (OpenTelemetry) |\n| **genkit-ai** | AI abstractions: models, embedders, tools, prompts, retrievers, indexers, evaluators |\n| **genkit** | Main entry point combining core and AI with reflection server |\n| **plugins/openai** | OpenAI models (GPT-4o, GPT-4o-mini, etc.) and embeddings |\n| **plugins/google-genai** | Google Gemini models and Imagen image generation |\n| **plugins/anthropic** | Anthropic Claude models (Claude 4.5, Claude 4, Claude 3) |\n| **plugins/aws-bedrock** | AWS Bedrock models (Amazon Nova, Claude, Llama, Mistral, etc.) |\n| **plugins/azure-foundry** | Azure AI Foundry models (GPT-5, GPT-4, Llama, Mistral, Claude, etc.) |\n| **plugins/xai** | XAI (x.ai) Grok models (Grok-4, Grok-3, Grok-3-mini) |\n| **plugins/deepseek** | DeepSeek models (deepseek-chat, deepseek-reasoner) |\n| **plugins/cohere** | Cohere Command models (Command A, Command R, Command R+) |\n| **plugins/mistral** | Mistral AI models (Mistral Large, Medium, Small, Ministral, Codestral) |\n| **plugins/groq** | Groq ultra-fast inference (Llama, Mixtral, Gemma) |\n| **plugins/ollama** | Local Ollama models (Gemma, Llama, Mistral, etc.) |\n| **plugins/compat-oai** | OpenAI-compatible API base implementation for custom endpoints |\n| **plugins/jetty** | HTTP server plugin using Jetty 12 |\n| **plugins/spring** | HTTP server plugin using Spring Boot |\n| **plugins/localvec** | Local file-based vector store for development |\n| **plugins/mcp** | Model Context Protocol (MCP) client integration |\n| **plugins/firebase** | Firebase integration: Firestore vector search, Cloud Functions, telemetry |\n| **plugins/weaviate** | Weaviate vector database for RAG applications |\n| **plugins/postgresql** | PostgreSQL with pgvector for vector similarity search |\n| **plugins/pinecone** | Pinecone managed vector database for RAG applications |\n| **plugins/evaluators** | Pre-built RAGAS-style evaluators (faithfulness, relevancy, etc.) |\n\n\n## Observability\n\nGenkit Java SDK provides comprehensive observability features through OpenTelemetry integration:\n\n### Tracing\n\nAll actions (models, tools, flows) are automatically traced with rich metadata:\n\n- **Span types**: `action`, `flow`, `flowStep`, `util`\n- **Subtypes**: `model`, `tool`, `flow`, `embedder`, etc.\n- **Session tracking**: `sessionId` and `threadName` for multi-turn conversations\n- **Input/Output capture**: Full request/response data in span attributes\n\nExample span attributes:\n```\ngenkit:name = \"openai/gpt-4o-mini\"\ngenkit:type = \"action\"\ngenkit:metadata:subtype = \"model\"\ngenkit:path = \"/{myFlow,t:flow}/{openai/gpt-4o-mini,t:action,s:model}\"\ngenkit:input = {...}\ngenkit:output = {...}\ngenkit:sessionId = \"user-123\"\n```\n\n### Metrics\n\nThe SDK exposes OpenTelemetry metrics for monitoring:\n\n| Metric | Description |\n|--------|-------------|\n| `genkit/ai/generate/requests` | Model generation request count |\n| `genkit/ai/generate/latency` | Model generation latency (ms) |\n| `genkit/ai/generate/input/tokens` | Input token count |\n| `genkit/ai/generate/output/tokens` | Output token count |\n| `genkit/ai/generate/input/characters` | Input character count |\n| `genkit/ai/generate/output/characters` | Output character count |\n| `genkit/ai/generate/input/images` | Input image count |\n| `genkit/ai/generate/output/images` | Output image count |\n| `genkit/ai/generate/thinking/tokens` | Thinking/reasoning token count |\n| `genkit/tool/requests` | Tool execution request count |\n| `genkit/tool/latency` | Tool execution latency (ms) |\n| `genkit/feature/requests` | Feature (flow) request count |\n| `genkit/feature/latency` | Feature (flow) latency (ms) |\n| `genkit/feature/path/requests` | Feature path-level request count |\n| `genkit/feature/path/latency` | Feature path-level latency (ms) |\n| `genkit/action/requests` | General action request count |\n| `genkit/action/latency` | General action latency (ms) |\n\nAll metrics include relevant attributes such as `modelName`, `featureName`, `path`, `status` (success/failure), and `source` (java) for comprehensive observability and filtering.\n\n### Usage Tracking\n\nModel responses include detailed usage statistics:\n\n```java\nModelResponse response = genkit.generate(options);\nUsage usage = response.getUsage();\n\nSystem.out.println(\"Input tokens: \" + usage.getInputTokens());\nSystem.out.println(\"Output tokens: \" + usage.getOutputTokens());\nSystem.out.println(\"Latency: \" + response.getLatencyMs() + \"ms\");\n```\n\n### Session Context\n\nTrack multi-turn conversations with session and thread context:\n\n```java\nActionContext ctx = ActionContext.builder()\n    .registry(genkit.getRegistry())\n    .sessionId(\"user-123\")\n    .threadName(\"support-chat\")\n    .build();\n```\n\n## Samples\n\nThe following samples are available in `java/samples/`. See the [samples README](./samples/README.md) for detailed instructions on running each sample.\n\n| Sample | Description |\n|--------|-------------|\n| **openai** | Basic OpenAI integration with flows and tools |\n| **google-genai** | Google Gemini integration with image generation |\n| **anthropic** | Anthropic Claude integration with streaming |\n| **aws-bedrock** | AWS Bedrock models integration |\n| **azure-foundry** | Azure AI Foundry models integration |\n| **xai** | XAI (x.ai) Grok models integration |\n| **deepseek** | DeepSeek models integration |\n| **cohere** | Cohere Command models integration |\n| **mistral** | Mistral AI models integration |\n| **groq** | Groq ultra-fast inference integration |\n| **ollama** | Local Ollama models with Gemma 3n |\n| **dotprompt** | DotPrompt files with complex inputs/outputs, variants, and partials |\n| **structured-output** | Type-safe structured output generation |\n| **rag** | RAG application with local vector store |\n| **chat-session** | Multi-turn chat with session persistence |\n| **evaluations** | Custom evaluators and evaluation workflows |\n| **evaluators-plugin** | Pre-built RAGAS-style evaluators plugin demo |\n| **complex-io** | Complex nested types, arrays, maps in flow inputs/outputs |\n| **middleware** | Middleware patterns for logging, caching, rate limiting |\n| **multi-agent** | Multi-agent orchestration patterns |\n| **interrupts** | Flow interrupts and human-in-the-loop patterns |\n| **mcp** | Model Context Protocol (MCP) integration |\n| **firebase** | Firebase integration with Firestore RAG and Cloud Functions |\n| **spring** | Spring Boot HTTP server integration |\n| **weaviate** | Weaviate vector database RAG sample |\n| **postgresql** | PostgreSQL pgvector RAG sample |\n| **pinecone** | Pinecone vector database RAG sample |\n\n### Running Samples\n\n```bash\n# Set your API key\nexport OPENAI_API_KEY=your-api-key\n# Or: export GOOGLE_GENAI_API_KEY=your-api-key\n\n# Navigate to a sample and run\ncd java/samples/openai\n./run.sh\n\n# Or with Genkit Dev UI\ngenkit start -- ./run.sh\n```\n\n## Development\n\n### Prerequisites\n\n- Java 21+\n- Maven 3.6+\n- OpenAI API key or Google GenAI API key (for samples)\n- Genkit CLI (optional, for Dev UI)\n\n### Installing Genkit CLI\n\n```bash\nnpm install -g genkit\n```\n\n### Building\n\n```bash\ncd java\nmvn clean install\n```\n\n### Running Tests\n\n```bash\nmvn test\n```\n\n### Running Samples\n\nSee the [samples README](./samples/README.md) for detailed instructions.\n\n```bash\n# Set your API key\nexport OPENAI_API_KEY=your-api-key\n# Or: export GOOGLE_GENAI_API_KEY=your-api-key\n\n# Run a sample\ncd java/samples/openai\n./run.sh\n# Or: mvn compile exec:java\n\n# Run with Genkit Dev UI (recommended)\ngenkit start -- ./run.sh\n```\n\n## CLI Integration\n\nThe Java implementation works with the Genkit CLI. Start your application with:\n\n```bash\ngenkit start -- ./run.sh\n# Or: genkit start -- mvn exec:java\n```\n\nThe reflection server starts automatically in dev mode (`devMode(true)`).\n\n## Dev UI\n\nWhen running in dev mode, Genkit starts a reflection server on port 3100 (configurable via `reflectionPort()`).\nThe Dev UI connects to this server to:\n\n- List all registered actions (flows, models, tools, prompts, retrievers, evaluators)\n- Run actions with test inputs\n- View traces and execution logs\n- Manage datasets and run evaluations\n\n## Architecture\n\n```\ncom.google.genkit\n├── core/                    # Core framework\n│   ├── Action               # Base action interface\n│   ├── ActionDef            # Action implementation\n│   ├── ActionContext        # Execution context with registry access\n│   ├── Flow                 # Flow definition\n│   ├── Registry             # Action registry\n│   ├── Plugin               # Plugin interface\n│   └── tracing/             # OpenTelemetry integration\n│       ├── Tracer           # Span management\n│       └── TelemetryClient  # Telemetry export\n├── ai/                      # AI features\n│   ├── Model                # Model interface\n│   ├── ModelRequest/Response# Model I/O types\n│   ├── Tool                 # Tool definition\n│   ├── Embedder             # Embedder interface\n│   ├── Retriever            # Retriever interface\n│   ├── Indexer              # Indexer interface\n│   ├── Prompt               # Prompt templates\n│   ├── telemetry/           # AI-specific metrics\n│   │   ├── GenerateTelemetry# Model generation metrics\n│   │   ├── ToolTelemetry    # Tool execution metrics\n│   │   ├── ActionTelemetry  # Action execution metrics\n│   │   ├── FeatureTelemetry # Flow/feature metrics\n│   │   └── ModelTelemetryHelper # Telemetry helper\n│   └── evaluation/          # Evaluation framework\n│       ├── Evaluator        # Evaluator definition\n│       ├── EvaluationManager# Run evaluations\n│       └── DatasetStore     # Dataset management\n├── genkit/                  # Main module\n│   ├── Genkit               # Main entry point \u0026 builder\n│   ├── GenkitOptions        # Configuration options\n│   ├── ReflectionServer     # Dev UI integration\n│   └── prompt/              # DotPrompt support\n│       ├── DotPrompt        # Prompt file parser\n│       └── ExecutablePrompt # Prompt execution\n└── plugins/                 # Plugin implementations\n    ├── openai/              # OpenAI models \u0026 embeddings\n    ├── google-genai/        # Google Gemini models \u0026 Imagen\n    ├── anthropic/           # Anthropic Claude models\n    ├── aws-bedrock/         # AWS Bedrock models\n    ├── azure-foundry/       # Azure AI Foundry models\n    ├── xai/                 # XAI (x.ai) Grok models\n    ├── deepseek/            # DeepSeek models\n    ├── cohere/              # Cohere Command models\n    ├── mistral/             # Mistral AI models\n    ├── groq/                # Groq ultra-fast inference\n    ├── ollama/              # Local Ollama models\n    ├── compat-oai/          # OpenAI-compatible API base\n    ├── jetty/               # Jetty HTTP server\n    ├── spring/              # Spring Boot HTTP server\n    ├── localvec/            # Local vector store\n    ├── mcp/                 # Model Context Protocol client\n    ├── firebase/            # Firebase: Firestore RAG, Cloud Functions, telemetry\n    ├── weaviate/            # Weaviate vector database\n    ├── postgresql/          # PostgreSQL with pgvector\n    ├── pinecone/            # Pinecone vector database\n    └── evaluators/          # Pre-built RAGAS-style evaluators\n```\n\n## License\n\nApache License 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgenkit-ai%2Fgenkit-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgenkit-ai%2Fgenkit-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgenkit-ai%2Fgenkit-java/lists"}