Langchain JsonOutputParser Invalid json output Error

Sometimes json output from llm like this : {“key”: “value”}“` that langchain JsonOutputParser regex cant parse. The regex validation function is in langchain_core.output_parsers.json.parse_json_markdown(). So we just monkey patch that function

# monkey_patch.py
from typing import Callable, Any
from langchain_core.output_parsers.json import _custom_parser, parse_partial_json
import langchain_core.output_parsers.json as lc_op_j
import re

def parse_json_markdown(
    json_string: str, *, parser: Callable[[str], Any] = parse_partial_json
) -> dict:
    """
    Parse a JSON string from a Markdown string.

    Args:
        json_string: The Markdown string.

    Returns:
        The parsed JSON object as a Python dictionary.
    """
    # Try to find JSON string within triple backticks
    match = re.search(r"(?:```)?(json)?(.*)", json_string, re.DOTALL) # --------> patch

    # If no match found, assume the entire string is a JSON string
    if match is None:
        json_str = json_string
    else:
        # If match found, use the content within the backticks
        json_str = match.group(2)

    # Strip whitespace and newlines from the start and end
    json_str = json_str.strip().strip("`")

    # handle newlines and other special characters inside the returned value
    json_str = _custom_parser(json_str)

    # Parse the JSON string into a Python dictionary
    parsed = parser(json_str)


    return parsed

lc_op_j.parse_json_markdown = parse_json_markdown

Here the test

Continue reading “Langchain JsonOutputParser Invalid json output Error”

Ada Apa Didalam Sistem Operasi (Linux). Apa yang membedakan distribusi Linux seperti Ubuntu, Redhat, Alpine?

#include <stdio.h>
int main() {
  FILE *f_ptr;
  char f_content[256];
  char output[512];

  f_ptr = fopen("/tmp/1337", "r");
  fgets(f_content, 256, f_ptr);

  fclose(f_ptr);

  sprintf(output, "File content: %s", f_content);
  printf("%s", output);

  return 0;
}
package main
import (
    "fmt"
    "io/ioutil"
)
func main() {
  b, _ := ioutil.ReadFile("/tmp/1337")
  output := "File content: " + string(b)
  fmt.Print(output)
}
file = open('/tmp/1337', 'r')

output = "File content: " + file.read()
print(output)

file.close()

Diatas adalah program untuk membaca file dan menampilkannya. Ditulis menggunakan bahasa C, Golang, dan Python. Kode tersebut terlihat simpel. Kita tidak perlu tahu file itu diletakan di disk dan partisi yang mana. Apakah menggunakan filesystem ext4, ntfs, atau fat?. Apakah disknya Hard Drive, SSD, atau memory card?. Karena hal tersebut sudah di abstraksikan oleh Kernel. (Alokasi Memori) Linux bisa dibagi menjadi dua: Userspace, dan Kernel space.

Continue reading “Ada Apa Didalam Sistem Operasi (Linux). Apa yang membedakan distribusi Linux seperti Ubuntu, Redhat, Alpine?”

Catatan Belajar Ruby on Rails dari aliran Java dan Php

Ruby on Rails merupakan framework web MVC menggunakan bahasa dynamic typed (Ruby) yang termasuk pertama (2005). Diikuti dengan django (2005), laravel (2011). Walaupun di dunia proyek jarang dipakai, di dunia produk/startup banyak dipakai karena lebih cepat waktu yang dibutuhkan untuk membuat nya.

https://dhh.dk/arc/000258.html

https://blog.karatos.in/a?ID=00050-92960018-bbf7-4d66-8afd-d7ff6571e83a

Continue reading “Catatan Belajar Ruby on Rails dari aliran Java dan Php”

Deploy Spring Boot di Tomcat dan Berbagai Application Server Lain

Sebenernya spring boot sudah di embedd applicatoin server tomcat (hanya berisi web container, tidak bisa untuk java EE). Sehingga tidak perlu menggunakan application server lagi. Namun kadang orang karena sudah bayar application server lain, misal weblogic. dan ada beberapa aplikasi lain yang jalan di weblogic. Ingin mendeploy aplikasi spring boot di weblogic.

Secara tertulis harusnya tidak ada yang perlu dilakukan. Karena tujuan standarisasi J2EE adalah WAR/EAR bisa portable antar webserver. Namun kadang kenyataannya tidak, karena ada beberapa yang butuh fungsi spesifik app server, ataupun configurasi spesifik.

Continue reading “Deploy Spring Boot di Tomcat dan Berbagai Application Server Lain”

Catatan Aspose Word

Aspose.word merupakan library untuk mengedit file microsoft office .docx. Sebenernya microsoft tidak mengeluarkan dokumentasi resmi API microsoft word. Dan file microsoft word dibuat sesuah mungkin untuk di edit (obfuscate). Makanya ada library open source bernama Apache POI (Poor Obfuscation Implementation) untuk mengedit file .docx (seperti Aspose.Word)

// TODO

Continue reading “Catatan Aspose Word”